Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2015_for_stud_Практика_С.doc
Скачиваний:
16
Добавлен:
17.03.2016
Размер:
1.69 Mб
Скачать

Аудиторна робота

І. Програма графічного зображення процесу навчання нейрону 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, w= 1 і b = 0,8. Пара навчання має вигляд {p0=1,p=1},а тестова пара {p0 = 0,= 1}. Побудувати графік залежності ваги w від кількості ітерацій.

ІІ. Нехай початкове значення ваги w(0) = 1. Визначити,скільки разів необхідно послідовно подавати на вхід мережі пари навчання для того, щоб нейронне припинив надавати відповідь.Пара навчання має вигляд {p0 = 0,p = 0},а тестова пара {p0 = 0,p = 1}. Побудувати графік залежності ваги w від кількості ітерацій.

ІІІ. Використати формулу визначення стійкого значення ваги wmax. Перевірити, чи збігається отримана відповідь із графіком першоїчастини вправи (пункт І).

I. Демонстрація роботи мережі для входів {p0 = 0,= 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,= 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

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