Слишком Большая скорость обучения

Линейный нейрон обучен найти минимальное ошибочное решение для простой проблемы. Нейрон обучен со скоростью обучения, больше, чем та, предложенная MAXLINLR.

X задает два входных набора с 1 элементом (вектор-столбцы). T задает сопоставленные цели с 1 элементом (вектор-столбцы).

X = [+1.0 -1.2];
T = [+0.5 +1.0];

ERRSURF вычисляет ошибки для нейрона с областью значений возможного веса и значений смещения. PLOTES строит эту ошибочную поверхность с контурным графиком внизу. Лучший вес и значения смещения - те, которые приводят к самой низкой точке на ошибочной поверхности.

w_range = -2:0.4:2;
b_range = -2:0.4:2;
ES = errsurf(X,T,w_range,b_range,'purelin');
plotes(w_range,b_range,ES);

Figure contains 2 axes objects. Axes object 1 with title Error Surface contains 2 objects of type surface. Axes object 2 with title Error Contour contains 2 objects of type surface, contour.

MAXLINLR находит самую быструю устойчивую скорость обучения для того, чтобы обучить линейную сеть. NEWLIN создает линейный нейрон. Чтобы видеть, что происходит, когда скорость обучения является слишком большой, увеличьте скорость обучения до 225% рекомендуемого значения. NEWLIN берет эти аргументы: 1) матрица Rx2 min и макс. значений для элементов входа R, 2) Число элементов в выходном векторе, 3) Введите вектор задержки и 4) Скорость обучения.

maxlr = maxlinlr(X,'bias');
net = newlin([-2 2],1,[0],maxlr*2.25);

Замените параметры обучения по умолчанию путем определения максимального номера эпох. Это гарантирует, что обучение остановится:

net.trainParam.epochs = 20;

Чтобы показать путь обучения, мы обучим только одну эпоху за один раз и вызовем PLOTEP каждая эпоха (код, не показанный здесь). График показывает историю обучения. Каждая точка представляет эпоху, и синие линии показывают каждое изменение, внесенное правилом изучения (Видроу-Хофф по умолчанию).

%[net,tr] = train(net,X,T);                                                    
net.trainParam.epochs = 1;
net.trainParam.show = NaN;
h=plotep(net.IW{1},net.b{1},mse(T-net(X)));     
[net,tr] = train(net,X,T);                                                    
r = tr;
epoch = 1;
while epoch < 20
   epoch = epoch+1;
   [net,tr] = train(net,X,T);
   if length(tr.epoch) > 1
      h = plotep(net.IW{1,1},net.b{1},tr.perf(2),h);
      r.epoch=[r.epoch epoch]; 
      r.perf=[r.perf tr.perf(2)];
      r.vperf=[r.vperf NaN];
      r.tperf=[r.tperf NaN];
   else
      break
   end
end

Figure contains 2 axes objects. Axes object 1 with title Error Surface contains 42 objects of type surface, line. Axes object 2 with title Error Contour contains 22 objects of type surface, contour, line.

tr=r;

Обучать функциональные выходные параметры обучивший сеть и история производительности обучения (TR). Здесь ошибки построены относительно учебных эпох.

plotperform(tr);

Figure Performance (plotperform) contains an axes object. The axes object with title Best Training Performance is 0.625 at epoch 0 contains 6 objects of type line. These objects represent Train, Best.

Мы можем теперь использовать SIM, чтобы протестировать associator с одними из исходных входных параметров,-1.2, и видеть, возвращает ли это цель, 1.0. Результат не очень близко к 0,5! Это вызвано тем, что сеть была обучена со слишком большой скоростью обучения.

x = -1.2;
y = net(x)
y = 2.0913