Разница между выполнением перекрестной проверки и validation_data/validation_split в Keras

Сначала я разбил набор данных на поезд и протестировал, например:

X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.4, random_state=999)

Я тогда использую GridSearchCV с перекрестной проверкой, чтобы найти наиболее эффективную модель:

validator  = GridSearchCV(estimator=clf, param_grid=param_grid, scoring="accuracy", cv=cv)

И, делая это, я имею:

Модель обучается с использованием k-1 складок в качестве обучающих данных; Полученная модель проверяется на оставшейся части данных ( scikit-learn.org)

Но тогда, когда читал о Керасе fit Кроме того, документ вводит еще 2 условия:

validation_split: с плавающей точкой от 0 до 1. Доля данных обучения, которые будут использоваться в качестве данных проверки. Модель выделит эту часть обучающих данных, не будет обучаться им и оценит потери и любые метрики модели на этих данных в конце каждой эпохи. Данные проверки выбираются из последних выборок в предоставленных данных x и y перед перетасовкой.

validation_data: кортеж (x_val, y_val) или кортеж (x_val, y_val, val_sample_weights), по которым оцениваются потери и любые метрики модели в конце каждой эпохи. Модель не будет обучаться на этих данных. validation_data переопределит validation_split.

Из того, что я понимаю, validation_split (быть отменено validation_data) будет использоваться в качестве неизменного набора данных проверки, в то время как в каждом из этапов перекрестной проверки задано время удержания, установленное в изменениях перекрестной проверки.

  • Первый вопрос: нужно ли использовать validation_split или же validation_data так как я уже делаю перекрестную проверку?
  • Второй вопрос: если это не нужно, тогда я должен установить validation_split а также validation_data до 0 и None соответственно?

    grid_result = validator.fit(train_images, train_labels, validation_data=None, validation_split=0)
    
  • Вопрос 3: Если я сделаю это, что произойдет во время обучения, будет ли Керас просто игнорировать этап проверки?

  • Вопрос 4: validation_split принадлежать k-1 folds или hold-out fold или он будет считаться "тестовым набором" (как в случае cross validation ), который никогда не будет использован для обучения модели.

1 ответ

Решение

Проверка выполняется для того, чтобы убедиться, что модель не подходит для набора данных и будет обобщена для новых данных. Поскольку при поиске в таблице параметров вы также выполняете проверку, нет необходимости выполнять этап проверки самой моделью Keras во время обучения. Поэтому, чтобы ответить на ваши вопросы:

необходимо использовать validation_split или validation_data, так как я уже делаю перекрестную проверку?

Нет, как я уже говорил выше.

если это не является необходимым, тогда я должен установить validation_split и validation_data в 0 и None, соответственно?

Нет, так как по умолчанию проверка не выполняется в Keras (то есть по умолчанию мы имеем validation_split=0.0, validation_data=None в fit() метод).

Если я сделаю это, что произойдет во время обучения, Керас просто проигнорирует шаг проверки?

Да, Keras не будет выполнять проверку при обучении модели. Однако обратите внимание, что, как я упоминал выше, процедура поиска по сетке будет выполнять проверку для лучшей оценки производительности модели с конкретным набором параметров.

Другие вопросы по тегам