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

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

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

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

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

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

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

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

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

plotsompos(net)

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

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

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

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

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

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

     0
     0
     0
     0
     0
     0
     0
     0
     0
     0
      ⋮