- •Лабораторная работа № 1 Основы программирования в системе matlab
- •Язык программирования системы matlab имеет следующие средства для построения команд и написания м-файлов:
- •If Условие
- •2. Сохранить файл под именем «pcr.M».
- •3. Выполнить в командном окне matlab следующую команду:
- •2. Сохранить файл под именем «fun.M».
- •3. Выполнить в командном окне matlab следующую команду:
- •Массивы ячеек
- •2. Сохранить файл под именем «strdialog.M».
- •3. Выполнить в командном окне matlab следующую команду:
- •Модели искусственного нейрона
- •Лабораторная работа № 4 Искусственные нейронные сети
- •Лабораторная работа № 5 Методы и алгоритмы обучения искусственных нейронных сетей
- •Теоретические сведения
- •Xlabel(′′), ylabel(′Выходы a(I)′)
- •Xlabel(′′), ylabel(′Веса входов w(I) ′)
- •Xlabel(′Циклы′), ylabel(′Ошибка′), grid
- •Xlabel(′′), ylabel(′Выходы a(I′′), grid
- •Xlabel(′′), ylabel(′Веса входов w(I)′), grid
- •Xlabel(′Циклы′), ylabel(′Ошибка′), grid
- •Xlabel(′′), ylabel(′Выходы a(I)′), grid
- •Xlabel(′′), ylabel(‘Веса входов w(I)′), grid
- •Xlabel(′Циклы ′), ylabel(′Ошибка′)grid
- •Лабораторная работа № 7 Исследование линейных нейронных сетей
- •Xlabel('Время, c'), ylabel('Процессы'))
- •Лабораторная работа № 8 Исследование радиальных базисных сетей общего вида
- •Лабораторная работа № 9 Исследование радиальных базисных сетей типа grnn
- •Лабораторная работа № 10 Исследование радиальных базисных сетей типа pnn
- •Лабораторная работа № 11 Исследование самоорганизующихся слоев Кохонена
- •Лабораторная работа № 12 Исследование самоорганизующихся карт Кохонена
- •Лабораторная работа № 13 Исследование самоорганизующихся lvq-сетей
- •Лабораторная работа № 14 Исследование сетей Элмана
- •Лабораторная работа № 15 Исследование сетей Хопфилда
- •Лабораторная работа № 16
Лабораторная работа № 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;
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.0 и 2.0:
p1 = sin(1 : 20);
p2 = sin(1 : 20) * 2;
Сформировать целевые векторы:
t1 = ones(1, 20);
t2 = ones(1, 20) * 2.
Сформировать набор векторов входа и целей:
p = [p1 p2 p1 p2];
t = [t1 t2 t1 t1].
Сформировать обучающие последовательности:
Pseq = con2seq(p); % – массив ячеек;
Tseq = con2seq(t); % – массив ячеек;
Создать сеть Элмана:
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}.
Обучить сеть:
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}.
Проверить сеть на обучающей последовательности:
figure(2)
a = sim(net, Pseq);
time = 1 : length(p);
plot(time, t, ′- -′, time, cat(2, a {:} ) )
axis([1 80 0.8 2.2]).
Проверить сеть на произвольной последовательности:
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] ).
Обучить и проверить сеть для четырех гармонических сигналов.
