Нейроны в конкурентном слое учатся представлять различные области входного пространства, где происходят входные векторы.
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)');
Здесь 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');
Установите количество эпох для обучения перед остановкой и обучите этот конкурентный слой (может занять несколько секунд).
Постройте график обновленных весов слоев на том же графике.
net.trainParam.epochs = 7;
net = train(net,x);
w = net.IW{1};
delete(circles);
plot(w(:,1),w(:,2),'ob');
Теперь мы можем использовать конкурентный слой как классификатор, где каждый нейрон соответствует другой категории. Здесь мы зададим входной вектор X1 am как [0; 0.2].
Выход Y указывает, какой нейрон отвечает, и, следовательно, какой класс принадлежит входу.
x1 = [0; 0.2]; y = net(x1)
y = 8×1
0
1
0
0
0
0
0
0