2016-05-15 20 views
6

Tak więc opracowałem model wstępny do rozpoznawania kwiatów zgodnie z tym przewodnikiem. https://www.tensorflow.org/versions/r0.8/how_tos/image_retraining/index.htmlJak obsługiwać przeszkolony model Inception przy użyciu Tensorflow Serving?

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

Aby zakwalifikować obraz poprzez linię poleceń, mogę to zrobić:

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 

Ale jak mogę służyć ten wykres poprzez Tensorflow służąc?

Przewodnik dotyczący konfigurowania podawania Tensorflow (https://tensorflow.github.io/serving/serving_basic) nie zawiera informacji o tym, jak dołączyć wykres (output_graph.pb). Serwer oczekuje na inny format pliku:

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

Odpowiedz

2

służyć wykres po trenowali go, trzeba by go wyeksportować za pomocą tego API: https://www.tensorflow.org/versions/r0.8/api_docs/python/train.html#export_meta_graph

To api generuje def metagraph który jest potrzebny o kodzie serwującym (będzie to generować ten plik .meta Pytasz o)

również trzeba przywrócić punkt kontrolny przy użyciu Saver.save(), która jest klasą oszczędzania https://www.tensorflow.org/versions/r0.8/api_docs/python/train.html#Saver

po yo zrobiłeś to, będziesz zarówno metagraph def, jak i pliki punktów kontrolnych, które są potrzebne do przywrócenia wykresu.

+0

Wielkie dzięki za informację, Bhupesh! Czy możesz podać tylko kilka linii przykładowych połączeń dla tych z nas, którzy nie są zbytnio zorientowani w Pythonie i TensorFlow? – telemark

0

Musisz wyeksportować model. Mam PR, który eksportuje model podczas przekwalifikowania. Istota tego jest poniżej:

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() 

Powyżej utworzy się katalog zmiennych i plik saved_model.pb. Jeśli umieścisz go w katalogu nadrzędnym reprezentującym numer wersji (np. 1 /), możesz zadzwonić pod numer tensorflow przez:

tensorflow_model_server --port=9000 --model_name=inception --model_base_path=/path/to/saved_models/ 
Powiązane problemy