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