如何在KERAS中训练和保存用于Tensorflow服务的预测模型

如此多的机器学习教程…但是有些却行不通,几乎没有一个教程为您准备好保存模型以供生产使用。

Tensorflow服务是当前生产AI的最佳方法。 但是,由于它太新了,因此大多数示例都是复杂且不完整的。

Keras中保存模型时尤其如此。

因此 ,为了简单起见并填补这一空白,我选择使用keras训练一个简单的模型,并以适当的格式将其导出以用于Tensorflow服务(TF服务) 。 本教程是系列教程的一部分,因此,如果您不知道如何实现TF服务,请从这里开始!


异或预测示例

为了清楚起见,我想使用我能想到的最简单的示例,即XOR逻辑门。 https://zh.wikipedia.org/wiki/XOR_gate

1.下载代码

首先克隆仓库以获取代码

  git clone https://github.com/brianalois/xor_keras_tensorflow_serving.git 

确保在自述文件中包含说明的github页上设置了您的环境。

2.代码潜水

导入您的依赖项!!

 将tensorflow作为tf导入 
从keras导入后端为K

从tensorflow.python.saved_model导入构建器作为save_model_builder
从tensorflow.python.saved_model导入tag_constants,signature_constants,signature_def_utils_impl

从keras.models导入顺序
从keras.layers.core导入密集,退出,激活
从keras.optimizers导入SGD
将numpy导入为np

设置Tensorflow会话

  sess = tf.Session() 
K.set_session(sess)
K.set_learning_phase(0)

设定变数

模型版本:将更改导出模型目录的名称

纪元:训练周期数,越大训练时间越长。 5,000是一个准确的数字,但可能需要一段时间才能训练。 100适用于快速测试。

  model_version =“ 2” 
纪元= 100

加载数据

这就是为什么我选择XOR示例的原因,因为数据非常容易获得

  X = np.array([ 
[0,0],
[0,1],
[1,0],
[1,1]
])Y = np.array([[0],[1],[1],[0]])

建立模型

 模型= Sequential() 
model.add(密集(8,input_dim = 2))
model.add(Activation('tanh'))
model.add(密集(1))
model.add(Activation('sigmoid'))
sgd = SGD(lr = 0.1)

编译并拟合模型

  model.compile(loss ='binary_crossentropy',Optimizer = SGD) 
model.fit(X,Y,batch_size = 1,nb_epoch = epoch)

获取Tensorflow服务输入和输出变量

  x = model.input 
y = model.outputprediction_signature = tf.saved_model.signature_def_utils.predict_signature_def({“ inputs”:x},{“ prediction”:y})

测试tf服务的预测签名是否有效

  valid_prediction_signature = tf.saved_model.signature_def_utils.is_valid_signature(prediction_signature) 
if(valid_prediction_signature == False):
引发ValueError(“错误:预测签名无效!”)

建立和配置模型

  builder = saved_model_builder.SavedModelBuilder('./'+ model_version) 
legacy_init_op = tf.group(tf.tables_initializer(),name ='legacy_init_op')builder.add_meta_graph_and_variables(
sess,[tag_constants.SERVING],
signature_def_map = {
signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:预测签名,
},
legacy_init_op = legacy_init_op)

保存模型

  builder.save() 

到此为止非常简单,现在您应该在目录中看到一个名为2或您放置的模型版本的文件夹。


注意:

对于那些熟悉Tensorflow服务的人,可以进行预测,分类和回归操作。 对于每个模型,都需要以特定方式保存模型。 预测最容易理解,这就是我开始预测的原因。 但是,分类和回归很难弄清楚如何使用keras,因此,如果您需要该知识,请告诉我,我将发布说明。

和平,

— — Brian Alois Schardt