Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.15 Mб
Скачать

Лабораторная работа № 14 Исследование сетей Элмана

Цель работы: изучение архитектуры рекуррентных нейронных сетей Элмана и специальных функций для их создания, инициализации, настройки весов и смещений, обучения; ознакомление с демонстрационным примером и его скриптом, а также приобретение навыков построения сетей управления движущимися объектами, построения систем технического зрения и решения других динамических задача.

Теоретические сведения

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

Сети Элмана состоят их двух слоёв – выходного и входного, при этом входной слой охвачен динамической обратной связью с использованием линии задержки. Динамическая обратная связь позволяет учесть предысторию наблюдаемых процессов и накопить информацию для выработки правильной стратегии управления. В ряде применений используется несколько слоёв нейронов.

Во входном слое двухслойной сети Элмана используется передаточная функция гиперболического тангенса transig, в выходном слое – линейная функция purelin. Такое сочетание передаточных функций позволяет максимально точно аппроксимировать функции с конечным числом точек разрыва. Для этих целей необходимо также, чтобы выходной слой имел достаточно большое число нейронов.

Все эти слои Элмана имеют смещения. Функциями взвешивания и накопления являются функции dotprod и ntesum соответственно. Выход последнего слоя является выходом сети. Веса и смещения инициализируются с помощью функции initnw, реализующей алгоритм Нгуена–Видроу. Aдаптация реализуется с помощью функции adaptwb, которая устанавливает режим, при котором веса и смещения каждого слоя могут быть настроены с использованием собственных функций настройки. Для сетей Элмана такими функциями могут быть либо функция настройки методом градиентного спуска с возмущением leargdm. Критерием качества обучения может быть одна из двух функций: mse или msereg.

Сети Элмана создаются функцией

net = newelm(PR, [S1, S2, …, SN],

{TF1, TF2, …, TFN},

BTF, BLF, PF),

где PR – массив размера R 2 минимальных и максимальных значений для R векторов входа;

S1, S2, …, SN – количество нейронов в слоях;

TF1, TF2, …, TFN – функции активации в слоях, по умолчанию tansig;

BTF – обучающая функция, реализующая метод обратного распространения, по умолчанию traingdx;

BLF – функция настройки, реализующая метод обратного распространения, по умолчанию learngdm;

PF – критерий качества обучения, по умолчанию mse.

Динамическое описание входного слова определяется рекуррентными уравнениями:

Второй линейный слой является безынерционным и описывается соотношениями:

n2(k) = LW21a1(k) + b2;

a2(k) = purelin(n2(k)).

Задание 1. Создать рекуррентную нейронную сеть Элмана, которая для случайной булевой последовательности из нулей и единиц выдаёт булеву последовательность, имеющую единицы только в том случае, когда во входной последовательности встретились две единицы подряд:

P = round ( rand ( 1, 20 ) );

T = [ 0 ( P ( 1 : end – 1 ) + P ( 2 : end ) = = 2 ) ];

Pseq = con2seq(P); % массив ячеек Pseq;

Tseq = con2seq(T); % массив ячеек Tseq;

netnewelm ( [0 1], [10, 1], {′tansig′, ′logsig′}) % сеть с 10 ней- % ронами во входном слое;

gensim(net)

net.trainParam.goal = 0.001;

net.trainParam.epochs = 1000;

net = train(net, Pseq, Tseq);

Y = sim(net, Pseq)

Y1 = seq2con(Y);

E = round(T – Y1{1}) % нулевые ошибки.

Задание 2. Создать сеть Элмана для детектирования амплитуды гармонического сигнала, выполнив следующие действия:

  1. Создать выборки из двух синусоид с амплитудами 1.0 и 2.0:

p1 = sin(1 : 20);

p2 = sin(1 : 20) * 2;

  1. Сформировать целевые векторы:

t1 = ones(1, 20);

t2 = ones(1, 20) * 2.

  1. Сформировать набор векторов входа и целей:

p = [p1 p2 p1 p2];

t = [t1 t2 t1 t1].

  1. Сформировать обучающие последовательности:

Pseq = con2seq(p); % – массив ячеек;

Tseq = con2seq(t); % – массив ячеек;

  1. Создать сеть Элмана:

net = newelm( [ -2 2], [10, 1], …

{′tansig′, ′purelin′}, …

traingdx′)

net.layers{1}, net.IW{1, 1}, net.LW{1, 1}

net.layers{2}, net.LW{2, 1}.

  1. Обучить сеть:

net.trainParam.epochs = 1000;

net.trainParam.show = 25;

net.trainParam.goal = 0.01;

[net, tr] = train(net, Pseq, Tseq);

net.IW{1, 1}, net.LW{1, 1}, net.LW{2, 1}.

  1. Проверить сеть на обучающей последовательности:

figure(2)

a = sim(net, Pseq);

time = 1 : length(p);

plot(time, t, ′- -′, time, cat(2, a {:} ) )

axis([1 80 0.8 2.2]).

  1. Проверить сеть на произвольной последовательности:

p3 = sin(1 : 20) * 1.6;

t3 = ones(1, 20) * 1.6;

p4 = sin(1 : 20) * 1.2;

t4 = ones(1, 20) * 1.2;

p9 = [p3 p4 p3 p4];

t9 = [t3 t4 t3 t4];

pgseq = con2seq(pg);

figure(3);

a = sim(met, pgseq);

time = 1 : length(pg);

time = 1 : length(pg);

plot(time, tg, ‘- -’, time, cat(2, a{ : } ) )

axis( [1 80 0.8 2.2] ).

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