сии Задание №1
.pdfЗадание №1
Моделирование нейронных сетей в графической среде NNTool MatLab
Цель работы: Ознакомиться с особенностями построения и обучения нейронных сетей. Получить навыки работы с графической средой пакета NNTool MatLab.
Задание: В графической среде пакета NNTool MatLab реализовать нейронную сеть прямого распространения с N нейронами в скрытом слое с сигмоидальной передаточной функцией (logsig) и одним нейроном в выходном слое с линейной передаточной функцией (purelin). Обучить созданную нейронную сеть по заданному алгоритму обучения. Выполнить аппроксимацию заданных функции обученной нейронной сетью. Провести сравнение качества аппроксимации для синусоидальной и полиномиальной функций. Для синусоидальной функции выполнить сравнение качества аппроксимации для различного количества нейронов в скрытом слое N.
|
m |
|
Сравнение выполнить по формуле: k |
( y(xi ) u(xi ))2 |
, где y(x) – заданная |
|
i 1 |
|
функция, u(x) – аппроксимированная функция, m – количество точек функции; k – оценка качества аппроксимации.
Варианты заданий:
Вариант |
Алгоритм обучения |
|
|
|
|
|
|
Функции |
|
|
|
|
|
|
||||||||
0 |
TRAINBFG |
y |
sin( x) 1.5 |
; y x 2 |
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|||||||||||||
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sin( x) |
|
|
|
|
|
|
|
|
|
|
|
3 |
||||
1 |
TRAINBR |
y |
|
|
|
|
|
|
; y x |
|
||||||||||||
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
sin( x) |
|
|
|
|
|
2 |
||||||||
2 |
TRAINCGB |
y |
2 |
|
|
|
|
|
; |
y 2x |
|
|
||||||||||
|
|
|
|
|
|
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
3 |
TRAINCGF |
|
|
sin x |
|
|
|
|
|
|
|
|
|
|
||||||||
y |
|
|
|
|
|
|
|
|
3 |
; |
y 3x |
3 |
|
|||||||||
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
sin( x) |
|
|
|
|
|
2 |
|
|
|
|||||||||||
4 |
TRAINCGP |
y |
|
|
|
|
|
|
|
|
|
; y x |
|
|
1 |
|||||||
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
3 |
|
|
2 |
|
|
|
|
|
|
|
|
||||||||
|
|
sin( x ) |
|
|
|
3 |
|
|
|
|||||||||||||
5 |
TRAINGD |
y |
|
|
|
|
|
|
|
|
|
|
|
|
; |
y x |
|
|
|
1 |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
sin(2x) |
|
|
|
2 |
|
|
|
|||||||||
6 |
TRAINGDM |
y 1 |
|
|
|
|
; y x |
|
|
|
1 |
|||||||||||
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
||||
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Вариант |
Алгоритм обучения |
|
|
|
|
|
|
|
|
|
Функции |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
y |
sin( x) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|||||||||||||||||
7 |
TRAINGDA |
|
|
|
|
|
|
|
|
|
|
|
|
; |
|
|
y x |
|
1 |
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
y |
sin( x) |
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
2x 2 |
|
|
|||||||||||||||||||||||
8 |
TRAINGDX |
|
|
|
|
|
|
|
|
|
|
|
|
; y |
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
||||||
9 |
TRAINLM |
y |
sin( x) 4 |
; |
|
y |
3x 3 |
|
|
|
|
|||||||||||||||||||||||||||||||||
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|||||||
|
|
|
|
|
sin( x) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2x 2 |
|
|
|
|||||||||||||||||||||
10 |
TRAINOSS |
y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
y |
|
|
|
|
|
|
|
|
|
1 |
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
sin(3x) |
|
|
|
|
|
|
|
|
|
|
|
3x |
3 |
|
|
|
|
|
|||||||||||||||||
11 |
TRAINR |
y 2 |
|
|
|
|
|
|
|
|
|
|
; |
|
|
y |
|
|
|
|
|
|
|
|
1 |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
||||||||
|
|
sin( x) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3x3 |
|
|
|
|||||||||||||||||||
12 |
TRAINRP |
y |
|
|
|
|
|
|
|
|
|
|
2 |
|
; |
y |
|
|
|
|
|
|
|
|
|
1 |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|||||||||||
|
|
|
|
|
|
|
|
|
sin(2x) |
|
|
|
|
|
|
|
|
|
|
|
2x |
2 |
|
|
|
|
|
|||||||||||||||||
13 |
TRAINSCG |
y 1 |
|
|
|
|
|
|
|
|
|
; |
|
|
y |
|
|
|
|
|
|
|
|
|
|
1 |
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
sin( x) |
|
|
|
|
|
|
|
|
|
|
x 4 |
|
|
|
|
|
|
|
|
|
|||||||||||||||
14 |
TRAINGDX |
y |
|
|
|
|
|
|
|
|
|
; |
|
|
|
y |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
15 |
TRAINBFG |
|
|
sin x |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
y |
|
|
|
|
|
|
|
|
3 |
; |
|
|
y |
|
x |
4 |
1 |
|||||||||||||||||||||||||||
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
y 1 |
sin(2x ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
||||||||||||||||||||||||
16 |
TRAINR |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; y 3x |
|
1 |
|||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
y |
3sin( x) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
||||||||||||||||||
17 |
TRAINCGP |
|
|
|
|
|
|
|
|
|
; y |
|
3x |
|
|
|
|
1 |
|
|
||||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||||||||||||||||||||||||
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
sin(2x) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
x3 |
1 |
||||||||||||||||||
18 |
TRAINBR |
y |
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
; y |
|
|
|
|
|
|
|
|
|
||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||||||||||
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|||||||||||
|
|
|
sin(2x ) |
|
|
|
|
|
|
|
|
|
|
|
x3 |
1 |
||||||||||||||||||||||||||||
19 |
TRAINLM |
y |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
; |
y |
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
Содержание отчёта:
1.Цель работы.
2.Задание.
3.Описание алгоритма обучения.
4.Описание каждого этапа выполнения работы.
5. Сравнение работы алгоритма для 2-х заданных функций.
2
6.Графики, иллюстрирующие качество аппроксимации синусоидальной функции для различного количества нейронов N.
7.Выводы по работе.
Краткие теоретические сведения:
Нейронные сети (НС) широко используются для решения разнообразных задач. Основы теории и технологии применения НС широко представлены в пакете MATLAB с графическим интерфейсом пользователя NNTool.
Чтобы запустить NNTool, необходимо выполнить команду в командном окне
MATLAB: >> nntool
После этого появится главное окно NNTool, именуемое «Окном управления сетями и данными» (Network/Data Manager) (рис. 1).
Рис.1. Главное окно NNTool
Окно имеет функциональные клавиши со следующими назначениями:
Помощь (Help) – краткое описание управляющих элементов данного окна;
Новые данные (New…) – вызов окна, позволяющего создавать новые наборы данных и новую сеть;
3
Импорт (Import) – импорт данных из рабочего пространства MATLAB в пространство переменных;
Экспорт (Export) – экспорт данных из пространства переменных NNTool в рабочее
пространство MATLAB;
Удалить (Delete) – удаление выбранного объекта.
Открыть (Open) – Просмотр созданной сети или наборов данных
Одним из самых замечательных свойств нейронных сетей является способность аппроксимировать и, более того, быть универсальными аппроксиматорами. Это означает, что с помощью нейронных цепей можно аппроксимировать сколь угодно точно непрерывные функции многих переменных. Рассмотрим создание нейронной сети с помощью графической среды NNTool на следующем примере.
Необходимо выполнить аппроксимацию функции следующего вида:
|
5 x |
|
7 x |
, |
|
sin |
|
sin |
|
|
|
|
|
||||
|
N |
|
|
|
|
|
N |
|
где x 1..N , а N - число точек функции.
Создание сети
Перед созданием сети необходимо подготовить набор обучающих и целевых данных.
Подготовка набора обучающих данных (1, 2, 3, … , 100), задается следующим выражением: [1:100].
Воспользуемся кнопкой «Новый» (New). В появившемся окне следует произвести изменения, показанные на рис. 2, и нажать кнопку «Создать» (Create).
4
Рис. 2. Задание входного вектора
После этого в окне управления появится вектор data1 в разделе Input Data.
Вектор целей задаётся схожим образом (рис. 3).
В поле «Значение» (Value) окна создания новых данных необходимо ввести выражение:
sin(5*pi*[1:100]/100+sin(7*pi*[1:100]/100)).
Эта кривая представляет собой отрезок периодического колебания с частотой 5pi/N, модулированного по фазе гармоническим колебанием с частотой 7N (рис. 10).
5
Рис. 3. Задание целевого вектора
После нажатия на кнопку «Создать» (Create) в разделе Target Data появится вектор target1.
Теперь следует приступить к созданию нейронной сети, т. е. выбрать закладку Network и заполнить форму. Указать однонаправленную сеть с обратным распространением ошибки (Feed-Forward Backprop) c тринадцатью сигмоидными (LOGSIG) нейронами скрытого слоя и одним линейным (PURELIN) нейроном выходного слоя. Обучение производить, используя алгоритм Левенберга-Маркардта (Levenberg-Marquardt), который реализует функция TRAINLM.
Функция ошибки – MSE.
Поля несут следующие смысловые нагрузки:
Имя сети (Name) – это имя объекта создаваемой сети.
6
Свойства сети (Network Properties) – определяет свойства сети и в контексте выбранного типа представляет ввод различных параметров в части окна, расположенные ниже.
Количество нейронов (Number of neurons) – число нейронов в слое.
Передаточная функция (Transfer function) – в этом пункте выбирается передаточная функция (функция активации) нейронов.
Функция обучения (Adaptation learning function) – функция, отвечающая за обновление весов и смещений сети в процессе обучения.
Спомощью кнопки «Вид» (View) можно посмотреть архитектуру создаваемой сети (рис. 4).
Рис.4. Архитектура сети для решения задачи аппроксимации
Нажав кнопку «Создать» (Create) в окне создания сети произойдет создание новой нейронной сети.
В результате проделанных операций в разделе «Сети» (Networks) главного окна NNTool появится объект с именем network1.
Обучение сети
Основная цель – построить нейронную сеть, которая выполняет аппроксимацию заданной функции. Очевидно, нельзя рассчитывать на то, что сразу после этапа создания сети последняя будет обеспечивать правильный результат (правильное соотношение «вход/выход»). Для достижения цели сеть необходимо должным образом обучить, то есть подобрать подходящие значения параметров. В MATLAB реализовано большинство известных алгоритмов обучения нейронных сетей. При создании сети, выбран TRAINLM в качестве функции, реализующей алгоритм обучения.
Главное окно NNTool. На данном этапе интерес представляет панель «Сети» (Networks). Отметив указателем мыши объект сети network1, вызовем окно управления сетью нажатием кнопки «Open». В результате возникнет окно «Network: network1»
7
содержащее, в свою очередь, еще одну панель вкладок (рис. 5). Их главное назначение
– управление процессом обучения. На вкладке «Информация обучения» (Training info) требуется указать набор обучающих данных в поле «Входы» (Inputs) и набор целевых данных в поле «Цели» (Targets). Поля «Выходы» (Outputs) и «Ошибки» (Errors) NNTool заполняет автоматически. При этом результаты обучения, к которым относятся выходы и ошибки, будут сохраняться в переменных с указанными именами.
Рис. 5. Окно параметров сети, открытое на вкладке «Обучение» (Train)
Завершить процесс обучения можно, руководствуясь разными критериями. Возможны ситуации, когда предпочтительно остановить обучение, полагая достаточным некоторый интервал времени. С другой стороны, объективным критерием является уровень ошибки.
На вкладке «Параметры обучения» (Training parameters) (рис. 6) можно установить следующие поля:
Количество эпох (epochs) – определяет число эпох (интервал времени), по прошествии которых обучение будет прекращено. Эпохой называют однократное представление всех обучающих входных данных на входы сети.
Достижение цели или попадание (goal) – здесь задаётся абсолютная величина функции ошибки, при которой цель будет считаться достигнутой.
Период обновления (show) – период обновления графика кривой обучения, выраженный числом эпох.
Время обучения (time) – по истечении указанного здесь временного интервала, выраженного в секундах, обучение прекращается.
8
Рис. 6. Вкладка параметров обучения
Чтобы начать обучение, нужно нажать кнопку «Обучить сеть» (Train Network) на вкладке «Обучение» (Train). После этого, если в текущий момент сеть не удовлетворяет ни одному из условий, указанных в разделе параметров обучения (Training Parameters), появится окно, иллюстрирующее динамику изменения целевой функции (рис. 8). Кнопкой «Остановить обучение» (Stop Training) можно прекратить этот процесс.
9
Рис. 8. Окно обучения нейронной сети
Использование сети
На вкладке «Моделировать» (Simulate) выбрать в ниспадающем списке «Входы» (Inputs) подготовленные данные. В данной задаче естественно использовать тот же набор данных, что и при обучении data1. При желании можно установить флажок «Задать цели» (Supply Targets). Тогда в результате прогона дополнительно будут рассчитаны значения ошибки. Нажатие кнопки «Моделировать сеть» (Simulate Network) запишет результаты прогона в переменную, имя которой указано в поле «Выходы» (Outputs). Теперь можно построить два графика функции в одном окне: первый график – заданная функция, второй – в качестве аргумента значение вектора из
10