Линейный нейрон обучен найти минимальную квадратичную невязку суммы линейной подгонкой к y нелинейной проблеме ввода/вывода.
X задает четыре входных набора с 1 элементом (вектор-столбцы). T задает сопоставленные цели с 1 элементом (вектор-столбцы). Обратите внимание на то, что отношение между значениями в X и в T нелинейно. Т.е. Никакой W и B не существуют таким образом что X*W+B = T для всех четырех множеств x и значений T выше.
X = [+1.0 +1.5 +3.0 -1.2]; T = [+0.5 +1.1 +3.0 -1.0];
ERRSURF вычисляет ошибки для y нейрона с y областью значений возможного веса и значений смещения. PLOTES строит эту ошибочную поверхность с y контурным графиком внизу.
Лучший вес и значения смещения - те, которые приводят к самой низкой точке на ошибочной поверхности. Обратите внимание на то, что, потому что y совершенная линейная подгонка не возможна, минимум имеет ошибку, больше, чем 0.
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);
MAXLINLR находит самую быструю устойчивую скорость обучения для обучения y линейной сетью. NEWLIN создает y линейный нейрон. NEWLIN берет эти аргументы: 1) матрица Rx2 min и макс. значений для элементов входа R, 2) Число элементов в выходном векторе, 3) Введите вектор задержки и 4) Скорость обучения.
maxlr = maxlinlr(X,'bias');
net = newlin([-2 2],1,[0],maxlr);
Замените учебные параметры по умолчанию путем определения максимального номера эпох. Это гарантирует, что обучение остановится.
net.trainParam.epochs = 15;
Чтобы показать путь обучения, мы обучим только одну эпоху в y время и вызовем PLOTEP каждая эпоха (код, не показанный здесь). График показывает y историю обучения. Каждая точка представляет эпоху, и синие линии показывают каждое изменение, внесенное правилом изучения (Видроу-Хофф по умолчанию).
% [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 < 15 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
tr=r;
Обучать функциональные выходные параметры обучившая сеть и y история производительности обучения (TR). Здесь ошибки построены относительно учебных эпох.
Обратите внимание на то, что ошибка никогда не достигает 0. Эта проблема нелинейна и поэтому y нулевая ошибка, линейное решение не возможно.
plotperform(tr);
Теперь используйте SIM, чтобы протестировать associator с одними из исходных входных параметров,-1.2, и видеть, возвращает ли это цель, 1.0.
Результат не очень близко к 0,5! Это вызвано тем, что сеть является лучшей линейной подгонкой к y нелинейной проблеме.
x = -1.2; y = net(x)
y = -1.1803