python - LSTM 的网格搜索超参数调整
问题描述
尝试在我的 LSTM 模型中实现网格搜索时出现不同的错误。我正在尝试与此非常相似的东西。
# train the model
def build_model(train, n_back=1, n_predict=1, epochs=10, batch_size=10, neurons=100, activation='relu', optimizer='adam'):
# define model
model = Sequential()
model.add(LSTM(neurons, activation=activation, input_shape=(n_timesteps, n_features)))
model.add(RepeatVector(n_outputs))
model.add(LSTM(neurons, activation=activation, return_sequences=True))
model.add(TimeDistributed(Dense(neurons)))
model.add(TimeDistributed(Dense(1)))
model.compile(loss='mse', optimizer=optimizer)
# fit network
model.fit(train_x, train_y, epochs=epochs, batch_size=batch_size, verbose=1)
return model
#### Epochs and Batch Size
batch_size = [10, 20]
epochs = [1, 10]
# Optimizer: Select!
#### Optimizer
optimizer = ['Adam', 'Adamax'] #'SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adam', 'Adamax', 'Nadam'
#### Learning Rate and Momentum
learn_rate = [0.01, 0.2] #0.001, 0.01, 0.1, 0.2, 0.3
momentum = [0.0, 0.2, 0.9] #0.0, 0.2, 0.4, 0.6, 0.8, 0.9
lr_optimizer = SGD(lr=learn_rate, momentum=momentum)
#### Tune Network Weight Initialization
init_mode = ['lecun_uniform','zero', 'he_normal'] #'uniform', 'lecun_uniform', 'normal', 'zero', 'glorot_normal', 'glorot_uniform', 'he_normal', 'he_uniform'
#### Neuron Activation Function
activation = ['relu', 'softmax'] #'softmax', 'softplus', 'softsign', 'relu', 'tanh', 'sigmoid', 'hard_sigmoid', 'linear'
#### Tune Dropout Regularization
weight_constraint = [2, 3] #1, 2, 3, 4, 5
dropout_rate = [0.0, 0.1, 0.5, 0.9] #0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9
#### Tune the Number of Neurons in the Hidden Layer
neurons = [100, 200] #10, 50, 100, 200
# create model
model = KerasClassifier(build_fn=build_model(train, n_back, n_predict, epochs, batch_size, neurons, activation, optimizer), verbose=1)
param_grid = dict(batch_size=batch_size, epochs=epochs, optimizer=optimizer,
activation=activation,neurons=neurons)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=-1)
grid_result = grid.fit(train_x, train_y)
例如,一个错误是:
('Could not interpret activation function identifier:', ['relu', 'softmax'])
我究竟做错了什么?
有没有更好的方法来“调整”我的 LSTM?
解决方案
简短:GridSearchCV 只是在 2D 而非 3D 中工作,或者换句话说,只是 3D 而不是 4D(随着时间的推移)。在这种情况下,您必须设置自己的网格搜索。
如果您对此有任何疑问,可以联系我。希望这有帮助。
推荐阅读
- apache - 包含特殊字符(& 和?)的 Apache 重定向 url
- c# - 退出没有返回值的异步匿名方法 lambda 表达式 Xdocument.validate
- r - 闰日移除
- c# - 如果我没有完成一个 ActionBlock 会不会有问题
- java - 如何在 Debian 10 Buster 上安装 Oracle jdk 15
- model-view-controller - Sencha Ext JS - how to refresh the Tabs after date picking?
- php - PHP + mysql:从包含存款,收益和取款的交易列表中计算个人利润的最简单方法是什么
- java - 如何在java中更改窗口应用程序中的背景颜色
- laravel - Laravel - 当前状态为1时如何将所有状态设置为0
- asp.net-core - RDLC 表达式