Модель должна знать, какую форму ввода она должна ожидать.
установить форму ввода для двунаправленного слоя
def lstm_model():
model = Sequential()
model.add(Bidirectional(LSTM(lstm_sell, return_sequences=True, dropout=0.5, recurrent_dropout=0.5),
input_shape=(time_steps, n_features))) # return_sequences=True , stateful=True
#model.add(Dropout(0.5))
model.add(Bidirectional(LSTM(lstm_sell, return_sequences=True, dropout=0.5, recurrent_dropout=0.3))) # return_sequences=True , stateful=True
#model.add(Dropout(0.3))
model.add(Bidirectional(LSTM(lstm_sell, return_sequences=True))) # 80
model.add(Flatten())
model.add(Dense(8))
model.add(Dense(1, activation='sigmoid'))
# model.add(Reshape((time_steps,)))
#opt = RMSprop(lr=0.0001)#, decay=1e-6)
model.compile(loss='mse',
optimizer='rmsprop',
metrics=['mse'])
model.summary()
return model
первый слой - двунаправленный слой
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
bidirectional_1 (Bidirection (None, 1, 20) 1680
_________________________________________________________________
bidirectional_2 (Bidirection (None, 1, 20) 2480
_________________________________________________________________
bidirectional_3 (Bidirection (None, 1, 20) 2480
_________________________________________________________________
flatten_1 (Flatten) (None, 20) 0
_________________________________________________________________
dense_1 (Dense) (None, 8) 168
_________________________________________________________________
dense_2 (Dense) (None, 1) 9
=================================================================