Как в одномерных проблемах, эта самоорганизующаяся карта будет учиться представлять различные области входного пробела, где входные векторы происходят. В этом примере, однако, нейроны расположат себя в двумерной сетке, а не линии.
Мы хотели бы классифицировать 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
⋮