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

7.Рбф-мережа (робота № 5)

Мета роботи: ознайомитися з принципами функціонування та навчання РБФ-мережі.Об’єкт дослідження: РБФ-мережа, її використання для розв’язаннязадач класифікації та апроксимації.

Теми для опрацювання

1. РБФ-мережа.

Постановка задачі (згідно з індивідуальним завданням):

1. Побудувати та навчити РБФ-мережу розпізнаватиоб’єкти,подані увиглядіграфічних зображень.

Порядок виконання роботи

1. Вивчити теоретичний матеріал.

2. Послідовно виконати такі завдання до практичної роботи:

А. Спроектувати класифікатор зображень у вигляді РБФ-мережі (реалізувати алгоритм навчання), дослідити стійкість мережі.

Б. Перевірити мережу на здатність розв’язувати задачу класифікації зображень.

Задачі для самостійного розв’язання з теми 7

Варіанти завдань

Цель:.

Задание: привести пример программы решения задачи аппроксимации и классификации функции на базе радиальной базисной нейронной сети. В качестве данных использовать 100 значений функции из предыдущей практической работы, равномерно распределенных в заданном диапазоне. В качестве данных для тестирования взять 10 значений функции в других точках такого же диапазона. Построить график функции аппроксимации

Выполнение работы: радиальные сети строятся с использованием радиальных нейронов, функция активации которых имеет ненулевые значения только в окрестностях своего центра. Поэтому аппроксимация с помощью таких сетей называется локальной аппроксимацией.

Нейронная сеть радиальных базисных функций содержит в наиболее простой форме три слоя: обычный входной слой, выполняющий распределение данных образца для первого слоя весов; слой скрытых нейронов с радиально симметричной активационной функцией, каждый j -й из которых предназначен для хранения отдельного эталонного вектора в виде вектора весов wj(h); выходной слой

Для построения сети РБФ необходимо выполнение следующих условий.

Во-первых, наличие эталонов, представленных в виде весовых векторов нейронов скрытого слоя. Во-вторых, наличие способа измерения расстояния входного вектора от эталона. Обычно это стандартное евклидово расстояние. В-третьих, специальная функция активации нейронов скрытого слоя, задающая выбранный способ измерения расстояния. Обычно используется функция Гаусса, существенно усиливающая малую разницу между входным и эталонным векторами. Выходной сигнал эталонного нейрона скрытого слоя aj- это функция (гауссиан) только от расстояния pj между входным и эталонным векторами.

Процедура обучения радиально-базисных сетей включает три механизма:

· формирование нейронов второго и третьего слоев, задание их функций активации и настройки весов;

· модификация значений порогов нейронов;

· модификация счетчиков представительности нейронов.

Orthogonal least squares for SISO RBF network

function [w1,b1,w2,b2,mf,of,indf] = rb_ols(p,t,c,b,n,genplot)

%Initialization

p = p(:);

c = c(:);

b = b(:);

t = t(:);

q = length(p);

nc = length(c);

o = zeros(nc+1,1);

h = zeros(nc+1,1);

rr = eye(nc+1);

indexT = 1:nc+1;

if n>nc+1

n=nc+1;

end;

bindex = [];

sst = t'*t;

%Compute the regression matrix

temp = p*ones(1,nc) - ones(q,1)*c';

btot = ones(q,1)*b';

uo = exp(-(temp.*btot).^2);

uo = [uo ones(q,1)];

u = uo;

m = u;

%First stage

for i=1:(nc+1),

ssm = m(:,i)'*m(:,i);

h(i) = m(:,i)'*t/ssm;

o(i) = h(i)^2*ssm/sst;

end

[o1,ind1] = max(o);

of = o1;

hf(1) = h(ind1);

mf = m(:,ind1);

ssmf = mf'*mf;

u(:,ind1) = [];

if indexT(ind1)==(nc+1),

bindex = 1;

indf = [];

% temp change to start loop

k0=1;

else

indf = indexT(ind1);

% temp change to start loop

k0=2;

end

indexT(ind1) = [];

m = u;

%Stage k

% temp change to start loop

for k = 2:n,

%for k = k0:n,

o = zeros(nc+2-k,1);

h = zeros(nc+2-k,1);

r = zeros(k,k,k);

for i = 1:(q-k+1),

for j = 1:(k-1),

r(i,j,k) = mf(:,j)'*u(:,i)/ssmf(j);

m(:,i) = m(:,i) - r(i,j,k)*mf(:,j);

end

ssm = m(:,i)'*m(:,i);

h(i) = m(:,i)'*t/ssm;

o(i) = h(i)^2*ssm/sst;

end

[o1,ind1] = max(o);

mf = [mf m(:,ind1)];

ssmf(k) = m(:,ind1)'*m(:,ind1);

of = [of o1];

u(:,ind1) = [];

hf(k) = h(ind1);

for j = 1:(k-1),

rr(j,k)=r(ind1,j,k);

end

if indexT(ind1)==(nc+1),

bindex = k;

else

indf = [indf indexT(ind1)];

end

indexT(ind1) = [];

m = u;

end

%Solve for the original weights

nn = length(hf);

xx = zeros(nn,1);

xx(nn) = hf(nn);

for i=(nn-1):-1:1,

xx(i) = hf(i);

for j=nn:-1:i+1,

xx(i) = xx(i) - rr(i,j)*xx(j);

end

end

%Put the parameters into the weight and bias

w1 = c(indf);

b1 = b(indf);

if isempty(bindex),

b2 = 0;

w2 = xx';

else

w2 = xx([1:(bindex-1) (bindex+1):nn])';

b2 = xx(bindex);

end

% Convert the index array to show the bias selection at the correct iteration. Fill the uu array for

% later cross-checking of the computed weights.

if isempty(bindex),

uu = uo(:,indf);

else

indf = [indf(1:bindex-1) nc+1 indf(bindex:end)];

uu = uo(:,indf);

end

if nargin==6

if genplot==0

return

end

end

% New code to plot results

figure(1)

range(1)=min(p);

range(2)=max(p);

total = range(2)-range(1);

p2 = range(1):(total/1000):range(2);

Q2 = length(p2);

S1=length(w1);

pp2 = repmat(p2,S1,1);

n12 = abs(pp2-w1*ones(1,Q2)).*(b1*ones(1,Q2));

a12 = exp(-n12.^2);

a22 = w2*a12 + b2*ones(1,Q2);

%t_exact = sin(2*pi*freq*p2 + phase)+1;

temp=[(w2'*ones(1,Q2)).*a12; b2*ones(1,Q2)];

subplot(4,1,[1 2 3]), plot(p,t,'ok',p2,temp,':k');

%plot(t);

hold on

plot(p,t,'LineWidth',2)

plot(p,aa,'r')

hold off

subplot(4,1,4), plot(p2,a12,'k');

return

end

Linear Least Squares:

function lls

clc; clear all; close all;

%Linear Least Squares.

S1 = 7; % HIDDEN NEURONS min = 2 max = 9

npts = 12; % Number of Points min = 2 max = 20

freq = 1/2; %1/8; % frequency of the function to be fit min = 0.25 max = 1

ro = 0; % regularization constant min = 0 max = 1

phase = 60; % phase of the function min = 0 max = 360

Задаются границы

range = [-3 3];

Определяется шаг:

d1 = (range(2)-range(1))/(npts-1);

Задается вектор р:

p = range(1):d1:range(2);

Определяется функция t для аппроксимации:

t = sin(2*pi*(freq*p + phase/360))+1;

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