В процессе обучения нейронных сетей одной из ключевых задач является
оценка качества модели на данных, которые не использовались при её
настройке. В Keras.js (и Keras для Python, на котором она основана)
существует два основных способа организации валидации: через параметр
validation_split и через передачу отдельного набора данных
в validation_data. Оба подхода позволяют контролировать
переобучение и корректно отслеживать метрики модели в процессе
обучения.
validation_splitОписание и принцип работы Параметр
validation_split используется для автоматического
разделения исходного набора данных на обучающую и валидационную части.
Он принимает значение в диапазоне от 0 до 1, которое определяет долю
исходных данных, выделяемую для валидации.
Ключевые особенности:
fit. Не работает с генераторами данных или
Dataset объектов.Пример использования:
const model = new KerasJS.Model({
filepath: 'model.json'
});
const xTrain = ...; // Массив признаков
const yTrain = ...; // Массив меток
model.fit(xTrain, yTrain, {
batchSize: 32,
epochs: 50,
validationSplit: 0.2
}).then(info => {
console.log('История обучения:', info);
});
В этом примере 20% данных автоматически выделяются для валидации, и Keras.js будет вычислять метрики на этой части данных после каждой эпохи.
Преимущества validation_split:
Ограничения:
validation_dataОписание и принцип работы Параметр
validation_data позволяет передавать отдельно
подготовленный набор данных для валидации. Он может быть
представлен как кортеж [xVal, yVal] или как объект с
дополнительными метками, если требуется специфическая обработка.
Ключевые особенности:
Пример использования:
const xTrain = ...;
const yTrain = ...;
const xVal = ...;
const yVal = ...;
model.fit(xTrain, yTrain, {
batchSize: 32,
epochs: 50,
validationData: [xVal, yVal]
}).then(info => {
console.log('История обучения с валидацией:', info);
});
В данном случае данные для валидации полностью независимы от обучающих данных, что делает оценку модели более точной и надежной.
Преимущества validation_data:
Ограничения:
| Параметр | Простота | Контроль | Использование с потоками | Ограничения |
|---|---|---|---|---|
validation_split |
Высокая | Низкий | Нет | Деление происходит только по последней размерности массива |
validation_data |
Средняя | Высокий | Да | Требует явного набора данных |
validation_split, особенно когда данные представлены в виде
массивов.validation_data.validation_data, так как validation_split
неприменим.validation_split
рекомендуется перемешивать данные заранее, чтобы
избежать систематической ошибки при разделении.При использовании любого из подходов Keras.js автоматически вычисляет точность, потерю и другие метрики на валидационном наборе после каждой эпохи. Полученные значения доступны в объекте истории обучения:
model.fit(...).then(info => {
console.log(info.history.loss); // Потери на обучении
console.log(info.history.val_loss); // Потери на валидации
console.log(info.history.accuracy); // Точность на обучении
console.log(info.history.val_accuracy); // Точность на валидации
});
Эти данные позволяют строить графики обучения, отслеживать переобучение и корректировать гиперпараметры модели.
Иногда целесообразно комбинировать оба метода: использовать
validation_split для быстрой оценки на небольших
данных и validation_data для финальной
проверки модели на полностью независимом наборе. Такой подход
обеспечивает баланс между скоростью эксперимента и достоверностью
метрик.