Как и в одномерных задачах, эта самоорганизующаяся карта научится представлять различные области входного пространства, где возникают входные векторы. В этом примере, однако, нейроны будут расположены в двумерной сетке, а не в прямой.
Мы хотели бы классифицировать 1000 двухэлементных векторов в прямоугольнике.
X = rands(2,1000);
plot(X(1,:),X(2,:),'+r')
Мы будем использовать слой нейронов 5 на 6, чтобы классифицировать векторы выше. Мы хотели бы, чтобы каждый нейрон реагировал на разные области прямоугольника, а соседние нейроны реагировали на соседние области.
Сеть настроена на соответствие размерам входов. Этот шаг необходим, потому что мы построим график начальных весов. Обычно конфигурирование выполняется автоматически при обучении.
net = selforgmap([5 6]); net = configure(net,X);
Мы можем визуализировать только что созданную сеть с помощью plotsompos.
Каждый нейрон представлен красной точкой в месте расположения его двух весов. Изначально все нейроны имеют одинаковые веса в середине векторов, поэтому появляется только одна точка.
plotsompos(net)

Теперь мы тренируем карту по 1000 векторам за 1 эпоху и переигрываем веса сети.
После тренировки обратите внимание, что слой нейронов начал самоорганизовываться так, что каждый нейрон теперь классифицирует разную область входного пространства, а смежные (соединенные) нейроны реагируют на смежные области.
net.trainParam.epochs = 1; net = train(net,X); plotsompos(net)

Теперь мы можем классифицировать векторы, отдавая их в сеть и видя, какой нейрон реагирует.
Нейрон, обозначенный «1», ответил, так что х принадлежит к этому классу.
x = [0.5;0.3]; y = net(x)
y = 30×1
0
0
0
0
0
0
0
0
0
0
⋮