Міністерство освіти i науки України
Національний університет “Львівська політехніка”
Лабораторна робота №4
з курсу " Інтелектуальні мехатронні системи"
На тему «Моделювання багатошарової нейронної мережі»
Тема. Моделювання багатошарової нейронної мережі
Мета: навчитися проектувати та реалізовувати нейронну мережу для задач апроксимації з урахуванням шуму.
Короткі теоретичні відомості
При проектуванні нейронної мережі необхідно визначити кількість шарів і кількість елементів (нейронів) у кожному шарі. Вибір архітектури нейронної мережі залежить від складності завдання і ґрунтується на досвіді розробника. При моделюванні нейронної мережі виділяють наступні етапи:
1) створення мережі;
2) навчання мережі;
3) тестування мережі;
4) використання мережі для розв’язання поставленого завдання.
Порядок виконання роботи
Код програми
p = [-1:0.05:1];
t = sin(pi*2*p);
net = newff (minmax(p),[30,1], {'tansig' 'purelin'},'trainbfg');
netn=net; % ініціалізація мережі;
netn.trainParam.epochs = 500; % задану кількість циклів навчання;
netn.trainParam.show=50; % кількість циклів для показу проміжних
netn.trainParam.goal=1e-5; % цільова помилка навчання;
t1=[sin(2*pi*p) sin(2*pi*p)]; % вихідний вектор мережі;
p1=[p,(p + randn(size(p))*0.02)] % вхідний вектор мережі з шумом;
gensim(net);
[netn, tr] = train (netn, p1, t1); % навчання мережі за наявності шуму.
netn.trainParam.goal=1e-10;
[netn, tr] = train (netn, p, t); % повторне навчання мережі за відсутності шуму.
tic % встановлює таймер
noise=0:0.01:0.1; % різні рівні шуму
test=20; % кількість ітерацій
network1=[];
network2=[];
t=sin(2*pi*p); % вихідний вектор
for noiselevel= noise
errors1=0;
errors2=0;
for i=1:test
P=p+randn(size(p))*noiselevel; % вхідний вектор
A = sim(net,P);
errors1=errors1+sum(sum(abs(A-t)))/2;
An = sim(netn,P);
errors2=errors2+sum(sum(abs(An-t)))/2;
echo off;
end
network1=[network1 errors1/41/20];
network2=[network2 errors2/41/20];
end
network1
network2
toc
figure(1);
plot(noise, network1*100,'--b', noise, network2*100,':r', 'LineWidth', 1.5);
legend('% pomulki meregi net','pomulki meregi netn');
xlabel ('Riven shymy','FontSize',12);
ylabel ('% pomulki','FontSize',12);
title('Zalejnist % pomulki vid rivna vhidnogo shymy','FontSize',12, 'FontWeight','bold');
grid on
p2 =randn(size(p))*0.03+p;
[an,E]=sim(net,p2);
figure(2);
plot(p2,t, '+' , p2, an, '-', p,t, ':', 'LineWidth',1.5);
legend('vhid','vuhid','sin(2*\pi*t)');
title('Aproksomacia fyncii y=sin(2*pi*t)','FontSize',12, 'FontWeight','bold');
grid on;
E=mse(an-t);
/
Рис.1 – Структурна схема мережі
/
Рис.2 – Структурна схема мережі. Перший та другий прихований шар мережі
/
Рис.3 – Залежність відсотка помилки від рівня вхідного шуму
/
Рис.4 – Апроксимація функції двошаровою нейронною мережею
Виснвок: