Невозможно использовать сервис онлайн-прогнозирования с вводом изображения с использованием модели, сохраненной из керас - PullRequest
1 голос
/ 24 апреля 2019

Рассмотрим следующий код для создания сохраненной_модели

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

inp = Input((), dtype=tf.string, name="image_bytes")
net = Lambda(lambda t: tf.map_fn(lambda x: tf.io.decode_jpeg(x), t, dtype=tf.uint8))(inp)
net = Lambda(lambda t: tf.map_fn(lambda x: tf.io.encode_jpeg(x), t, dtype=tf.string), name="output")(net)

model = Model(inp, net, name="test_network")

tf.keras.experimental.export_saved_model(model, "runs/cmle_test_model", serving_only=True)

Теперь я пытаюсь получить запрос онлайн-прогнозирования для работы с полезной нагрузкой

{"image_bytes":{"b64":"/9j/..."}}

полная полезная нагрузка при https://gist.github.com/suyash/00d6846ab1a82e74f312ebb43b384c12

какие ошибки с

{
  "error": "Prediction failed: Error during model execution: AbortionError(code=StatusCode.INVALID_ARGUMENT, details=\"Expected input[1] == 'test_network/output/map/TensorArrayUnstack/TensorListFromTensor/element_shape:output:0' to be a control input.\n\tIn {{node test_network/lambda/map/TensorArrayV2Stack/TensorListStack}}\n\t [[{{node StatefulPartitionedCall}}]]\n\t [[{{node StatefulPartitionedCall}}]]\")"
}

Однако локально, если я просто сделаю

out = model(data)

отлично работает

UPDATE:

У меня что-то работает с

inp = Input((), dtype=tf.string, name="image_bytes")
net = Lambda(lambda t: tf.expand_dims(tf.io.decode_jpeg(t[0]), 0))(inp)
net = Lambda(lambda t: tf.expand_dims(tf.io.encode_base64(tf.io.encode_jpeg(t[0])), 0), name="output")(net)

, но при этом размер используемого пакета для службы устанавливается равным 1. В идеале я хотел бы использовать слой Lambda с tf.map_fn

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