exponenta event banner

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

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

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

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

Для разделения данных на обучающие, валидационные и тестовые наборы предусмотрены четыре функции. Они являются 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, поэтому при использовании этого параметра необходимо задать индексы.