Линейный нейрон обучается, чтобы найти решение минимальной ошибки для задачи y с линейно зависимыми входными векторами. Если линейная зависимость y в входных векторах не совпадает в целевых векторах, задача нелинейна и не имеет линейного решения с нулевой ошибкой y.
X задает три 2-элементных шаблона входа (векторов-столбцов). Обратите внимание, что 0,5 раза больше суммы векторов (столбцов) 1 и 3 результатов в векторе 2. Это называется линейной зависимостью.
X = [ 1.0 2.0 3.0; ...
4.0 5.0 6.0];
T задает связанный 1-элементный целевой объект ( векторы-столбцы). Обратите внимание, что 0,5 раза больше суммы -1,0 и 0,5 не равны 1,0. Поскольку линейная зависимость в X не совпадает в T, эта задача нелинейна и не имеет y нулевой ошибки линейного решения.
T = [0.5 1.0 -1.0];
MAXLINLR находит самую быструю стабильную скорость обучения для TRAINWH. NEWLIN создает линейный нейрон y. NEWLIN принимает эти аргументы: 1) Rx2 матрица минимальных и максимальных значений для R входа элементов, 2) Количество элементов в векторе выхода, 3) Вход векторе задержки и 4) скорости обучения.
maxlr = maxlinlr(X,'bias');
net = newlin([0 10;0 10],1,[0],maxlr);
TRAIN использует правило Widrow-Hoff, чтобы обучать линейные сети по умолчанию. Мы покажем каждую 50 эпоху и обучим для y максимум 500 эпох.
net.trainParam.show = 50; % Frequency of progress displays (in epochs). net.trainParam.epochs = 500; % Maximum number of epochs to train. net.trainParam.goal = 0.001; % Sum-squared error goal.
Теперь сеть обучается на входах X и мишенях T. Обратите внимание, что из-за линейной зависимости между входными векторами задача не достигла цели ошибки, представленной черной линией.
[net,tr] = train(net,X,T);
Теперь мы можем протестировать ассоциатор с одним из исходных входов, [1; 4], и увидеть, вернёт ли он цель, 0,5. Результат не является 0,5, так как линейная сеть не может соответствовать нелинейной задаче, вызванной линейной зависимостью между входными векторами.
p = [1.0; 4]; y = net(p)
y = 0.8971