Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

It_Kompyuterny_Praktikum

.Pdf
Скачиваний:
40
Добавлен:
21.03.2016
Размер:
1.65 Mб
Скачать

7.Чем объясняется невысокая емкость сети Хэмминга?

3.5.Нейронные сети радиально-базисных функций. Вероятностные

сети

Цель: Научиться использовать нейронные сети радиально-базисных функций и вероятностные сети.

Задание: Используя встроенные функции пакета нейронных сетей математической среды MATLAB рассмотреть использование нейронных сетей радиально-базисных функций и вероятностных сетей.

Пример выполнения:

Задача. 1) В среде MATLAB необходимо построить и обучить нейронную сеть радиально-базисных функций для аппроксимации заданной

функции yi f (xi ) sin( xi ) cos( xi ) , x 0,0.5,...,10 , i 1.21.

2) В среде MATLAB создать и обучить вероятностную нейронную сеть для классификации 8 векторов 3 заданным классам. Произвести классификацию произвольного вектора, не принадлежащий обучающему множеству ранее созданной сети.

В первую очередь в математической среде MATLAB создаем новый M- File, в котором записываем код программы создания и обучения нейронной сети радиально-базисных функций с использованием функций пакета нейронных сетей Neural Networks Toolbox:

clear all

%очищаем память

close all

 

P=0:0.5:10;

%входы

for i=1:21

 

T(i)=sin(P(i))-cos(P(i));

%целевые выходы

end

 

net=newrb(P,T,0);

%создание радиально-базисной сети

 

NEWRB, neurons = 0, SSE = 13.9849

net.layers{1}.size

%число нейронов скрытого слоя НС

net.layers{2}.size

 

E1=sim(net,P);

%опрос сети на обучающую выборку

P2=[0.75 3.82 6.77 8.24 9.73];%тестовая выборка

E2=sim(net,P2);

%опрос сети на тестовую выборку

sum=0;

 

for i=1:5

 

T2(i)=sin(P2(i))-cos(P2(i));

 

error(i)=T2(i)-E2(i);

 

sum=sum+error(i)^2;

 

end

 

sko=sqrt(sum/5)

%среднеквадратичное отклонение между

91

%идеальными значениями сигнала тестовой выборки и выходом сети figure(1); %построение графика

hold on; plot(P,T,'LineWidth',1),grid; plot(P,E1,'or','LineWidth',2);

plot(P2,E2,'+k','MarkerSize',10,'LineWidth',2); xlabel('P,P2'); ylabel('T,E1,E2');

legend ('Исходные данные','Выходы НС на обучающую выборку','Выходы НС на тестовую выборку',0);

Ниже представлен сформированный массив ошибок между идеальными значениями сигнала тестовой выборки и выходами сети, рассчитанное среднеквадратичное отклонение и графическое отображение результатов работы нейронной сети (рис. 6.25):

error =1.0e-004 *

0.7597 -0.0055 -0.0316 0.0541 0.6102 sko = 4.3667e-005.

Рис. 6.25. Выходы нейронной сети на обучающую и тестовую выборки

Переходя ко второму заданию напомним, что вероятностные нейронные сети PNN предназначены для решения вероятностных задач и, в частности, задач классификации.

Архитектура сети PNN базируется на архитектуре радиальной базисной сети, но в качестве выходного слоя использует так называемый конкурирующий слой, который подсчитывает вероятность принадлежности

92

входного вектора к тому или иному классу и в конечном счете сопоставляет вектор с тем классом, вероятность принадлежности к которому выше.

Предполагается, что задано обучающее множество, состоящее из Q пар векторов вход/цель. Каждый вектор цели имеет K элементов, указывающих класс принадлежности, и, таким образом, каждый вектор входа ставится в соответствие одному из K классов. В результате может быть образована матрица связности T размера K×Q, состоящая из нулей и единиц, строки которой соответствуют классам принадлежности, а столбцы – векторам входа. Таким образом, если элемент ti,j матрицы связности равен 1, то это означает, что j-й входной вектор принадлежит к классу i.

Весовая матрица первого слоя формируется с использованием векторов входа из обучающего множества в виде матрицы . Когда подается новый вход, вычисляетcя близость нового вектора к векторам обучающего множества; затем вычисленные расстояния умножаются на смещения и подаются на вход функции активации radbas. Вектор обучающего множества, наиболее близкий к вектору входа, будет представлен в векторе выхода y(1) числом близким к 1.

Весовая матрица второго слоя соответствует матрице связности T, построенной для данной обучающей последовательности. В среде MATLAB эта операция может быть выполнена с помощью функции ind2vec, которая преобразует вектор целей в матрицу связности T. Произведение T*y(1) определяет элементы вектора y(1), соответствующие каждому из К классов. В результате конкурирующая функция активации второго слоя формирует на выходе значение, равное 1 для самого большего по величине квадрата элемента вектора y(1) и 0 в остальных случаях. В среде MATLAB конкурирующая функция активации реализована в функции compet. Таким образом, сеть PNN выполняет классификацию векторов входа по K классам.

Для выполнения второго задания в математической среде MATLAB создаем новый M-File, в котором записываем код программы создания и обучения вероятностной нейронной сети с использованием функций пакета нейронных сетей Neural Networks Toolbox:

clear all;

%очищаем память

close all;

 

P=[1 2; 3 6; 2 8; 6 9; 1 7; 8 6; 10 17; 23 29]';

%вектора входа

Tc=[1 1 2 2 2 3 3 3];

%вектор отнесения

 

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

 

заданным классам

T=ind2vec(Tc)

%матрица связанности

T=full(T)

%полная матрица

 

%связанности

net=newpnn(P,T);

%создание вероятностной

 

сети

E1=sim(net,P);

%опрос сети на обучающую

 

выборку

 

93

E1c=vec2ind(E1)

 

 

 

 

 

P1=[1 6; 4 7; 9 19]';

 

 

 

 

%произвольные вектора

E2=sim(net,P1);

 

 

 

 

 

%опрос сети

E2c=vec2ind(E2)

 

 

 

 

 

Ниже приведен результат выполнения программы:

T =

 

 

 

%матрица связанности, которая определяет

 

 

 

 

принадлежность первых двух векторов 1-му классу,

 

 

 

 

последующих трех векторов 2-у классу и последних

 

 

 

 

трех векторов 3-му классу

(1,1)

 

1

 

 

 

 

 

(1,2)

 

1

 

 

 

 

 

(2,3)

 

1

 

 

 

 

 

(2,4)

 

1

 

 

 

 

 

(2,5)

 

1

 

 

 

 

 

(3,6)

 

1

 

 

 

 

 

(3,7)

 

1

 

 

 

 

 

(3,8)

 

1

 

 

 

 

 

T =

 

 

 

%полная матрица связанности

1

1

0

0

0

0

0

0

0

0

1

1

1

0

0

0

0

0

0

0

0

1

1

1

E1c =

 

 

 

%результат опроса сети на обучающую выборку,

 

 

 

 

который подтверждает правильность решения

 

 

 

 

задачи классификации

1

1

2

2

2

3

3

3

E2c =

 

 

 

%результат опроса сети на произвольные вектора:

 

 

 

 

1-й вектор отнесен ко второму классу, 2-й вектор к

 

 

 

 

первому классу, 3-й вектор к третьему классу

2

1

3

 

 

 

 

 

Вывод (пример):

В ходе выполнения лабораторной работы я изучил теоретические основы функционирования нейронных сетей радиально-базисных функций и вероятностных сетей. На основе встроенных функций пакета нейронных сетей среды MATLAB с использованием радиально-базисной нейронной сети я решил задачу аппроксимации функции (в качестве радиально-базисной функции я использовал гауссиан), а с использованием вероятностной нейронной сети решил задачу классификации векторов заданным классам.

Контрольные вопросы:

94

1.Опишите структуру и принцип функционирования нейронных сетей радиально-базисных функций.

2.В чем заключаются преимущества и недостатки нейронных сетей радиально-базисных функций?

3.Какие функции могут быть использованы в качестве активационных функций радиально-базисных нейронных сетей?

4.Для каких задач могут быть использованы вероятностные сети?

5.Какая функция активации используется в конкурирующем слое вероятностной сети?

6.На основе самостоятельно изучения опишите функции (назначение, синтаксис, аргументы) среды MATLAB для работы с нейронными сетями радиально-базисных функций: newrb, newrbe, newpnn, newgrnn.

3.6.Построение нейронечеткой модели с помощью ANFIS-редактора

Цель работы: Научиться использовать ANFIS-редактор системы MATLAB

для построения нейронечеткой модели.

Задание: Используя ANFIS-редактор построить нейронечеткую систему типа Сугено из экспериментальных данных.

Пример выполнения:

Задача: Построить нечеткую модель зависимости валового дохода от основных средств и основных фондов с использованием нечеткой нейронной сети, сконструированной в ANFIS-редакторе.

Пусть обучающая выборка составляет 100 примеров, а тестовая – 20. В среде MATLAB вводим данные обучающей выборки r_set и тестовой выборки r_test: матрицы состоящие из 3-х столбцов, первые два которых содержат данные входных переменных, третий – выходной переменной. Командой anfisedit загружаем ANFIS-редактор, в которой сгенерируем и обучим нечеткую систему типа Сугено (рис. 6.26):

Для загрузки обучающей выборки в окне ANFIS-редактора в блоке загрузки данных (Load data) в меню типа (Type) выбираем тип обучения (Training), а в качестве источника загрузки (From) выбираем рабочую область MATLAB (worksp.) и нажимаем кнопку загрузки данных (Load data). Появится окно (рис. 6.27) в котором указываем имя массива обучающей выборки r_set и нажимаем кнопку OK.

Для загрузки тестовой выборки в меню типа устанавливаем тип тестирования (Testing), нажимаем кнопку загрузки данных (Load data), в появившемся окне вводим имя массива тестовой выборки r_test и нажимаем кнопку OK. В блоке генерации нечеткой системы (Generate FIS) имеются следующие альтернативы: загрузка системы с диска (Load from disk), загрузка системы из рабочей области MATLAB (Load from worksp.), генерирование системы по алгоритму решетчатого разбиения без кластеризации (Grid partition) и генерирование системы через

95

субтрактивную кластеризацию по горному методу (Sub. clustering). Выберем метод решетчатого разбиения Grid partition, согласно которому функции принадлежности нечетких термов равномерно распределяются внутри диапазона изменения данных. База знаний содержит все возможные варианты правил. Коэффициенты в заключениях правил принимаются равными нулю. Нажимаем на кнопку генерации нечеткой системы (Generate FIS). В появившемся окне (рис. 6.28) необходимо указать количество и тип функций принадлежности входных и выходных переменных и нажать на кнопку OK.

Рис. 6.26. ANFIS-редактор

Рис. 6.27. Окно ввода имени массива обучающей выборки

Архитектуру синтезированной нейронечеткой сети (рис. 6.29) можно посмотреть нажав на кнопку структуры сети (Structure) блока информации системы ANFIS (ANFIS Info.)

В блоке обучения (Train FIS) необходимо выбрать метод обучения (Optim. Method), точность обучения (Error tolerance), количество итераций обучения (Epochs) и нажать на кнопку обучения (Train Now). В АNFIS-

96

редакторе реализованы два метода обучения: метод обратного распространения ошибки (backpropa) и гибридный алгоритм, объединяющий метод обратного распространения ошибки и метода наименьших квадратов (hybrid). Выберем гибридный метод обучения, укажем точность обучения равную 0, количество итераций равное 300 и нажмем на кнопку обучения. Динамика обучения выводится в основном окне редактора ANFIS (рис. 6.30): ось абсцисс соответствует итерациям алгоритма обучения, ось ординат – значениям средней квадратичной ошибки.

Рис. 6.28. Выбор количества и типа функций принадлежности

97

Рис. 6.29. Архитектура синтезированной нейро-нечеткой сети

После настройки ошибка обучения составила 5.8778. Для проверки модели на тестовой выборке в блоке тестирования нечеткой системы (Test FIS) выберем тестовые данные (Testing data) и нажмем на кнопку тестирования (Test Now). Результаты тестирования выводится в основном окне редактора ANFIS (рис. 6.31). Экспериментальные данные показаны точками, а результаты моделирования звездочками. Ошибка на тестовой выборке составила 3.3583. Используя меню Файл->Экспорт->В файл (File- >Export->To File) можно сохранить на диске синтезированную нейронечеткую сеть. С помощью меню Редактирование->Свойства нечеткой системы (Edit->Properties FIS) можно в FIS-редакторе посмотреть и при необходимости отредактировать синтезированную систему (рис. 6.32).

98

Рис. 6.30. Обучение синтезированной нейронечеткой сети

Рис. 6.31. Тестирование синтезированной нейронечеткой сети

99

Рис. 6.32. FIS-редактор

Сравним результаты нечеткой модели с результатами линейной регрессии вида y a0 a1 x1 a2 x2 . Для этого в режиме командной строки

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

следующим образом:

 

 

 

 

 

 

 

 

n=length(r_set);

 

 

 

 

 

 

 

 

n_t=length(r_test);

 

 

 

 

 

 

 

X=[ones(n,1) r_set(:,1) r_set(:,2)];

 

 

 

 

A=X\r_set(:,3);

 

 

 

 

 

 

 

 

%Несоответствие на обучающей выборке

 

 

 

Out_m=X*A;

 

 

 

 

 

 

 

 

 

r_tr=norm(r_set(:,3)-Out_m)/sqrt(n);%ошибка

 

 

 

%Несоответствие на тестовой выборке

 

 

 

X_test=[ones(n_t,1) r_test(:,1) r_test(:,2)];

 

 

 

Out_m=X_test*A;

 

 

 

 

 

 

 

 

r_check=norm(r_test(:,3)-Out_m)/sqrt(n_t); %ошибка

 

 

 

В результате ошибки линейной регрессии на обучающей и тестовой

выборках составили 6.2841 и 3.9043 соответственно.

 

 

Мы

 

можем

 

получить

нелинейную

модель

вида

y a

a x

a x

a x2

a

4

x2 и вычислить ошибки регрессии используя

0

1

1

2

2

3

1

 

2

 

 

 

следующий код: n=length(r_set);

100

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]