Нейрон с 2 входами жесткого предела не может правильно классифицировать 5 входных векторов, потому что они линейно неразделимы.
Каждый из пяти векторов-столбцов X задает 2-элементные векторы входа, а вектор-строка T задает целевые категории вектора. Постройте график этих векторов с помощью PLOTPV.
X = [ -0.5 -0.5 +0.3 -0.1 -0.8; ...
-0.5 +0.5 -0.5 +1.0 +0.0 ];
T = [1 1 0 0 0];
plotpv(X,T);
Перцептрон должен правильно классифицировать векторы входа в X в категории, заданные T. Поскольку два вида входа векторов не могут быть разделены прямой линией, перцептрон не сможет это сделать.
Здесь создается и конфигурируется начальный перцептрон. (Шаг строения обычно является необязательным, так как он выполняется автоматически ADAPT и TRAIN.)
net = perceptron; net = configure(net,X,T);
Добавьте начальную попытку нейрона классификации к графику. Начальные веса равны нулю, поэтому любой вход выдает тот же выход, и линия классификации даже не появляется на графике.
hold on
plotpv(X,T);
linehandle = plotpc(net.IW{1},net.b{1});
ADAPT возвращает новую сеть после обучения на входе и целевых данных, выходах и ошибке. Цикл позволяет сети неоднократно адаптироваться, строит график линии классификации и останавливается после 25 итераций.
for a = 1:25 [net,Y,E] = adapt(net,X,T); linehandle = plotpc(net.IW{1},net.b{1},linehandle); drawnow; end;
Обратите внимание, что нулевая ошибка так и не была получена. Несмотря на обучение, перцептрон не стал приемлемым классификатором. Возможность классифицировать только линейно разделяемые данные является фундаментальным ограничением перцептронов.