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

Subplot(3,1,3)



semilogy(1:22, ee, ′+k′)

xlabel(′Циклы ′), ylabel(′Ошибка′)grid

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

а) для последовательного способа:

net=newlin ([-1 1; -1 1], 1, 0, 0);

net.IW{1}= [0 0];

net.b{1} = 0;

P = {[-1 1][-1/3; 1/4][1/2 0][1/6;2/3]};

T = {-1 –5/12 1 1}

net.inputWeights{1, 1}.learnParam.lr = 0.2;

net.biases{1}.learnParam.lr = 0;

net.trainParam.epochs = 30;

net1=train (net,P,T);

W = net1.IW{1} % – параметры после обучения:

Y = sim(net1,p)

EE = mse([Y{:}] – [T{:}]) % – ошибка 1.3817*e-003

б) для группового способа:

P = [-1 -1/3; 1/2 1/6; 1 1/4 0 2/3];

T = [-1 –5/12 1 1]

net1=train (net,P,T);

W = net1.IW{1} % – параметры после обучения:

Y = sim(net1,P)

EE = mse(y-T) % – та же ошибка 1.3817*e-003

Задание 4. Обучить динамическую линейную сеть, рассмотренную во 2-м задании и сравнить результаты, выполнив следующие команды:

net = newlin([-1 1], 1,[0 1], 0.5)

Pi = {0} % – начальное условие линии задержки;

net.IW{1} = [0 0] % – начальные веса входов;

net.biasConnect = 0; % – смещение отсутствует;

net.trainParam.epochs = 22;

P = {-1/2 1/3 1/5 1/4}; % – вектор входа;

T = {-1 1/6 11/15 7/10}; % – вектор цели;

net1 = train(net, P, T, Pi); % – обучение сети;

W = net1.IW{1} % – веса после обучения сети;

Y = sim(net1, P); % – моделирование новой сети;

EE = mse([Y{:}] - [T{:}]) % – ошибка = 3.6514е-005.

Задание 5. Создать и инициализировать трёхслойную сеть с двумя входами для последующего обучения сети методом обратного распространения ошибки, выполнив следующие действия:

1. Создать шаблон сети:

net5 = network(2,... % – число входов;

3,... % – число слоёв сети;

[1; 1; 1],... % – связь смещений;

[1 1; 0 0; 0 0],... % – связь входов;

[ 0 0 0; 1 0 0; 0 1 0],... % – связь слоёв;

[0 0 1],... % – связь выходов;

[0 0 1]); % – связь целей.

2. Настроить параметры сети для инициализации с помощью алгоритма Нгуена Видроу для обеспечения возможности использования метода обратного распространения:

net5.initFcn = ′initlay′; % – для сети;

net5.layers{1}.initFcn = ′initnw′; % – для 1-го слоя;

net5.layers{2}.initFcn = ′initnw′; % – для 2-го слоя;

net5.layers{3}.initFcn = ′initnw′; % – для 3-го слоя.

3. Проинициализировать сеть для её последующего обучения методом обратного распространения ошибки:

net5 = init(net5);

net5.IW{1, 1} % – матрица весов для 1-го входа;

net5.IW{1, 2} % – матрица весов для 2-го входа;

net5.LW{2, 1} % – матрица весов для 2-го слоя;

net5.LW{3, 2} % – матрица весов для 3-го слоя;

net5.b{1} % – матрица смещения для 1-го слоя;

net5.b{2} % – матрица смещения для 2-го слоя;

net5.b{3} % – матрица смещения для 3-го слоя.

4. Промоделировать сеть с начальными значениями весов и смещений:

P = [0.5 1; 1 0.5]; % – значения входных векторов;

Y = sim(net5) % – моделирование сети.

Задание 6. Создать и инициализировать трёхслойную сеть с двумя входами для последующего обучения различными методами, выполнив следующие действия:

1. Создать шаблон сети, воспользовавшись шаблоном net5:

net6 = net5; % – создание новой копии сети;

net6 = revert(net5); % – возврат к настройке параметров по умолчанию.

2. Настроить параметры сети с помощью функции инициализации нулевых значений весов и смещений initzero:

net6.initFcn = ′initlay′;

net6.layers{1}.initFcn = ′initnw′;

net6.layers{2}.initFcn = ′initnw′;

net6.layers{3}.initFcn = ′initnw′;

net6.inputWeights{1,1}.initFcn = ′initzero′;

net6.inputWeights{1,2}.initFcn = ′initzero′;

net6.layerWeights{2,1}.initFcn = ′initzero′;

net6.layerWeights{3,2}.initFcn = ′initzero′;

net6.biases{1}.initFcn = ′initzero′;

net6.biases{2}.initFcn = ′initzero′;

net6.biases{3}.initFcn = ′initzero′;

net6.init(net6); % – инициализация сети.

3. Выдать на экран матрицы весов и смещения, используя команды 3-го пункта 5-го задания.

4. Промоделировать сеть и возвратить её к исходным значениям весов и смещений:

Ynet6 = sim(net6);

net6 = revert(net6).

Задание 7. Создать и инициализировать трёхслойную сеть с двумя входами, используя следующие функции инициализации:

а) rands – для задания случайных весов и смещений.

б) randnc для задания случайной матрицы с нормированными столбцами;

в) randnv для задания случайной матрицы с нормированными строками;

г) initcon – для задания равных смещений;

д) midpoint для задания матрицы средних значений;

Для создания и инициализации сети использовать команды 6-го задания, заменяя в них функцию initzero на рассматриваемые функции инициализации, а сеть net6 – на сеть net7.

Задание 8. Создать двухслойную нейронную сеть с прямой передачей сигнала, одним входом, двумя нейронами в первом слое и одним нейроном во втором слое, настроить сеть для обучения с использованием алгоритма градиентного спуска GD, обучить эту сеть и путём её моделирования оценить качество обучения. Порядок выполнения задания следующий:

1. Создать нейронную сеть с прямой передачей сигнала:

net8 = newff([0 5], …. % – диапазоны значений входа;

[2 1], ….. % – количество нейронов в слоях;

{′tansig′, % – функция активации для 1-го слоя;

′logsig′} % – функция активации для 2-го слоя;

′traingd′); % – имя функции обучения.

2. Убедиться, что веса и смещения каждого слоя инициализированы с помощью алгоритма Нгуена–Видроу:

net8.initFcn % – должно быть ′initlay′;

net8.layers{1}.initFcn % – должно быть ′initnw′;

net8.layers{2}.initFcn % – должно быть ′initnw′;

net8.IW{1,1} % – вес входа;

net8.LW{2,1} % – веса для 2-го слоя.

net8.b{1}

net8.b{2}

3. Задать обучающие последовательности входов и целей T:

P = [0 1 2 3 4 5]; % – вектор входа;

T = [0 0 0 1 1 1]; % – вектор целей.

4. Выдать на экран параметры обучающей функции traingd и их значений по умолчанию:

info = traingd(′pdefaults′)

info =

epochs: 100 % – максимальное количество циклов
обучения;

show: 25 % – интервал вывода данных;

goal: 0 % – предельное значение критерия обучения;

time: Inf % – максимальное время обучения;

min_grad: 1.0e-006 % – максимальное значение градиента

критерия % качества;

max_fail: 5 % – максимально допустимый уровень

% превышения ошибки контрольного

% подмножества по сравнению с обучающим.

Процедура обучения прекратится, когда будет выполнено одно из следующих условий:

а) значение функции качества стало меньше предельного goal;

б) градиент критерия качества стал меньше значения min_grad;

в) достигнуто предельное значение циклов обучения epochs;

г) превышено максимальное время, отпущенное на обучение time;

д) ошибка контрольного подмножества превысила ошибку обучающего более чем в max_fail раз.

Функция traingd предполагает, что функции взвешивания
dotprod, накопления netsum и активации transig или rogsig имеют производные. Для вычисления производных критерия качества обучения perf по переменным веса и смещения используется метод обратного распространения. В соответствии с методом градиентного спуска вектор настраиваемых переменных получает следующее приращение:

,

где tr – параметр скорости настройки, равный по умолчанию 0,01. Функцией одновременного поиска минимума вдоль заданного направления в данной сети является функция srchbac.

5. Обучить рассматриваемую сеть:

net8.trainParam.epochs = 500;

net8.trainParam.90al = 0.01;

[net8, TR] = train(net8, P, T);





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



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