Keras - несоответствующая форма массива с model.predict () - PullRequest
1 голос
/ 31 марта 2019

У меня есть простой плотный NN с 2 входными значениями, написанными на Keras, работающий поверх Tensorflow и Python.Я успешно установил эту сеть и могу провести оценку без ошибок.Однако, когда я хочу предсказать результат данных одного образца, я получаю ошибку из-за неправильной формы измерений входных данных.Однако, когда я печатаю форму массива numpy, он возвращает правильную форму:

inputArr = np.array((x[sample][0], x[sample][1]))
print(inputArr)
print(inputArr.shape)
prediction = model.predict(inputArr)

Это приводит к следующему выводу:

Input data: [-1. -1.]
Array shape: (2,)

С последующей ошибкой:

Traceback (most recent call last):
  File ".\train3d.py", line 60, in <module>
    prediction = model.predict(inputArr)
  File "C:\Users\svoja\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training.py", line 1147, in predict
    x, _, _ = self._standardize_user_data(x)
  File "C:\Users\svoja\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training.py", line 749, in _standardize_user_data
    exception_prefix='input')
  File "C:\Users\svoja\AppData\Local\Programs\Python\Python35\lib\site-packages\keras\engine\training_utils.py", line 137, in standardize_input_data
    str(data_shape))
ValueError: Error when checking input: expected dense_1_input to have shape (2,) but got array with shape (1,)

Как видно из сообщения об ошибке, сеть ожидала массив с размерами (2,), который в точности совпадает с выводом моего входного массива.

У меня вопрос такой,что именно не так с массивом?

1 Ответ

2 голосов
/ 31 марта 2019

Вы пропускаете размер пакета , Keras ожидает, что данные будут неявно (N, D), где N - размер пакета, а D - количество функций. В вашем случае D=2, но у вас нет матрицы.

Для прохождения одной точки данных вам нужна форма (1, 2), которая считывает 1 точку данных с двумя функциями. Вы можете достичь этого:

inputArr = np.array((x[sample][0], x[sample][1]))
print(inputArr) # [-1, -1]
print(inputArr.shape) # (2,)
inputArr = np.expand_dims(inputArr, 0)
print(inputArr.shape) # (1, 2)

Или более короткая синтаксическая версия сахара:

inputArr = inputArr[None, :] # (1, 2)

, где None добавляет новое измерение.

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