Лабораторная работа № 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] ).