Keras:TypeError:不能用KerasClassifier腌制_thread.lock对象

时间:2018-01-17 14:13:43

标签: python tensorflow neural-network deep-learning keras

$str = "THIS IS A Sentence that should be TAKEN Care of";
$str_array = explode(" ", $str);
  foreach ($str_array as $testcase =>$str1) {
    //Check the first word
    if ($testcase ==0 && ctype_upper($str1)) {
      echo ucfirst(strtolower($str1))." ";
    }
    //Convert every other upercase to lowercase
    elseif( ctype_upper($str1)) {
      echo strtolower($str1)." ";
    }
    //Do nothing with lowercase
    else {
      echo $str1." ";
    }
  }

引发错误:

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)

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:7)

更改此行:

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

请注意,func1 未被称为。来自文档:

  

build_fn:可调用函数或类实例

     

build_fn应该构造,编译并返回一个Keras模型      然后将用于拟合/预测。以下之一      三个值可以传递给build_fn

     
      
  1. 功能

  2.   
  3. 实现__call__方法

  4. 的类的实例   
  5. 无。这意味着您实现了一个继承自它们的类   KerasClassifierKerasRegressor__call__方法   然后将当前类视为默认build_fn
  6.