#python #tensorflow #python-requests #tensorflow2.0 #tensorflow-serving
#python #тензорный поток #python-запросы #тензорный поток 2,0 #обслуживание tensorflow
Вопрос:
У меня есть 2 модели, с которыми я экспериментирую, входы и выходы одинаковы для них обоих. Один из них — CNN, а другой имеет только плотные слои. Я сохранил обе модели одинаково, и я пытаюсь получить от них прогнозы, используя TF, обслуживающий Rest API.
Модель CNN:
inputs = tf.keras.layers.Input(shape=(50,3))
x = tf.keras.layers.Conv1D(filters=12, kernel_size=2, strides=1, padding='valid', activation='relu')(inputs)
x = tf.keras.layers.MaxPooling1D()(x)
x = tf.keras.layers.Conv1D(filters=12, kernel_size=2, strides=1, padding='valid', activation='relu')(x)
x = tf.keras.layers.MaxPooling1D()(x)
x = tf.keras.layers.Conv1D(filters=12, kernel_size=2, strides=1, padding='valid', activation='relu')(x)
x = tf.keras.layers.Flatten()(x)
predictions = tf.keras.layers.Dense(3, activation='softmax')(x)
Плотная модель:
inputs = tf.keras.layers.Input(shape=(50,3))
x = tf.keras.layers.Dense(64, activation='relu')(inputs)
x = tf.keras.layers.Dense(64, activation='relu')(x)
x = tf.keras.layers.Dense(64, activation='relu')(x)
x = tf.keras.layers.Dense(32, activation='relu')(x)
x = tf.keras.layers.Flatten()(x)
predictions = tf.keras.layers.Dense(3, activation='softmax')(x)
При попытке отправить запрос на прогнозирование в модель CNN с обслуживанием TF я получаю правильный ответ, но тот же запрос, отправляемый в плотную модель, возвращает 400 Bad Request
ошибку.
reading = np.random.uniform(0, 1, (50, 3))
r = requests.post('http://localhost:8501/v1/models/my_model:predict', data=json.dumps({'instances': reading.tolist()}))
Модель CNN возвращается правильно:
{"predictions": [[1.78464702e-20, 4.44278494e-33, 4.32330665e-07]]}
Плотная модель возвращает:
{"error": "indices[0] = 2 is not in [0, 2)\n\t [[{{node model/dense/Tensordot/GatherV2_1}}]]"}
Есть идеи, что здесь происходит?
Комментарии:
1. Вы должны просмотреть журнал обслуживания tensorflow и найти подробный журнал ошибок .
Ответ №1:
При ближайшем рассмотрении плотная модель ожидала ввода как (-1,50,3)
.
Простое np.reshape(-1,50,3)
решение проблемы для меня.