获取类型错误:can';t pickle_thread.RLock对象,同时在KerasClassifier()上应用cross_val_score()

获取类型错误:can';t pickle_thread.RLock对象,同时在KerasClassifier()上应用cross_val_score(),keras,scikit-learn,parameters,neural-network,tensorflow2.0,Keras,Scikit Learn,Parameters,Neural Network,Tensorflow2.0,我正在构建一个Keras多层模型,并尝试使用scikit\u learncross\u val\u score函数来测量准确性。我首先创建一个代码来生成一个模型,然后将其作为build\u fn传递给KerasClassifier,然后将生成的模型传递给cross\u val\u score,以获得准确度 def create_model(learning_rate, activation): opt = Adam(lr = learning_rate) model = Sequ

我正在构建一个
Keras
多层模型,并尝试使用
scikit\u learn
cross\u val\u score
函数来测量准确性。我首先创建一个代码来生成一个模型,然后将其作为
build\u fn
传递给
KerasClassifier
,然后将生成的模型传递给
cross\u val\u score
,以获得准确度

def create_model(learning_rate, activation):
    opt = Adam(lr = learning_rate)
    model = Sequential()
    model.add(Dense(128, input_shape = (30,), activation = activation))
    model.add(Dense(256, activation = activation))
    model.add(Dense(1, activation = 'sigmoid'))
    model.compile(optimizer = opt, loss = 'binary_crossentropy', metrics = ['accuracy'])
    return model

display(X.head(), X.shape)
    mean radius     mean texture    mean perimeter  mean area   mean smoothness     mean compactness    mean concavity  mean concave points     mean symmetry   mean fractal dimension  ...     worst radius    worst texture   worst perimeter     worst area  worst smoothness    worst compactness   worst concavity     worst concave points    worst symmetry  worst fractal dimension
0   17.99   10.38   122.80  1001.0  0.11840     0.27760     0.3001  0.14710     0.2419  0.07871     ...     25.38   17.33   184.60  2019.0  0.1622  0.6656  0.7119  0.2654  0.4601  0.11890
1   20.57   17.77   132.90  1326.0  0.08474     0.07864     0.0869  0.07017     0.1812  0.05667     ...     24.99   23.41   158.80  1956.0  0.1238  0.1866  0.2416  0.1860  0.2750  0.08902
2   19.69   21.25   130.00  1203.0  0.10960     0.15990     0.1974  0.12790     0.2069  0.05999     ...     23.57   25.53   152.50  1709.0  0.1444  0.4245  0.4504  0.2430  0.3613  0.08758
3   11.42   20.38   77.58   386.1   0.14250     0.28390     0.2414  0.10520     0.2597  0.09744     ...     14.91   26.50   98.87   567.7   0.2098  0.8663  0.6869  0.2575  0.6638  0.17300
4   20.29   14.34   135.10  1297.0  0.10030     0.13280     0.1980  0.10430     0.1809  0.05883     ...     22.54   16.67   152.20  1575.0  0.1374  0.2050  0.4000  0.1625  0.2364  0.07678

5 rows × 30 columns

display(y.head())
    Cancer
0   0
1   0
2   0
3   0
4   0

model = KerasClassifier(build_fn = create_model(learning_rate = .001, activation = 'relu'), epochs = 50, 
             batch_size = 128, verbose = 0)

kfolds = cross_val_score(model, X, y, cv = 3)
下面是我遇到的错误,我无法理解。感谢您对错误的解释和解决方法。

TypeError                                 Traceback (most recent call last)
<ipython-input-110-54727b0d29e3> in <module>
      4 
      5 # Calculate the accuracy score for each fold
----> 6 kfolds = cross_val_score(model, X, y, cv = 3)
      7 
      8 # Print the mean accuracy

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py in cross_val_score(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, error_score)
    389                                 fit_params=fit_params,
    390                                 pre_dispatch=pre_dispatch,
--> 391                                 error_score=error_score)
    392     return cv_results['test_score']
    393 

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py in cross_validate(estimator, X, y, groups, scoring, cv, n_jobs, verbose, fit_params, pre_dispatch, return_train_score, return_estimator, error_score)
    230             return_times=True, return_estimator=return_estimator,
    231             error_score=error_score)
--> 232         for train, test in cv.split(X, y, groups))
    233 
    234     zipped_scores = list(zip(*scores))

C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in __call__(self, iterable)
    919             # remaining jobs.
    920             self._iterating = False
--> 921             if self.dispatch_one_batch(iterator):
    922                 self._iterating = self._original_iterator is not None
    923 

C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in dispatch_one_batch(self, iterator)
    752             tasks = BatchedCalls(itertools.islice(iterator, batch_size),
    753                                  self._backend.get_nested_backend(),
--> 754                                  self._pickle_cache)
    755             if len(tasks) == 0:
    756                 # No more tasks available in the iterator: tell caller to stop.

C:\ProgramData\Anaconda3\lib\site-packages\joblib\parallel.py in __init__(self, iterator_slice, backend_and_jobs, pickle_cache)
    208 
    209     def __init__(self, iterator_slice, backend_and_jobs, pickle_cache=None):
--> 210         self.items = list(iterator_slice)
    211         self._size = len(self.items)
    212         if isinstance(backend_and_jobs, tuple):

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py in <genexpr>(.0)
    230             return_times=True, return_estimator=return_estimator,
    231             error_score=error_score)
--> 232         for train, test in cv.split(X, y, groups))
    233 
    234     zipped_scores = list(zip(*scores))

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\base.py in clone(estimator, safe)
     62     new_object_params = estimator.get_params(deep=False)
     63     for name, param in new_object_params.items():
---> 64         new_object_params[name] = clone(param, safe=False)
     65     new_object = klass(**new_object_params)
     66     params_set = new_object.get_params(deep=False)

C:\ProgramData\Anaconda3\lib\site-packages\sklearn\base.py in clone(estimator, safe)
     53     elif not hasattr(estimator, 'get_params') or isinstance(estimator, type):
     54         if not safe:
---> 55             return copy.deepcopy(estimator)
     56         else:
     57             raise TypeError("Cannot clone object '%s' (type %s): "

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    178                     y = x
    179                 else:
--> 180                     y = _reconstruct(x, memo, *rv)
    181 
    182     # If is its own copy, don't memoize.

C:\ProgramData\Anaconda3\lib\copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    278     if state is not None:
    279         if deep:
--> 280             state = deepcopy(state, memo)
    281         if hasattr(y, '__setstate__'):
    282             y.__setstate__(state)

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_dict(x, memo, deepcopy)
    238     memo[id(x)] = y
    239     for key, value in x.items():
--> 240         y[deepcopy(key, memo)] = deepcopy(value, memo)
    241     return y
    242 d[dict] = _deepcopy_dict

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_list(x, memo, deepcopy)
    213     append = y.append
    214     for a in x:
--> 215         append(deepcopy(a, memo))
    216     return y
    217 d[list] = _deepcopy_list

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    178                     y = x
    179                 else:
--> 180                     y = _reconstruct(x, memo, *rv)
    181 
    182     # If is its own copy, don't memoize.

C:\ProgramData\Anaconda3\lib\copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    278     if state is not None:
    279         if deep:
--> 280             state = deepcopy(state, memo)
    281         if hasattr(y, '__setstate__'):
    282             y.__setstate__(state)

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_dict(x, memo, deepcopy)
    238     memo[id(x)] = y
    239     for key, value in x.items():
--> 240         y[deepcopy(key, memo)] = deepcopy(value, memo)
    241     return y
    242 d[dict] = _deepcopy_dict

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_list(x, memo, deepcopy)
    213     append = y.append
    214     for a in x:
--> 215         append(deepcopy(a, memo))
    216     return y
    217 d[list] = _deepcopy_list

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    178                     y = x
    179                 else:
--> 180                     y = _reconstruct(x, memo, *rv)
    181 
    182     # If is its own copy, don't memoize.

C:\ProgramData\Anaconda3\lib\copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    278     if state is not None:
    279         if deep:
--> 280             state = deepcopy(state, memo)
    281         if hasattr(y, '__setstate__'):
    282             y.__setstate__(state)

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_dict(x, memo, deepcopy)
    238     memo[id(x)] = y
    239     for key, value in x.items():
--> 240         y[deepcopy(key, memo)] = deepcopy(value, memo)
    241     return y
    242 d[dict] = _deepcopy_dict

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_list(x, memo, deepcopy)
    213     append = y.append
    214     for a in x:
--> 215         append(deepcopy(a, memo))
    216     return y
    217 d[list] = _deepcopy_list

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    178                     y = x
    179                 else:
--> 180                     y = _reconstruct(x, memo, *rv)
    181 
    182     # If is its own copy, don't memoize.

C:\ProgramData\Anaconda3\lib\copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    278     if state is not None:
    279         if deep:
--> 280             state = deepcopy(state, memo)
    281         if hasattr(y, '__setstate__'):
    282             y.__setstate__(state)

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_dict(x, memo, deepcopy)
    238     memo[id(x)] = y
    239     for key, value in x.items():
--> 240         y[deepcopy(key, memo)] = deepcopy(value, memo)
    241     return y
    242 d[dict] = _deepcopy_dict

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    178                     y = x
    179                 else:
--> 180                     y = _reconstruct(x, memo, *rv)
    181 
    182     # If is its own copy, don't memoize.

C:\ProgramData\Anaconda3\lib\copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    278     if state is not None:
    279         if deep:
--> 280             state = deepcopy(state, memo)
    281         if hasattr(y, '__setstate__'):
    282             y.__setstate__(state)

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_dict(x, memo, deepcopy)
    238     memo[id(x)] = y
    239     for key, value in x.items():
--> 240         y[deepcopy(key, memo)] = deepcopy(value, memo)
    241     return y
    242 d[dict] = _deepcopy_dict

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    178                     y = x
    179                 else:
--> 180                     y = _reconstruct(x, memo, *rv)
    181 
    182     # If is its own copy, don't memoize.

C:\ProgramData\Anaconda3\lib\copy.py in _reconstruct(x, memo, func, args, state, listiter, dictiter, deepcopy)
    278     if state is not None:
    279         if deep:
--> 280             state = deepcopy(state, memo)
    281         if hasattr(y, '__setstate__'):
    282             y.__setstate__(state)

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    148     copier = _deepcopy_dispatch.get(cls)
    149     if copier:
--> 150         y = copier(x, memo)
    151     else:
    152         try:

C:\ProgramData\Anaconda3\lib\copy.py in _deepcopy_dict(x, memo, deepcopy)
    238     memo[id(x)] = y
    239     for key, value in x.items():
--> 240         y[deepcopy(key, memo)] = deepcopy(value, memo)
    241     return y
    242 d[dict] = _deepcopy_dict

C:\ProgramData\Anaconda3\lib\copy.py in deepcopy(x, memo, _nil)
    167                     reductor = getattr(x, "__reduce_ex__", None)
    168                     if reductor:
--> 169                         rv = reductor(4)
    170                     else:
    171                         reductor = getattr(x, "__reduce__", None)

TypeError: can't pickle _thread.RLock objects
TypeError回溯(最近一次调用)
在里面
4.
5#计算每次折叠的准确度分数
---->6 Kfold=交叉分数(模型,X,y,cv=3)
7.
8#打印平均精度
C:\ProgramData\Anaconda3\lib\site packages\sklearn\model\u selection\\u validation.py交叉评分(估计器、X、y、组、评分、cv、n作业、详细信息、拟合参数、发送前、错误评分)
389拟合参数=拟合参数,
390预调度=预调度,
-->391错误分数=错误分数)
392返回简历结果[“测试分数”]
393
C:\ProgramData\Anaconda3\lib\site packages\sklearn\model\u selection\\u validation.py交叉验证(估计器、X、y、组、评分、cv、n\u作业、详细信息、拟合参数、预调度、返回\u训练\u分数、返回\u估计器、错误\u分数)
230返回次数=真,返回估计数=返回估计数,
231错误分数=错误分数)
-->232列车,等速分段试验(X、y、组))
233
234 zip_分数=列表(zip(*分数))
C:\ProgramData\Anaconda3\lib\site packages\joblib\parallel.py in\uuuuu调用(self,iterable)
919#剩余工作。
920自迭代=错误
-->921如果自行调度一批(迭代器):
922 self.\u iterating=self.\u original\u iterator不是None
923
C:\ProgramData\Anaconda3\lib\site packages\joblib\parallel.py在dispatch\u one\u批处理中(self,迭代器)
752任务=批处理调用(itertools.islice(迭代器,批处理大小),
753 self.\u backend.get\u nested\u backend(),
-->754自我(pickle\u缓存)
755如果len(任务)==0:
756#迭代器中没有更多可用任务:告诉调用方停止。
C:\ProgramData\Anaconda3\lib\site packages\joblib\parallel.py in_uuuuuinit_uuuuuu(self、迭代器_u切片、后端_u和_u作业、pickle_u缓存)
208
209 def_uuuinit_uuuu(self、迭代器_切片、后端_和_作业、pickle_cache=None):
-->210 self.items=列表(迭代器)
211自身尺寸=长度(自身项目)
212如果isinstance(后端_和_作业,元组):
C:\ProgramData\Anaconda3\lib\site packages\sklearn\model\u selection\\u validation.py in(.0)
230返回次数=真,返回估计数=返回估计数,
231错误分数=错误分数)
-->232列车,等速分段试验(X、y、组))
233
234 zip_分数=列表(zip(*分数))
克隆中的C:\ProgramData\Anaconda3\lib\site packages\sklearn\base.py(估计器,安全)
62新对象参数=估计器。获取参数(深=假)
63对于名称,在新的\u对象\u params.items()中使用参数:
--->64新对象参数[名称]=克隆(参数,安全=假)
65新对象=klass(**新对象参数)
66参数集=新对象。获取参数(深=假)
克隆中的C:\ProgramData\Anaconda3\lib\site packages\sklearn\base.py(估计器,安全)
53如果不是hasattr(估计器,“获取参数”)或isinstance(估计器,类型):
54如果不安全:
--->55返回副本。深度副本(估计员)
56.其他:
57 raise TypeError(“无法克隆对象“%s”(类型%s):”
C:\ProgramData\Anaconda3\lib\copy.py在deepcopy中(x,memo,\u nil)
178 y=x
179其他:
-->180 y=_(x,备忘录,*rv)
181
182#如果是它自己的副本,不要记忆。
C:\ProgramData\Anaconda3\lib\copy.py in\u重构(x、memo、func、args、state、listiter、dicter、deepcopy)
278如果状态不是无:
279如果深:
-->280状态=深度复制(状态、备忘录)
281如果hasattr(y),\uuuu设置状态\uuuuu'):
282 y.uu设置状态(状态)
C:\ProgramData\Anaconda3\lib\copy.py在deepcopy中(x,memo,\u nil)
148复印机=_deepcopy_dispatch.get(cls)
149如果是复印机:
-->150 y=复印机(x,备忘)
151其他:
请尝试:
C:\ProgramData\Anaconda3\lib\copy.py in\u deepcopy\u dict(x,memo,deepcopy)
238备忘录[id(x)]=y
239对于键,值为x.items():
-->240 y[深度复制(键,备忘录)]=深度复制(值,备忘录)
241返回y
242 d[dict]=\u deepcopy\u dict
C:\ProgramData\Anaconda3\lib\copy.py在deepcopy中(x,memo,\u nil)
148复印机=_deepcopy_dispatch.get(cls)
149如果是复印机:
-->150 y=复印机(x,备忘)
151其他:
请尝试:
C:\ProgramData\Anaconda3\lib\copy.py在\u deepcopy\u列表中(x,memo,deepcopy)
213 append=y.append
214对于x中的a:
-->215追加(副本(备忘录))
216返回y
217 d[列表]=\u深度复制\u列表
C:\ProgramData\Anaconda3\lib\copy.py在deepcopy中(x,memo,\u nil)
178 y=x
179其他:
-->180 y=_(x,备忘录,*rv)
181
182#如果是它自己的副本,不要记忆。
C:\ProgramData\Anaconda3\lib\copy.py in\u重构(x、memo、func、args、state、listiter、dicter、deepcopy)
278如果状态不是无:
279如果深:
-->280状态=深度复制(状态、备忘录)
281如果hasattr(y),\uuuu设置状态\uuuuu'):
282 y.u设置状态__