CuDNN LSTM Настройка гиперпараметра: Ошибка формы Input_h - PullRequest
1 голос
/ 09 июля 2019

При выполнении настройки гиперпараметров для 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.Мы ожидали, что модели будут успешно работать для каждой комбинации гиперпараметров.

...