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

Эта тема представляет часть типичного многоуровневого сетевого рабочего процесса. Для получения дополнительной информации и другие шаги, смотрите Многоуровневые Мелкие Нейронные сети и Обучение Обратной связи.

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

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

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