Python 大声 cross_val_score 错误
Python Keras cross_val_score Error
我正在尝试在 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'
编辑 (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/) 在 theano
和 tensorflow
之间切换。
基本上,对于 conda 环境,您正在创建一个受保护的封装区域,您可以在其中安装和卸载您想要的东西,并且它不会影响环境之外的其他程序。您正在做的就像是删除,然后 re-install 使用最新的可用版本重新创建所有内容。
希望对您有所帮助。
具体报错是:
TypeError: get_params() got an unexpected keyword argument 'deep'
该故障由Keras 1.2.1版本的bug引入。当您使用 Keras 包装器 类(例如 KerasClassifier 和 KerasRegressor)和 scikit-learn 函数 cross_val_score().
时会发生这种情况
该错误已 identified and patched 在 Keras GitHub 项目中。
我尝试了两个修复方法:
修复 1:Roll-back 至 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,然后手动构建和安装。
有同样的问题。
将 keras 版本升级到 1.2.2 后问题消失了。
如果您使用 pip 来管理您的包,您可以使用以下命令升级 keras:
sudo pip install --upgrade 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'
编辑 (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/) 在 theano
和 tensorflow
之间切换。
基本上,对于 conda 环境,您正在创建一个受保护的封装区域,您可以在其中安装和卸载您想要的东西,并且它不会影响环境之外的其他程序。您正在做的就像是删除,然后 re-install 使用最新的可用版本重新创建所有内容。
希望对您有所帮助。
具体报错是:
TypeError: get_params() got an unexpected keyword argument 'deep'
该故障由Keras 1.2.1版本的bug引入。当您使用 Keras 包装器 类(例如 KerasClassifier 和 KerasRegressor)和 scikit-learn 函数 cross_val_score().
时会发生这种情况该错误已 identified and patched 在 Keras GitHub 项目中。
我尝试了两个修复方法:
修复 1:Roll-back 至 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,然后手动构建和安装。
有同样的问题。 将 keras 版本升级到 1.2.2 后问题消失了。
如果您使用 pip 来管理您的包,您可以使用以下命令升级 keras:
sudo pip install --upgrade keras