exponenta event banner

Нормализованное правило перцептрона

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 входных вектора имеют гораздо меньшие величины, чем пятый вектор в левом верхнем углу графика. Перцептрон должен надлежащим образом классифицировать 5 входных векторов в X на две категории, определенные Т.

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

Затем сеть конфигурируется с входными и целевыми данными, что приводит к начальным значениям ее весов и смещения. (Конфигурирование, как правило, не требуется, поскольку выполняется автоматически с помощью ADAPT и TRAIN.)

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

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

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

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

ADAPT возвращает новый сетевой объект, который работает как лучший классификатор, сетевой вывод и ошибку. Этот цикл позволяет сети адаптироваться, выводить на график классификационную линию и продолжается до тех пор, пока ошибка не станет нулевой.

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;

Наконец, увеличьте изображение интересующей области.

Перцептрон правильно классифицировал нашу новую точку (красным цветом) как категорию «ноль» (представленную кругом), а не «единицу» (представленную плюсом). Перцептрон учится должным образом за гораздо более короткое время, несмотря на отклонение (сравните с примером «Outlier Input Vectors»).

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