Культура
Искусство
Языки
Языкознание
Вычислительная техника
Информатика
Финансы
Экономика
Биология
Сельское хозяйство
Психология
Ветеринария
Медицина
Юриспруденция
Право
Физика
История
Экология
Промышленность
Энергетика
Этика
Связь
Автоматика
Математика
Электротехника
Философия
Религия
Логика
Химия
Социология
Политология
Геология
|
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6. В. Г. Потемкин
|
Название |
В. Г. Потемкин
|
Анкор |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Дата |
26.04.2017 |
Размер |
14.83 Mb. |
Формат файла |
|
Имя файла |
Медведев В.С., Потемкин В.Г. Нейронные сети. MATLAB 6.doc |
Тип |
Книга
#3790
|
страница |
48 из 50 |
|
11.9. Моделирование нейронных сетей и система Simulink
Функции моделирования сети
SIM
|
Моделирование нейронной сети
|
Синтаксис:
[Y,Pf,Af,E,perf] = sim(net,P,Pi,Ai,T)
[Y,Pf,Af,E,perf] = sim(net,{Q TS},Pi,Ai,T)
[Y,Pf,Af,E,perf] = sim(net,Q,Pi,Ai,T)
Описание:
Функция [Y, Pf, Af E, perf] = sim(net, P, Pi, Ai, T) выполняет моделирование нейронной сети и имеет следующие входные и выходные аргументы.
Входные аргументы:
net – имя нейронной сети;
P – массив входов;
Pi – начальные условия на ЛЗ входов, по умолчанию нулевой вектор;
Ai – начальные условия на ЛЗ слоев, по умолчанию нулевой вектор;
T – вектор целей, по умолчанию нулевой вектор.
Выходные аргументы:
Y – массив выходов;
Pf – состояния на ЛЗ входов после моделирования;
Af – состояния на ЛЗ слоев после моделирования;
E – массив ошибок;
perf – значение функционала качества.
Заметим, что аргументы Pi, Ai, Pf и Af являются необязательными и применяются
в случае динамических сетей с ЛЗ.
Входные аргументы P и T могут иметь 2 формата: cell array и double array. Формат cell array наиболее прост для понимания и соответствует последовательному представлению данных.
Последовательное представление данных. Каждую строку массива ячеек можно рассматривать как временную последовательность, и тогда описание многомерной сети может быть выполнено следующим образом:
P – массив ячеек размера NiTS, каждый элемент которого P{i, ts} – числовой массив размера RiQ;
T – массив ячеек размера NtTS, каждый элемент которого P{i, ts} – числовой массив размера ViQ;
Pi –массив ячеек размера NiID, каждый элемент которого Pi{i, k} – числовой массив размера RiQ;
Ai – массив ячеек размера NlLD, каждый элемент которого Ai{i, k} – числовой массив размера SiQ;
Y – массив ячеек размера NoTS, каждый элемент которого Y{i, ts} – числовой массив размера UiQ;
Pf – массив ячеек размера NiID, каждый элемент которого Pf{i, k} – числовой массив размера RiQ;
Af – массив ячеек размера NlLD, каждый элемент которого Af{i, k} – числовой массив размера SiQ.
Параметры описания массивов ячеек и их связь с параметрами сети показаны в следующей таблице.
Параметр описания
|
Параметр сети
|
Назначение
|
Ni
|
net.numInputs
|
Количество векторов входа
|
Nl
|
net.numLayers
|
Количество слоев
|
No
|
net.numOutputs
|
Количество выходов
|
Nt
|
net.numTargets
|
Количество целевых выходов
|
ID
|
net.numInputDelays
|
Максимальное значение задержки на входе
|
TS
|
|
Число шагов по времени
|
Q
|
|
Количество реализаций для фиксированного момента времени
|
LD
|
net.numLayerDelays
|
Максимальные значения задержек для слоев
|
Ri
|
net.inputs{i}.size
|
Количество элементов i-го вектора входа
|
Si
|
net.layers{i}.size
|
Количество нейронов i-го слоя
|
Vi
|
net.targets{i}.size
|
Количество элементов i-го вектора цели
|
Ui
|
net.outputs{i}.size
|
Количество элементов i-го вектора выхода
|
Столбцы массивов начальных условий Pi, Pf, Ai, Af упорядочены следующим образом:
Pi{i, k} – значение начального условия для линии задержки i-го входа в момент времени ts = k – ID;
Pf{i, k} – значение начального условия для линии задержки i-го входа в момент времени ts = TS + k – ID;
Ai{i, k} – значение начального условия для линии задержки i-го слоя в момент времени ts = k – LD;
Af{i, k} – значение начального условия для линии задержки i-го слоя в момент времени ts = TS + k – LD.
Групповое представление данных можно использовать только при адаптации статических сетей (TS = 1). При этом следует помнить, что при переходе от формата последовательного представления данных cell array к формату группового представления double array массив ячеек, содержащий, например, Ni числовых массивов размера RiQ преобразуется
в единственный числовой массив размера Q.
Следующая таблица поясняет связь этих форм представления.
-
-
|
Формат
|
Аргумент
|
Cell array
|
Double array
|
|
Size(P)
|
Size(P{I,1})
|
Size(P)
|
P
|
Ni1
|
RiQ
|
|
T
|
Nt1
|
ViQ
|
|
Pi
|
NiID
|
RiQ
|
|
Ai
|
NlLD
|
SiQ
|
|
Y
|
No1
|
UiQ
|
|
Pf
|
NiID
|
RiQ
|
|
Af
|
NlLD
|
SiQ
|
|
Функция [Y, Pf, Af, E, perf] = sim(net, {Q TS}, Pi, Ai, T) применяется для моделирования динамических сетей без входов при последовательном представлении данных.
Функция [Y, Pf, Af, E, perf] = sim(net, Q, Pi, Ai, T) применяется для моделирования динамических сетей без входов при групповом представлении данных.
Пример:
Создадим нейронную сеть персептрона с одним слоем и двухэлементным входом
с диапазоном значений [0 1] и одним нейроном:
net = newp([0 1;0 1],1);
Теперь можно промоделировать персептрон, подавая различные последовательности векторов входа: 1 вектор с двумя элементами, группа из двух векторов с тремя элементами, последовательность из трех векторов, что соответствует различным формам представления данных:
p1 = [.2; .9]; a1 = sim(net,p1)
p2 = [.2 .5 .1 ;.9 .3 .7]; a2 = sim(net,p2)
p3 = {[.2; .9] [.5; .3] [.1; .7]}; a3 = sim(net,p3)
a1 = 1
a2 = 1 1 1
a3 = [1] [1] [1]
В данном случае в качестве результата выводятся только выходы нейрона.
Создадим динамическую однослойную линейную сеть с двумя нейронами, трехэлементным входом с диапазоном значений [0 2] и ЛЗ на входе [0 1]:
net = newlin([0 2;0 2;0 2],2,[0 1]);
Линейный слой моделируется с последовательностью из двух векторов входа для заданных по умолчанию начальных условия на ЛЗ:
p1 = {[2; 0.5; 1] [1; 1.2; 0.1]};
[y1,pf] = sim(net,p1)
y1 = [21 double] [21 double]
pf = [31 double]
Затем этот слой моделируется еще для трех векторов, используя состояния на элементах задержки как новые начальные условия:
p2 = {[0.5; 0.6; 1.8] [1.3; 1.6; 1.1] [0.2; 0.1; 0]};
[y2,pf] = sim(net,p2,pf)
y2 = [21 double] [21 double] [21 double]
pf = [31 double]
Создадим двухслойную сеть Элмана с одноэлементным входом с диапазоном значений
[0 1], имеющую 3 нейрона с функцией активации tansig в слое 1 и 2 нейрона с функцией активации purelin в слое 2. Сеть Элмана имеет ЛЗ [0 1] при переходе от слоя 1 к слою 2:
net = newelm([0 1],[3 2],{'tansig','purelin'});
Сеть моделируется для трехэлементного вектора входа, используя заданные по умолчанию начальные условия на ЛЗ:
p1 = {0.2 0.7 0.1};
[y1,pf,af,e,perf] = sim(net,p1)
y1 = [21 double] [21 double] [21 double]
pf = Empty cell array: 1–by–0
af =
[31 double]
[21 double]
e = [21 double] [21 double] [21 double]
perf = 0.8153
[e{:}]
ans =
0.4779 –0.5393 1.0238
–1.0069 –1.3680 –0.6627
Выполним еще 1 шаг моделирования, но теперь для четырехэлементного вектора
входа, используя состояния на элементах задержки как новые начальные условия:
p2 = {0.1 0.9 0.8 0.4};
[y1,pf,af,e,perf] = sim(net,p2,pf,af)
y2 = [21 double] [21 double] [21 double] [21 double]
pf = Empty cell array: 1–by–0
af =
[31 double]
[21 double]
e = [21 double] [21 double] [21 double] [21 double]
perf = 0.8560
[e{:}]
ans =
–0.3919 –0.3637 –0.2766 0.2490
–1.2888 –1.3479 –1.3269 –1.0886
Cправкa:
help network/sim
Сопутствующие функции: INIT, ADAPT, TRAIN.
11.9.1. Применение системы Simulink
ППП Simulink, входящий в состав программных продуктов фирмы MathWorks, предназначен для моделирования динамических систем, описываемых обыкновенными дифференциальными уравнениями. С описанием этого пакета можно ознакомиться по книгам [51, 52].
Применение Simulink для моделирования нейронных сетей требует расширения библиотеки стандартных модулей моделями блоков, необходимых для сборки нейронных сетей. Это блоки функций взвешивания, накопления и активации, характерные только для нейронных сетей. Эти и другие блоки, необходимые для моделирования нейронных сетей, составляют библиотеку Neural Network Toolbox Block Library.
Библиотеки блоков для моделирования нейронных сетей
Доступ к библиотеке блоков для моделирования нейронных сетей может быть получен либо из средства просмотра SIMULINK Library Browser (рис. 11.79, а), где имеется доступ к библиотекам блоков всех программных продуктов фирмы MathWorks, установленных на данном компьютере, либо посредством вызова с помощью команды neural библиотеки Neural Network Toolbox Block Library (рис. 11.79, б).
а
|
б
|
Рис. 11.79
Библиотека блоков функций активации. Раскрытие раздела Transfer Functions в окне SIMULINK Library Browser (рис. 11.79, а) либо двойной щелчок левой клавиши мыши
в области библиотеки Transfer Functions (рис. 11.79, б) открывают окно, содержащее блоки функций активации (рис. 11.80).
Рис. 11.80
Библиотека блоков функций накопления. Раскрытие раздела Net Input Functions в окне SIMULINK Library Browser (рис. 11.79, а) либо двойной щелчок левой клавиши мыши
в области библиотеки Net Input Functions (рис. 11.79, б) открывают окно, содержащее блоки функций накопления (рис. 11.81).
Рис. 11.81
Библиотека блоков функций взвешивания. Раскрытие раздела Weight Functions в окне SIMULINK Library Browser (рис. 11.79, а) либо двойной щелчок левой клавиши мыши
в области библиотеки Weight Functions (рис. 11.79, б) открывают окно, содержащее блоки функций взвешивания (рис. 11.82).
Рис. 11.82
Эти функции выполняют взвешивание вектора входа, используя формат вектора весов в виде вектор-строки. Поэтому для взвешивания векторов входа с помощью матрицы
весов требуется S блоков функций взвешивания, по числу нейронов в слое.
Библиотека блоков управляющих устройств для моделирования систем управления. Раскрытие раздела Control Systems в окне SIMULINK Library Browser (рис. 11.79, а)
либо двойной щелчок левой клавиши мыши в области библиотеки Control Systems
(рис. 11.79, б) открывают окно, содержащее блоки функций для моделирования управляющих устройств систем управления, а также блок осциллографа Graph для построения предельных циклов (рис. 11.83).
Рис. 11.83
Подробное описание функций, реализуемых перечисленными блоками, можно найти в соответствующих разделах книги.
Построение моделей нейронных сетей
GENSIM
|
Формирование S-модели нейронной сети
|
Синтаксис:
gensim(net,ST)
Описание:
Функция gensim(net, ST) формирует S-модель нейронной сети с именем net для ее запуска в среде системы Simulink; аргумент ST задает такт дискретности, который необходим для моделирования динамических сетей. Если сеть не имеет ЛЗ, т. е. является статической системой, то значение ST следует задать равным –1, что соответствует неопределенному такту дискретности.
Пример:
Создадим однослойную линейную сеть, реализующую следующее соотношение
между входом и целью:
P = [1 2 3 4 5];
T = [1 3 5 7 9];
net = newlind(P,T);
Для того чтобы сформировать S-модель этой сети, используем команду
gensim(net,–1) % Рис.11.84
Рис. 11.84
В результате откроется окно системы Simulink с S-моделью нейронной сети, которая включает блок входа, блок нейронной сети и блок осциллографа (рис. 11.84).
Нажатие кнопки Toggle model browser (Включить средство просмотра модели) переводит окно системы Simulink в другое состояние (рис. 11.85).
Рис. 11.85
Окно Simulink дополняется средством просмотра модели, расположенным слева
от схемы сети. Включение кнопки Show library links и соседней с ней Browse masked subsystems позволяет раскрыть описание структуры нейронной сети и просматривать ее элементы простым выбором того или иного элемента структуры. Рис. 11.86, а–ж, поясняет эту возможность.
-
Рис. 11.86
Для подготовки S-модели нейронной сети (см. рис. 11.85) к моделированию следует ввести значение входного сигнала, активизируя двойным щелчком левой клавиши мыши блок Input1. Блок входа позволяет ввести значение некоторой константы; введем значение, равное 2 (рис. 11.87, а).
а
|
б
|
Рис. 11.87
Теперь можно выполнить моделирование нейронной сети, выбирая опцию Start из меню Simulation либо активизируя кнопку Start simulation на инструментальной панели. После выполнения моделирования активизируем блок Scope, который позволяет увидеть отклик сети на входное воздействие (рис. 11.87, б). Этот отклик равен постоянному значению 3 и свидетельствует о том, что данная нейронная сеть относится к классу статических систем.
Теперь рассмотрим пример моделирования динамической сети. Обратимся к сети Элмана, рассмотренной в гл. 8 и связанной с детектированием амплитуды гармонического сигнала.
Сформируем и обучим сеть Элмана:
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 t2];
Pseq = con2seq(p);
Tseq = con2seq(t);
R = 1; % Число элементов входа
S2 = 1; % Число нейронов выходного слоя
S1 = 10; % Число нейронов рекуррентного слоя
net = newelm([–2 2],[S1 S2],{'tansig','purelin'},'traingdx');
net.trainParam.epochs = 1000;
net.trainParam.show = 25;
net.trainParam.goal = 0.01;
[net,tr] = train(net,Pseq,Tseq);
Создадим S-модель этой сети, дополнив ее блоком To Workspace, который позволяет записать результаты моделирования в виде массива yout в рабочую область системы MATLAB (рис.11.88, а):
gensim(net)
-
а
|
б
|
Рис. 11.88
Структурная схема сети Элмана показана на рис. 11.88, б и представляет двухслойную сеть с обратной связью в первом слое.
Задав значение входного сигнала (рис. 11.89, а), выполним моделирование сети и выведем результат в виде графика изменения выхода сети (рис. 11.89, б), используя данные из рабочей области системы MATLAB:
stairs(tout(1:5:end),yout) % Рис.11.89,б
а
|
б
|
Рис. 11.89
Сеть Элмана приходит в установившееся состояние к 10-му такту времени.
Справка:
help network/gensim
Сопутствующие функции: GENSIMM.
GENSIMM
|
Формирование М-файла для моделирования
нейронной сети
|
Синтаксис:
<�имя_файла> = gensimm(net)
Описание:
Функция <�имя_файла> = gensimm(net) генерирует М-файл для моделирования нейронной сети и размещает его в каталоге C:\WINDOWS\TEMP\matlab_nnet\<�имя_М-файла>; этот путь доступа соответствует строковой переменной с именем <�имя_файла>.
Пример:
Сформируем М-файл для S-модели сети Элмана:
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 t2];
Pseq = con2seq(p);
Tseq = con2seq(t);
R = 1; % Число элементов входа
S2 = 1; % Число нейронов выходного слоя
S1 = 10; % Число нейронов рекуррентного слоя
net = newelm([–2 2],[S1 S2],{'tansig','purelin'},'traingdx');
netelm = gensimm(net)
netelm =C:\WINDOWS\TEMP\matlab_nnet\tp134040.m
Выведем на экран терминала текст М-файла:
type(netelm)
function [perf,El,Ac,N,LWZ,IWZ,BZ] = tp134040(net,Pd,Ai,Tl,Q,TS)
%TP134040 Temporary network simulation file.
%
% [perf,El,Ac,N,LWZ,IWZ,BZ] = tp134040(net,Pd,Ai,Tl,Q,TS)
% net – Neural network.
% Pd – numInputs–by–numLayers–by–TS cell array of delayed inputs.
% Ai – numLayers–by–numLayerDelays cell array of layer delay conditions.
% Tl – numLayers–by–TS cell array of layer targets.
% Q – number of concurrent simulations.
% TS – number of time steps.
% returns:
% perf – network performance:
% El – numLayers–by–TS cell array of layer errors:
% Ac – numLayers–by–(numLayerDelays+TS) cell array of layer outputs:
% N – numLayers–by–TS cell array of net inputs:
% LWZ – numLayers–by–numLayers–by–TS cell array of weighed layer outputs:
% IWZ – numLayers–by–numInputs–by–TS cell array of weighed inputs:
% BZ – numLayers–by–1 cell array of expanded biases:
% Input weights
IW1_1 = net.IW{1,1};
% Layer weights
LW1_1 = net.LW{1,1};
LW2_1 = net.LW{2,1};
% Biases
QOnes = ones(1,Q);
B1 = net.b{1}(:,QOnes);
B2 = net.b{2}(:,QOnes);
BZ = {B1; B2};
% Signals
El = cell(2,TS);
Ac = [Ai cell(2,TS)];
N = cell(2,TS);
IWZ = cell(2,1,TS);
LWZ = cell(2,2,TS);
for ts=1:TS;
tsc = ts + 1;
% Simulate Layer 1
IWZ{1,1,ts} = IW1_1*Pd{1,1,ts};
LWZ{1,1,ts} = LW1_1*Ac{1,tsc–1};
N{1,ts} = IWZ{1,1,ts}+LWZ{1,1,ts}+B1;
Ac{1,tsc} = tansig(N{1,ts});
% Simulate Layer 2
LWZ{2,1,ts} = LW2_1*Ac{1,tsc};
N{2,ts} = LWZ{2,1,ts}+B2;
Ac{2,tsc} = N{2,ts};
El{2,ts} = Tl{2,ts} – Ac{2,tsc};
end;
perf = mse(El,net,net.trainParam);
Сформированный М-файл имеет следующие входные и выходные аргументы.
Входные аргументы:
net – имя нейронной сети;
Pd – массив ячеек задержанных входов размера numInputsnumLayersTS;
Ai – массив ячеек начальных условий на ЛЗ размера numLayersnumLayerDelays;
Tl – массив ячеек векторов целей для слоя размера numLayersTS;
Q – число выборок;
TS – длина выборки по времени.
Выходные аргументы:
perf – значение функционала качества;
El – массив ячеек ошибок слоя размера numLayersTS;
Ac – массив ячеек выходов слоя размера numLayers(numLayerDelays+TS);
N – массив ячеек входов размера numLayersTS;
LWZ – массив ячеек взвешенных выходов слоя размера numLayersnumLayersTS;
IWZ – массив ячеек взвешенных входов слоя размера numLayersnumInputsTS;
BZ – массив ячеек для смещений размера numLayers1.
Последующие операторы М-файла позволяют видеть, как моделируется нейронная сеть.
Сопутствующие функции: SIM.
|
|
|