Как передать параметры build_fn в модель keras через конвейер scikit-learn - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть модель, которая выглядит следующим образом ...

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, kernel_initializer=initializer, activation=activation))
    model_.add(Dropout(0.5))
    model_.add(Dense(100, kernel_initializer=initializer, activation=activation))
    model_.add(Dropout(0.5))
    model_.add(Dense(50, kernel_initializer=initializer, activation=activation))
    model_.add(Dropout(0.5))
    model_.add(Dense(25, kernel_initializer=initializer, 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)])

А потом я пытаюсь запустить его через к-кратную перекрестную проверку ...

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()))

И это работает. Но я хотел бы иметь возможность получить доступ к этим параметрам в baseline_model. Я попробовал следующее ...

params = {'nn__initializer': 'normal', 'nn__activation': 'softplus'}
results = cross_val_score(pl, X_train, y_train, cv=kfold, fit_params=params)

Но я получаю ошибку, которая заканчивается на

TypeError: Unrecognized keyword arguments: {'initializer': 'normal', 'activation': 'softplus'}

Ну, я думаю, я знаю, что происходит;scikit-learn ищет параметры в функции KerasRegressor, а не в функции модели. Но я прочитал документацию и думаю, что это должно сработать.

sk_params принимает как параметры модели, так и параметры подгонки. Допустимые параметры модели - это аргументы build_fn.

Кто-нибудь знает, как я мог бы получить доступ к этим параметрам build_fn через конвейер таким образом?

Документация KerasRegressor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...