无法克隆对象 keras.wrappers

Posted

技术标签:

【中文标题】无法克隆对象 keras.wrappers【英文标题】:Cannot clone object keras.wrappers 【发布时间】:2020-05-06 04:26:26 【问题描述】:
      def try_and_error(layers, activation):
         model = Sequential()
         for i, nodes in enumerate(layers):
            if i==0:
                model.add(Dense(nodes,input_dim=train_X.shape[1]))#input layers 

                model.add(Activation(activation)) #Activation layer
            else:
                model.add(Dense(nodes))# Hidden Layers
                model.add(Activation(activation))#Activation Layers
          model.add(Dense(1)) # output layer

     model.compile(optimizer='adam', loss='binary_crossentropy',metrics=['accuracy'])
    return model



    layers=[[150], [160,100], [140,100,500]]
    activations = ['sigmoid', 'relu']
    param_grid = dict(layers=layers, activation=activations, batch_size= 
    [500,800,1000])
    grid = 
    RandomizedSearchCV(
                      estimator=KerasClassifier(build_fn=try_and_error
                                                ,epochs=100,verbose=0), 
                      param_distributions =param_grid)


     grid_result= grid.fit(train_X,train_y)

这是遇到的错误,即使我已经尝试过这个,gridsearchcv 结果仍然相同。 RuntimeError: Cannot clone object <keras.wrappers.scikit_learn.KerasClassifier object at 0x7f3d7959c390>,构造函数要么不设置参数层,要么不修改参数层

【问题讨论】:

meta.***.com/questions/326569/… Sklearn 使用clonemethod 创建另一个估算器副本。但是,如果您的估算器是依赖于 keras 的估算器,那么 clonefails。为了解决这个问题,您可以覆盖 sklearn 中的 clone 方法(这很困难),或者构建一个自定义类来训练您的 keras 模型,但让您的自定义类的 init 不受任何 keras 对象的影响。 请在代码中提出需要的地方,急需 它可能会帮助你:datascience.stackexchange.com/questions/66341/… 这是一个与嵌套列表相关的错误! 【参考方案1】:

尝试替换

layers=[[150], [160,100], [140,100,500]]

layers=[(150), (160,100), (140,100,500)]

【讨论】:

解释为什么它解决了这个问题。【参考方案2】:

将图层更改为: layers=[(150,), (160,100), (140,100,500)]

另外,不要忘记在 (150,) 中添加 (,) 否则会抛出如下错误:TypeError: 'int' object is not iterable 这是因为没有逗号(,)的单个元组被视为 int。

【讨论】:

以上是关于无法克隆对象 keras.wrappers的主要内容,如果未能解决你的问题,请参考以下文章

无法在“Worker”上执行“postMessage”:无法克隆 FormData 对象

类型错误:无法克隆对象 '<class 'sklearn.svm._classes.SVC'>'

Babel 无法使用扩展运算符编译 ES6 对象克隆

无法克隆对象 <tensorflow.python.keras.wrappers.scikit_learn.KerasClassifier 对象

Python scikit-learn:无法克隆对象...因为构造函数似乎没有设置参数

如何克隆JAXB对象