2016-10-27 6 views
0

Я хочу использовать метод экспорта модели типа tf.contrib.learn.DNNLinearCombinedClassifier, чтобы сохранить модель, а затем написать клиент обслуживания тензорного потока для запроса прогнозов на модели.Как я могу получить tf.contrib.learn широкую и глубокую модель, сохраненную и обслуживаемую при работе с тензорным потоком?

Может кто-то объяснить:

  1. Как создать параметры BaseEstimator.export из результата input_fn в учебнике или любой другой части предварительно обученный оценщик?

  2. Как создать request=predict_pb2.PredictRequest() для отправки экземпляру сервера tensorflow?

ответ

1

Здесь я написал простой учебник Exporting and Serving a TensorFlow Wide & Deep Model.

Для экспорта оценщика четыре шага:

  1. Определения возможностей для экспорта в виде списка всех функций, используемых во время инициализации оценивани.

  2. Создайте конфигурацию конфигурации, используя create_feature_spec_for_parsing.

  3. Сборка a serving_input_fn подходит для использования в обслуживании с использованием input_fn_utils.build_parsing_serving_input_fn.

  4. Экспорт модели с использованием export_savedmodel().

Чтобы запустить клиентский сценарий правильно, вы должны сделать следующие три шага:

  1. создать и разместить свой сценарий где-нибудь в/служащей/папки, например,/serve/tensorflow_serving/example/

  2. Создайте или измените соответствующий файл BUILD, добавив py_binary.

  3. Создайте и запустите сервер модели, например. tensorflow_model_server.

  4. Создайте и запустите клиент, который отправит tf.Example на наш tensorflow_model_server для вывода.

Если модель экспортируется с помощью Estimator.export_savedmodel() и вы успешно построили TensorFlow сервировки себя, вот что вы можете сделать:

from grpc.beta import implementations 
from tensorflow_serving.apis import predict_pb2 
from tensorflow_serving.apis import prediction_service_pb2 

tf.app.flags.DEFINE_string('server', 'localhost:9000', 'Server host:port.') 
tf.app.flags.DEFINE_string('model', 'wide_and_deep', 'Model name.') 
FLAGS = tf.app.flags.FLAGS 
... 
def main(_): 

    host, port = FLAGS.server.split(':') 
    # Set up a connection to the TF Model Server 
    channel = implementations.insecure_channel(host, int(port)) 
    stub = prediction_service_pb2.beta_create_PredictionService_stub(channel) 

    # Create a request that will be sent for an inference 
    request = predict_pb2.PredictRequest() 
    request.model_spec.name = FLAGS.model 
    request.model_spec.signature_name = 'serving_default' 

    # A single tf.Example that will get serialized and turned into a TensorProto 
    feature_dict = {'age': _float_feature(value=25), 
        'capital_gain': _float_feature(value=0), 
        'capital_loss': _float_feature(value=0), 
        'education': _bytes_feature(value='11th'.encode()), 
        'education_num': _float_feature(value=7), 
        'gender': _bytes_feature(value='Male'.encode()), 
        'hours_per_week': _float_feature(value=40), 
        'native_country': _bytes_feature(value='United-States'.encode()), 
        'occupation': _bytes_feature(value='Machine-op-inspct'.encode()), 
        'relationship': _bytes_feature(value='Own-child'.encode()), 
        'workclass': _bytes_feature(value='Private'.encode())} 
    label = 0 

    example = tf.train.Example(features=tf.train.Features(feature=feature_dict)) 
    serialized = example.SerializeToString() 

    request.inputs['inputs'].CopyFrom(
    tf.contrib.util.make_tensor_proto(serialized, shape=[1])) 

    # Create a future result, and set 5 seconds timeout 
    result_future = stub.Predict.future(request, 5.0) 
    prediction = result_future.result().outputs['scores'] 

    print('True label: ' + str(label)) 
    print('Prediction: ' + str(np.argmax(prediction))) 

Для получения более подробной информации смотрите на самом уроке.

Надеюсь, это поможет.

P.S. Существует не менее 4 дубликатов для данного типа вопросов.Если кто-то с высокой репутацией может закрыть или сгруппировать их, что было бы неплохо)

0

я следую, как вы даете refrence ссылку как: https://github.com/MtDersvan/tf_playground/blob/master/wide_and_deep_tutorial/wide_and_deep_basic_serving.md

Где вы определяете подпись? serve_default Я думаю, что при экспорте вашей модели тогда это необходимо. Но не упоминайте в своем экспортном коде. Пожалуйста, определите его.

+0

Добро пожаловать в SO. Пожалуйста, прочтите это [как-ответ] (http://stackoverflow.com/help/how-to-answer) для предоставления качественного ответа. – thewaywewere

+0

Вы можете найти ** serve_default ** здесь [signature_constants] (https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/saved_model/signature_constants.py). Конкретные оценки автоматически определяют их. – MtDersvan