Разница между выполнением перекрестной проверки и validation_data / validation_split в Keras - PullRequest
0 голосов
/ 07 ноября 2018

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

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 )

Но затем, читая о функции Keras 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 Ответ

0 голосов
/ 07 ноября 2018

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

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

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

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

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

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

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

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