exponenta event banner

Двумерная самоорганизующаяся карта

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

Мы хотели бы классифицировать 1000 двухэлементных векторов в прямоугольнике.

X = rands(2,1000);
plot(X(1,:),X(2,:),'+r')

Figure contains an axes. The axes contains an object of type line.

Мы будем использовать слой нейронов 5 на 6, чтобы классифицировать векторы выше. Мы хотели бы, чтобы каждый нейрон реагировал на разные области прямоугольника, а соседние нейроны реагировали на соседние области.

Сеть настроена на соответствие размерам входов. Этот шаг необходим, потому что мы построим график начальных весов. Обычно конфигурирование выполняется автоматически при обучении.

net = selforgmap([5 6]);
net = configure(net,X);

Мы можем визуализировать только что созданную сеть с помощью plotsompos.

Каждый нейрон представлен красной точкой в месте расположения его двух весов. Изначально все нейроны имеют одинаковые веса в середине векторов, поэтому появляется только одна точка.

plotsompos(net)

Figure SOM Weight Positions (plotsompos) contains an axes. The axes with title SOM Weight Positions contains 3 objects of type line.

Теперь мы тренируем карту по 1000 векторам за 1 эпоху и переигрываем веса сети.

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

net.trainParam.epochs = 1;
net = train(net,X);
plotsompos(net)

Figure SOM Weight Positions (plotsompos) contains an axes. The axes with title SOM Weight Positions contains 3 objects of type line.

Теперь мы можем классифицировать векторы, отдавая их в сеть и видя, какой нейрон реагирует.

Нейрон, обозначенный «1», ответил, так что х принадлежит к этому классу.

x = [0.5;0.3];
y = net(x)
y = 30×1

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
      ⋮