Python Keras cross_val_score错误

时间:2017-01-22 21:59:49

标签: python scikit-learn regression keras

我正在尝试关于回归的关于keras的这个小教程: http://machinelearningmastery.com/regression-tutorial-keras-deep-learning-library-python/

不幸的是我遇到了一个我无法解决的错误。 如果我只是复制并粘贴代码,运行此代码段时会出现以下错误:

import numpy
import pandas
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import KFold
from sklearn.preprocessing import StandardScaler
from sklearn.pipeline import Pipeline
# load dataset
dataframe = pandas.read_csv("housing.csv", delim_whitespace=True,header=None)
dataset = dataframe.values
# split into input (X) and output (Y) variables
X = dataset[:,0:13]
Y = dataset[:,13]
# define base mode
def baseline_model():
    # create model
    model = Sequential()
    model.add(Dense(13, input_dim=13, init='normal', activation='relu'))
    model.add(Dense(1, init='normal'))
    # Compile model
    model.compile(loss='mean_squared_error', optimizer='adam')
    return model
# fix random seed for reproducibility
seed = 7
numpy.random.seed(seed)
# evaluate model with standardized dataset
estimator = KerasRegressor(build_fn=baseline_model, nb_epoch=100,batch_size=5, verbose=0)

kfold = KFold(n_splits=10, random_state=seed)
results = cross_val_score(estimator, X, Y, cv=kfold)

错误说:

TypeError: get_params() got an unexpected keyword argument 'deep'

感谢您的帮助。

以下是完整的追溯:

Traceback (most recent call last):


File "<stdin>", line 1, in <module>
  File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py", line 140, in cross_val_score
    for train, test in cv_iter)
  File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\externals\joblib\parallel.py", line 758, in __call__
    while self.dispatch_one_batch(iterator):
  File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\externals\joblib\parallel.py", line 603, in dispatch_one_batch
    tasks = BatchedCalls(itertools.islice(iterator, batch_size))
  File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\externals\joblib\parallel.py", line 127, in __init__
    self.items = list(iterator_slice)
  File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\model_selection\_validation.py", line 140, in <genexpr>
    for train, test in cv_iter)
  File "C:\Users\myname\Anaconda3\lib\site-packages\sklearn\base.py", line 67, in clone
    new_object_params = estimator.get_params(deep=False)
TypeError: get_params() got an unexpected keyword argument 'deep'

3 个答案:

答案 0 :(得分:15)

报告的具体错误是:

TypeError: get_params() got an unexpected keyword argument 'deep'

故障是由Keras版本1.2.1中的错误引入的。当您使用Keras包装类(例如KerasClassifier和KerasRegressor)和scikit-learn函数cross_val_score()时会发生这种情况。

Keras GitHub项目中的错误是identifiedpatched

我尝试过两种修复方法:

修复1:回滚到Keras版本1.2.0。

类型:

sudo pip install keras==1.2.0

修复2:使用修复程序的Monkey-patch Keras。

导入后,但在您的工作类型之前:

from keras.wrappers.scikit_learn import BaseWrapper
import copy

def custom_get_params(self, **params):
    res = copy.deepcopy(self.sk_params)
    res.update({'build_fn': self.build_fn})
    return res

BaseWrapper.get_params = custom_get_params

这两个修复程序都适用于我(Python 2和3 / sklearn 0.18.1)。

其他一些候选修正:

  • 等待下一版Keras(1.2.2)发布。
  • 从Github Checkout Keras然后手动构建和安装。

答案 1 :(得分:1)

编辑(25/01/2017): 此解决方案有效,因为在conda环境中,安装的Keras版本是1.1.1,而不是带有错误的版本(1.2) 0.1)。杰森的解决方案是正确的。我离开这里是我的解决方案,以防它可以帮助,但Jason的解决方案是实际的解决方案。

升级Keras(1.2.1)后我遇到了同样的问题。我认为问题在于软件的版本。我建议你安装Anaconda,然后创建一个安装tensorflow的新环境。基本上按照以下步骤操作:https://www.tensorflow.org/get_started/os_setup#anaconda_installation

激活环境并使用conda选项进行安装。然后,您可以安装其他您需要的库。激活环境tensorflow后,您可以使用conda install name_of_the_package安装。

您可以使用Keras的后端(https://keras.io/backend/)在theanotensorflow之间进行更改。

基本上,通过conda环境,您可以创建一个受保护的封装区域,您可以在其中安装和卸载所需的内容,并且它不会影响您在环境之外的其他程序。您正在做的就像删除并重新安装所有内容,使用最新版本和工作版本。

希望它有所帮助。

答案 2 :(得分:0)

有同样的问题。 将keras版本升级到1.2.2后,问题就消失了。

如果使用pip管理软件包,可以使用以下命令升级keras:

sudo pip install --upgrade keras