保存Tensorflow服务的模型

时间:2017-08-23 17:44:27

标签: tensorflow tensorflow-serving

我是tensorflow的新手。我已经遵循tensorflow服务指令来为docker容器中的模型提供服务。我可以按照https://www.tensorflow.org/serving/的说明来提供mnist和inception模型。

服务模型保存在以下结构中:

functionThatResetsTheFileInput() {
  let randomString = Math.random().toString(36);

  this.setState({
    theInputKey: randomString
  });
}

render() {
  return(
    <div>
      <input type="file"
             key={this.state.theInputKey || '' } />
      <button onClick={this.functionThatResetsTheFileInput()} />
    </div>
  )
}

问题:

  1. 如何提供再培训模型?
  2. 我正在按照https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0的指示重新训练模型。

    .
    |-- 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
    

    上面的命令创建了retrained_graph.pb以及retrained_label.txt和bottleneck目录。

    如何以格式转换输出,以便通过Tensorflow服务器提供重新训练的模型?

    1. 如何提供预训练模型?

      我查看了对象检测演示https://github.com/tensorflow/models/blob/master/object_detection/object_detection_tutorial.ipynb,它解释了如何使用“带有Mobilenet的SSD”模型(https://github.com/tensorflow/models/blob/master/object_detection/g3doc/detection_model_zoo.md)进行对象检测。

      ssd_mobilenet_v1_coco_11_06_2017.tar.gz包含

      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
      

      如何以格式转换上述文件,以便通过Tensorflow服务器提供预训练模型?

    2. 如何为通过Tensorflow服务器服务的自定义模型创建客户端?

    3. 我已按照http://fdahms.com/2017/03/05/tensorflow-serving-jvm-client/的说明创建自定义模型。该博客解释了如何创建自定义,通过tensorflow服务服务器和客户端来访问模型。创建客户端的过程不是很清楚。我想用Python和Java创建客户端。

      是否有更好的示例或指南可帮助您了解为通过Tensorflow服务器提供的自定义模型创建客户端代码的过程。

1 个答案:

答案 0 :(得分:1)

Tensorflow服务现在支持SavedModel格式。如果您有重新训练的模型,实际上您不需要使用对象检测。您可以做的是使用以前格式再训练模型中的保护程序恢复会话,然后使用 SavedModelBuilder 再次导出它,其中保存模型可以生成服务可以服务的。 Here是我对类似问题的另一个答案。

对于客户端,您可以参考下面的代码,该代码也是服务/示例中的示例:

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)