Нейрон жесткого предела с 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 (значение по умолчанию).
Сеть затем сконфигурирована с входом и целевыми данными, которые приводят к начальным значениям для его весов и смещения. (Настройка обычно не необходима, когда она сделана автоматически, АДАПТИРУЮТСЯ и ОБУЧАЮТСЯ.)
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]);