Python TensorFlow拟合给出TypeError:无法克隆对象错误

Python TensorFlow拟合给出TypeError:无法克隆对象错误,python,cnn,tensorflow2.x,Python,Cnn,Tensorflow2.x,我使用一个基本的CNN模型来分类我的数据。我的输入数据的维度是(325、20、244244)。我使用的代码如下: model = Sequential() model.add(Dense(2, activation='relu', input_shape=X_train.shape[1:])) model.add(Dense(2, activation='sigmoid')) optimizer = ['SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adam

我使用一个基本的CNN模型来分类我的数据。我的输入数据的维度是(325、20、244244)。我使用的代码如下:

model = Sequential()
model.add(Dense(2, activation='relu', input_shape=X_train.shape[1:]))
model.add(Dense(2, activation='sigmoid'))

optimizer = ['SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adam', 'Adamax', 'Nadam']
epochs = [10, 50, 100]
param_grid = dict(epochs=epochs, optimizer=optimizer)

model.compile(loss='binary_crossentropy', metrics=['accuracy'])
grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring='accuracy', n_jobs=-1, refit='boolean')
grid_result = grid.fit(X_train, Y_train, validation_data=(X_test, Y_test))
print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))
我得到的结果是:

grid_result = grid.fit(X_train, Y_train, validation_data=(X_test, Y_test))

Traceback (most recent call last):

  File "<ipython-input-16-bb553189f3ee>", line 1, in <module>
    grid_result = grid.fit(X_train, Y_train, validation_data=(X_test, Y_test))

  File "C:\Users\Student\Anaconda3\lib\site-packages\sklearn\model_selection\_search.py", line 633, in fit
    base_estimator = clone(self.estimator)

  File "C:\Users\Student\Anaconda3\lib\site-packages\sklearn\base.py", line 60, in clone
    % (repr(estimator), type(estimator)))

TypeError: Cannot clone object '<tensorflow.python.keras.engine.sequential.Sequential object at 0x0000025993610B08>' (type <class 'tensorflow.python.keras.engine.sequential.Sequential'>): it does not seem to be a scikit-learn estimator as it does not implement a 'get_params' methods.
grid\u result=grid.fit(X\u序列,Y\u序列,验证数据=(X\u测试,Y\u测试))
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
网格结果=网格拟合(X\u序列,Y\u序列,验证数据=(X\u测试,Y\u测试))
文件“C:\Users\Student\Anaconda3\lib\site packages\sklearn\model\u selection\u search.py”,第633行
base_估计器=克隆(self.estimator)
文件“C:\Users\Student\Anaconda3\lib\site packages\sklearn\base.py”,第60行,克隆
%(repr(估计器),类型(估计器)))
TypeError:无法克隆对象“”(类型):它似乎不是scikit学习估计器,因为它未实现“get_params”方法。
有谁能告诉我代码有什么问题,以及如何更正它。

在这个链接中:和

您可以看到tensorflow keras有一个包装器,用于将keras模型与sklearn一起使用

因此,您必须使用
KerasClassifier(build\u fn=None,**sk\u params)
其中build\u fn应该是一个函数,您可以在该函数中对模型进行编码,该函数获取您想要调整的参数

因此,您应该按照以下方式对模型进行编码:

def getModel(optimizer):
    model = Sequential()
    model.add(Dense(2, activation='relu', input_shape=X_train.shape[1:]))
    model.add(Dense(2, activation='sigmoid'))
    model.compile(optimizer=optimizer , loss = tf.losses.categorical_crossentropy , metrics=['accuracy'])
    return model


optimizer = ['SGD', 'RMSprop', 'Adagrad', 'Adadelta', 'Adam', 'Adamax', 'Nadam']
epochs = [10, 50, 100]

param_grid = dict(epochs=epochs, optimizer=optimizer)

Kmodel = KerasClassifier(build_fn=getModel, verbose=1)
grid = GridSearchCV(estimator=Kmodel, param_grid=param_grid, scoring='accuracy', n_jobs=-1, refit='boolean')
grid_result = grid.fit(X_train, Y_train)
有关mnist上KerasClassifier的编码示例,您可以访问