我正在使用scikit-learn的GridSearchCV
迭代参数空间来调整模型。具体来说,我用它来测试神经网络中的不同超参数。网格如下:
params = {'num_hidden_layers': [0,1,2],
'hidden_layer_size': [64,128,256],
'activation': ['sigmoid', 'relu', 'tanh']}
问题是,当隐藏num_hidden_layers
设置为0
时,我最终会运行冗余模型。它将运行一个具有0个隐藏层和64个单元的模型,另一个具有128个单元,另一个具有256个单元。所有这些模型都是等价的,因为没有隐藏层。这是非常低效的,这意味着我需要编写更多代码来删除结果中的冗余。
有没有办法阻止这样的参数组合,可能是通过传递一组参数?
答案 0 :(得分:7)
sklearn documentation建议使用两个参数网格。
所以你可以这样做:
param_grid = [
{'num_hidden_layers': [1,2],
'hidden_layer_size': [64,128,256],
'activation': ['sigmoid', 'relu', 'tanh']},
{'num_hidden_layers': [0],
'hidden_layer_size': [64],
'activation': ['sigmoid', 'relu', 'tanh']}
]
答案 1 :(得分:7)
GridSearchCV允许您将词典列表传递给params:
param_grid:dict或词典列表
带有参数名称(字符串)作为键和列表的字典 尝试作为值的参数设置,或此类词典的列表, 在这种情况下,列表中每个字典跨越的网格是 探讨。这样可以搜索任何参数序列 设置。
因此,您可以将这些词典指定为原始词典的某些子词。因此,您可以避免不相关的组合。