Как работает параметр validation_split функции подбора Keras?

17

Разделение валидации в Keras Последовательная функция подбора модели документирована следующим образом на https://keras.io/models/sequential/ :

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

Обратите внимание на последнюю строку:

Данные проверки выбираются из последних выборок в предоставленных данных x и y перед перетасовкой.

Означает ли это, что данные проверки всегда фиксированы и взяты из нижней части основного набора данных?

Есть ли способ сделать случайный выбор данной доли данных из основного набора данных?

rnso
источник

Ответы:

17

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

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

Однако для некоторых наборов данных получение последних нескольких экземпляров бесполезно, особенно если набор данных перегруппирован на основе класса. Тогда распределение ваших классов будет искажено. Таким образом, вам понадобится какой-то случайный способ извлечь подмножество данных, чтобы получить сбалансированное распределение классов в наборе обучения и проверки. Для этого мне всегда нравится использовать функцию sklearn следующим образом

from sklearn.model_selection import train_test_split

# Split the data
x_train, x_valid, y_train, y_valid = train_test_split(data, labels, test_size=0.33, shuffle= True)

Это хорошая простая в использовании функция, которая делает то, что вы хотите. Переменные dataи labelsявляются стандартными матрицами с первым измерением, являющимся экземплярами.

JahKnows
источник
1
Я не имел в виду получать разные тестовые наборы после каждой эпохи. Я спрашивал о получении данных из конца набора данных, так как многие наборы данных могут быть упорядочены в соответствии с классом (как вы упомянули). Я знаю об этом, train_test_splitи теперь вы подтверждаете, что это лучший метод, поскольку он будет случайным образом получать данные тестирования / проверки из набора данных.
18:54
@rnso, к сожалению, Keras не предоставляет такую ​​возможность. Я думаю, что это не совсем в рамках того, что они хотят предложить. Сделало бы реализацию немного запутанной, имея 2 разных метода ввода со случайным в названии.
JahKnows
Разве вы не смешали определение данных проверки и тестирования, используя этот train_test_spli?
багурис
Если вы используете shuffleпараметр, вы бы также использовали shuffleв модели .fitдля кераса?
Shamoon