exponenta event banner

Входные векторы отклонения

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 на две категории, определенные Т.

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 on;
plotpv(X,T);
plotpc(net.IW{1},net.b{1});
hold off;

Наконец, увеличьте изображение интересующей области.

Перцептрон правильно классифицировал нашу новую точку (красным цветом) как категорию «ноль» (представленную кругом), а не «единицу» (представленную плюсом). Несмотря на длительное время обучения, перцептрон все равно учится правильно. Сведения о том, как сократить время обучения, связанное с векторами отклонения, см. в примере «Нормализованное правило перцептрона».

axis([-2 2 -2 2]);