Рассмотрим следующий код для создания сохраненной_модели
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