Почему работающая обученная модель выдает ошибку, несовместимую с размером матрицы, при попытке вызвать предикат API? - PullRequest
0 голосов
/ 31 октября 2019

У меня есть обученная модель, которую я сохранил как savedmodel (pb). Я могу загрузить эту модель в другой скрипт Python и выполнить прогноз без каких-либо проблем. Я также только что установил рабочую среду TensorFlow-обслуживания с загруженной моделью. Однако, когда я пытаюсь вызвать REST-API из PHP, я получаю ошибку, несовместимую с размером матрицы.

Это определение моего savedmodel:

signature_def['__saved_model_init_op']:
  The given SavedModel SignatureDef contains the following input(s):
  The given SavedModel SignatureDef contains the following output(s):
    outputs['__saved_model_init_op'] tensor_info:
        dtype: DT_INVALID
        shape: unknown_rank
        name: NoOp
  Method name is:

signature_def['serving_default']:
  The given SavedModel SignatureDef contains the following input(s):
    inputs['dense_input'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 1067)
        name: serving_default_dense_input:0
  The given SavedModel SignatureDef contains the following output(s):
    outputs['dense_2'] tensor_info:
        dtype: DT_FLOAT
        shape: (-1, 20)
        name: StatefulPartitionedCall:0
  Method name is: tensorflow/serving/predict

И этоошибка, возникающая при попытке вызвать функцию прогнозирования:

'{ "error": "Matrix size-incompatible: In[0]: [1067,1], In[1]: [1067,64]\n\t [[{{node sequential/dense/Relu}}]]" }'

Это моя модель Keras:

model = tf.keras.models.Sequential([
  tf.keras.layers.Dense(64, activation='relu', input_shape= x.shape[1:]),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(32, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(20, activation='softmax')
])

Где x.shape[1:] равно 1067.

Я пытаюсь предсказать, используя один вектор с 1067 значениями. Это работает без каких-либо проблем, когда я делаю это в Python.

У кого-нибудь есть идеи, где я иду не так?

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