Лабораторная работа № 6. Сети Эльмана

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

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

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

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

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

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

net – newelm ( [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;

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

t1 = ones(1, 20);

t2 = ones(1, 20) * 2;

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

p = [p1 p2 p1 p2];

t = [t1 t2 t1 t1].

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

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

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

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

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}.

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

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}.

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

figure(2)

a = sim(net, Pseq);

time = 1 : length(p);

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

axis([1 80 0.8 2.2]).

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

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] ).