Процедура обучения

Для обучения линейной нейронной сети может быть применена типовая процедура обучения с помощью М-функции 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 порядка приводит к уточнению значений параметров
во вто­ром знаке.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: