Обслуживание TensorFlow не удалось обслуживать TensorFlow 2.0 keras.layers.LSTM - PullRequest
0 голосов
/ 12 мая 2019

Почему обслуживание TensorFlow не смогло обслуживать этот простой слой LSTM keras, в то время как оно успешно работает с использованием saved_model_cli run? И как я могу это исправить?

TensorFlow версия 2.0 альфа

$  pip install tensorflow==2.0.0-alpha0 

SavedModel, воспроизводящий:

import tensorflow as tf
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input, LSTM

img_width= 10
img_height= 10
def build_model():
    input_img = Input(shape=(img_width*img_height, 1), name='input_data', dtype='float32')
    x = LSTM(12, return_sequences=False,  name='lstm_1')(input_img)
    model = Model(input_img, x)
    return model

def save():
    model = build_model()
    tf.saved_model.save(model, "./test_keras_serving/1/")

if __name__ == '__main__':
    save()

Установка обслуживания TensorFlow:

$ docker pull tensorflow/serving

$ docker images -a
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
tensorflow/serving         latest              38bee21b2ca0        2 months ago        229MB

Обслуживание сохраненной модели

$ docker run -p 8501:8501 --mount type=bind,source=/the/path/of/dir/test_keras_serving,target=/models/my_model -e MODEL_NAME=my_model -t tensorflow/serving

Прогнозирование кода Python с использованием TensorFlow Serving.

import json
import requests
import numpy as np

def pred():
    inp_value = np.zeros((2,100,1))
    _url = 'http://localhost:8501/v1/models/my_model:predict'
    headers = {"cache-control": "no-cache", "content-type": "application/json"}
    data = json.dumps({"signature_name": "serving_default","instances": inp_value.tolist()})

    json_response = requests.post(url=_url, data=data, headers=headers)
    print(json_response)

if __name__ == '__main__':
    pred()

В клиенте результаты

<Response [400]>

Вместо [200].

А сервер показывает:

2019-05-12 13:21:49.370594: W external/org_tensorflow/tensorflow/core/framework/op_kernel.cc:1401] OP_REQUIRES failed at partitioned_function_ops.cc:118 : Invalid argument: Expected input[1] == 'TensorArrayV2Stack/TensorListStack/element_shape:output:0' to be a control input.
        In {{node TensorArrayV2Stack/TensorListStack}}

Тем не менее, SavedModel работает нормально с saved_model_cli:

$ saved_model_cli run --dir ./test_keras_serving/1 --tag_set serve --signature_def serving_default --input_exprs input_data=np.zeros((2,100,1))

Выходы:

Result for output key lstm_1:
[[0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

Как получить те же результаты, что и saved_model_cli, используя TensorFlow Serving?

1 Ответ

0 голосов
/ 08 июня 2019

Решил эту проблему с помощью тензор потока / подачи на докер: ночной

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...