- •Лабораторная работа № 1. Активационная функция
- •Лабораторная работа № 2. Искусственные нейронные сети
- •Лабораторная работа № 3. Обучение искусственных нейронных сетей
- •Лабораторная работа № 4. Персептронные сети
- •Лабораторная работа № 5. Линейные нейронные сети
- •Лабораторная работа № 6. Сети Эльмана
- •Лабораторная работа № 7. Сети Хопфилда
- •Лабораторная работа № 8. Радиальные базисные сети общего вида
- •Лабораторная работа № 9. Радиальные базисные сети типа grnn
- •Лабораторная работа № 10. Радиальные базисные сети типа pnn
- •Лабораторная работа № 11. Самоорганизующиеся слои Кохонена
- •Лабораторная работа № 12 Самоорганизующиеся карты Кохонена
- •Литература
Лабораторная работа № 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] ).
Лабораторная работа № 7. Сети Хопфилда
Цели работы: 1) изучение архитектуры рекуррентных нейронных сетей Хопфилда и специальных функций для их создания, взвешивания входов, накопления и активизации; 2) ознакомление с демонстрационными примерами и их скриптами, а также приобретение навыков построения таких сетей для решения задач распознавания образов и создания ассоциативной памяти.
Задание 1. Создать сеть Хопфилда с двумя устойчивыми точками в трёхмерном пространстве, выполнив следующие команды:
T =[-1 -1 1 ; 1 -1 1] % целевые вершины
net =newhop(T); % создание сети
net, gensim(net) % параметры и структура сети
Ai = T ; % начальные условия для линий задержки
Y = sim(net,2,[], Ai); % сеть устойчива
Ai ={[-0.9 ; -0.8 ; 0.7]};
Y=sim(net,{1 5},{}, Ai); % переход к устойчивому состоянию [-1 -1 1]
Задание 2. Создать сеть Хопфилда с четырьмя устойчивыми точками в двухмерном пространстве, выполнив следующие команды:
T = [1 -1; -1 1; 1 1; -1 -1]′
plot(T(1, : ),T(2, : ), ′*r′) % точки равновесия;
axis([-1.1 1.1 -1.1 1.1]);
title(′Точки равновесия проектируемой сети′);
xlabel(′a(1)′), ylabel(′a(2)′)
net =newhop(T);
W=net.LW{1,1}
b=net.b{1,1}
Ai = T;
Y=sim(net,4,[],Ai)
plot(T(1, : ),T(2, : ), ′*r′), hold on ]
axis([-1.1 1.1 -1.1 1.1]) xlabel(‘a(1)’), ylabel(′a(2)′)
new=newhop(T);
[Y,Pf,Af]=sim(net,4,[],T);
for i=1:25
a={rands(2,1)};
[Y,Pf,Af]=sim(net,{1,20},{},a);
record=[cell2mat(a),cell2mat(Y)]
start=cell2mat(a);
plot(start(1.1), start(2.1),′kx′.record(1,:),record(2,:))
end