2016-05-15 78 views
6

因此,我根据本指南培训了启蒙模型以识别花朵。 https://www.tensorflow.org/versions/r0.8/how_tos/image_retraining/index.html如何使用Tensorflow服务为再培训初始模型服务?

bazel build tensorflow/examples/image_retraining:retrain 
bazel-bin/tensorflow/examples/image_retraining/retrain --image_dir ~/flower_photos 

要通过命令行中的图像进行分类,我可以这样做:

bazel build tensorflow/examples/label_image:label_image && \ 
bazel-bin/tensorflow/examples/label_image/label_image \ 
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \ 
--output_layer=final_result \ 
--image=$HOME/flower_photos/daisy/21652746_cc379e0eea_m.jpg 

但我怎么通过Tensorflow服务服务于这个图?

有关设置Tensorflow服务的指南(https://tensorflow.github.io/serving/serving_basic)没有说明如何合并图(output_graph.pb)。服务器期望文件的不同格式:

$>ls /tmp/mnist_model/00000001 
checkpoint export-00000-of-00001 export.meta 

回答

2

以服务图你已经训练后,你就需要使用这个API导出:https://www.tensorflow.org/versions/r0.8/api_docs/python/train.html#export_meta_graph

该API生成所需要的元图DEF由服务代码(这将产生你是问有关.META文件)

此外,您还需要恢复使用Saver.save(),它是包裹类https://www.tensorflow.org/versions/r0.8/api_docs/python/train.html#Saver

一旦哟检查点你已经完成了这个任务,你将会获得metagraph def和恢复图形所需的检查点文件。

+0

感谢这么多的信息,布佩希!你可能只提供几行示例调用给那些对Python和TensorFlow不太熟练的人吗? – telemark

0

你必须导出模型。我有一个PR在再培训期间输出模型。它的要点低于:

import tensorflow as tf 

def export_model(sess, architecture, saved_model_dir): 
    if architecture == 'inception_v3': 
    input_tensor = 'DecodeJpeg/contents:0' 
    elif architecture.startswith('mobilenet_'): 
    input_tensor = 'input:0' 
    else: 
    raise ValueError('Unknown architecture', architecture) 
    in_image = sess.graph.get_tensor_by_name(input_tensor) 
    inputs = {'image': tf.saved_model.utils.build_tensor_info(in_image)} 

    out_classes = sess.graph.get_tensor_by_name('final_result:0') 
    outputs = {'prediction': tf.saved_model.utils.build_tensor_info(out_classes)} 

    signature = tf.saved_model.signature_def_utils.build_signature_def(
    inputs=inputs, 
    outputs=outputs, 
    method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME 
) 

    legacy_init_op = tf.group(tf.tables_initializer(), name='legacy_init_op') 

    # Save out the SavedModel. 
    builder = tf.saved_model.builder.SavedModelBuilder(saved_model_dir) 
    builder.add_meta_graph_and_variables(
    sess, [tf.saved_model.tag_constants.SERVING], 
    signature_def_map={ 
     tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY: signature 
    }, 
    legacy_init_op=legacy_init_op) 
    builder.save() 

上面会创建一个变量,目录和文件saved_model.pb。如果你把它放在一个父目录下代表的版本号(例如1 /),那么你可以调用tensorflow通过服务:

tensorflow_model_server --port=9000 --model_name=inception --model_base_path=/path/to/saved_models/