RuntimeError: 。。does not set or modifies parameter layer_size

来源:2-18 实战sklearn超参数搜索

jandy_chen

2020-02-22

接上一个未解决问题:
地址:https://coding.imooc.com/learn/questiondetail/156383.html

查看sklearn的官方文档:
https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.RandomizedSearchCV.html?highlight=randomizedsearchcv#sklearn.model_selection.RandomizedSearchCV.fit
这个fit方法的入参,对应**fit_params dict of string -> object是字典类型了,看不出epochs值要要调为多少?

我试着根据报错提示,把epochs和validation_data的值各加了有个[],如下:

random_search_cv.fit(x_train_scaled,y_train,epochs = [100],
validation_data = [(x_valid_scaled, y_valid)],callbacks = callbacks)
貌似有作用了,
但是出现新的错误类型如下:
图片描述
请问:
1、这个加 [100] 的思路是否对?
2、都已经有cv 参数,进行验证集切分了,是否还需要传递 validation_data参数?
3、如上截图,RuntimeError: Cannot clone object,的错误如何解决??
(我试着运行老师github的代码,并且去除后面三个参数,如:random_search_cv.fit(x_train_scaled,y_train),也是运行一段时间后报上面截图错误)

=====
补充贴图:
图片描述

写回答

3回答

正十七

2020-03-01

如LHF同学指出的,sklearn 0.21.3可以工作。

然后经过我调研,发现也可能是新版本tensorflow中的KerasRegressor的问题,新版本的参数在做deep copy的时候出现了问题,导致在拷贝复杂的numpy对象的时候出错,如果把搜索的参数改成普通列表则不会出错:

param_distribution = {
    "hidden_layers": [1, 2, 3, 4],
    "layer_size": [5, 10, 20, 30],
    "learning_rate": [1e-4, 5e-5, 1e-3, 5e-3, 1e-2],
}


1
2
jandy_chen
非常感谢!
2020-03-01
共2条回复

LHF

2020-02-28

我也遇到了这个问题,sklearn换成0.21.3就可以,而0.22则不行

0
1
正十七
多谢指出能运行的sklearn版本号。
2020-03-01
共1条回复

正十七

2020-02-26

同学你好,好像这是个通用问题,我一天之内看到三四个这样的问题,怀疑是版本问题,不知道是否能将使用的scikit-learn和tensorflow的版本号贴一下?

类似问题集合:

http://coding.imooc.com/learn/questiondetail/168838.html

http://coding.imooc.com/learn/questiondetail/168054.html

http://coding.imooc.com/learn/questiondetail/169274.html



0
1
jandy_chen
如上补充贴图,sklearn是0.22版本了
2020-02-26
共1条回复

Google老师亲授 TensorFlow2.0 入门到进阶

Tensorflow2.0实战—以实战促理论的方式学习深度学习

1849 学习 · 896 问题

查看课程