Разделите данные для оптимального обучения нейронной сети

В этом разделе представлена часть типового многослойного сетевого рабочего процесса. Для получения дополнительной информации и других шагов см. Multilayer Shallow Neural Networks and Backpropagation Training.

При обучении многослойных сетей общая практика состоит в том, чтобы сначала разделить данные на три подмножества. Первым подмножеством является набор обучающих данных, который используется для вычисления градиента и обновления весов и смещений сети. Вторым подмножеством является набор валидации. Ошибка на наборе валидации отслеживается в процессе обучения. Ошибка валидации обычно уменьшается на начальной фазе обучения, как и ошибка набора обучающих данных. Однако, когда сеть начинает перегружать данные, ошибка на наборе валидации обычно начинает расти. Веса и смещения сети сохраняются как минимум при ошибке набора валидации. Этот метод обсуждается более подробно в Улучшении Обобщения Неглубокой Нейронной Сети и Избегайте Избыточного Оснащения.

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

Предусмотрены четыре функции для деления данных на наборы для обучения, валидации и тестирования. Они есть dividerand (по умолчанию), divideblock, divideint, и divideind. Деление данных обычно выполняется автоматически при обучении сети.

Функция

Алгоритм

dividerand

Разделите данные случайным образом (по умолчанию)

divideblock

Разделите данные на смежные блоки

divideint

Разделите данные с помощью чередующегося выбора

divideind

Разделите данные по индексам

Вы можете получить доступ или изменить функцию деления для вашей сети с помощью этого свойства:

net.divideFcn

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

net.divideParam

Функция деления доступна автоматически всякий раз, когда сеть обучена, и используется, чтобы разделить данные на подмножества обучения, валидации и проверки. Если net.divideFcn установлено в 'dividerand' (по умолчанию), затем данные случайным образом делятся на три подмножества с помощью параметров деления net.divideParam.trainRatio, net.divideParam.valRatio, и net.divideParam.testRatio. Часть данных, которая помещается в набор обучающих данных trainRatio/ (trainRatio+valRatio+testRatio), с аналогичной формулой для двух других наборов. Коэффициенты по умолчанию для обучения, проверки и валидации составляют 0,7, 0,15 и 0,15 соответственно.

Если net.divideFcn установлено в 'divideblock', затем данные разделяются на три подмножества с использованием трех смежных блоков исходного набора данных (обучение взятие первого блока, валидация второго и тестирование третьего). Доля исходных данных, которая входит в каждый подмножество, определяется теми же тремя параметрами деления, используемыми для dividerand.

Если net.divideFcn установлено в 'divideint'затем данные делятся перемежающимся способом, как при раздаче колоды карт. Это делается так, чтобы различные проценты данных уходили в три подмножества. Доля исходных данных, которая входит в каждый подмножество, определяется теми же тремя параметрами деления, используемыми для dividerand.

Когда net.divideFcn установлено в 'divideind'данные делятся на индексы. Индексы для трех подмножеств определяются параметрами деления net.divideParam.trainInd, net.divideParam.valInd и net.divideParam.testInd. Назначением по умолчанию для этих индексов является массив null, поэтому при использовании этой опции необходимо задать индексы.