如何通过scikit-learn管道将build_fn参数传递给keras模型

我有一个看起来像这样的模型...

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参数吗?

KerasRegressor Documentation

i459612852 回答:如何通过scikit-learn管道将build_fn参数传递给keras模型

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3150901.html

大家都在问