Как правильно сформировать данные для моей модели NN? - PullRequest
1 голос
/ 15 июня 2019

Я пытаюсь создать базовую модель нейронной сети в Керасе, которая научится складывать положительные числа вместе, и у меня возникли проблемы с формированием обучающих данных для соответствия модели:

Я уже пробовал многочисленные конфигурации для атрибута "input_shape" первого плотного слоя, но, похоже, ничего не работает.

# training data
training = np.array([[2,3],[4,5],[3,8],[2,9],[11,4],[13,5],[2,9]], dtype=float)
answers  = np.array([5, 9, 11, 11, 15, 18, 11],  dtype=float)
# create our model now:
model = tf.keras.Sequential([
    tf.keras.layers.Dense(units=16, input_shape=(2,)),
    tf.keras.layers.Dense(units=16, activation=tf.nn.relu),
    tf.keras.layers.Dense(units=1)
])
# set up the compile parameters: 
model.compile(loss='mean_squared_error',
              optimizer=tf.keras.optimizers.Adam(.1))
#fit the model:
model.fit(training, answers, epochs=550, verbose=False)

print(model.predict([[7,9]]))

Я ожидаю, что это запустится без ошибок и выдаст результат '16', но я получаю следующую ошибку:

"Traceback (most recent call last):
  File "c2f", line 27, in <module>
    print(model.predict([[7,9]]))
  File "C:\Users\Aalok\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1096, in predict
    x, check_steps=True, steps_name='steps', steps=steps)
  File "C:\Users\Aalok\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training.py", line 2382, in _standardize_user_data
    exception_prefix='input')
  File "C:\Users\Aalok\AppData\Local\Programs\Python\Python37\lib\site-packages\tensorflow\python\keras\engine\training_utils.py", line 362, in standardize_input_data
    ' but got array with shape ' + str(data_shape))

ValueError: Ошибка при проверке ввода: ожидалось, что dens_input имеет форму (2,), но получил массив с формой (1,)

1 Ответ

1 голос
/ 15 июня 2019

Получил ошибку. Ошибка была в этой строке по следам стека,

print(model.predict([[7,9]]))

Теперь модель Keras Sequential ожидает ввод данных в виде массива NumPy (ndarray). В приведенной выше строке модель интерпретирует массив как список на нескольких входах (это не ваш случай).

Согласно официальным документам , аргумент x в model.fit() равен

Массив обучающих данных (если модель имеет один вход), или список массивов Numpy (если модель имеет несколько входов). Если вход слои в модели названы, вы также можете передать словарь сопоставления входные имена для массивов Numpy. х может быть Нет (по умолчанию), если кормление из тензорные рамки (например, тензоры данных TensorFlow).

Нам нужно создать массив NumPy, используя numpy.array(),

print(model.predict(np.array([[7,9]])))

Ошибка устранена. Я запустил код, и он отлично работает.

...