Вероятностные нейронные сети могут использоваться для задач классификации. Когда представлен вход, первый слой вычисляет расстояния от входного вектора до обучающих входных векторов и производит вектор, элементы которого указывают, насколько близок вход к обучающему входу. Второй слой суммирует эти вклады для каждого класса входов, чтобы создать в качестве чистого выхода вектор вероятностей. Наконец, передаточная функция на выходе второго слоя выбирает максимум этих вероятностей и создает 1 для этого класса и 0 для других классов. Архитектура этой системы показана ниже.

Принято, что существует Q пары входной вектор/целевой вектор. Каждый целевой вектор имеет K элементы. Один из этих элементов равен 1, а остальные равны 0. Таким образом, каждый входной вектор связан с одним из K классы.
Входные веса первого уровня, IW1,1 (net.IW{1,1}), устанавливаются в транспонирование матрицы, образованной из Q пар обучения, P '. Когда вход представлен, ||
dist
|| прямоугольник создает вектор, элементы которого указывают, насколько близок вход к векторам набора обучающих данных. Эти элементы умножаются, элемент за элементом, на смещение и отправляются в radbas передаточная функция. Вектор входа, близкий к обучающему вектору, представлен числом, близким к 1 в векторе выхода a1. Если вход близок к нескольким обучающим векторам одного класса, он представлен несколькими элементами массива1 которые близки к 1.
Веса второго слоя, LW1,2 (net.LW{2,1}), устанавливаются в матрицу T целевых векторов. Каждый вектор имеет только 1 в строке, сопоставленной с этим конкретным классом входов, и 0 в другом месте. (Используйте функцию ind2vec для создания соответствующих векторов.) Умножение Та1 суммирует элементы массива1 из-за каждого из K входные классы. Наконец, передаточная функция второго уровня, compet, создает 1, соответствующее наибольшему элементу n2, и 0s в другом месте. Таким образом, сеть классифицирует вектор входа в конкретное K класс, поскольку этот класс имеет максимальную вероятность быть правильным.
Вы можете использовать функцию newpnn для создания PNN. Например, предположим, что семь входных векторов и их соответствующие цели
P = [0 0;1 1;0 3;1 4;3 1;4 1;4 3]'
который дает
P =
0 1 0 1 3 4 4
0 1 3 4 1 1 3
Tc = [1 1 2 2 3 3 3]
который дает
Tc =
1 1 2 2 3 3 3
Вам нужна целевая матрица с 1s в нужные области кадра. Вы можете получить его с функцией ind2vec. Это дает матрицу с 0 с, кроме как в правильных точках. Так что выполните
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
Теперь можно создать сеть и моделировать ее, используя вход P убедиться, что он действительно создает правильные классификации. Используйте функцию vec2ind для преобразования выхода Y в строку Yc для уточнения классификаций.
net = newpnn(P,T); Y = sim(net,P); Yc = vec2ind(Y)
Это создает
Yc =
1 1 2 2 3 3 3
Можно попробовать классифицировать векторы, отличные от тех, которые использовались для проектирования сети. Попытайтесь классифицировать векторы, показанные ниже в P2.
P2 = [1 4;0 1;5 2]'
P2 =
1 0 5
4 1 2
Можете угадать, как эти векторы будут классифицированы? Если вы запускаете симуляцию и строите график векторов, как и прежде, вы получаете
Yc =
2 1 3
Эти результаты выглядят хорошо, поскольку эти тестовые векторы были довольно близки к представителям классов 2, 1 и 3 соответственно. Сети удалось обобщить свою операцию, чтобы правильно классифицировать векторы, отличные от тех, которые используются для проектирования сети.
Можно хотеть попробовать классификацию PNN. Он показывает, как спроектировать PNN и как сеть может успешно классифицировать вектор, не используемый в проекте.