Вероятностные нейронные сети

Вероятностные нейронные сети могут использоваться для задач классификации. Когда представлен вход, первый слой вычисляет расстояния от входного вектора до обучающих входных векторов и производит вектор, элементы которого указывают, насколько близок вход к обучающему входу. Второй слой суммирует эти вклады для каждого класса входов, чтобы создать в качестве чистого выхода вектор вероятностей. Наконец, передаточная функция на выходе второго слоя выбирает максимум этих вероятностей и создает 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)

Вы можете использовать функцию 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 и как сеть может успешно классифицировать вектор, не используемый в проекте.