Нейрон с 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 в две категории, заданные T.
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», чтобы предыдущий график не стирался. Добавьте набор обучающих данных и классификационную линию к графику.
hold on; plotpv(X,T); plotpc(net.IW{1},net.b{1}); hold off;
Наконец, увеличьте масштаб области интереса.
Перцептрон правильно классифицировал нашу новую точку (в красном) как категорию « нуль» (представленную кругом), а не «единицу» (представленную плюсом). Перцептрон учится правильно за гораздо более короткое время, несмотря на выбросы (сравните с примером «Выбросы Входа Vectors»).
axis([-2 2 -2 2]);