Нейрон жесткого предела с 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 входных вектора имеют намного меньшие значения, чем пятый вектор в верхнем левом углу графика. perceptron должен правильно классифицировать эти 5 входных векторов на X в эти две категории, заданные T.
PERCEPTRON создает новую сеть, которая затем сконфигурирована с входом и целевыми данными, которые приводят к начальным значениям для его весов и смещения. (Настройка обычно не необходима, когда она сделана автоматически, АДАПТИРУЮТСЯ и TRAIN.)
net = perceptron; 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
Обратите внимание на то, что perceptron потребовались три передачи, чтобы разобраться в нем. Это долгое время для такой простой проблемы. Причиной в течение долгого учебного времени является вектор выброса. Несмотря на долгое учебное время, perceptron все еще учится правильно и может использоваться, чтобы классифицировать другие входные параметры.
Теперь 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 все еще учится правильно. Чтобы видеть, как уменьшать учебные времена, сопоставленные с векторами выброса, смотрите "Нормированный пример" Правила Perceptron.
axis([-2 2 -2 2]);