KerasRegressor не может клонировать объект - не знаю, почему возникает эта ошибка - PullRequest
0 голосов
/ 08 июля 2020

Я создаю базовую модель c Keras с оболочкой scikit learn, чтобы я мог выполнять случайный поиск перекрестных значений для оптимизации параметров. Код следующий:

def build_model(n_hidden=1, n_neurons=30, learning_rate=3e-3, input_shape=[8]):
     model = models.Sequential()
     model.add(layers.InputLayer(input_shape=input_shape))
     for layer in range(n_hidden):
          model.add(layers.Dense(n_neurons, activation="relu"))
     model.add(layers.Dense(1))
     optimizer = optimizers.SGD(lr=learning_rate)
     model.compile(loss="mse", optimizer=optimizer)
     return model

keras_reg = wrappers.scikit_learn.KerasRegressor(build_fn=build_model)
keras_reg.fit(X_train, y_train, epochs=100, validation_data=(X_valid, y_valid), callbacks= 
              [callbacks.EarlyStopping(patience=10)])
mse_test = keras_reg.score(X_test, y_test)
y_pred = keras_reg.predict(X_new)

from scipy.stats import reciprocal
from sklearn.model_selection import RandomizedSearchCV

param_distribs = {
    "n_hidden": [0, 1, 2, 3],
    "n_neurons": (np.arange(1,100)),
    "learning_rate": (reciprocal(3e-4, 3e-2))
}

rnd_search_cv = RandomizedSearchCV(keras_reg, param_distribs, n_iter=10, cv=3)
rnd_search_cv.fit(X_train, y_train, epochs=100, validation_data=(X_valid, y_valid), callbacks= 
                 [callbacks.EarlyStopping(patience=10)])

Я получаю сообщение об ошибке в последней строке:

Traceback (последний вызов последним): файл «ml_hyperparams.py», строка 49, в rnd_search_cv.fit (X_train, y_train, epochs = 100, validation_data = (X_valid, y_valid), callbacks = [callbacks.EarlyStopping (терпение = 10)])

Файл "C: \ Users \ Jesus \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sklearn \ model_selection_search.py ​​", строка 736, соответствует ** self.best_params_)) File" C: \ Users \ AppData \ Roaming \ Python \ Python37 \ site- packages \ sklearn \ base.py ", строка 82, в клоне (оценка, имя))

RuntimeError: невозможно клонировать объект , поскольку конструктор либо не устанавливает, либо изменяет параметр learning_rate

Я где-то читал, что это обычно происходит, когда params dict имеет вложенный список и что его можно исправить с помощью кортежей, следовательно, круглых скобок, но, очевидно, это не работай. Что наиболее необычно в этом, так это то, что я дословно копирую этот код из учебника Орелиена Жерона «Практическое машинное обучение», поэтому я не понимаю, почему возникает эта ошибка. Любая помощь приветствуется, спасибо!

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