Keras:类型错误:无法使用 KerasClassifier 腌制 _thread.lock 对象 [英] Keras: TypeError: can't pickle _thread.lock objects with KerasClassifier
本文介绍了Keras:类型错误:无法使用 KerasClassifier 腌制 _thread.lock 对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
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)
抛出错误:
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:UsersJoishAnaconda3envsprojectlibsite-packagessklearnmodel_selection\_validation.py", line 342, in cross_val_score
pre_dispatch=pre_dispatch)
File "C:UsersJoishAnaconda3envsprojectlibsite-packagessklearnmodel_selection\_validation.py", line 206, in cross_validate
for train, test in cv.split(X, y, groups))
File "C:UsersJoishAnaconda3envsprojectlibsite-packagessklearnexternalsjoblibparallel.py", line 779, in __call__
while self.dispatch_one_batch(iterator):
File "C:UsersJoishAnaconda3envsprojectlibsite-packagessklearnexternalsjoblibparallel.py", line 620, in dispatch_one_batch
tasks = BatchedCalls(itertools.islice(iterator, batch_size))
File "C:UsersJoishAnaconda3envsprojectlibsite-packagessklearnexternalsjoblibparallel.py", line 127, in __init__
self.items = list(iterator_slice)
File "C:UsersJoishAnaconda3envsprojectlibsite-packagessklearnmodel_selection\_validation.py", line 206, in <genexpr>
for train, test in cv.split(X, y, groups))
File "C:UsersJoishAnaconda3envsprojectlibsite-packagessklearnase.py", line 62, in clone
new_object_params[name] = clone(param, safe=False)
File "C:UsersJoishAnaconda3envsprojectlibsite-packagessklearnase.py", line 53, in clone
return copy.deepcopy(estimator)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 180, in deepcopy
y = _reconstruct(x, memo, *rv)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 280, in _reconstruct
state = deepcopy(state, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 240, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 215, in _deepcopy_list
append(deepcopy(a, memo))
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 180, in deepcopy
y = _reconstruct(x, memo, *rv)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 280, in _reconstruct
state = deepcopy(state, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 240, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 215, in _deepcopy_list
append(deepcopy(a, memo))
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 180, in deepcopy
y = _reconstruct(x, memo, *rv)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 280, in _reconstruct
state = deepcopy(state, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 240, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 180, in deepcopy
y = _reconstruct(x, memo, *rv)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 280, in _reconstruct
state = deepcopy(state, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 240, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 180, in deepcopy
y = _reconstruct(x, memo, *rv)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 280, in _reconstruct
state = deepcopy(state, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 240, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 180, in deepcopy
y = _reconstruct(x, memo, *rv)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 280, in _reconstruct
state = deepcopy(state, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 150, in deepcopy
y = copier(x, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 240, in _deepcopy_dict
y[deepcopy(key, memo)] = deepcopy(value, memo)
File "C:UsersJoishAnaconda3envsprojectlibcopy.py", line 169, in deepcopy
rv = reductor(4)
TypeError: can't pickle _thread.lock objects
我该如何解决这个问题?
How do I solve this?
推荐答案
更改这一行:
classfier = KerasClassifier(build_fn=func1, batch_size=10, epochs=100, verbose=0)
请注意,func1
未调用.来自文档:
Note that func1
is not called. From the documentation:
build_fn
:可调用的函数或类实例
build_fn
: callable function or class instance
build_fn
应该构造、编译并返回一个 Keras 模型,它然后将用于拟合/预测.以下之一可以将三个值传递给 build_fn
:
The build_fn
should construct, compile and return a Keras model, which
will then be used to fit/predict. One of the following
three values could be passed to build_fn
:
一个函数
A function
一个实现__call__
方法的类的实例
An instance of a class that implements the __call__
method
这篇关于Keras:类型错误:无法使用 KerasClassifier 腌制 _thread.lock 对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文