为 TensorFlow Serving 保存模型
Posted
技术标签:
【中文标题】为 TensorFlow Serving 保存模型【英文标题】:Save model for Tensorflow Serving 【发布时间】:2018-02-01 10:18:13 【问题描述】:我是张量流的新手。我已按照 tensorflow 服务说明在 docker 容器中提供模型。我可以按照 https://www.tensorflow.org/serving/ 的说明为 mnist 和 inception 模型服务。
服务模型保存在以下结构中:
.
|-- inception-export
| `-- 1
| |-- saved_model.pb
| `-- variables
| |-- variables.data-00000-of-00001
| `-- variables.index
`-- mnist_model
`-- 1
|-- saved_model.pb
`-- variables
|-- variables.data-00000-of-00001
`-- variables.index
问题:
-
如何为重新训练的模型提供服务?
我正在按照https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0 的指示重新训练模型。
python retrain.py \
--bottleneck_dir=bottlenecks \
--how_many_training_steps=500 \
--model_dir=inception \
--summaries_dir=training_summaries/basic \
--output_graph=retrained_graph.pb \
--output_labels=retrained_labels.txt \
--image_dir=flower_photos
上述命令创建 retrained_graph.pb 以及 retrained_label.txt 和瓶颈目录。
如何转换格式的输出,以便重新训练的模型可以通过 Tensorflow 服务服务器提供服务?
如何提供预训练模型?
我查看了对象检测演示 https://github.com/tensorflow/models/blob/master/object_detection/object_detection_tutorial.ipynb,它解释了如何使用“SSD with Mobilenet”模型 (https://github.com/tensorflow/models/blob/master/object_detection/g3doc/detection_model_zoo.md) 进行对象检测。
ssd_mobilenet_v1_coco_11_06_2017.tar.gz 包含
- a graph proto (graph.pbtxt)
- a checkpoint (model.ckpt.data-00000-of-00001, model.ckpt.index, model.ckpt.meta)
- a frozen graph proto with weights baked into the graph as constants (frozen_inference_graph.pb)
如何将上述文件转换为格式,以便预训练模型可以通过 Tensorflow 服务服务器提供服务?
如何为通过 Tensorflow 服务服务器提供的自定义模型创建客户端?
我已按照http://fdahms.com/2017/03/05/tensorflow-serving-jvm-client/ 的说明创建自定义模型。该博客解释了如何创建自定义,通过 tensorflow 服务服务器和客户端访问模型。创建客户端的过程不是很清楚。我想用 Python 和 Java 创建客户端。
是否有更好的示例或指南来帮助理解为通过 Tensorflow 服务服务器提供的自定义模型创建客户端代码的过程。
【问题讨论】:
可能使用:***.com/questions/46098863/… 请参考link 并确认这是否有帮助。谢谢。 【参考方案1】:Tensorflow Serving 现在支持 SavedModel 格式。如果你有一个重新训练的模型,实际上你不需要使用对象检测。您可以做的是使用 saver 从以前格式重新训练的模型中恢复会话,然后使用 SavedModelBuilder 再次导出它,通过该保存的模型可以生成 tf serving can serve 。 Here 是我对类似问题的另一个答案。
客户端可以参考下面的代码,这也是tf serving/example中的例子:
from grpc.beta import implementations
import tensorflow as tf
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_service_pb2
tf.app.flags.DEFINE_string('server', 'localhost:9000',
'PredictionService host:port')
FLAGS = tf.app.flags.FLAGS
def main(_):
host, port = FLAGS.server.split(':')
channel = implementations.insecure_channel(host, int(port))
stub = prediction_service_pb2.beta_create_PredictionService_stub(channel)
request = predict_pb2.PredictRequest()
request.model_spec.name = 'model_name'
request.model_spec.signature_name = 'signature_name'
request.inputs['input_key'].CopyFrom(
tf.contrib.util.make_tensor_proto(your_data, shape=data_size))
result = stub.Predict(request, 10.0) # 10 secs timeout
print(result.output)
【讨论】:
以上是关于为 TensorFlow Serving 保存模型的主要内容,如果未能解决你的问题,请参考以下文章
你可以在同一个 tensorflow/serving 二进制文件中提供来自不同 tensorflow 版本的模型吗?
使用 TensorFlow Serving 服务 Keras 模型
如何使 TensorFlow Hub 模型为 TensorFlow Serving REST 请求做好准备(使用 base64 编码图像)?