Конкурентное обучение

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

P является набором случайным образом сгенерированных, но кластеризованных тестовых точек тестовых данных. Здесь нанесены точки данных.

Для классификации этих точек в естественные классы будет использоваться конкурентоспособная сеть.

% Create inputs X.
bounds = [0 1; 0 1];   % Cluster centers to be in these bounds.
clusters = 8;          % This many clusters.
points = 10;           % Number of points in each cluster.
std_dev = 0.05;        % Standard deviation of each cluster.
x = nngenc(bounds,clusters,points,std_dev);

% Plot inputs X.
plot(x(1,:),x(2,:),'+r');
title('Input Vectors');
xlabel('x(1)');
ylabel('x(2)');

Figure contains an axes. The axes with title Input Vectors contains an object of type line.

Здесь COMPETLAYER принимает два аргумента, количество нейронов и скорость обучения.

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

Векторы веса (o's) будут обучены так, чтобы они происходили с центром в кластерах входа векторов (+'s).

net = competlayer(8,.1);
net = configure(net,x);
w = net.IW{1};
plot(x(1,:),x(2,:),'+r');
hold on;
circles = plot(w(:,1),w(:,2),'ob');

Figure contains an axes. The axes contains 2 objects of type line.

Установите количество эпох для обучения перед остановкой и обучите этот конкурентный слой (может занять несколько секунд).

Постройте график обновленных весов слоев на том же графике.

net.trainParam.epochs = 7;
net = train(net,x);
w = net.IW{1};
delete(circles);
plot(w(:,1),w(:,2),'ob');

Figure contains an axes. The axes contains 2 objects of type line.

Теперь мы можем использовать конкурентный слой как классификатор, где каждый нейрон соответствует другой категории. Здесь мы зададим входной вектор X1 am как [0; 0.2].

Выход Y указывает, какой нейрон отвечает, и, следовательно, какой класс принадлежит входу.

x1 = [0; 0.2];
y = net(x1)
y = 8×1

     0
     1
     0
     0
     0
     0
     0
     0