如何将参数传递给 Scikit-Learn Keras 模型函数 [英] How to pass a parameter to Scikit-Learn Keras model function
本文介绍了如何将参数传递给 Scikit-Learn Keras 模型函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码,使用 Keras Scikit-Learn Wrapper,效果很好:
I have the following code, using Keras Scikit-Learn Wrapper, which work fine:
from keras.models import Sequential
from keras.layers import Dense
from sklearn import datasets
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import cross_val_score
import numpy as np
def create_model():
# create model
model = Sequential()
model.add(Dense(12, input_dim=4, init='uniform', activation='relu'))
model.add(Dense(6, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
def main():
"""
Description of main
"""
iris = datasets.load_iris()
X, y = iris.data, iris.target
NOF_ROW, NOF_COL = X.shape
# evaluate using 10-fold cross validation
seed = 7
np.random.seed(seed)
model = KerasClassifier(build_fn=create_model, nb_epoch=150, batch_size=10, verbose=0)
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=seed)
results = cross_val_score(model, X, y, cv=kfold)
print(results.mean())
# 0.666666666667
if __name__ == '__main__':
main()
pima-indians-diabetes.data
可以下载 此处.
The pima-indians-diabetes.data
can be downloaded here.
现在我想要做的是通过以下方式将值NOF_COL
传递给create_model()
函数的参数
Now what I want to do is to pass a value NOF_COL
into a parameter of create_model()
function the following way
model = KerasClassifier(build_fn=create_model(input_dim=NOF_COL), nb_epoch=150, batch_size=10, verbose=0)
使用如下所示的 create_model()
函数:
With the create_model()
function that looks like this:
def create_model(input_dim=None):
# create model
model = Sequential()
model.add(Dense(12, input_dim=input_dim, init='uniform', activation='relu'))
model.add(Dense(6, init='uniform', activation='relu'))
model.add(Dense(1, init='uniform', activation='sigmoid'))
# Compile model
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return model
但它没有给出这个错误:
But it fails giving this error:
TypeError: __call__() takes at least 2 arguments (1 given)
正确的做法是什么?
推荐答案
您可以在 KerasClassifier
构造函数中添加一个 input_dim
关键字参数:
You can add an input_dim
keyword argument to the KerasClassifier
constructor:
model = KerasClassifier(build_fn=create_model, input_dim=5, nb_epoch=150, batch_size=10, verbose=0)
这篇关于如何将参数传递给 Scikit-Learn Keras 模型函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文