Решение задач с использованием нейронных сетей в Matlab

  • Вид работы:
    Практическое задание
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    240,4 Кб
  • Опубликовано:
    2013-05-20
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Решение задач с использованием нейронных сетей в Matlab

Министерство образование и науки РФ

ГОУ ВПО «Ивановский государственный химико-технологический университет»

Кафедра Информатики и вычислительной техники









Лабораторная работа № 7

Тема

Решение задач с использованием нейронных сетей в Matlab






Выполнили:

Романычева, Стрельников

Цель работы

Освоение технологии решения задач с использованием нейронных сетей в пакетах расширения Neural Networks Toolbox и Simulink.

Задание №1

Создать нейронную сеть, реализующую функциональную зависимость

Y =  

между входом (x) и выходом (Y). Значения коэффициентов в этом случае заданы. Последовательность решения должна включать все 5 этапов, приведённые в примере.

-этап: «Подготовка данных для обучения сети»:

В первую очередь необходимо определиться с размерностью входного массива. Выберем количество значений функции равным N = 21, т.е. в качестве входных векторов массива используем значения функции y в точках х = 0;0.05; …1.0. Для обучения сети необходимо сформировать массив входных векторов для различных наборов параметров c, a и s. Каждый набор этих параметров является вектором-эталоном для соответствующего входного вектора.

Для подготовки входного и эталонного массивов воспользуемся следующим алгоритмом. Выбираем случайным образом значения компонент вектора - эталона С, A, B и вычисляем компоненты соответствующего входного вектора. Повторяем эту процедуру М раз и получаем массив входных векторов в виде матрицы размерностью N x M и массив векторов - эталонов в виде матрицы размерностью в нашем случае 3 х М. Полученные массивы мы можем использовать для обучения сети. Прежде чем приступать к формированию обучающих массивов, необходимо определиться с некоторыми свойствами массивов. Диапазон изменения параметров С, A, B. Выберем диапазоны изменения параметров C, A, B равными (0.1, 1). Значения, близкие к 0 и сам 0 исключим в связи с тем, что функция не определена при C = 0. Второе ограничение связано с тем, что при использовании типичных передаточных функций желательно, чтобы компоненты входных и выходных векторов не выходили за пределы диапазона (-1,1). В противном случае можно использовать методы нормировки, которые позволяют обойти это ограничение. Количество входных и эталонных векторов выберем равным М = 100.

Этого достаточно для обучения, а процесс обучения не займет много времени.

Сценарий формирования массива

% формирование массивов (входной массив P и эталоны T)

P=zeros(100,21);=zeros(3,100);=0:5.e-2:1;i=1:100=0.9*rand+0.1;=0.9*rand+0.1;=0.9*rand+0.1; =0.9*rand+0.1; (1,i)=c;(2,i)=a;(3,i)=b;(4,i)=x;(i,:)=a./(b+x.^c);

end; =P';

этап - Создание сети

Создадим следующую нейроную сеть:

net=newff(minmax(P),[10,15,3],{'logsig','logsig','purelin'},'trainlm');

Где 25-это кол-во нейронов в 1-ом слое, 35-во втором, 40-в 3-ем, а 3 соответствует кол-во выходных параметров, мы применяем 1 функцию - logsig(экспонинцеальная), 2 - pureline (линейная), и 1- tansig.

Первый аргумент - матрица 21 ´ 2 минимальных и максимальных значений сигнала на каждом из входов - вычисляется с помощью процедуры minmax. Результатом выполнения процедуры newff является объект - нейронная сеть net заданной конфигурации. В данном случае мы выбираем обучение по методу: связанных градиентов Пауэлла-Била.

этап - Обучение сети.

Следующий шаг - обучение созданной сети. Перед обучением необходимо задать параметры обучения. Задаем функцию оценки функционирования sse..performFcn='sse';

В этом случае в качестве оценки вычисляется сумма квадратичных отклонений выходов сети от эталонов. Задаем критерий окончания обучения - значение отклонения, при котором обучение будет считаться законченным:.trainParam.goal=0.01;

Задаем максимальное количество циклов обучения. После того, как будет выполнено это количество циклов, обучение будет завершено:.trainParam.epochs=1000;

Теперь можно начинать обучение:

[net,tr]=train(net,P,T);

Процесс обучения иллюстрируется графиком зависимости оценки функционирования от номера цикла обучения (номера эпохи).

 

Таким образом, обучение сети окончено. Теперь эту сеть можно сохранить в файле nn1.mat: nn1 net;

В последующих сеансах работы сохранённую сеть можно загрузить, используя функцию (‘nn1’).

этап - Тестирование сети

Перед тем, как воспользоваться нейронной сетью, необходимо исследовать степень достоверности результатов вычислений сети на тестовом массиве входных векторов. В качестве тестового массива необходимо использовать массив, компоненты которого отличаются от компонентов массива, использованного для обучения. В нашем случае для получения тестового массива достаточно воспользоваться еще раз программой mas1.

Для оценки достоверности результатов работы сети можно воспользоваться результатами регрессионного анализа, полученными при сравнении эталонных значений со значениями, полученными на выходе сети, когда на вход поданы входные векторы тестового массива. В среде MATLAB для этого можно воспользоваться функцией postreg. Следующий набор команд иллюстрирует описанную процедуру:

>> mas1 - создание тестового массива P

>> y=sim(net,P); - обработка тестового массива обученной сетью, y - выходы сети.

>> [m,b,r]=postreg(y(1,:),T(1,:));

При выполнении последней команды выводится график в координатах: по оси ординат A - значения, полученные на первом выходе сети (расчетные значения коэффициента С), по оси абсцисс T - эталонные значения коэффициента с. Совершенно очевидно, что если все точки группируются вблизи прямой

A = T, (1)

то сеть на тестовом массиве работает правильно. Над графиком выводится уравнение прямой, найденное по полученным данным в виде:

A = m·T + b. (2)

Зависимость (2) тем точнее представляет (1), чем значение m ближе к 1, а значение b к 0.

Кроме того, выводится коэффициент корреляции R (в параметрах команды обозначен r).

Рисунок 1 -[m,b,r]=postreg(y(1,:),T(1,:)) - достоверность результатов работы сети для С коэффициента.

Рисунок 2 - [m,b,r]=postreg(y(2,:),T(2,:));- достоверность результатов работы сети для А коэффициента.

Рисунок 3 - [m,b,r]=postreg(y(3,:),T(3,:));- достоверность результатов работы сети для S коэффициента.

Графики показывают, что сеть хорошо решает поставленную задачу для всех трех выходных параметров и можно перейти к её использованию.

Сохраним обученную сеть net на диске в файл nn1.matnn1 net

- этап: Моделирование сети.

Можно самим задать любые значения коэффициентов, рассчитать значения входного вектора, определить коэффициенты на выходе сети и сравнить их с заданными.

Например, пусть

P(i,:)=a/(b+x^c)

P=P'

То есть a=0.1; b=0.1;с=0.1

Подставив этот входной вектор в качестве аргумента функции sim:

p=0.1./(0.1+x.^0.1);=p'=sim(net,p) =

.0910(A)

.0821(B)

.1150(C)

Близость полученных значений к правильному результату (0.1; 0.1; 0.1) свидетельствует о применимости сети. Если же результаты сильно отличаются, необходимо изменить архитектуру сети, точность или метод поиска.

Задание №2

Сформируйте модель НС, рассмотренную в Задании №1 в Simulink, используя функцию gensim. Обратите внимание на структуру НС в S -модели.

Сначало создадим нейронную сеть из задания 1:

net=newff(minmax(P),[10,15,3],{'logsig','logsig','purelin'},'trainlm');

Затем мы создадим структуру нейроной сети введя в командную строку команду: gensim(net,st), появится следующая структура нейроной сети:


Задание №3

Выполнить генерацию исходных данных в виде точек на плоскости, разделённой прямой линией X2 = 0.4+1.5·X1. Точки, попавшие по одну сторону линии, будут относиться к классу 1, по другую - к классу 2. Создать нейронную сеть, способную отнести любую новую точку к соответствующему классу.


Чтобы опознать к какому классу относится линия нужно создать персептрон:

clear, net = newp([-300 300;-300 300],1); .IW{1,1}= [0.4 -1];

net.b{1} = [1.5];

Где значение в IV - это кооэфициенты при X1 и X2, а при b - коофициент b , а значения в под скобкой в newp означает интервал X1 и X2. В данном случае 1 класс - обозначен 0, а 2 класс - 1

Для проверки правильности распознования сформируем масив из точек:

X1

X2

1

2

5

10

15

20

25

35

45

65


Сценарий формирования массива:

= [[1; 2] [5;10] [15;20] [25;35] [45;65]];= sim(net,p1)=

Все классы распознаны верно.

Задание №4

Рассмотрим пример прогнозирования с помощью простейшей линейной НС процесса, поведение которого зависит от времени. В этом примере надо особое внимание уделить способу формирования входов и выходов НС.

Предположим, что имеется сигнал (функция времени), описываемый соотношением

,

который подвергается дискретизации с интервалом 0.025 с.

Построим линейную НС, позволяющую прогнозировать будущее значение по 5 предыдущим. newlind - конструирование линейного слоя;

Решение

Сценарий:=0:0.025:5; % Задание диапазона времени от 0 до 5 секунд=sin(t*4*pi); % предсказываемый сигнал=length(x); %число столбцов в матрице входов

% Создание входных векторов

P=zeros(5,Q);

P(1,2:Q)=x(1,1:(Q-1));(2,3:Q)=x(1,1:(Q-2));(3,4:Q)=x(1,1:(Q-3));(4,5:Q)=x(1,1:(Q-4));

P(5,6:Q)=x(1,1:(Q-5));=newlind(P,x); % Создание новой НС с именем s=sim(s,P); % расчёт прогнозируемых значений

% Создание графиков исходного сигнала и прогноза

plot(t,x,t,y,'*')('Vremja')('Прогноз - сигнал *');('Выход сети - прогноз');

%Ошибка прогноза

e=y-x;

% последние 5 значений, рассчитанные по функции и по нейронной сети

znach=x(Q-5:Q) =y(Q-5:Q)

Запустим сценарий, получим спрогнозируеммый сигнал:

нейронный сеть тестовый массив


Похожие работы на - Решение задач с использованием нейронных сетей в Matlab

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!