exponenta event banner

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

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

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.

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

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

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

     0
     1
     0
     0
     0
     0
     0
     0