Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc
Скачиваний:
857
Добавлен:
07.03.2016
Размер:
15.55 Mб
Скачать

Обучение сети

Для обучения сети Элмана могут быть использованы как процедура адаптации, так и процедура обучения, реализуемые с помощью функций adapt иtrainсоответственно.

В процессе процедуры адаптации на каждом шаге выполняются следующие действия:

  • моделирование сети при подаче полного набора векторов входа и вычисление ошибки сети;

  • вычисление приближенного градиента функционала ошибки относительно весов и смещений методом обратного распространения ошибки;

  • настройка весов с использованием функции настройки, выбираемой пользователем; рекомендуется функция learngdm.

В процессе процедуры обучения на каждом цикле выполняются следующие действия:

  • моделирование сети при подаче последовательности входных сигналов, сравнение с целевыми выходами и вычисление ошибки;

  • вычисление приближенного градиента функционала ошибки относительно весов и смещений методом обратного распространения ошибки;

  • настройка весов с использованием функции настройки, выбираемой пользователем; рекомендуется функция traingdx.

Сети Элмана не обеспечивают высокой точности решения, поскольку присутствие обратной связи в рекуррентном слое не позволяет вычислить точно градиент функционала.

В дальнейшем для обучения сети Элмана используется М-функция train. Ее входными аргументами являются обучающие последовательности Pseq и Tseq, в качестве метода обучения используется метод обратного распространения ошибки с возмущением и адаптацией параметра скорости настройки. Количество циклов обучения принимается равным 1000, периодичность вывода результатов – 20 циклов, конечная погрешность обучения – 0.01:

net.trainParam.epochs = 1000;

net.trainParam.show = 25;

net.trainParam.goal = 0.01;

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

После 500 циклов обучения получим следующий график ошибки (рис. 8.2).

Рис. 8.2

Требуемая точность обучения обеспечивается за 728 циклов. Теперь можно проверить работу сформированной сети.

Проверка сети

Будем использовать для проверки сети входы обучающей последовательности:

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

На рис. 8.3 приведены графики входного и выходного сигналов.

Рис. 8.3

Как следует из анализа рисунка, сеть справляется с решением задачи детектирования амплитуды на наборах обучающего множества. Однако неясно, как она будет вести себя на других наборах входа. Обладает ли построенная сеть Элмана свойством обобщения? Попробуем проверить это, выполнив следующие исследования.

Подадим на сеть набор сигналов, составленный из двух синусоид с амплитудами 1.6 и 1.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;

pg = [p3 p4 p3 p4];

tg = [t3 t4 t3 t4];

pgseq = con2seq(pg);

figure(3)

a = sim(net,pgseq);

ime = 1:length(pg);

plot(time, tg, '––', time, cat(2,a{:}))

axis([1 80 0.8 2.2])

Результат представлен на рис. 8.4.

Рис. 8.4

На этот раз сеть хуже справляется с задачей. Сеть стремится детектировать значение амплитуды, но делает это не очень точно. Улучшенное обобщение могло быть получено, обучая сеть на большее количество амплитуд, чем только на значения 1.0 и 2.0. Использование трех или четырех гармонических сигналов с различными амплитудами может привести к намного лучшему датчику амплитуд.

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