- •Оглавление
- •1. Асоціативне неконтрольоване навчання
- •3. Зміст звіту по практичній роботі
- •Варіанти завдань
- •Аудиторна робота
- •Результат роботи:
- •2. Конкурентні нейронні мережі («Шар і мапа Кохонена»)
- •3. Зміст звіту по практичній роботі
- •Варіанти завдань: кластеризація даних
- •Аудиторна робота
- •1 % Self Organizing Feature Maps sofm (Kohonen networks)
- •3. Конкурентні нейронні мережі («Бінарний класифікатор сигналів екг на основі lvq»)
- •3. Зміст звіту по практичній роботі
- •Варіанти завдань
- •Аудиторна робота
- •1. %Learning Vector Quantization
- •Література
- •4. Нейронні мережі Гросберга
- •Аудиторна робота
- •1. Leaky integrator
- •2. Shunting network demonstration
- •3. Перший та другий шари мережі Grossberg
- •4. Налаштування ваги
- •Art-1 мережі розпізнавання зображень ()
- •3. Зміст звіту по практичній роботі
- •Варіанти завдань: класифікація зображень
- •Аудиторна робота
- •Листинг программы (matlab)
- •Результаты работы программы
- •Мережa Хопфiлда як асоціативна пам'ять ()
- •Варіанти завдань
- •Аудиторна робота
- •7.Рбф-мережа (робота № 5)
- •Варіанти завдань
- •Подбор параметров радиальной функции для каждого радиального нейрона (центр delta и параметр ширины b)
- •Подбор параметров радиальной функции для каждого радиального нейрона (центр с и параметр ширины b)
- •Ортогонализация по методу наименьших квадратов:
- •Работа первого и второго слоев:
- •Адаптация нелинейных параметров радиальных функций всех нейронов первого слоя сети:
- •8.Мережа з використанням га
Аудиторна робота
І. Програма графічного зображення процесу навчання нейрону INSTAR
function graphIS % Демонстрація навчання нейрону Іnstar
lr = 0.5;
x1 = 1; y1 = 0.5;
x2=-0.7; y2=1;
% WEIGHT AXES
angle = [0:5:360]*pi/180;
angle2 = fliplr(angle);
f1 = figure(1);
hold on
w_cross = plot([-1 1 NaN 0 0],[0 0 NaN -1 1],'--',...
'color',[0 0 0.3],...
'erasemode','none');
W = [1 0.5];
WV = nndrwvec(W(1),W(2),2,0.1,[0 0.7 0],'','none');
hold off
title('Weight');
% INPUT AXES
angle = [0:5:360]*pi/180;
angle2 = fliplr(angle);
f2=figure(2);
hold on
p_cross = plot([-1 1 NaN 0 0],[0 0 NaN -1 1],'--',...
'color',[0 0 0.3],...
'erasemode','none');
P = [-0.7; 1];
W2 = W + (lr*1*ones(1,2)).*(P'-W);
PV = [nndrwvec(W(1),W(2),2,0.1,[0 0.7 0],'','none');
nndrwvec(P(1),P(2),2,0.1,[1 0.1 0.1],'','none');
nndrwvec([W(1) P(1)],[W(2) P(2)],1,0,[0 0 0.3],'','none');
nndrwvec([W(1) W2(1)],[W(2) W2(2)],2,0.1,[0 0 0.3],'', 'none')];
hold off
title('Input');
if (abs(x1) <= 1.1) & (abs(y1) <= 1.1)
x1 = x1 / max(1,abs(x1));
y1 = y1 / max(1,abs(y1));
W = [x1 y1];
if (abs(x2) <= 1.1) & (abs(y2) <= 1.1)
x2 = x2 / max(1,abs(x2));
y2 = y2 / max(1,abs(y2));
P = [x2; y2];
end
end
%======================================
% Respond to learning
%======================================
for u=1:5
f3=figure(3)
hold on
p_cross = plot([-1 1 NaN 0 0],[0 0 NaN -1 1],'--',...
'color',[0 0 0.3],...
'erasemode','none');
WV = nndrwvec(W(1),W(2),2,0.1,[0 0.7 0],'','none');
W2 = W + (lr*1*ones(1,2)).*(P'-W);
PV = [nndrwvec(W(1),W(2),2,0.1,[0 0.7 0],'','none');
nndrwvec(P(1),P(2),2,0.1,[1 0.1 0.1],'','none');
nndrwvec([W(1) P(1)],[W(2) P(2)],1,0,[0 0 0.3],'','none');
nndrwvec([W(1) W2(1)],[W(2) W2(2)],2,0.1,[0 0 0.3], '', 'none')];
hold off
title('Updated Input');W=W2;
end;
function h = nndrwvec(x,y,w,l,c,t,e)
% NNDRWVEC(X,Y,W,L,C,T)
% X - Horizontal coordinate.
% Y - Vertical coordinate.
% W - Width of line.
% L - Length of arrow.
% C - Color of line.
% T - Tag string (default = '').
% E - Erase mode (default = 'normal');
% X and Y may also have two elements each to describe
% a vector which does not begin at the origin.
%===========================================================
if nargin < 6, t = ''; end
if nargin < 7, e = 'normal'; end
if length(x) == 1,x0 = 0; else x0 = x(1); end
if length(y) == 1,y0 = 0; else y0 = y(1); end
x = x(length(x)); y = y(length(y));
angle = atan2(y-y0,x-x0);
angle1 = angle+3.001*pi/4;
angle2 = angle-3.001*pi/4;
xx = [x0 x (x+l*cos(angle1)) x (x+l*cos(angle2))];
yy = [y0 y (y+l*sin(angle1)) y (y+l*sin(angle2))];
set(gcf,'nextplot','add')
g2 = plot(xx,yy,'color',c,'linewidth',w,'erasemode',e);
if ~strcmp(t,'')
g3 = text(x+l*1.5*cos(angle),y+l*1.5*sin(angle),t, ...
'color',nndkblue, ...
'fontsize',10, ...
'fontname','geneva', ...
'horizontal','center', ...
'erasemode',e);
else
g3 = [];
end
if nargout, h = [g2 g3]; end
Результат виконання програми:
Рис. 1.2. Графік процесу навчання нейрону INSTAR
ІІ. Навчання та розпізнавання вхідних векторів одношаровою мережею INSTAR
Нарисувати структуру та визначити параметри мережі INSTAR, яка здатна розпізнати такі вектори: ,.
Виконання роботи. Мережа здатна розпізнавати лише вхідний вектор, який відповідає одному з векторів набору навчання. Така мережа повинна мати три входи для розпізнання вектора, який складається з трьох елементів, а також два виходи (один вихід відповідає кожнувходу: р1 і р2).Її зображення у вигляді поєднання двох нейронів Інстар в одиншар наведено на рис. 15.1.
Рис. 1.3. Одношарова мережа, яка розпізнає два вектори
Прирівняємо значення ваги першого нейрона 1wдо p1 (щоб вихідмережі бувмаксимальним у випадку,коли вхідний векторбуде спрямований у напрямку вектора p1). Таким же чином прирівняємо вагу другого нейрона 2w до p2 (щоб другий нейрон мав максимальну чутливість до векторів з напрямком p2). Одержимо вагову матрицю .
Довжина векторів p1 й p2 однакова: .
Щоб гарантувати те, що мережа реагує тільки у випадку повної відповідності між вектором входу і вектором, який зберігається в матриці ваги, обидва зсуви встановлюються таким чином: .
Використовуючи систему МATLAB, перевіримо як мережа реагує на вхід р1 :
w=[5 -5 -5; -5 5 5]; b=[-75; -75]; p1=[5; -5; 5];
y=hardlim(w*p1+b); y
y= 1
0
Або
.
Мережа розпізнала вектор р1: перший нейрон відповів 1 (вказуючи на те, що вхідним векторомбув вектор р1),другий нейрон не відповів, тому що вхідний вектор не був вектором р2.
Протестуємо мережу натретьому векторі,який не дорівнює жодному з векторів входу р1 ір2 :
P3=[-5; 5; -5]; y = hardlim(w*p3+b); y
y= 0
0
Або
Жодний з нейронів не розпізнав новий вектор входу р3, тому на виході одержали нулі.
Одношарова мережа Instar може бути застосована для розпізнавання зображень у вигляді вхіднихвекторів-прототипів.Під час навчання вона фіксує відповідні образи в ваговій матриц W і завдяки цьому здатна їх розпізнавати.
A) Длядвох вхідних векторів (структура мережі 3-2)
function instarDemo % Демонстрація роботи одношарової мережі Instar
clc; clear all;
trainSpeed = 0.2;
W0=[3; -3];
W1=[0 0 0; 0 0 0];
b=[-2; -2];
% НАВЧАННЯ
for i=1:100
if (rand > 0.5)
p0=-1;
p1=(2*bitget(3,1:3)-1)'; % ORANGE
else
p0=1;
p1=(2*bitget(5,1:3)-1)'; % BANANA
end
a=((W0*p0+W1*p1+b)>=0);
W1=W1+trainSpeed*a*ones(1,3).*(ones(2,1)*p1'-W1);
end
disp(W1');
% МОДЕЛЮВАННЯ
result=sprintf('Training complete!\n------------------ \nNeuron''s weights are: \n[%.0g %.0g %.0g]\n[%.0g %.0g %.0g]\n\n Lets test network!\n------------------', W1');
disp(result);
for i=1:8
switch(i)
case 4
fruit = ' Orange! ';
case 6
fruit = ' Banana! ';
otherwise
fruit = ' Unknown fruit';
end
p1=2*(bitget(i-1,1:3))-1;
y=((W1*p1'+b(1))>= 0);
result = sprintf('Shape / Texture / Weight = %.0g / %.0g / %.0g so it''s %s\n (besause response y = [%.0g %.0g])\n', p1, fruit, y);
disp(result);
end
Результат виконання програми:
W1 =
1.0000 1.0000
-1.0000 1.0000
1.0000 -1.0000
Training complete!
------------------
Neuron's weights are:
[1 -1 1]
[1 1 -1]
Lets test network!
------------------
Shape / Texture / Weight = -1 / -1 / -1 so it's Unknown fruit
(besause response y = [0 0])
Shape / Texture / Weight = 1 / -1 / -1 so it's Unknown fruit
(besause response y = [0 0])
Shape / Texture / Weight = -1 / 1 / -1 so it's Unknown fruit
(besause response y = [0 0])
Shape / Texture / Weight = 1 / 1 / -1 so it's Orange!
(besause response y = [0 1])
Shape / Texture / Weight = -1 / -1 / 1 so it's Unknown fruit
(besause response y = [0 0])
Shape / Texture / Weight = 1 / -1 / 1 so it's Banana!
(besause response y = [1 0])
Shape / Texture / Weight = -1 / 1 / 1 so it's Unknown fruit
(besause response y = [0 0])
Shape / Texture / Weight = 1 / 1 / 1 so it's Unknown fruit
(besause response y = [0 0])
Б) Длятрьох вхідних векторів (структура мережі 3-3)
function instarDemo % демонстрація Instar
clc; clear all;
trainSpeed = 1;
W0 = [3; -3; 0.001];
W1 = [0 0 0; 0 0 0; 0 0 0]; b = [-1.73; -1.73; -1.73];
for i=1:100
if (rand > 0.66)
p0 = -1;
p1 = (2*bitget(3,1:3)-1)'; % ORANGE
elseif(rand > 0.33)
p0 =1;
p1 = (2*bitget(5,1:3)-1)'; % BANANA
else
p0 =2000;
p1 = (2*bitget(7,1:3)-1)'; % APPLE
end
a = ((W0*p0 + W1*p1 + b) >= 0);
W1 = W1 + trainSpeed*a*ones(1,3).*(ones(3,1)*p1'-W1);
end
W1
result= sprintf('Training complete!\n----------------------- \nNeuron''s weights are: \n[%.0g %.0g %.0g]\n[%.0g %.0g %.0g]\n[%.0g %.0g %.0g]\n\n Lets test network!\n------------------', W1');
disp(result);
for i=1:8
switch(i)
case 4
fruit = ' Orange! ';
case 6
fruit = ' Banana! ';
case 8
fruit = ' Apple! ';
otherwise
fruit = ' Unknown fruit';
end
p1 = 2*(bitget(i-1,1:3)) - 1;
a = ((W1*p1'+b(1))>=0);
result = sprintf('Shape / Texture / Weight = %.0g / %.0g / %.0g so it''s %s\n ( besause response a = [%.0g %.0g %.0g])\n', p1, fruit, a);
disp(result);
end
Результат роботипрограми
W1 =
1 -1 1
1 1 -1
1 1 1
Training complete!
-----------------------
Neuron's weights are:
[1 -1 1]
[1 1 -1]
[1 1 1]
Lets test network!
------------------
Shape / Texture / Weight = -1 / -1 / -1 so it's Unknown fruit
( besause response a = [0 0 0])
Shape / Texture / Weight = 1 / -1 / -1 so it's Unknown fruit
( besause response a = [0 0 0])
Shape / Texture / Weight = -1 / 1 / -1 so it's Unknown fruit
( besause response a = [0 0 0])
Shape / Texture / Weight = 1 / 1 / -1 so it's Orange!
( besause response a = [0 1 0])
Shape / Texture / Weight = -1 / -1 / 1 so it's Unknown fruit
( besause response a = [0 0 0])
Shape / Texture / Weight = 1 / -1 / 1 so it's Banana!
( besause response a = [1 0 0])
Shape / Texture / Weight = -1 / 1 / 1 so it's Unknown fruit
( besause response a = [0 0 0])
Shape / Texture / Weight = 1 / 1 / 1 so it's Apple!
( besause response a = [0 0 1])
3. Приклади розв’язання задач
Задача 1.Мережу, яка навчається за правиломХебба зі зменшенням ваги, зображено на рис. 1.1.
Рис. 1.4. Асоціативна мережа:
Нехай коефіцієнти навчання та зменшення ваги α = 0,3 й γ = 0,1 відповідно.
І. Визначити, скільки разів необхідно послідовно подавати на вхід мережі пари навчання для того, щоб нейрон почав надавати правильну відповідь, якщо встановити такі початкові значення: w(0) = 0, w0 = 1 і b = 0,8. Пара навчання має вигляд {p0=1,p=1},а тестова пара {p0 = 0,p = 1}. Побудувати графік залежності ваги w від кількості ітерацій.
ІІ. Нехай початкове значення ваги w(0) = 1. Визначити,скільки разів необхідно послідовно подавати на вхід мережі пари навчання для того, щоб нейронне припинив надавати відповідь.Пара навчання має вигляд {p0 = 0,p = 0},а тестова пара {p0 = 0,p = 1}. Побудувати графік залежності ваги w від кількості ітерацій.
ІІІ. Використати формулу визначення стійкого значення ваги wmax. Перевірити, чи збігається отримана відповідь із графіком першоїчастини вправи (пункт І).
I. Демонстрація роботи мережі для входів {p0 = 0,p = 1}; {p0=1,p=1}
clc; clear all;
trainSpeed = 0.3; gamma=0.1;
W0=[1];
W=zeros(100,1); W1=zeros(100,1);
b=[-0.8];p=1;p0=0;
% НАВЧАННЯ
j=1;a0=0;
%(trainSpeed/gamma)=3
for i=1:100
a=hardlim(W0*p0+W(i)*p+b);
if a==1 & a0==1 & W1(i-1)==2,0
break;
end;
a0=a;
W(i+1)=W(i)+trainSpeed*a*p;
W1(i+1)=(1-gamma)*W1(i)+trainSpeed*a*p;
if j==1
p0=1;j=2;
else
p0=0; j=1;
end;
end;
size(W);
figure (1); plot(1:i,W(1:i),'ok');
figure (2);plot(1:i,W1(1:i),'ok')
Результат роботи:
IІ. Результат роботи для входів {p0 = 0,p = 1}; {p0=0,p=0}
Задача 2.Розглянемо мережу Інстар для розпізнавання образів (рис. 1.1). Послідовність навчання для заданої мережі , … . Задані пари входів будуть повторюватися доти, поки вектор ваги w не перестане змінюватися.
Pис. 1.5. Мережа Інстар:
Виконати перші вісім ітерацій правила Інстар, якщо коефіцієнт навчання α = 0,25, початкове значення ваги w(0) = [1 0]Т.
% Демонстрація роботи одношарової мережі Instar
clc; clear all;
trainSpeed = 0.25;
W0=[3]; W=[1;0];
b=[-2];p=[1; -1];p0=0;
% НАВЧАННЯ
j=1;a0=0;
for i=1:8
a=hardlim(W0*p0+W'*p+b);
a0=a;
W=W+trainSpeed*a*p;
if j==1
p0=1;j=2;
else
p0=0; j=1;
end;
end;
W
Результат роботи
W =[ 2.5000; -1.5000]
Задача 3. Накреслити діаграму мережі Інстар, яка здатна розпізнавати три різні чотирьохелементні вектори зі значеннями «1» або «1», якщо вона одержує збуджуючий сигнал: , , … .
І. Визначити:
1) скільки входів і виходів має мережа;
2) яку функцію активації можна використати.
ІІ. Визначити значення матриціваги, за допомогою якої мережа може розпізнати кожний із таких векторів та значення зсуву, яке можна використати. Протестувати мережу на одному із заданих векторів та векторі .
% Демонстрація роботи шару Instar
clc;close all;clear all;
p1=[1; -1; 1;-1];
p2=[-1; -1; 1;-1];
p3=[1; -1; -1;1];
W=[p1, p2, p3]'
b1=-3; % b>-4
b=[b1; b1; b1];
y=hardlim(W*p1+b);
for i=1:3
disp(strcat('y1 = ', num2str(y(i))));
end;
y=hardlim(W*p2+b);
for i=1:3
disp(strcat('y2 = ', num2str(y(i))));
end;
y=hardlim(W*p3+b);
for i=1:3
disp(strcat('y3 = ', num2str(y(i))));
end;
pt=[-1; -1; 1;1];
y=hardlim(W*pt+b);
for i=1:3
disp(strcat('y = ', num2str(y(i))));
end;
Результат роботи
W =
1 -1 1 -1
-1 -1 1 -1
1 -1 -1 1
-
y1 =[1; 0; 0]
y2 =[0; 1; 0]
y3 =[0; 0; 1]
yt = =[0; 0; 0]
4. Тестування одношарової мережі OUTSTAR
function outstar
%OUTSTAR DEMONSTRATION
clc;
close all;
clear all;
W2=[0; 0; 0];
working=1;
for i=1:1:50
if i>25
working=0;
if i==26
disp('%%%%%%%%%%%%%%% working=0 %%%%%%%%%%%%%%%');
end
end
%SHAPES
if (rand>0.25)
%PINEAPPLE
p1=[-1;-1;+1];
p2=1;
elseif(rand>0.66)
%BANANA
p1=[-1;+1;-1];
p2=0;
elseif(rand>0.5)
%ORANGE
p1=[1;-1;-1];
p2=0;
else
%APPLE
p1=[+1;+1;-1];
p2=0;
end
if(working~=1)
p1=[0;0;0];
end
shape_texture_weight=p1';
disp(strcat('Shape/Texture/Weight/Pineapple?=__',num2str(shape_texture_weight),' ;',num2str(p2)));
%CLASSIFY FRUIT
% W2=get(W2_ptr,'userdata');
n=p1+W2*p2;
a=(~((n<-1)|(n>1))).*n+(n>1)-(n<-1); disp(strcat('a=',num2str(a')));
%UPDATE WEIGHT
W2=W2+(0.2*ones(3,1)*p2').*(a-W2); %learnos(W2,p2,a0.2);
disp(strcat('W2=',num2str(W2')));
end