SavedModel
名词,一种tensorflow模型格式。发布服务前生成。目录结构如图
下面是一段生成SavedModel的示例代码,大致的意思就是要先加载计算图结构,并且载入训练好的模型,然后定义好输入和输出。
session = tf.Session()
session.run(tf.global_variables_initializer())
saver = tf.train.Saver()
saver.restore(sess=session, save_path=old_model_path)
# 将训练好的模型保存在model_name下,版本为2,当然你的版本可以随便写
builder = tf.saved_model.builder.SavedModelBuilder(export_path)
inputs = {
# 注意,这里是你预测模型的时候需要传的参数,调用模型的时候,传参必须和这里一致
# 这里的model.input_x和model.keep_prob就是模型里面定义的输入placeholder
"input_image": tf.saved_model.utils.build_tensor_info(model._image),
"input_im_info": tf.saved_model.utils.build_tensor_info(model._im_info)
}
# model.y_pred_cls是模型的输出, 预测的时候就是计算这个表达式
output = {"output_cls_score": tf.saved_model.utils.build_tensor_info(model._predictions["cls_score"]),
"output_rois": tf.saved_model.utils.build_tensor_info(model._predictions["rois"]),
"output_cls_prob": tf.saved_model.utils.build_tensor_info(model._predictions["cls_prob"]),
"output_bbox_pred": tf.saved_model.utils.build_tensor_info(model._predictions["bbox_pred"])}
prediction_signature = tf.saved_model.signature_def_utils.build_signature_def(
inputs=inputs,
outputs=output,
method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME
)
builder.add_meta_graph_and_variables(
session,
[tf.saved_model.tag_constants.SERVING],
{tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: prediction_signature}
)
builder.save()
protobuff
这是google发明的一种二进制编码格式,针对各种语言都设计了解码函数。SavedModel中的文件就是这种编码。