2016-05-15 13 views
6

Quindi ho preparato un modello iniziale per riconoscere i fiori secondo questa guida. https://www.tensorflow.org/versions/r0.8/how_tos/image_retraining/index.htmlCome servire il modello Inception riaddestrato usando Tensorflow Serving?

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

Per classificare l'immagine tramite linea di comando, posso fare questo:

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 

Ma come faccio a servire questo grafico tramite tensorflow servire?

La guida sull'impostazione di Tensorplow che serve (https://tensorflow.github.io/serving/serving_basic) non indica come incorporare il grafico (output_graph.pb). Il server si aspetta che il diverso formato di file:

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

risposta

2

Per servire il grafico dopo aver addestrato, si avrebbe bisogno di esportare utilizzando questa API: https://www.tensorflow.org/versions/r0.8/api_docs/python/train.html#export_meta_graph

tale API genera il DEF metagraph che è necessario dal codice che serve (questo genererà il file .meta ti stai chiedendo circa)

Inoltre, è necessario ripristinare un posto di blocco utilizzando Saver.save(), che è la classe Saver https://www.tensorflow.org/versions/r0.8/api_docs/python/train.html#Saver

volta yo hai fatto questo, avrai sia il parametro def e i file del checkpoint necessari per ripristinare il grafico.

+0

Grazie tanto per le informazioni, Bhupesh! Potresti fornire solo poche righe di chiamate di esempio per quelli di noi non molto esperti in Python e TensorFlow? – telemark

0

Bisogna esportare il modello. Ho un PR che esporta il modello durante la riqualificazione. L'essenza di esso è qui sotto:

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

Sopra creerà una directory di file variabili e saved_model.pb. Se lo metti in una directory genitore che rappresenta il numero di versione (ad esempio 1 /), allora si può chiamare tensorflow servire tramite:

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