Для обучения линейной нейронной сети может быть применена типовая процедура обучения с помощью М-функции train. Эта функция для каждого вектора входа выполняет настройку весов и смещений, используя М-функцию learnp. В результате сеть будет настраиваться по сумме всех коррекций. Будем называть каждый пересчет для набора входных векторов эпохой. Это и отличает процедуру обучения от процедуры адаптации adapt, когда настройка параметров реализуется при представлении каждого отдельного вектора входа. Затем процедура train моделирует настроенную сеть для имеющегося набора векторов, сравнивает результаты с набором целевых векторов и вычисляет среднеквадратичную ошибку. Как только значение ошибки становится меньше заданного или исчерпано предельное число эпох, обучение прекращается.
Обратимся к тому же примеру, который использовался при рассмотрении процедуры адаптации, и выполним процедуру обучения.
P = [1 –1.2];% Вектор входов
T= [0.5, 1]; % Вектор целей
% Максимальное значение параметра обучения
|
|
maxlr = 0.40*maxlinlr(P,'bias');
% Создание линейной сети
net = newlin([–2,2],1,[0],maxlr);
% Расчет функции критерия качества
w_range=–1:0.2:1; b_range=–1:0.2:1; % Диапазоны значений веса и смещения
ES = errsurf(P,T, w_range, b_range, 'purelin');
% Построение поверхности функции критерия качества
surfc(w_range, b_range, ES) % Рис.5.5,а
На рис. 5.5, а построена поверхность функции критерия качества в пространстве параметров сети. В процессе обучения траектория обучения будет перемещаться из начальной точки в точку минимума критерия качества. Выполним расчет и построим траекторию обучения линейной сети для заданных начальных значений веса и смещения.
% Расчет траектории обучении
x = zeros(1,50); y = zeros(1,50);
net.IW{1}=1; net.b{1}= –1; % Начальные значения весов и смещения
x(1) = net.IW{1}; y(1) = net.b{1};
net.trainParam.goal = 0.001; % Пороговое значение критерия качества
net.trainParam.epochs = 1; % Число эпох
% Цикл вычисления весов и смещения для одной эпохи
for i = 2:50,
[net, tr] = train(net,P,T);
x(i) = net.IW{1};
y(i) = net.b{1};
end
% Построение линий уровня и траектории обучении
clf, contour(w_range, b_range, ES, 20), hold on
plot(x, y,'–*'), hold off, % Рис.5.5,б
На рис. 5.5, б символом * отмечены значения веса и смещения на каждом шаге обучения; видно, что примерно за 10 шагов при заданной точности (пороговое значение критерия качества)0.001 получим w = –0.22893, b = 0.70519. Это согласуется с решением, полученным с использованием процедуры адаптации.
а | б |
Рис. 5.5
Если не строить траектории процесса обучения, то можно выполнить обучение, обратившись к М-функции train только 1 раз:
net.IW{1}=1; net.b{1}= –1; % Начальные значения веса и смещения
net.trainParam.epochs = 50; % Число эпох обучения
net.trainParam.goal = 0.001; % Пороговое значение критерия качества
|
|
[net, tr] = train(net,P,T);
TRAINWB, Epoch 0/50, MSE 5.245/0.001.
TRAINWB, Epoch 11/50, MSE 0.000483544/0.001.
TRAINWB, Performance goal met.
net.IW, net.b
ans = [–0.22893]
ans = [0.70519]
На рис. 5.6 показано, как изменяется критерий качества на каждом цикле обучения.
Рис. 5.6
Если повысить точность обучения до значения 0.00001, то получим следующие
результаты:
net.trainParam.goal = 0.00001;
[net, tr] = train(net,P,T);
net.IW, net.b
TRAINWB, Epoch 0/50, MSE 0.000483544/1e–005.
TRAINWB, Epoch 6/50, MSE 5.55043e–006/1e–005.
TRAINWB, Performance goal met.
ans = [–0.22785]
ans = [ 0.72495]
Повышение точности на 2 порядка приводит к уточнению значений параметров
во втором знаке.