Как сделать, чтобы вложения концентратора тензорного потока работали с использованием обслуживания тензорного потока? - PullRequest
0 голосов
/ 11 июня 2018

Я пытаюсь использовать модуль встраивания из концентратора тензорного потока в качестве исправного.Я новичок в tenorflow.В настоящее время я использую Universal Sentence Encoder встраивания в качестве поиска для преобразования предложений в вложения, а затем использую эти вложения, чтобы найти сходство с другим предложением.

Мой текущий код для преобразования предложений во встраивания:

with tf.Session() as session:
  session.run([tf.global_variables_initializer(), tf.tables_initializer()])
  sen_embeddings = session.run(self.embed(prepared_text))

Prepared_text - это список предложений.Как мне взять эту модель и сделать ее исправной?

Ответы [ 2 ]

0 голосов
/ 20 июля 2018

Прямо сейчас вам, вероятно, нужно сделать это вручную.Вот мое решение, аналогичное предыдущему ответу, но более общее - показать, как использовать любой другой модуль, не угадывая входные параметры, а также расширить с проверкой и использованием:

import tensorflow as tf
import tensorflow_hub as hub
from tensorflow.saved_model import simple_save

export_dir = "/tmp/tfserving/universal_encoder/00000001"
with tf.Session(graph=tf.Graph()) as sess:
    module = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/2") 
    input_params = module.get_input_info_dict()
    # take a look at what tensor does the model accepts - 'text' is input tensor name

    text_input = tf.placeholder(name='text', dtype=input_params['text'].dtype, 
        shape=input_params['text'].get_shape())
    sess.run([tf.global_variables_initializer(), tf.tables_initializer()])

    embeddings = module(text_input)

    simple_save(sess,
        export_dir,
        inputs={'text': text_input},
        outputs={'embeddings': embeddings},
        legacy_init_op=tf.tables_initializer())

Благодаря module.get_input_info_dict() вы знаете,какие тензорные имена вам нужно передать модели - вы используете это имя в качестве ключа для inputs={} в методе simple_save.

Помните, что для обслуживания модели он должен находиться в пути к каталогу, оканчивающемся на версиюВот почему '00000001' является последним путем, в котором находится saved_model.pb.

После экспорта вашего модуля самый быстрый способ проверить, правильно ли экспортируется ваша модель для обслуживания, - это использовать save_model_cli API :

saved_model_cli run --dir /tmp/tfserving/universal_encoder/00000001 --tag_set serve --signature_def serving_default --input_exprs 'text=["what this is"]'

Для обслуживания модели из докера:

docker pull tensorflow/serving  
docker run -p 8501:8501 -v /tmp/tfserving/universal_encoder:/models/universal_encoder -e MODEL_NAME=universal_encoder -t tensorflow/serving                                                                                           
0 голосов
/ 18 июля 2018

В настоящее время модули-концентраторы не могут напрямую использоваться Tensorflow Serving.Вам нужно будет загрузить модуль в пустой график и затем экспортировать его, используя SavedModelBuilder.Например:

import tensorflow as tf
import tensorflow_hub as hub

with tf.Graph().as_default():
  module = hub.Module("http://tfhub.dev/google/universal-sentence-encoder/2")
  text = tf.placeholder(tf.string, [None])
  embedding = module(text)

  init_op = tf.group([tf.global_variables_initializer(), tf.tables_initializer()])
  with tf.Session() as session:
    session.run(init_op)
    tf.saved_model.simple_save(
        session,
        "/tmp/serving_saved_model",
        inputs = {"text": text},
        outputs = {"embedding": embedding},
        legacy_init_op = tf.tables_initializer()        
    )

Это позволит экспортировать вашу модель (в папку /tmp/serving_saved_model) в нужный формат для обслуживания.После этого вы можете следовать инструкциям, приведенным в документации здесь: https://www.tensorflow.org/serving/serving_basic

...