我有一个看起来像这样的模型...
def baseline_model(initializer='normal',activation='relu'):
model_ = Sequential()
model_.add(Dense(400,input_dim=81,kernel_initializer=initializer,activation=activation))
model_.add(Dropout(0.5))
model_.add(Dense(200,activation=activation))
model_.add(Dropout(0.5))
model_.add(Dense(100,activation=activation))
model_.add(Dropout(0.5))
model_.add(Dense(50,activation=activation))
model_.add(Dropout(0.5))
model_.add(Dense(25,activation=activation))
model_.add(Dropout(0.5))
model_.add(Dense(1,kernel_initializer=initializer))
# Compile model
model_.compile(loss='mean_squared_error',optimizer='adam')
return model_
我已经将其放入带有标准缩放器的scikit-learn管道中...
std = StandardScaler()
nn = KerasRegressor(build_fn=baseline_model,epochs=40,batch_size=2000,verbose=1)
pl = Pipeline([('std',std),('nn',nn)])
然后我试图通过k折交叉验证来运行它...
kfold = KFold(n_splits=5)
results = cross_val_score(pl,X_train,y_train,cv=kfold)
print("Results: %.2f (%.2f) MSE" % (results.mean(),results.std()))
那行得通。但是,我希望能够访问基线模型中的那些参数。我尝试了以下方法...
params = {'nn__initializer': 'normal','nn__activation': 'softplus'}
results = cross_val_score(pl,cv=kfold,fit_params=params)
但是我收到一个以
结尾的错误TypeError: Unrecognized keyword arguments: {'initializer': 'normal','activation': 'softplus'}
我想我知道发生了什么事; scikit-learn在KerasRegressor函数而不是模型函数中寻找参数。但是我已经阅读了文档,我认为这应该可行。
sk_params同时接受模型参数和拟合参数。法律模型参数是build_fn的参数。
有人知道我将如何以这种方式通过管道访问那些build_fn参数吗?