При выполнении настройки гиперпараметров для LSTM я столкнулся со следующей ошибкой примерно через 100-150 эпох.
InvalidArgumentError: 2 root error(s) found.
(0) Invalid argument: Invalid input_h shape: [1,1,128] [1,32,128]
[[{{node cu_dnnlstm_1/CudnnRNN}}]]
(1) Invalid argument: Invalid input_h shape: [1,1,128] [1,32,128]
[[{{node cu_dnnlstm_1/CudnnRNN}}]]
[[loss/mul/_101]]
0 successful operations.
0 derived errors ignored.
При запуске CuDNNLSTM для использования графического процессора вместо простого LSTM выдает эту ошибку.Я пытаюсь применить GridSearchCV к этой модели для настройки гиперпараметров.Я не могу понять, что означает эта ошибка, насколько я понимаю, что есть некоторое несоответствие формы, но в этом случае модель не должна работать в первую очередь.
def create_model(neurons=(128,64),dropout_rate=0.2):
tf.reset_default_graph()
lstm_model = Sequential()
lstm_model.add(CuDNNLSTM(128, kernel_initializer='glorot_uniform', return_sequences=True, batch_input_shape=(1, 15, 7)))
lstm_model.add(Dropout(dropout_rate))
lstm_model.add(CuDNNLSTM(64, return_sequences=False))
lstm_model.add(Dense(look_forward))
opt = Nadam(lr=0.02)
lstm_model.compile(optimizer = opt, loss = 'mae',metrics=['mean_absolute_percentage_error'])
return lstm_model
# create and fit the LSTM network
model = KerasRegressor(build_fn=create_model, verbose=0)
# define the grid search parameters
dropout_rate = [0.2, 0.1, 0]
param_grid = dict(dropout_rate=dropout_rate)
grid = GridSearchCV(estimator=model, cv=3,param_grid=param_grid)
early_stopping = EarlyStopping(monitor='val_loss', patience=42)
lr_reducer = ReduceLROnPlateau(monitor='val_loss', factor=0.5,
patience=10, verbose=2, mode='auto', min_delta=0.0001, cooldown=0, min_lr=0)
grid_result = grid.fit(x_train, y_train, validation_data= (x_val, y_val),
callbacks=[early_stopping, lr_reducer], verbose=2, batch_size=1, epochs=5000)
Вместо успешной работы он выдает InvalidArgumentError.Мы ожидали, что модели будут успешно работать для каждой комбинации гиперпараметров.