Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

Xlabel(''), ylabel('Выходыa(I)'),grid

subplot(3,1,2)

plot(0:63,[[0 0]; W],'k') % Рис.3.2,б

Xlabel(''), ylabel('Весавходовw(I)'),grid

subplot(3,1,3)

semilogy(1:63, ee,'+k') % Рис.3.2,в

Xlabel('Циклы'), ylabel('Ошибка'),grid

Рис. 3.2

Как следует из анализа графиков, для достижения требуемой точности адаптации требуется 12 шагов. Сравнивая рис. 3.2 и 3.1, можно убедиться, что существует различие в динамике процедур адаптации при последовательном и групповом представлении данных.

Динамические сети.Эти сети характеризуются наличием линий задержки, и для них последовательное представление входов является наиболее естественным.

Последовательный способ.Обратимся к линейной модели нейронной сети с одним входом и одним элементом запаздывания. Установим начальные условия на линии задержки, а также для весов и смещения равными 0, а параметр скорости настройки равным 0.5:

net = newlin([–1 1],1,[0 1],0.5);

Pi = {0}; % Начальное условие для элемента запаздывания

net.IW{1} = [0 0]; % Значения весов

net.biasConnect = 0; % Значение смещения

Чтобы применить последовательный способ адаптации, представим входы и цели как массивы ячеек:

P = {–1/2 1/3 1/5 1/4}; % Вектор входа

T = { –1 1/6 11/15 7/10}; % Вектор цели

Попытаемся приспособить сеть для формирования нужного выхода на основе следующего соотношения:

y(t) = 2p(t) + p(t–1).

Используем для этой цели М-функцию adapt и основной цикл адаптации сети с заданной погрешностью, как это уже было описано выше:

EE = 10; i = 1;

while EE > 0.0001

[net,a{i},e{i},pf] = adapt(net,P,T);

W(i,:)=net.IW{1,1};

EE = mse(e{i});

ee(i) = EE;

i = i+1;

end

Сеть адаптировалась за 22 цикла. Результатом адаптации при заданной погрешности являются следующие значения коэффициентов линейной зависимости, значений выходов нейронной сети, приближающихся к значениям желаемого выхода, а также среднеквадратичная погрешность адаптации:

W(22,:)

ans = 1.983 0.98219

a{22}

ans = [–0.98955] [0.17136] [0.72272] [0.69177]

EE

EE = 7.7874e–005

Построим графики зависимости выходов системы и весовых коэффициентов от числа циклов обучения (рис. 3.3):

subplot(3,1,1)

plot(0:22,[zeros(1,4); cell2mat(cell2mat(a'))],'k') % Рис.3.3,a

Xlabel(''), ylabel('Выходыa(I)'),grid

subplot(3,1,2)

plot(0:22,[[0 0]; W],'k') % Рис.3.3,б

Xlabel(''), ylabel('Весавходовw(I)'),grid

subplot(3,1,3)

semilogy(1:22,ee,'+k') % Рис.3.3,в

Xlabel('Циклы'), ylabel('Ошибка'),grid

Рис. 3.3

На рис. 3.3, апоказаны выходы нейронов в процессе адаптации сети, а на рис. 3.3,б– коэффициенты восстанавливаемой зависимости, которые соответствуют элементам вектора весов входа.

Групповой способпредставления обучающего множества для адаптации динамических систем не применяется.

Обучение нейронных сетей

Статические сети.Воспользуемся рассмотренной выше моделью однослойной линейной сети с двухэлементным вектором входа, значения которого находятся в интервале [–1 1], и нулевым параметром скорости настройки, как это было для случая адаптации:

% Формирование однослойной статической линейной сети с двумя входами

% и нулевым параметром скорости настройки

net = newlin([–1 1;–1 1],1, 0, 0);

net.IW{1} = [0 0]; % Значения весов

net.b{1} = 0; % Значения смещений

Требуется обучить параметры сети так, чтобы она формировала линейную зависимость вида

Последовательный способ. Для этого представим обучающую последовательность в виде массивов ячеек

P = {[–1; 1] [–1/3; 1/4] [1/2; 0] [1/6; 2/3]}; % Массив векторов входа

T = {–1 –5/12 1 1}; % Массив векторов цели

Теперь все готово к обучению сети. Будем обучать ее с помощью функции trainв течение 30 циклов.

В этом случае для обучения и настройки параметров сети используются функции trainwb и learnwh соответственно.

% Параметр скорости настройки весов

net.inputWeights{1,1}.learnParam.lr = 0.2;

net.biases{1}.learnParam.lr = 0; % Параметр скорости настройки смещений

net.trainParam.epochs = 30; % Число циклов обучения

net1 = train(net,P,T);

Параметры сети после обучения равны следующим значениям:

W = net1.IW{1}

W = 1.9214 0.92599

y = sim(net1, P)

y = [–0.99537] [–0.40896] [0.96068] [0.93755]

EE = mse([y{:}]–[T{:}])

EE = 1.3817e–003

Зависимость величины ошибки обучения от числа циклов обучения приведена на рис. 3.4.

Рис. 3.4

Это тот же самый результат, который был получен для группового способа адаптации с использованием функции adapt.

Групповой способ. Для этого представим обучающую последовательность в виде массивов форматаdoublearray:

P = [–1 –1/3 1/2 1/6; 1 1/4 0 2/3];

T = [–1 –5/12 1 1];

net1 = train(net,P,T);

TRAINWB, Epoch 0/10, MSE 0.793403/0.

TRAINWB, Epoch 10/10, MSE 0.00243342/0.

TRAINWB, Maximum epoch reached.

Параметры сети после обучения равны следующим значениям:

W = net1.IW{1}

W = 1.9214 0.92599

y = sim(net1, P)

y = –0.99537 –0.40896 0.96068 0.93755

EE = mse(y–T)

EE = 1.3817e–003

Этот результат полностью совпадает с результатом последовательного обучения этой же сети.

Динамические сети.Обучение динамических сетей выполняется аналогичным образом с использованием методаtrain.

Последовательный способ.Обратимся к линейной модели нейронной сети с одним входом и одним элементом запаздывания.

Установим начальные условия для элемента запаздывания, весов и смещения равными 0, а параметр скорости настройки равным 0.5:

net = newlin([–1 1],1,[0 1],0.5);

Pi = {0}; % Начальное условие для элемента запаздывания

net.IW{1} = [0 0]; % Значения весов

net.biasConnect = 0; % Значение смещения

net.trainParam.epochs = 22;

Чтобы применить последовательный способ обучения, представим входы и цели как массивы ячеек:

P = {–1/2 1/3 1/5 1/4}; % Вектор входа

Обучим сеть формировать нужный выход на основе соотношения y(t) = 2p(t) + p(t–1), тогда

T = { –1 1/6 11/15 7/10}; % Вектор цели

Используем для этой цели М-функцию train:

net1 = train(net, P, T, Pi);

Параметры сети после обучения равны следующим значениям:

W = net1.IW{1}

W = 1.9883 0.98414

y = sim(net1, P)

y = [–0.99414] [0.17069] [0.7257] [0.6939]

EE = mse([y{:}]–[T{:}])

EE = 3.6514e–005

График зависимости ошибки обучения от числа циклов приведен на рис. 3.5.

Рис. 3.5

Предлагаем читателю самостоятельно выполнить сравнение результатов обучения с результатами адаптации этой же сети.

Групповой способ представления обучающей последовательности для обучения динамических систем не применяется.