Конкурентоспособное изучение

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

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 берет два аргумента, количество нейронов и скорости обучения.

Мы можем сконфигурировать сетевые входные параметры (обычно сделанный автоматически, ОБУЧАЮТСЯ), и постройте начальные векторы веса, чтобы видеть их попытку классификации.

Векторы веса (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 как [0; 0.2].

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

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

     0
     1
     0
     0
     0
     0
     0
     0