В этом разделе представлена часть типичного многоуровневого сетевого рабочего процесса. Дополнительные сведения и другие шаги см. в разделе Многоуровневые неглубокие нейронные сети и обучение обратному распространению.
При обучении многоуровневым сетям общая практика состоит в том, чтобы сначала разделить данные на три подмножества. Первым подмножеством является обучающий набор, который используется для вычисления градиента и обновления весов и смещений сети. Вторым подмножеством является набор проверки. Ошибка в наборе проверки отслеживается в процессе обучения. Ошибка проверки подлинности обычно уменьшается на начальном этапе обучения, как и ошибка набора обучения. Однако когда сеть начинает перегружать данные, ошибка в наборе проверки обычно начинает увеличиваться. Веса сети и смещения сохраняются на минимуме ошибки набора проверки. Этот метод более подробно обсуждается в документе «Улучшение неглубокого обобщения нейронной сети и предотвращение переоснащения».
Ошибка тестового набора не используется во время обучения, но используется для сравнения различных моделей. Также полезно построить график ошибки тестового набора во время процесса обучения. Если ошибка в тестовом наборе достигает минимума при значимо ином номере итерации, чем ошибка в проверочном наборе, это может свидетельствовать о плохом разделении набора данных.
Для разделения данных на обучающие, валидационные и тестовые наборы предусмотрены четыре функции. Они являются 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, поэтому при использовании этого параметра необходимо задать индексы.