Ошибка при проверке ввода: ожидалось, что lstm_28_input будет иметь форму (5739, 8), но получил массив с формой (1, 8) - PullRequest
0 голосов
/ 17 декабря 2018

я получил ошибку измерения в керасе

форма ввода выглядит следующим образом

print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)

результат

(5739, 1, 8) (5739,) (1435, 1, 8) (1435,)

и модель ниже

batch_size=128
epochs=20
from keras_self_attention import SeqSelfAttention
from keras.layers import Flatten
model = keras.models.Sequential()
model.add(keras.layers.LSTM(epochs, input_shape=(train_X.shape[0], train_X.shape[2]), return_sequences=True))
model.add(SeqSelfAttention(attention_activation='sigmoid'))
model.add(Flatten())
model.add(keras.layers.Dense(units=1))
model.compile(loss='mse', optimizer='adam')
model.summary()

результат

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
lstm_33 (LSTM)               (None, 5739, 20)          2320      
_________________________________________________________________
seq_self_attention_35 (SeqSe (None, 5739, 20)          1345      
_________________________________________________________________
flatten_8 (Flatten)          (None, 114780)            0         
_________________________________________________________________
dense_33 (Dense)             (None, 1)                 114781    
=================================================================
Total params: 118,446
Trainable params: 118,446
Non-trainable params: 0
_________________________________________________________________

но я получил ошибку в шаге подгонки

history = model.fit(train_X, train_y, epochs=epochs, batch_size=batch_size, validation_data=(test_X, test_y), verbose=2, shuffle=False)

ошибка

ValueError: Error when checking input: expected lstm_33_input to have shape (5739, 8) but got array with shape (1, 8)

, но я печатаю форму ввода, которая (5739,8)и я не могу понять, откуда (1,8) происходит.и как это исправить.

input_shape=(train_X.shape[0], train_X.shape[2])
print(input_shape)
(5739, 8)

это проблема формы ввода в test_X, test_Y или train?и как мне это исправить?

1 Ответ

0 голосов
/ 17 декабря 2018

Слой LSTM в Keras ожидает пакеты данных с формой (n_timesteps, n_features).Вы строите свой слой с неправильными размерами.

Сначала измените данные тренировки на фигуру n_data_points, n_timesteps, n_features:

train_X_ = np.swapaxes(train_X, 1, 2)
train_X_.shape # now of shape (5739, 8, 1)

Затем укажите модель с правильными размерами:

model = keras.models.Sequential()
# input shape for the LSTM layer will be (8,1). No need to specify the batch shape.
model.add(keras.layers.LSTM(20, input_shape=(train_X_.shape[1], train_X_.shape[2]), return_sequences=True)) 
model.add(keras.layers.Flatten())
model.add(keras.layers.Dense(1))

model.compile(optimizer='adam', loss='mse')

Это будет работать правильно:

model.fit(train_X_, train_y)
...