【问题标题】:MLP learning rate optimization with GridSearchCV使用 GridSearchCV 优化 MLP 学习率
【发布时间】:2021-06-21 00:45:13
【问题描述】:

我正在尝试使用 GridSearchCV 调整 MLP 分类器的超参数,但遇到以下问题:

/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_validation.py:536: FitFailedWarning: Estimator fit failed. The score on this train-test partition for these parameters will be set to nan.


Details: 

ValueError: learning rate 0.01 is not supported. 

  FitFailedWarning)

/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_validation.py:536: FitFailedWarning: Estimator fit failed. The score on this train-test partition for these parameters will be set to nan.

Details: 

ValueError: learning rate 0.02 is not supported

........

代码:

clf = MLPClassifier()
params= {
   'hidden_layer_sizes': hidden_layers_generator(X,np.arange(1,17,1)),
   'solver': ['sgd'],
   'momentum': np.arange(0.1,1.1,0.1),
   'learning_rate': np.arange(0.01,1.01,0.01),
   'max_iter': np.arange(100,2100,100)}
grid = GridSearchCV(clf, params, cv=10, scoring='accuracy')
grid.fit(X, y)
grid_mean_scores = grid.cv_results_['mean_test_score']
pd.DataFrame(grid.cv_results_)[['mean_test_score', 'std_test_score', 'params']]

hidden_​​layers_generator的代码如下:

from itertools import combinations_with_replacement
def hidden_layers_generator(df,hidden_layers):
  hd_sizes = []
  for l in range(1, len(hidden_layers)):
    comb = combinations_with_replacement(np.arange(1,len(df.columns),10), l)
    hd_sizes.append(list(comb))
  return hd_sizes

这是 X 和 y 数据帧的小 sn-p:

X.head()
    sl      sw      pl      pw
0   5.1     3.5     1.4     0.2
1   4.9     3.0     1.4     0.2
2   4.7     3.2     1.3     0.2
3   4.6     3.1     1.5     0.2
4   5.0     3.6     1.4     0.2
y.head()
0    0
1    1
2    1
3    0
4    0

【问题讨论】:

    标签: python scikit-learn grid-search mlp


    【解决方案1】:

    如果您查看MLPClassifierdocumentation,您会发现learning_rate 参数不是您所想的,而是一种调度程序。你想要的是learning_rate_init 参数。所以在配置中更改这一行:

       'learning_rate': np.arange(0.01,1.01,0.01),
    

       'learning_rate_init': np.arange(0.01,1.01,0.01),
    

    【讨论】:

    • 谢谢@Mustafa Aydın 我用“自适应”学习率尝试了你的答案,但现在我收到以下错误:/usr/local/lib/python3.7/dist-packages/sklearn/model_selection/_validation.py:536: FitFailedWarning: Estimator fit failed. The score on this train-test partition for these parameters will be set to nan. Details: TypeError: unsupported operand type(s) for +: 'int' and 'tuple'
    • @houdabenhar 你能用你试过的代码更新你的问题吗?如果代码sn-p比较短,也可以在这里评论。
    • 和上一个一样,修改了learning_rate HP,添加了learning_rate_init如下:params= { 'hidden_layer_sizes': hidden_layers_generator(X,np.arange(1,17,1)), 'solver': ['sgd'], 'momentum': np.arange(0.1,1.1,0.1), 'learning_rate': ['adaptive'], 'max_iter': np.arange(100,2100,100), 'learning_rate_init': np.arange(0.01,1.01,0.01)}
    • @houdabenhar 你能说出hidden_layers_generator到底在做什么吗?
    • @houdabenhar 请使用dummy data 发布minimal reproducible example。避免在 cmets 中发布代码。 hidden_layers_generator 到底是什么?
    猜你喜欢
    • 2020-11-20
    • 1970-01-01
    • 2020-10-16
    • 2021-02-05
    • 1970-01-01
    • 2021-02-16
    • 2021-07-15
    • 2019-10-24
    • 2020-10-22
    相关资源
    最近更新 更多