Эта тема представляет часть типичного многоуровневого мелкого сетевого рабочего процесса. Для получения дополнительной информации и другие шаги, смотрите Многоуровневые Мелкие Нейронные сети и Обучение Обратной связи.
После того, как данные были собраны, следующий шаг в обучении сети должен создать сетевой объект. Функция feedforwardnet
создает многоуровневую сеть прямого распространения. Если эта функция вызывается без входных параметров, то сетевой объект по умолчанию создается, который не был сконфигурирован. Получившаяся сеть может затем быть сконфигурирована с configure
команда.
Как пример, файл bodyfat_dataset.mat
содержит предопределенный набор входа и целевых векторов. Входные векторы задают данные относительно физических атрибутов людей, и целевые значения задают жировую прослойку процента людей. Загрузите данные используя следующую команду:
load bodyfat_dataset
Загрузка этого файла создает две переменные. Входная матрица bodyfatInputs
состоит из 252 вектор-столбцов 13 физических переменных атрибута для 252 различных людей. Целевой матричный bodyfatTargets
состоит из соответствующих 252 содержаний жира в организме.
Следующий шаг должен создать сеть. Следующий вызов feedforwardnet
создает сеть 2D слоя с 10 нейронами в скрытом слое. (Во время шага настройки номер нейронов в выходном слое определяется одному, который является числом элементов в каждом векторе из целей.)
net = feedforwardnet; net = configure(net, bodyfatInputs, bodyfatTargets);
Дополнительным аргументам можно предоставить feedforwardnet
. Например, первый аргумент является массивом, содержащим количество нейронов в каждом скрытом слое. (Настройка по умолчанию равняется 10, что означает один скрытый слой с 10 нейронами. Один скрытый слой обычно приводит к превосходным результатам, но можно хотеть попробовать два скрытых слоя, если результаты с каждый не соответствует. Увеличение числа нейронов в скрытом слое увеличивает степень сети, но требует большего количества расчета и, более вероятно, произведет сверхподбор кривой.) Второй аргумент содержит имя учебной функции, которая будет использоваться. Если никакие аргументы не предоставляются, количество по умолчанию слоев равняется 2, количество по умолчанию нейронов в скрытом слое равняется 10, и учебная функция по умолчанию trainlm
. Передаточная функция по умолчанию для скрытых слоев tansig
и значение по умолчанию для выходного слоя purelin
.
configure
команда конфигурирует сетевой объект и также инициализирует веса и смещения сети; поэтому сеть готова к обучению. Существуют времена, когда вы можете хотеть повторно инициализировать веса или выполнить пользовательскую инициализацию. Инициализация Весов (init) объясняет детали процесса инициализации. Можно также пропустить шаг настройки и перейти непосредственно к обучению сети. train
команда автоматически сконфигурирует сеть и инициализирует веса.
В то время как 2-х слойные сети прямого распространения могут потенциально изучить фактически любое отношение ввода - вывода, сети прямого распространения с большим количеством слоев могут изучить комплексные отношения более быстро. Для большинства проблем, лучше запускаться с двух слоев, и затем увеличиваться до трех слоев, если эффективность с двумя слоями не является удовлетворительной.
Функция cascadeforwardnet
создает прямые каскадом сети. Они похожи на сети прямого распространения, но включают связь веса от входа до каждого слоя, и от каждого слоя до последовательных слоев. Например, сеть с тремя слоями имеет связи от слоя 1 до слоя 2, слоя 2 к слою 3 и слою 1 к слою 3. Сеть с тремя слоями также имеет связи от входа до всех трех слоев. Дополнительные связи могут улучшить скорость, на которой сеть изучает желаемое отношение.
Функция patternnet
создает сеть, которая очень похожа на feedforwardnet
, за исключением того, что это использует tansig
передаточная функция в последнем слое. Эта сеть обычно используется для распознавания образов. Другие сети могут учиться динамический или отношения timeseries.
Перед обучением сеть прямого распространения необходимо инициализировать веса и смещения. configure
команда автоматически инициализирует веса, но вы можете хотеть повторно инициализировать их. Вы делаете это с init
команда. Эта функция берет сетевой объект в качестве входа и возвращает сетевой объект со всеми весами и смещает инициализированный. Вот то, как сеть инициализируется (или повторно инициализируется):
net = init(net);