exponenta event banner

Линейные неразделяемые векторы

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 на категории, определенные Т. Поскольку два вида входных векторов не могут быть разделены прямой линией, перцептрон не сможет это сделать.

Здесь создается и конфигурируется начальный перцептрон. (Этап конфигурирования обычно является необязательным, поскольку он выполняется автоматически 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;

Обратите внимание, что нулевая ошибка так и не была получена. Несмотря на тренировки, перцептрон не стал приемлемым классификатором. Фундаментальным ограничением перцептронов является только способность классифицировать линейно разделяемые данные.