Как и в одномерных задачах, эта самоорганизующаяся карта научится представлять различные области входного пространства, где происходят входные векторы. В этом примере, однако, нейроны расположатся в двумерной сетке, а не в линии.
Мы хотели бы классифицировать 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 принадлежит к этому классу.
x = [0.5;0.3]; y = net(x)
y = 30×1
0
0
0
0
0
0
0
0
0
0
⋮