Нейрон с 2 входами жесткого предела обучен классифицировать 5 входных векторов в две категории. Однако, поскольку 1 входной вектор намного больше, чем все остальные, обучение занимает много времени.
Каждый из пяти векторов-столбцов 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 создает новую сеть, которая затем конфигурируется с входными и целевыми данными, что приводит к исходным значениям для его весов и смещения. (Строение обычно не требуется, так как выполняется автоматически с помощью ADAPT и TRAIN.)
net = perceptron; 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
Обратите внимание, что перцептрону потребовалось три прохода, чтобы исправить это. Это долгое время для такой простой проблемы. Причиной длительного времени обучения является вектор выбросов. Несмотря на длительное время обучения, перцептрон все еще учится правильно и может использоваться для классификации других входов.
Теперь 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;
Наконец, увеличьте масштаб области интереса.
Перцептрон правильно классифицировал нашу новую точку (в красном) как категорию « нуль» (представленную кругом), а не «единицу» (представленную плюсом). Несмотря на длительное время обучения, перцептрон все еще учится правильно. Чтобы увидеть, как уменьшить время обучения, связанное с векторами выбросов, смотрите пример «Нормализованное правило Перцептрона».
axis([-2 2 -2 2]);