Навигация по странице:
|
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин
|
Название |
В. Г. Потемкин
|
Анкор |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Дата |
26.04.2017 |
Размер |
14.83 Mb. |
Формат файла |
|
Имя файла |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Тип |
Книга
#3790
|
страница |
22 из 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 заключается в том, что работают они относительно медленно, поскольку выполняют очень большие объемы вычислений по сравнению с другими типами нейронных сетей.
|
|
|