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

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

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

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

Figure contains an axes object. The axes object 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 object. The axes object with title SOM Weight Positions contains 3 objects of type line.

Теперь мы обучаем карту на этих 1 000 векторов в течение 1 эпохи и повторно строим сетевые веса.

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

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

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

Мы можем теперь классифицировать векторы путем предоставления им сети и наблюдения, какой нейрон отвечает.

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

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

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
      ⋮