我有麻烦了。下面是我的代码结构:
n_jobs=-1
调用RandomizedSearchCV
或{create_model
,创建神经网络模型(参见this教程),由KerasClassifier
或KerasRegressor
调用我得到一个错误,说本地对象不能被pickle。如果我改变n_jobs=1
,那么没有问题。所以我怀疑问题出在局部函数和并行处理上。有解决办法吗?在google上搜索一下之后,似乎序列化程序dill
可以在这里工作(我甚至找到了一个名为multiprocessing_on_dill
)的包。但我目前依赖的是sklearn
的包。在
我可以在jupyter笔记本电脑/ipython(在Unix上没有问题)的Windows下,在kerasClassifier模型上运行sklearn的网格搜索时,可以确认同样的问题。在
我通过将导致pickle问题的create_model函数放入模块中并导入模块而不是在环境中定义函数来解决这个问题。在
要为Python创建一个简单的模块
import my_module
导入模块,然后用my_module.create_model()
从模块中调用函数我找到了解决问题的办法。我真的很困惑,为什么示例here与}。如果我把局部函数作为子类的一个方法,我就可以设置
n_jobs=-1
一起工作,但我的代码却不起作用。似乎问题出在子类的方法中的本地函数{n_jobs > 1
。在总而言之,我的代码结构如下:
n_jobs=-1
调用RandomizedSearchCV
或{create_model
,创建由KerasClassifier
或{准则的总体思路:
相关问题 更多 >
编程相关推荐