我试图为多标签分类问题微调神经网络模型。我也在阅读 Jason Brownlee 的 文章。根据文章,有许多参数需要优化,它们是:
- 批量大小和训练时期
- 优化算法
- 学习率和动量
- 网络权重初始化
- 隐藏层的激活函数
- 辍学正则化
- 隐藏层中的神经元数量
代码片段如下。
model = KerasClassifier(build_fn=create_model, verbose=1)
# define the grid search parameters
batch_size = [10, 20, 40, 60, 80, 100]
epochs = [10, 50, 100]
learn_rate = [0.001, 0.01, 0.1, 0.2, 0.3]
momentum = [0.0, 0.2, 0.4, 0.6, 0.8, 0.9]
weight_constraint = [1, 2, 3, 4, 5]
dropout_rate = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
neurons = [1, 5, 10, 15, 20, 25, 30]
param_grid = dict(neurons=neurons, batch_size=batch_size, epochs=epochs, learn_rate=learn_rate,
momentum=momentum, dropout_rate=dropout_rate, weight_constraint=weight_constraint)
grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=1)
grid_result = grid.fit(X_train, y_train, validation_split=0.2)
除此之外,网络中隐藏层的数量也是另一个参数。
我正在进行数据分区和网格搜索以进行微调。但即使在 GPU 机器中,计算也需要大量时间。
在这里,我在同一个网格中指定了所有这些参数。我想知道我们是否可以通过分别查找每个参数来简化这一点?例如,先找到最佳神经元数量,然后找到批量大小等。还有哪些其他方法可以减少搜索时间?
我也在阅读 Bengio 的论文Practical Recommendations for Gradient-Based Training of Deep Architectures但没有得到太多。