Разница между выполнением перекрестной проверки и 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 не будет выполнять проверку при обучении модели. Однако обратите внимание, что, как я упоминал выше, процедура поиска по сетке будет выполнять проверку для лучшей оценки производительности модели с конкретным набором параметров.