收到TypeError:在KerasClassifier()上应用cross_val_score()时,无法腌制_thread.RLock对象

时间:2020-09-28 08:56:17

标签: keras scikit-learn parameters neural-network tensorflow2.0

我正在构建Keras多层模型,并尝试使用scikit_learn cross_val_score函数来测量准确性。我首先创建了代码以生成模型,然后将其作为KerasClassifier传递给build_fn,然后将结果模型传递给cross_val_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

0 个答案:

没有答案