Python Keras cross_val_score 错误

10
我想翻译这个关于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'

2
请把你的代码粘贴在这里! - ᴀʀᴍᴀɴ
1
我编辑了问题。基本上,我只是从链接中的教程复制粘贴。 - user7454972
1
请发布完整的回溯信息,而不仅仅是最后一个错误消息。 - Hannes Ovrén
1
好的,我再次编辑了问题。 - user7454972
1
我在将Keras更新为1.2.1版本后遇到了相同的问题,在先前的版本中,我可以无问题地进行交叉验证。 - David
3个回答

15

报告的具体错误为:

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

由于Keras版本1.2.1中的一个错误,导致问题出现。当您使用Keras包装器类(如KerasClassifier和KerasRegressor)以及scikit-learn函数cross_val_score()时,就会出现此问题。

该错误已经被识别并在Keras GitHub项目中进行了修补(identified and patched)。

有两种解决方法:

解决方法1:回滚至Keras版本1.2.0。

输入:

sudo pip install keras==1.2.0

修复2: 使用该修复程序对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检出Keras,然后手动构建和安装。

2
编辑 (2017年1月25日):这个解决方案可行是因为conda环境安装的Keras版本是1.1.1,而不是有缺陷的版本(1.2.1)。Jason 的解决方案是正确的。如果我的解决方案可以帮到你,我在此留下,但是 Jason 的解决方案才是实际的解决方案。

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

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

您可以通过 Keras 的后端来切换 theanotensorflow (https://keras.io/backend/)。

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

希望能对你有所帮助。


0

我曾经遇到过同样的问题。 将keras版本升级到1.2.2后,问题就解决了。

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

sudo pip install --upgrade keras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接