- •Лабораторная работа № 1. Активационная функция
- •Лабораторная работа № 2. Искусственные нейронные сети
- •Лабораторная работа № 3. Обучение искусственных нейронных сетей
- •Лабораторная работа № 4. Персептронные сети
- •Лабораторная работа № 5. Линейные нейронные сети
- •Лабораторная работа № 6. Сети Эльмана
- •Лабораторная работа № 7. Сети Хопфилда
- •Лабораторная работа № 8. Радиальные базисные сети общего вида
- •Лабораторная работа № 9. Радиальные базисные сети типа grnn
- •Лабораторная работа № 10. Радиальные базисные сети типа pnn
- •Лабораторная работа № 11. Самоорганизующиеся слои Кохонена
- •Лабораторная работа № 12 Самоорганизующиеся карты Кохонена
- •Литература
Лабораторная работа № 5. Линейные нейронные сети
Цели работы: 1) изучение архитектуры статистических и динамических линейных нейронных сетей и специальных функций для их создания, настройки параметров по методу Вудроу–Хоффа, адаптации и обучения, ознакомление с демонстрационными примерами и их скриптами; 2) приобретение навыков построения и обучения линейных сетей для классификации векторов, линейной аппроксимации, предсказания, слежения и фильтрации сигналов, идентификации и моделирования линейных систем.
Задание 1. Выполнить задания 1 – 4 лабораторной работы № 4 и для линейной нейронной сети с таким же числом нейронов и входов, что и у соответствующего персептрона, заменив функцию newp функцией newlin, оставляя параметры неизменными и используя значения параметров id и lr по умолчанию, т. е. [0] и 0,01 соответственно.
Задание 2. Построить поверхность ошибок для линейной сети с одним нейроном и одним входом, используя функцию errsurf и выполнив следующие команды:
Р = [1 –1.2];
T = [0.5 1];
net = newlind(P,T);
Y = sim(net, P) % 0.5 и 1
net.IW{1,1} % 0.22727
net.b{1} % 0.72727
w_rangle = 1: 0.1: 0 % диапазон весов
b_ rangle = 0.5: 0.1: 1 % диапазон смещений
ES = errsulf(P, T, w_ rangle, b_ rangle, 'purelin');
contour(w_ rangle, b_ rangle, ES, 20) % 20 уровней
hold on
plot( –2.2727e – 001, 7.2727e – 001, 'x') % точка
hold off % 'x' оптимальные значения весов и смещений
Задание 3. Создать с помощью функции newlin линейную сеть с одним нейроном и одним входом, обучить эту сеть, используя процедуру train, и построить поверхность функции критерия качества и траекторию обучения, выполнив следующие действия:
1. Сформировать обучающее множество и рассчитать максимальное значение параметра обучения maxlr:
P = [1 –1.2];
T = [0.5 1];
maxlr = 0.40*maxlinlr(P,'bias').
2. Создать линейную сеть:
net = newlin([ –2 2], 1, [0], maxlr);
gensim(net).
3. Рассчитать функцию критерия качества:
w_rangle = –1: 0.2: 1; b_rangle = –1: 0.2: 1;
ES = errsulf(P, T, w_rangle, b_rangle, 'purelin').
4. Построить поверхность функции критерия качества:
surfc(w_ rangle, b_ rangle, ES).
5. Рассчитать траекторию обучения:
Х = zeros(1, 50);
Y = zeros(1, 50);
net.IW{1,1} = 1;
net.b{1} = 1; % начальные значения
X(1) = net.IW{1};
Y(1) = net.b{1};
net.trainParam.goal = 0.001;
net.trainParam.epochs = 1;
6. Вычислить веса и смещения:
for I=2:50,
[net, tr] = train(net, P, T);
X(I) = net.IW{1, 1};
Y(I) = net.b{1};
end
7. Построить линии уровня и траекторию обучения:
clc; % очистка экрана
contour(w_ rangle, b_ rangle, ES, 20) % 20 линий
hold on
plot(X,Y,'_ *') % построение траектории
hold off
8. Оценить значения параметров настройки для двух значений цели goal:
net.IW{1, 1} = 1; net.b{1} = 1;
net.trainParam.epochs = 50;
net.trainParam.goal = 0.001; % первое значение
[net, tr] = train(net, P, T);
net.IW{1, 1}, net.b{1} % [0.22893] [0.70519]
net.trainParam.goal = 0.00001; % второе значение
[net, tr] = train(net, P, T);
net.IW{1, 1}, net.b{1} % [0.22785] [0.72495]
Задание 4. Построить линейную сеть с одним нейроном, одним входом со значениями из диапазона [1, 1], и линией задержки типа [0 1 2] для воспроизведения заданного отклика некоторой системы, выполнив следующие действия:
1. Создать линейную сеть заданной архитектуры с параметром скорости настройки, равным 0,01:
net = newlin([ –1 1], 1, [0 1 2], 0.01);
gensim(net).
2. Сформируем две обучающие последовательности:
Р1 = {0 –1 1 1 0 –1 1 0 0 1};
Т1 = {0 –1 0 2 1 –1 0 1 0 1};
Р2 = {1 0 –1 –1 1 1 1 0 –1};
T2 = {2 1 –1 –2 0 2 2 1 0}.
3. Выполнить обучение для последовательностей Р1 и Т1:
net = train(net, P1, T1);
net.IW{1, 1}, net.b{1}, % [0.875] [0.8875] [0.1336] [0.0619]
Y1 = sim(net, [P1 P2]);
4. Выполнить обучение сети на всем объеме обучающих данных:
net = init(net);
P3 = [P1 P2];
T3 = [T1 T2];
net.trainParam.epochs = 200;
net.trainParam. goal = 0.01;
net = train(net, P3, T3);
net.IW{1, 1}, net.b{1} % [0.9242] [0.9869] [0.0339] [0.0602]
Y3 = sim(net, P3) % дискретная модель
% Yk = 0.9242rk+0.9869 rk1+0.0339 rk2+0.0602
5. Построить графики отклика Т3 и приближений Y1 и Y3:
plot(0:0,01:20, T3, 'G'), hold on % зеленый
plot(0:0,01:20, Y1, 'B'), hold on % синий
plot(0:0,01:20, Y3, 'R'), hold off % красный
Задание 5. Сформировать линейную сеть из одного нейрона и одного входа, который обеспечивает для заданного входа Р, близкий к цели Т, выполнив следующие команды:
P = 0:3;
T = [0.0 2.0 4.1 5.9]; % зависимость t = 2p
net = newlind(P, T);
gensim(net)
net.IW{1, 1}, net.b{1} % [1.9800] [0.3000]
Y = sim(net, P) % [0.0300] [2.0100] [3.9900] [5.9700]
Задание 6. Сформировать линейную сеть из одного нейрона и одного входа с двумя элементами для классификации значений входа, выполнив следующие действия:
P = [2 1 2 1; 2 –2 2 1];
T = [0 1 0 1];
net = newlin([2 2; 2 2], 1);
net.trainParam.goal = 0.1;
[net, tr] = train(net, P, T);
net.IW{1, 1}, net.b{1}
A = sim(net, P);
err = TA % погрешности сети весьма значительны
Задание 7. Сформировать линейную сеть из одного нейрона, одного входа и одного выхода для цифровой фильтрации сигнала, выполнив следующие действия:
1. Создать сеть и произвести ее инициализацию:
net = newlin([0 10], 1); % диапазон входа от 0 до 10
net.inputWeights{1, 1}.delays = [0 1 2];
net.IW{1, 1} = [7 8 9]; % инициализация весов и смещения
net.b{1} = [0];
pi = {1 2}; % начальные условия на линиях задержки
2. Определить входной сигнал и выходной сигнал фильтра в виде последовательности значений:
P = {3 4 5 6}; % входной сигнал
T = {10 20 30 40}; % требуемый выходной сигнал
3. Провести моделирование необученной сети:
[a, pf] = sim(net, P, pi);
% a = [46] [70] [94] [118] pf = [5] [6].
4. Выполнить адаптацию сети с помощью 10 циклов:
net.adaptParam.passes = 10;
[net, y, E, pf, af] = adapt(net, P, T, pi);
y % y = [10.004] [20.002] [29.999] [39.998]
Задание 8. Сформировать сеть ADALINE с одним нейроном и одним входом, значения которого изменяются от –1 до +1, двумя линиями задержки и одним выходом для предсказаний значений детерминированного процесса p(t), выполнив следующие действия:
1. Сформировать колебательное звено, реакция которого на ступенчатый сигнал будет использована в качестве детерминированного процесса p(t):
clear
sys = ss(tf(1, [1 1 1])); % колебательное звено
time = 0:0.2:10; % интервал процесса
[Y, time] = step(sys, 0:0.2:10).
2. Сформировать обучающее множество:
p = y(1: length(time) 2)' ; % входной сигнал
t = y(3: length(time))' ; % целевой выход
time = 0:0.2:10;
[Y, time] = step(sys, 0:0.2:10 ).
3. Сформировать сеть ADELINE и множества Р и Т:
net = newlin([1 1], 1, [1 2]); % lr = 0.01
P = num2sell(p);
T = num2cell(t).
4. Настроить сеть:
pi = {0 0} % начальные значения для задержек
net.adaptParam.passes = 5;
[net, Y, E, Pf, Af] = adapt(net, P, T, pi);
Y1 = cat(1, Y{:}) % массив ячеек в массив чисел
5. Построить графики:
plot(time, Y1, 'b:', time, P, 'r –', …
xlabel('Время, c'), ylabel('Процессы'))
title('Обучение нейронной сети').
6. Промоделировать сеть ADALINE:
x = sim(net, P);
x1 = cat(1, x{:});
plot(time, x1, 'b', time, p, 'r');
title('Моделирование нейронной сети').