Список массивов Numpy, которые вы передаете своей модели, не соответствует размеру модели, ожидаемому для 3D-массивов

#python #machine-learning #keras #deep-learning

#python #машинное обучение #keras #глубокое обучение

Вопрос:

Я учусь создавать нейронную сеть с Sequential помощью from keras , но я получаю сообщение об ошибке, когда запускаю это:

 X = [
    [[1,4,5],[7,8,15],[13,16,45],[19,32,135]],
    [[0,0,0],[1,4,9], [16,25,36],[49,64,82]],
    [[1,1,1], [2,2,2], [1,1,1], [2,2,2]]
]

y = [
 [[25,64,405], [31,128,1215]],
 [[100,121,144], [169,196, 225]],
 [[1,1,1],[2,2,2]]   
]
X= np.array(X)
Y= np.array(y)

model = keras.models.Sequential()
model.add(LSTM(16, activation='relu', input_shape=(4, 3)))
model.add(Dense(32, activation='relu'))
model.add(Dense(3))
model.compile(loss='mse', optimizer='adam')
# fit network
model.fit(X, y, epochs=10, batch_size=4)
return model
 
 Error when checking model target: the list of Numpy arrays that you are passing to your model is not the size the model expected. Expected to see 1 array(s), but instead got the following list of 3 arrays:
 

Я думал, что Sequential должен принимать 3D-массив, где я указал количество timesteps=4 и features=3 , но, похоже, что-то не так с моим форматированием. Кто-нибудь может сказать мне, что я делаю не так?

Ответ №1:

Прежде всего, вы подгоняете модель к y и к Y. Во-вторых, Y должен быть массивом (None, 3), поскольку ваша сеть выводит 3 значения, но Y равен (None, 2, 3).

Начните с исправления этих ошибок и посмотрите, пойдет ли что-то не так впоследствии

Комментарии:

1. Спасибо за опечатку! Но я думаю, что мой Y — это массив (3,4,3)? Разве последний слой не должен иметь только 3 узла для каждого объекта? Я не понимаю, что такое Y (None,2,3) или почему это должен быть массив (None,3). В принципе, я ожидаю, что my model примет первый 2d-список X и вернет что-то похожее на первый 2d-список Y , затем примет второй 2d-список X и вернет второй 2d-список Y и так далее — по крайней мере, так я понял свою кодировку, хотя и не уверен, что это согласуется с тем, что делает мой код.

2. Ваш X равен (Нет, 4, 3). Ваш Y равен (Нет, 2, 3). Y должно быть (Нет, 3)

3. Я говорю «Нет», потому что первое измерение не влияет на сеть.

4. Есть несколько способов справиться с этим. Я предлагаю передать прогноз для первого временного шага в модель для прогнозирования второго временного шага.

5. Может быть, также использовать activation =‘relu’ в последнем слое?