【问题标题】:Python Keras cross_val_score ErrorPython Keras cross_val_score 错误
【发布时间】:2017-06-07 09:19:20
【问题描述】:

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

很遗憾,我遇到了无法修复的错误。 如果我只是复制并粘贴代码,则在运行此 sn-p 时会出现以下错误:

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'

【问题讨论】:

  • 请在此处粘贴您的整个代码!
  • 我编辑了这个问题。基本上我只是从链接中的教程中复制粘贴
  • 请发布完整的回溯,而不仅仅是最后一条错误消息。
  • 好的,我再次编辑了问题
  • 在将 Keras 更新到 1.2.1 版本后,我遇到了同样的问题,之前的版本我可以毫无问题地进行交叉验证。

标签: python scikit-learn regression keras


【解决方案1】:

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

如果你使用 pip 来管理你的包,你可以使用以下命令升级 keras:

sudo pip install --upgrade keras

【讨论】:

    【解决方案2】:

    编辑(25/01/2017): 此解决方案有效,因为在 conda 环境中安装的 Keras 版本是 1.1.1,而不是有错误的版本(1.2 .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 环境,您正在创建一个受保护的封装区域,您可以在其中安装和卸载所需的内容,并且不会影响环境之外的其他程序。您所做的就像删除并重新安装所有内容,使用最新的工作版本。

    希望对你有帮助。

    【讨论】:

      【解决方案3】:

      具体报错是:

      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 签出 Keras,然后手动构建和安装。

      【讨论】:

        猜你喜欢
        • 2014-12-17
        • 2017-08-28
        • 2018-06-09
        • 2017-08-23
        • 2017-12-12
        • 2021-03-24
        • 2021-06-17
        • 2021-03-14
        • 2019-06-29
        相关资源
        最近更新 更多