Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Практические задания. Пример 2.1. Реализовать вычислительную модель нейронной сети с двумя входами, тремя слоями и одним целевым выходом



Пример 2.1. Реализовать вычислительную модель нейронной сети с двумя входами, тремя слоями и одним целевым выходом, используя общий конструктор сети

net = network(numInputs, numLayers, biasConnect, inputConnect, layerConnect, outputConnect, targetConnect)

где numInputs – количество входов в нейронной сети;
numLayers – количество слоев в нейронной сети
biasConnect – матрица связности размерности numLayers×1 для смещений;
inputConnect – матрица связности размерности numLayers×numInputs для входов;
layerConnect – матрица связности размерности numLayers×numLayers для слоев;
outputConnect – матрица связности размерности 1×numLayers для выходов;
targetConnect – матрица связности размерности 1×numLayers для целей.

При этом связи между слоями должны быть прямыми, входы необходимо соединить с первым слоем, а выход, который должен быть целевым, – с последним. Первый слой должен иметь смещения.

Решение.

1. Инициализировать параметры конструктора нейронной сети, выполнив из командной строки MATLAB следующие команды:

numInputs = 2;
numLayers = 3;
biasConnect = [1; 0; 0];
inputConnect = [1 1; 0 0; 0 0];
layerConnect = [0 0 0; 1 0 0; 0 1 0];
outputConnect = [0 0 1];
targetConnect = [0 0 1];

2. Создать шаблон нейронной сети, выполнив из командной строки MATLAB команду

net = network(numInputs, numLayers, biasConnect, inputConnect, layerConnect, outputConnect, targetConnect);

В результате выполнения в рабочей области Workspace системы MATLAB отобразится переменная net размерности 1×1, принадлежащая классу network object.

3. Проверить значения вычисляемых полей модели нейронной сети, которые дополняют описание архитектуры сети. Для этого выполнить двойной щелчок на имени переменной net в рабочей области Workspace системы MATLAB. В результате выполнения значение переменной net откроется в окне инструментального средства Array Editor системы MATLAB.

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

numOutputs – количество выходов нейронной сети;
numTargets – количество целей нейронной сети;

numInputDelays – максимальное число линий задержки для входов нейронной сети;
numLayerDelays – максимальное число линий задержки для слоев нейронной сети.

Убедиться в том, что значения этих переменных равны 1, 1, 0 и 0 соответственно.

Следует заметить, что каждый выход и каждая цель присоединяются к одному или нескольким слоям нейронной сети. При этом количество компонент выхода или цели равно числу нейронов в соответствующем слое. Для увеличения возможности модели в нейронную сеть включают линии задержки либо на ее входах, либо между слоями. Каждая линия задерживает сигнал на один такт. Параметры numInputDelays и numLayerDelays определяют максимальное число линий задержки для какого-либо входа или слоя соответственно.

4. Проанализировать структурную схему нейронной сети, выполнив из командной строки MATLAB команду

gensim(net)

В результате выполнения откроется модель Simulink, содержащая структурную схему построенной нейронной сети (рис. 2.1).

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

Neural Network – подсистема, реализующая модель искусственной нейронная сети с помощью блока Subsystem;

p{1}, p{2}, … – входы нейронной сети, реализованные с помощью блоков Constant;

y{1} – устройство для отображения графика выходного сигнала нейронной сети, реализованное с помощью блока Scope;

Layer1, Layer2, … – слои нейронов в нейронной сети; входы первого слоя нейронов реализованы с помощью блоков Inport, выход последнего слоя – с помощью блока Outport; выходы слоев с первого до предпоследнего включительно реализованы с помощью блоков Goto; входы слоев со второго до последнего включительно реализованы с помощью блоков From [1];

Delays1, Delays2, … – линии задержки, которые обеспечивают задержку входных сигналов или сигналов между слоями нейронов на 1, 2, 3, … интервала дискретизации; реализованы с помощью блоков Unit Delay;

IW{…} – матрицы весовых коэффициентов для входных сигналов или сигналов между слоями нейронов; размерность этой матрицы для каждого входного сигнала равна , где – число нейронов входного слоя, – число компонент входного сигнала, умноженное на число линий задержки; размерность матрицы весовых коэффициентов для сигналов между слоями нейронов с номерами и равна , где – число нейронов в -м слое, – число нейронов в -м слое, умноженное на число линий задержки;

dotprod – вычисление скалярного произведения входных сигналов или сигналов между слоями и соответствующих весовых коэффициентов компонент сигнала; реализовано с помощью блока Dot Product;

Mux – мультиплексор входных сигналов или сигналов между слоями, преобразующий множество скалярных сигналов в векторный, а множество векторных сигналов – в один вектор суммарной размерности;

b{1}, b{1}, … – смещения слоев нейронов, реализованные с помощью блоков Constant;

netsum – суммирование компонент от нескольких векторов входа с учетом задержек, смещения и др. для каждого нейрона в слое; реализовано с помощью блока Sum;

purelin, hardlim и др. – функции активации нейронов.

5. Проанализировать содержимое модели Simulink, которая реализует модель нейронной сети. В результате получим, что модель нейронной сети можно описать следующими выражениями:

a{1} = purelin(IW{1,1}p{1} + IW{1,2}p{2} + b{1}),
a{2} = purelin(LW{2,1}a{1}),
y{1} = purelin(LW{3,2}a{2}).

При этом значения всех весовых коэффициентов IW{i,j}, LW{i,j} и смещения b(1) равны нулю, поскольку они никак не были инициализированы после создания нейронной сети.

6. Задать нулевые последовательности входных сигналов, выполнив из командной строки MATLAB команду

P = [0 0; 0 0];

7. Провести расчет нейронной сети, выполнив из командной строки MATLAB команду

A = sim(net,P)

В результате выполнения в окне Command Window системы MATLAB отобразится значение

A =
0 0

В самом деле, поскольку все значения весовых коэффициентов, смещения и входных сигналов равны нулю, то при вычислении выхода a{1} первого слоя нейронов аргументом функции активации purelin будет нулевое значение. А так как значения функции purelin совпадают со значениями ее аргументов, то

a{1} = purelin([0 0]) = [0 0],
a{2} = purelin(LW{2,1}a{1}) = purelin([0 0]) = [0 0],
a{3} = purelin(LW{3,2}a{2}) = purelin([0 0]) = [0 0].

8. Задать диапазоны входных сигналов и весовых коэффициентов нейронной сети, выполнив из командной строки MATLAB следующие команды:

net.inputs{1}.range = [0 1];
net.inputs{2}.range = [0 1];
net.b{1} = -0.25;
net.IW{1,1} = 0.5;
net.IW{1,2} = 1;
net.LW{2,1} = 1.5;
net.LW{3,2} = 2;

9. Отобразить структуру нейронной сети, выполнив из командной строки MATLAB команду

gensim(net)

и убедиться в том, что параметры нейронной сети, заданные при выполнении п. 8 примера, заданы в соответствующих блоках модели Simulink[2].

10. Выполнить расчет созданной статической нейронной сети (т. е. сети без линий задержки), используя групповое и последовательное представление входных сигналов. Для этого из командной строки MATLAB выполнить следующие команды:

PG = [0.5 1; 2 0.5];
PS = [{0.5 1}; {2 0.5}];
AG = sim(net,PG)
AS = sim(net,PS)

В результате выполнения в окне Command Window системы MATLAB отобразятся следующие значения:

AG =
0.1250 0.1250

AS =
[0.1250] [0.1250]

Результатом выполнения последней команды является не матрица, состоящая из ячеек размерности 1×1, поскольку значения входных сигналов нейронной сети были заданы в виде массива PS, состоящего из ячеек.

Таким образом, для статической нейронной сети групповое и последовательное представление входных сигналов дает один и тот же результат. Убедимся в его правильности.

При последовательном представлении входных сигналов с помощью массива PS, состоящего из ячеек, получаем, что

a{1} = purelin(net.IW{1,1}*PS{1,1} + net.IW{1,2}*PS{2,1} +
+ net.b{1}) = purelin(0.5*0.5 + 1*2 – 0.25) =
= purelin(2.25 – 0.25) = purelin(2) = {2},

a{2} = purelin(net.LW{2,1}*a{1}) = purelin(1.5*2) =
= purelin(3) = {3},

AS(1) = {purelin(net.LW{3,2}*a{2})} = {purelin(2*3)} =
= {purelin(6)} = {6},

a{1} = purelin(net.IW{1,1}*PS{1,2} + net.IW{1,2}*PS{2,2} +
+ net.b{1}) = purelin(0.5*1 + 1*0.5 – 0.25) =
= purelin(1 – 0.25) = purelin(0.75) = {0.75},

a{2} = purelin(net.LW{2,1}*a{1}) = purelin(1.5*0.75) =
= purelin(1.125) = {1.125},

AS(2) = {purelin(net.LW{3,2}*a{2})} = {purelin(2*1.125)} =
= {purelin(2.25)} = {2.25},

Таким образом, AS = [{AS(1)} {AS(2)}] = [{6} {2.25}].

При групповом представлении входных сигналов с помощью массива PG получаем, что

a(1) = purelin(net.IW{1,1}*PG(1,:) + net.IW{1,2}*PG(2,:) +
+ net.b{1}) = purelin(0.5*[0.5 1] + 1*[2 0.5] – 0.25) =
= purelin([0.25 0.5] + [2 0.5] – 0.25) =
= purelin([2.25 1] – 0.25) = purelin([2 0.75]) = [2 0.75],

a(2) = purelin(net.LW{2,1}*a(2)) = purelin(1.5*[2 0.75]) =
= purelin([3 1.125]) = [3 1.125],

AG(1) = purelin(net.LW{3,2}*a(2)) = purelin(2*[3 1.125]) =
= purelin([6 2.25]) = [6 2.25],

Вычисленные значения совпадают с соответствующими значениями, полученными в результате выполнения команд в MATLAB.

11. Преобразовать статическую нейронную сеть в динамическую, дополнив ее архитектуру сети линиями задержки для входных сигналов и для сигналов между вторым и третьим слоями нейронов. Для этого нужно выполнить из командной строки MATLAB следующие команды:

net.inputWeights{1,1}.delays = [0 1];
net.inputWeights{1,2}.delays = [0 1];
net.layerWeights{3,2}.delays = [0 1 2];

12. Отобразить структуру нейронной сети, выполнив из командной строки команду

gensim(net)

В результате выполнения откроется модель Simulink, аналогичная той, что открывалась после выполнения п. 4 примера. Однако между двумя этими моделями есть серьезные отличия. Чтобы найти их, нужно последовательно открыть двойными щелчками блоки Neural Network, Layer 1 и Delays 1. В результате выполнения откроется подсистема, представленная на рис. 2.2.

В отличие от статической нейронной сети, в данном случае весовой коэффициент IW{1,1} умножается уже не на входной сигнал p{1}, а на вектор [p{1}; p*{1}]. Здесь p*{1} совпадает с входным сигналом p{1}, но подается с задержкой на один интервал дискретизации. В Simulink подобная задержка реализуется с помощью блока Unit Delay. На начальном этапе, пока не прошел ни один интервал дискретизации, на выход блока Unit Delay по умолчанию подается значение 0.

Аналогичным образом реализуется задержка для второго входного сигнала и для сигналов между вторым и третьим слоями нейронов. В последнем случае, кроме того, весовой коэффициент LW{3,2} умножается на трехмерный вектор [a{2}; a*{2}; a**{2}], т. е. реализуется задержка на два интервала дискретизации.

Таким образом, вычислительная модель нейронной сети с заданными линиями задержки будет иметь вид

a{1} = purelin(IW{1,1}[p{1};p*{1}] + IW{1,2}[p{2};p*{2}] +
+ b{1}),
a{2} = purelin(LW{2,1}a{1}),
y{1} = purelin(LW{3,2}[a{2};a*{2};a**{2}]).

13. Выполнить корректирование матриц весовых коэффициентов в соответствии с новыми размерностями входных сигналов и выходных сигналов слоев нейронов. Для этого из командной строки MATLAB выполнить следующие команды:

net.IW{1,1} = [0.5 1];
net.IW{1,2} = [0.5 0.25];
net.LW{3,2} = [0.5 0.25 1];

14. Выполнить расчет динамической нейронной сети, используя групповое и последовательное представление входных сигналов. Для этого из командной строки MATLAB выполнить следующие команды:

AG = sim(net,PG)
AS = sim(net,PS)

В результате выполнения в окне Command Window отобразятся следующие значения:

AG =
0.7500 0.3750

AS =
[0.7500] [1.500]

Значения получились различными для группового и последовательного представления входных сигналов. Проверим правильность полученных результатов:

При последовательном представлении входных сигналов с помощью массива PS получаем, что

a{1} = purelin(net.IW{1,1}*PS{1,1} + net.IW{1,2}*PS{2,1} +
+ net.b{1}) = purelin([0.5 1]*[0.5;0] + [0.5 0.25]*[2;0] +
+ [-0.25]) = purelin([0.25] + [1] + [-0.25]) =
= purelin([1]) = {1}

a{2} = purelin(net.LW{2,1}*a{1}) = purelin([1.5]*[1]) =
= purelin([1.5]) = {1.5},

AS{1} = purelin(net.LW{3,2}*a{2}) =
= purelin([0.5 0.25 1]*[1.5;0;0]) = purelin([0.75]) =
= {0.75},

a{1} = purelin(net.IW{1,1}*PS{1,2} + net.IW{1,2}*PS{2,2} +
+ net.b{1}) = purelin([0.5 1]*[1;0.5] + [0.5 0.25]*[0.5;2] +
+ [-0.25]) = purelin([1] + [0.75] + [-0.25]) =
= purelin([1.5]) = {1.5}

a{2} = purelin(net.LW{2,1}*a{1}) = purelin([1.5]*[1.5]) =
= purelin([2.25]) = {2.25},

AS{2} = purelin(net.LW{3,2}*a{2}) =
= purelin([0.5 0.25 1]*[2.25;1.5;0]) = purelin([1.5]) =
= {1.5}.

При групповом представлении входных сигналов с помощью массива PG получаем, что

a(1) = purelin(net.IW{1,1}*PG(1,:) + net.IW{1,2}*PG(2,:) +
+ net.b{1}) = purelin([0.5 1]*[0.5 1;0 0] + [0.5 0.25]*
*[2 0.5;0 0] – 0.25) = purelin([0.25 1] + [1 0.25] – 0.25) =
= purelin([1.25 1.25] – 0.25) = purelin([1 1]) = [1 1],

a(1) = purelin(net.LW{2,1}*a(1)) = purelin([1.5]*[1 1]) =
= purelin([1.5 1.5]) = [1.5 1.5],

AG = purelin(net.LW{3,2}*a(2)) = purelin([0.5 0.25 1]*
*[1.5 1.5;0 0;0 0]) = purelin([0.75 0.375]) = [0.75 0.375].

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

15. Сформировать последовательность команд из данного примера, введенных в командную строку MATLAB, в виде файла-сценария с именем net. Команды сопроводить соответствующими комментариями. Просмотр изменяемого параметра нейронной сети сопровождать выводом в окно Command Window с помощью функции celldisp. Перед выполнением очередных фрагментов файла-сценария приостанавливать его работу с помощью команды pause.

Таким образом, при выполнении данного примера была построена трехслойная динамическая нейронная сеть с одним нейроном в каждом слое. Она имеет два входа и один целевой выход. Все связи между слоями нейронной сети являются прямыми, причем первый слой соединен с входом, последний (третий) – с выходом. Первый слой нейронов имеет смещения. Для входных сигналов имеются линии задержки типа [0 1], а для сигналов между вторым и третьим слоем нейронов – типа [0 1 2].

Структурная схема построенной нейронной сети представлена на рис. 2.3.

Упражнение 2.1. Реализовать нейронную сеть asgnet с помощью конструктора класса network без параметров и задавая значения соответствующих полей модели с помощью операторов присваивания. Сравнить результаты работы нейронных сетей net и asgnet и убедиться в их идентичности.

Упражнение 2.2. Используя конструктор класса network с параметрами и операторы присваивания для полей этого класса, реализовать нейронные сети следующей архитектуры:

1) однослойную нейронную сеть с тремя нейронами, тремя двухкомпонентными входами и одним целевым выходом;

2) трехслойную нейронную сеть с прямой передачей сигнала и тремя нейронами в каждом слое, причем для каждого слоя имеется смещение; нейронная сеть имеет три входа, содержащие две, пять и три компоненты соответственно, и один выход;

3) трехслойную нейронную сеть с тремя нейронами в каждом слое, причем каждый слой соединен со всеми остальными, за исключением себя самого; все слои имеют смещения; нейронная сеть имеет один вход, соединенный с первым слоем и содержащий две компоненты, и один выход, соединенный с последним слоем;

Для всех нейронных сетей выполнить следующие действия:

■ изобразить структурную схему нейронной сети по аналогии с рис. 2.3;

■ записать математическую модель нейронной сети в виде зависимости выходных сигналов от входных;

■ разработать тестовый пример для проверки правильности работы нейронной сети;

■ реализовать структуру нейронной сети с помощью конструктора network с параметрами;

■ убедиться в правильности задания структуры нейронной сети, построив ее модель в системе Simulink с помощью функции gensim.

■ с помощью операторов присваивания задать значения весовых коэффициентов, смещений и входных сигналов (числа можно использовать произвольные);

■ выполнить расчет нейронной сети с помощью функции sim и убедиться в правильности работы сети.


[1] Можно было напрямую соединить выходы предыдущих слоев с входами последующих, однако чтобы избежать использования большого числа соединительных линий и связанной с ним громоздкости схемы, используется эквивалентный способ с применением блоков Goto и From.

[2] Значения входных сигналов p{1} и p{2} нейронной сети не инициализированы конкретными числовыми значениями, а равномерно распределенной случайной величиной из интервала (0; 1).





Дата публикования: 2015-11-01; Прочитано: 1580 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.015 с)...