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

Подбор параметров радиальной функции для каждого радиального нейрона (центр delta и параметр ширины b)

Вычисляется центр:

delta = (range(2)-range(1))/(S1-1);

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

b=1.6652/delta;

Определяется длинна диапазона:

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

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

W1 = range(1):delta:range(2);

Преобразуется строка W1 в столбец:

W1 = W1(1:(end))';

Создается вектор смещения:

b1 = b*ones(size(W1));

Нахождение длинны вектора р:

Q = length(p);

Формируется матрица по вектору р с количеством строк = S1, и 1 столбца:

pp = repmat(p,S1,1);

Работа первого слоя:

Нахождение значений n1:

n1 = abs(pp-W1*ones(1,Q)).*(b1*ones(1,Q));

Нахождение значений выхода:

a1 = exp(-n1.^2);

Отыскание коэффициентов выходного (линейного) слоя

Добавление строки единиц к матрице а1:

Z = [a1;ones(1,Q)];

Нахождение псевдоинверсной матрицы Грина:

x=pinv(Z*Z'+ro*eye(S1+1))* Z;

Определение параметров выходного слоя (W2 и b2):

x=x*t';

Выделение весов выходного слоя нейронов W2 (из вектора х с исключением последнего значения):

W2 = x(1:end-1)';

Выделение значения смещения b2 (последнее значение вектора х):

b2 = x(end);

Работа второго слоя:

Вычисление значений выхода а2:

a2 = W2*a1 + b2*ones(1,Q);

Вычисление значений вектора р2:

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

Нахождение длинны вектора р2:

Q2 = length(p2);

Формируется матрица по вектору р2 с количеством строк = S1, и 1 столбца:

pp2 = repmat(p2,S1,1);

Адаптация нелинейных параметров радиальных функций всех нейронов первого слоя сети:

Нахождение обновленных значений n1:

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

Нахождение обновленных значений выхода:

a12 = exp(-n12.^2);

Вычисление обновленное значений выхода а2:

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

Вычисление значений вектора t:

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

Нахождение значений temp:

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

Нахождение квадратической ошибки (sse = sumsqr(t-a2)):

sse = sum(sum((t-a2).*(t-a2)));

Вывод на график:

%fa_plot = plot(P,T,'+','color',nnred);

F1 = figure(1);

subplot(2,1,1);

fa_plot = plot(p,t,'*k','LineWidth',2); Черные кружочки

hold on

fa_plot2 = plot(p2,temp,'--k'); Черная штриховая линия

fa_plot3 = plot(p2,t_exact,'b','LineWidth',2); Синяя сплошная линия

fa_plot4 = plot(p2,a22,'r','LineWidth',1); Красная сплошная линия

title('Function Approximation - Linear Least Squares');

ylabel('a2');

xlabel('p');

hold off

subplot(2,1,2);

fb_plot = plot(p2,a12,'k', 'LineWidth',2); Черная сплошная линия

ylabel('a1');

xlabel('p');

Orthogonal Least Squares

function ols

clc; clear all; close all;

S1 = 5; % HIDDEN NEURONS min = 2

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

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

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

range = [-2 2];

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

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

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

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

Определяется вектор t:

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

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