简体   繁体   English

Keras:TypeError:无法使用KerasClassifier来pickle _thread.lock对象

[英]Keras: TypeError: can't pickle _thread.lock objects with KerasClassifier

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dataset = pd.read_csv("Churn_Modelling.csv")
X = dataset.iloc[:,3:13].values
Y = dataset.iloc[:,13:].values

from sklearn.preprocessing import OneHotEncoder,LabelEncoder,StandardScaler

enc1=LabelEncoder()
enc2=LabelEncoder()
X[:,1] = enc1.fit_transform(X[:,1])
X[:,2] = enc2.fit_transform(X[:,2])

one = OneHotEncoder(categorical_features=[1])
X=one.fit_transform(X).toarray()

X = X[:,1:]

from sklearn.model_selection import train_test_split
Xtrain,Xtest,Ytrain,Ytest = train_test_split(X,Y,random_state=0,test_size=0.2)

scale = StandardScaler()
scale.fit_transform(Xtrain)
scale.transform(Xtest)

from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score 
from keras.models import Sequential
from keras.layers import Dense

def func1():
    net = Sequential()
    net.add(Dense(input_dim=11,units=6,activation="relu",kernel_initializer='uniform'))
    net.add(Dense(units=6,activation="relu",kernel_initializer='uniform'))
    net.add(Dense(units=1,activation="sigmoid",kernel_initializer='uniform'))
    net.compile(optimizer='adam',metrics=['accuracy'],loss='binary_crossentropy')

    return net

classfier = KerasClassifier(build_fn=func1(),batch_size=10, epochs=100)
cross = cross_val_score(estimator=classfier, X=Xtrain, y=Ytrain, cv=10 , n_jobs=-1)

Throws the error: 抛出错误:

Traceback (most recent call last):

  File "<ipython-input-7-e80e82960eb9>", line 1, in <module>
    cross = cross_val_score(estimator=classfier, X=Xtrain, y=Ytrain, cv=10 , n_jobs=-1)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\model_selection\_validation.py", line 342, in cross_val_score
    pre_dispatch=pre_dispatch)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\model_selection\_validation.py", line 206, in cross_validate
    for train, test in cv.split(X, y, groups))

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\externals\joblib\parallel.py", line 779, in __call__
    while self.dispatch_one_batch(iterator):

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\externals\joblib\parallel.py", line 620, in dispatch_one_batch
    tasks = BatchedCalls(itertools.islice(iterator, batch_size))

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\externals\joblib\parallel.py", line 127, in __init__
    self.items = list(iterator_slice)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\model_selection\_validation.py", line 206, in <genexpr>
    for train, test in cv.split(X, y, groups))

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\base.py", line 62, in clone
    new_object_params[name] = clone(param, safe=False)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\site-packages\sklearn\base.py", line 53, in clone
    return copy.deepcopy(estimator)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 215, in _deepcopy_list
    append(deepcopy(a, memo))

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 215, in _deepcopy_list
    append(deepcopy(a, memo))

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 180, in deepcopy
    y = _reconstruct(x, memo, *rv)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 280, in _reconstruct
    state = deepcopy(state, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 150, in deepcopy
    y = copier(x, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 240, in _deepcopy_dict
    y[deepcopy(key, memo)] = deepcopy(value, memo)

  File "C:\Users\Joish\Anaconda3\envs\project\lib\copy.py", line 169, in deepcopy
    rv = reductor(4)

TypeError: can't pickle _thread.lock objects

How do I solve this? 我该如何解决这个问题?

Change this line: 改变这一行:

classfier = KerasClassifier(build_fn=func1, batch_size=10, epochs=100, verbose=0)

Note that func1 is not called . 请注意, 不会调用 func1 From the documentation: 从文档:

build_fn : callable function or class instance build_fn :可调用函数或类实例

The build_fn should construct, compile and return a Keras model, which will then be used to fit/predict. build_fn应该构造,编译并返回一个Keras模型,然后将其用于拟合/预测。 One of the following three values could be passed to build_fn : 可以将以下三个值之一传递给build_fn

  1. A function 一个功能

  2. An instance of a class that implements the __call__ method 实现__call__方法的类的实例

  3. None. 没有。 This means you implement a class that inherits from either KerasClassifier or KerasRegressor . 这意味着您实现了一个继承自KerasClassifierKerasRegressor The __call__ method of the present class will then be treated as the default build_fn . 然后将本类的__call__方法视为默认的build_fn

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 Keras模型:TypeError:无法腌制_thread.lock对象 - Keras model: TypeError: can't pickle _thread.lock objects Keras 2,TypeError:无法pickle _thread.lock对象 - Keras 2, TypeError: can't pickle _thread.lock objects TypeError:训练keras模型时无法pickle _thread.lock对象 - TypeError: can't pickle _thread.lock objects when training keras model Keras Lambda图层和变量:“TypeError:无法pickle _thread.lock对象” - Keras Lambda layer and variables : “TypeError: can't pickle _thread.lock objects” 收到TypeError:无法腌制_thread.lock对象 - Getting TypeError: can't pickle _thread.lock objects 使用 Queue() 进行多处理:TypeError: can't pickle _thread.lock objects - Multiprocessing with Queue(): TypeError: can't pickle _thread.lock objects Joblib错误:TypeError:无法腌制_thread.lock对象 - Joblib error: TypeError: can't pickle _thread.lock objects TypeError:从Keras-Openface项目中转储nn4_small2_pretrained模型时无法腌制_thread.lock对象 - TypeError: can't pickle _thread.lock objects while dumping nn4_small2_pretrained model from Keras-Openface Project 在将Queue传递给子进程中的线程时,如何解决“ TypeError:无法腌制_thread.lock对象” - How to fix 'TypeError: can't pickle _thread.lock objects' when passing a Queue to a thread in a child process 当joblib具有&gt; = 2个作业时,keras.wrappers无法使_thread.lock对象腌制 - keras.wrappers can't pickle _thread.lock objects when joblib has >= 2 jobs
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM