Навигация по странице:
-
P = [4 5 6]; T = [1.5 3.6 6.7]; net = newgrnn(P,T); net.layers{1}.size % Число нейронов в скрытом слое
-
P = [1 2 3 4 5 6 7 8]; T = [0 1 2 3 2 1 2 1];
-
P2 = –1:0.1:10; A2 = sim(net,P2); plot(P2,A2,–k,linewidth,2) hold on, plot(P,T,*k,markersize,10)
|
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин
|
Название |
В. Г. Потемкин
|
Анкор |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Дата |
26.04.2017 |
Размер |
14.83 Mb. |
Формат файла |
|
Имя файла |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Тип |
Книга
#3790
|
страница |
21 из 50 |
|
6.1. Сети GRNN
Нейронные сети GRNN (Generalized Regression Neural Network) описаны в работе [43] и предназначены для решения задач обобщенной регрессии, анализа временных рядов
и аппроксимации функций. Характерной особенностью этих сетей является очень высокая скорость их обучения.
Архитектура сети
Архитектура сети GRNN показана на рис. 6.10. Она аналогична архитектуре радиальной базисной сети, но отличается структурой второго слоя, в котором используется блок normprod для вычисления нормированного скалярного произведения строки массива весов LW21 и вектора входа a1 в соответствии со следующим соотношением:
. (6.3)
Рис. 6.10
Первый слой – это радиальный базисный слой с числом нейронов, равным числу элементов Q обучающего множества; в качестве начального приближения для матрицы весов выбирается массив P'; смещение b1 устанавливается равным вектор-столбцу с элементами 0.8326/SPREAD. Функция dist вычисляет расстояние между вектором входа и вектором веса нейрона; вход функции активации n1 равен поэлементному произведению взвешенного входа сети на вектор смещения; выход каждого нейрона первого слоя a1 является результатом преобразования вектора n1 радиальной базисной функцией radbas. Если вектор веса нейрона равен транспонированному вектору входа, то взвешенный вход равен 0, а выход функции активации – 1. Если расстояние между вектором входа и вектором веса нейрона равно spread, то выход функции активации будет равен 0.5.
Второй слой – это линейный слой с числом нейронов, также равным числу элементов Q обучающего множества, причем в качестве начального приближения для матрицы весов LW{2,1} выбирается массив T. Предположим, что имеем вектор входа pi, близкий к одному из векторов входа p из обучающего множества. Этот вход pi генерирует значение выхода слоя ai1, близкое к 1. Это приводит к тому, что выход слоя 2 будет близок к ti.
Если параметр влияния SPREAD мал, то радиальная базисная функция характеризуется резким спадом и диапазон входных значений, на который реагируют нейроны скрытого слоя, оказывается весьма малым. С увеличением параметра SPREAD наклон радиальной базисной функции становится более гладким, и в этом случае уже несколько нейронов реагируют на значения вектора входа. Тогда на выходе сети формируется вектор, соответствующий среднему нескольких целевых векторов, соответствующих входным векторам обучающего множества, близких к данному вектору входа. Чем больше значение параметра SPREAD, тем большее число нейронов участвует в формировании среднего значения, и в итоге функция, генерируемая сетью, становится более гладкой.
Синтез сети
Для создания нейронной сети GRNN предназначена М-функция newgrnn. Зададим следующее обучающее множество векторов входа и целей и построим сеть GRNN:
P = [4 5 6];
T = [1.5 3.6 6.7];
net = newgrnn(P,T);
net.layers{1}.size % Число нейронов в скрытом слое
ans = 3
Эта сеть имеет 3 нейрона в скрытом слое. Промоделируем построенную сеть сначала для одного входа, а затем для последовательности входов из интервала [4 7]:
p = 4.5;
v = sim(net,p);
p1 = 4:0.1:7;
v1 = sim(net,p1);
plot(P,T,'*k',p,v,'ok',p1,v1,'–k','MarkerSize',10,'LineWidth',2)
Результат показан на рис. 6.11.
Рис. 6.11
Заметим, что для сети GRNN размер вводимого вектора может отличаться от размера векторов, используемых в обучающей последовательности. Кроме того, в данном случае аппроксимирующая функция может значительно отличаться от значений, соответствующих обучающей последовательности.
Демонстрационная программа demogrn1 иллюстрирует, как сети GRNN решают задачи аппроксимации. Определим обучающее множество в виде массивов Р и Т.
P = [1 2 3 4 5 6 7 8];
T = [0 1 2 3 2 1 2 1];
Для создания сети GRNN используется функция newgrnn. Примем значение параметра влияния SPREAD немного меньшим, чем шаг задания аргумента функции (в данном случае 1), чтобы построить аппроксимирующую кривую, близкую к заданным точкам. Как мы уже видели ранее, чем меньше значение параметра SPREAD, тем ближе точки аппроксимирующей кривой к заданным, но тем менее гладкой является сама кривая:
spread = 0.7;
net = newgrnn(P,T,spread);
net.layers{1}.size % Число нейронов в скрытом слое
ans = 8
A = sim(net,P);
plot(P,T,'*k','markersize',10)
hold on,
plot(P,A,'ok','markersize',10);
Результат показан на рис. 6.12.
Рис. 6.12
Моделирование сети для диапазона значений аргумента позволяет увидеть всю
аппроксимирующую кривую, причем возможна экстраполяция этой кривой за пределы области ее определения. Для этого зададим интервал аргумента в диапазоне [–1 10]:
P2 = –1:0.1:10;
A2 = sim(net,P2);
plot(P2,A2,'–k','linewidth',2)
hold on,
plot(P,T,'*k','markersize',10)
Результат показан на рис. 6.13.
Рис. 6.13
Сформированная сеть GRNN использует всего 8 нейронов в скрытом слое и весьма успешно решает задачу аппроксимации и экстраполяции нелинейной зависимости, восстанавливаемой по экспериментальным точкам.
|
|
|