Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!