Главная страница
Навигация по странице:

Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин



Скачать 14.83 Mb.
Название В. Г. Потемкин
Анкор Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Дата 26.04.2017
Размер 14.83 Mb.
Формат файла doc
Имя файла Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Тип Книга
#3790
страница 22 из 50
1   ...   18   19   20   21   22   23   24   25   ...   50

6.2. Сети PNN


Нейронные сети PNN (Probabilistic Neural Networks) описаны в работе [43] и предназначены для решения вероятностных задач, и в частности задач классификации.

Архитектура сети


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

Рис. 6.14

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

Весовая матрица первого слоя IW11 (net.IW{1,1}) формируется с использованием векторов входа из обучающего множества в виде матрицы P'. Когда подается новый вход, блок ||dist|| вычисляет близость нового вектора к векторам обучающего множества; затем вычисленные расстояния умножаются на смещения и подаются на вход функции активации radbas. Вектор обучающего множества, наиболее близкий к вектору входа, будет представлен в векторе выхода a1 числом, близким к 1.

Весовая матрица второго слоя LW21 (net.LW{2,1}) соответствует матрице связности T, построенной для данной обучающей последовательности. Эта операция может быть выполнена с помощью М-функции ind2vec, которая преобразует вектор целей в матрицу связности T. Произведение T*a1 определяет элементы вектора a1, соответствующие каждому из K классов. В результате конкурирующая функция активации второго слоя compet формирует на выходе значение, равное 1, для самого большого по величине элемента вектора n2 и 0 в остальных случаях. Таким образом, сеть PNN выполняет классификацию векторов входа по K классам.

Синтез сети


Для создания нейронной сети PNN предназначена М-функция newpnn. Определим
7 следующих векторов входа и соотнесем каждый из них с одним из трех классов:

P = [0 0;1 1;0 3;1 4;3 1;4 1;4 3]';

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

Вектор Тс назовем вектором индексов классов. Этому индексному вектору можно
поставить в соответствие матрицу связности T в виде разреженной матрицы вида

T = ind2vec(Tc)

T =

(1,1) 1

(1,2) 1

(2,3) 1

(2,4) 1

(3,5) 1

(3,6) 1

(3,7) 1

которая определяет принадлежность первых двух векторов к классу 1, двух последующих – к классу 2 и трех последних – к классу 3. Полная матрица Т имеет вид:

Т = full(T)

Т =

1 1 0 0 0 0 0

0 0 1 1 0 0 0

0 0 0 0 1 1 1

Массивы Р и Т задают обучающее множество, что позволяет выполнить формирование сети, промоделировать ее, используя массив входов P, и удостовериться, что сеть правильно решает задачу классификации на элементах обучающего множества. В результате моделирования сети формируется матрица связности, соответствующая массиву
векторов входа. Для того чтобы преобразовать ее в индексный вектор, предназначена
М-функция vec2ind:

net = newpnn(P,T);

net.layers{1}.size % Число нейронов в сети PNN

ans = 7

Y = sim(net,P);

Yc = vec2ind(Y)

Yc = 1 1 2 2 3 3 3

Результат подтверждает правильность решения задачи классификации.

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

p = [1 3; 0 1; 5 2]';

Выполняя моделирование сети для этого набора векторов, получаем

a = sim(net,p);

ac = vec2ind(a)

ac = 2 1 3

Фрагмент демонстрационной программы demopnn1 позволяет проиллюстрировать
результаты классификации в графическом виде:

clf reset, drawnow

p1 = 0:.05:5;

p2 = p1;

[P1,P2]=meshgrid(p1,p2);

pp = [P1(:) P2(:)];

aa = sim(net,pp');

aa = full(aa);

m = mesh(P1,P2,reshape(aa(1,:),length(p1),length(p2)));

set(m,'facecolor',[0.75 0.75 0.75],'linestyle','none');

hold on

view(3)

m = mesh(P1,P2,reshape(aa(2,:),length(p1),length(p2)));

set(m,'facecolor',[0 1 0.5],'linestyle','none');,

m = mesh(P1,P2,reshape(aa(3,:),length(p1),length(p2)));

set(m,'facecolor',[0 1 1],'linestyle','none');

plot3(P(1,:),P(2,:),ones(size(P,2))+0.1,'.','markersize',30)

plot3(p(1,:),p(2,:),1.1*ones(size(p,2)),'*','markersize',20,... 'color',[1 0 0])

hold off

view(2)

Результаты классификации представлены на рис. 6.15 и показывают, что 3 представленных сети вектора, отмеченные звездочками, классифицируются сетью PNN, состоящей из семи нейронов, абсолютно правильно.

Рис. 6.15

В заключение отметим, что сети PNN могут весьма эффективно применяться для решения задач классификации. Если задано достаточно большое обучающее множество, то решения, генерируемые сетями, сходятся к решениям, соответствующим правилу Байеса. Недостаток сетей GRNN и PNN заключается в том, что работают они относительно медленно, поскольку выполняют очень большие объемы вычислений по сравнению с другими типами нейронных сетей.
1   ...   18   19   20   21   22   23   24   25   ...   50
написать администратору сайта