Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ModelNeyrosetey-Методичка.doc
Скачиваний:
160
Добавлен:
09.02.2015
Размер:
398.85 Кб
Скачать

Лабораторная работа № 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 rk1+0.0339 rk2+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 = TA % погрешности сети весьма значительны

Задание 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('Моделирование нейронной сети').

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]