Нормированное правило Perceptron

Нейрон жесткого предела с 2 входами обучен классифицировать 5 входных векторов в две категории. Несмотря на то, что один входной вектор намного больше, чем другие, обучение с LEARNPN быстро.

Каждый из этих пяти вектор-столбцов в X задает входные векторы с 2 элементами, и вектор - строка T задает целевые категории вектора. Постройте эти векторы с PLOTPV.

X = [ -0.5 -0.5 +0.3 -0.1 -40; ...
      -0.5 +0.5 -0.5 +1.0 50];
T = [1 1 0 0 1];
plotpv(X,T);

Обратите внимание на то, что 4 входных вектора имеют намного меньшие значения, чем пятый вектор в верхнем левом углу графика. perceptron должен правильно классифицировать эти 5 входных векторов на X в эти две категории, заданные T.

PERCEPTRON создает новую сеть с LEARPN изучение правила, которое менее чувствительно к большим изменениям в размере входного вектора, чем LEARNP (значение по умолчанию).

Сеть затем сконфигурирована с входом и целевыми данными, которые приводят к начальным значениям для его весов и смещения. (Настройка обычно не необходима, когда она сделана автоматически, АДАПТИРУЮТСЯ и TRAIN.)

net = perceptron('hardlim','learnpn');
net = configure(net,X,T);

Добавьте начальную попытку нейрона классификации к графику.

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

hold on
linehandle = plotpc(net.IW{1},net.b{1});

АДАПТИРУЙТЕСЬ возвращает новый сетевой объект, который выполняет как лучший классификатор, сетевой вывод и ошибка. Этот цикл позволяет сети адаптироваться, строит график классификации и продолжается, пока ошибка не является нулем.

E = 1;
while (sse(E))
   [net,Y,E] = adapt(net,X,T);
   linehandle = plotpc(net.IW{1},net.b{1},linehandle);
   drawnow;
end

Обратите внимание на то, что обучение с LEARNP заняло только 3 эпохи, в то время как решение той же проблемы с LEARNPN потребовало 32 эпох. Таким образом LEARNPN действительно намного лучше работает, чем LEARNP, когда существуют большие изменения в размере входного вектора.

Теперь SIM может использоваться, чтобы классифицировать любой другой входной вектор. Например, классифицируйте входной вектор [0.7; 1.2].

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

x = [0.7; 1.2];
y = net(x);
plotpv(x,y);
circle = findobj(gca,'type','line');
circle.Color = 'red';

Включите "содержат" так предыдущий график, не стирается. Добавьте набор обучающих данных и строку классификации к графику.

hold on;
plotpv(X,T);
plotpc(net.IW{1},net.b{1});
hold off;

Наконец, масштабируйте в сферу интересов.

perceptron правильно классифицировал нашу новую точку (на красный) как категория "нуль" (представленный кругом) и не "один" (представленный плюс). perceptron учится правильно в намного более короткое время несмотря на выброс (сравните с "примером" Входных векторов Выброса).

axis([-2 2 -2 2]);