2016-05-15 76 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/