Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

5336

.pdf
Скачиваний:
1
Добавлен:
13.11.2022
Размер:
1.25 Mб
Скачать

51

net.IW{1,1},net.b{1}

% – настраиваемые параметры.

Задание 4. Создать, обучить и апробировать персептрон для принятия решения о зачислении в высшее учебное заведение абитуриентов, сдавших вступительные экзамены.

Пример выполнения Лабораторной работы 4

Создание и обучение нейронной сети с помощью алгоритма обратного распространения ошибки

\\ Входы нейронной сети p=[0 1 2 3 4 5 6 7 8 9]

\\ Желаемые реакции нейронной сети

t=[0.28 -0.10 0.84 0.16 -0.80 0.92 0.85 -0.53 0.21 0.42] \\ изображение аппроксимируемой функции

plot(p, t, 'o') – см. рисунок 28.

1

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

-0.80

1

2

3

4

5

6

7

8

9

Рисунок 28 – Изображение аппроксимируемая функция plot(p, t, 'o')

\\ или

plot(p, t, 'g') – см. рисунок 29.

 

 

 

 

52

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

-0.80

1

2

3

4

5

6

7

8

9

Рисунок 29 – Изображение аппроксимируемая функция plot(p, t, 'g')

Создание двухслойной сети прямого распространения с интервалом значений входов от 0 до 8, причём первый слой содержит 9 нелинейных сигмоид, а второй

– 2 линейных нейрона. Для обучения используется алгоритм обратной ошибки. net=newff([0 8], [5 2], {'tansig' 'purelin'}, 'trainlm')

\\ имитация работы обученного нейрона y1=sim(net,p)

\\y1 =

-0.2458 -1.3231 -1.6270 -1.9398 -2.0223 -2.1219 -2.7422 -2.7829 -1.9261 -0.9606

-1.4730 -1.3377 -1.5795 -0.8637 -0.2506 -0.6396 -0.5257 0.4949 0.8642 0.3756

\\ изображение результатов работы обученного нейрона

 

 

 

 

 

 

 

 

plot(p,t,'o',p,y1,'x')

 

 

 

 

 

plot(p,t,'g',p,y1,'x')

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-0.80

1

2

3

4

5

6

7

8

9

-0.80 1 2

3

4

5

6

7

8

9

 

Рисунок 30 − Изображение результатов работы обученного нейрона

 

 

53

Обучение сети на 100 эпохах с целевой ошибкой 0.01:

\\ установка количества проходов net.trainParam.epochs = 100

\\ установка целевого значения ошибки net.trainparam.goal = 0.01

\\ обучение нейронной сети (см. рисунки 31, 32, 33) net=train(net,p,t)

 

100

 

Performance is 0.00885424, Goal is 0.01

 

 

 

 

 

 

 

 

 

 

Goal-Black

10-1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Training-Blue

10-2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10-3

 

 

 

 

 

 

 

 

0

5

10

15

20

25

30

35

 

 

 

 

35 Epochs

 

 

 

Рисунок 31 − Обучение нейронной сети

\\имитация работы обученной нейронной сети y2=sim(net,p)

\\изображение результатов работы нейронной сети plot(p,t,'o',p,y1,'x',p,y2,'+')

1

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

-0.8

 

 

 

 

 

 

 

 

 

-10

1

2

3

4

5

6

7

8

9

Рисунок 32 − Изображение результатов работы нейронной сети plot(p,t,'g',p,y1,'x',p,y2,'+')

 

 

 

 

54

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

0.8

 

 

 

 

 

 

 

 

 

0.6

 

 

 

 

 

 

 

 

 

0.4

 

 

 

 

 

 

 

 

 

0.2

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

-0.2

 

 

 

 

 

 

 

 

 

-0.4

 

 

 

 

 

 

 

 

 

-0.6

 

 

 

 

 

 

 

 

 

-0.8

 

 

 

 

 

 

 

 

 

-10

1

2

3

4

5

6

7

8

9

Рисунок 33 − Изображение результатов работы нейронной сети

2.5. Лабораторная работа 5

Тема: Изучение радиальных, вероятностных нейронных сетей, сетей регрессии

Цель работы – изучить модель вычислений радиального базисного нейрона, структуру и функции сетей регрессии, вероятностных нейронных

сетей.

Теоретические сведения

Исследование радиальных базисных сетей общего вида Радиальная, базисная сеть общего вида – это двухслойная нейронная сеть с

R входами, каждый из которых может состоять из нескольких элементов.

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

radbas(n) e n2 .

Эта функция имеет максимум, равный 1, при n = 0 и плавно убывает при увеличении n, достигая значения 0.5 при n = ±0.833. Передаточной функцией нейронов выходного слоя является линейная функция perelin.

Функция взвешивания для входного слоя вычисляет евклидово расстояние между каждой строкой матрицы весов и каждым столбцом матрицы входов:

dist(wi , p j ) sqrt((wi p j )2 ) .

55

Затем эта величина умножается на смещение нейрона и поступает на вход передаточной функции, так что

a{i} = radbas(net.prod(dist(net.IW{1, 1}, p).net.b{i})).

Для нейронов выходного слоя функцией взвешивания является скалярное произведение dotprod, а функцией накопления – функция суммирования взвешенных входов и взвешенного смещения netsum.

Для того чтобы понять поведение радиальной базисной сети общего вида,

необходимо проследить прохождение вектора входа p. При задании значений элементам вектора входа каждый нейрон входного слоя выдаёт значение в соответствии с тем, как близок вектор входа к вектору весов каждого нейрона.

Таким образом, нейроны с векторами весов, значительно отличающимися с вектором входа p, будут иметь выходы, близкие к 0, и их влияние на выходы линейных нейронов выходного слоя будет незначительное. Напротив, входной нейрон, веса которого близки к вектору p, выдаст значение, близкое к единице.

Для построения радиальных базисных сетей общего вида и автоматической настройки весов и смещений используются две функции newrbe и newrb.

Первая позволяет построить радиальную базисную сеть с нулевой ошибкой,

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

net = newrbe(P, T, SPREAD),

net = newrb(P, T, GOAL, SPREAD),

где P – массив размера RxQ входных векторов,

R – число элементов вектора входа,

Q – число векторов в последовательности;

T – массив размера SxQ из Q векторов цепи и S классов;

SPREAD – параметр влияния, определяющий крутизну функции radbas,

значение по умолчания, которого равно единице;

GOAL – средняя квадратичная ошибка, при этом значение по умолчанию равно 0.0.

Параметр влияния SPREAD существенно влияет на качество аппроксимации функции: чем больше его значение, тем более гладкой будет

56

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

SPREAD потребует большего количества нейронов для аппроксимации гладкой функции. Обычно параметр влияния SPREAD выбирается большим,

чем шаг разбиения интервала задания обучающей последовательности, но меньшим размера самого интервала.

Функция newrbe устанавливает веса первого слоя равным P′, а смещения – равными 0.8326/ SPREAD, в результате радиальная базисная функция пересекает значение 0.5 при значениях евклидового расстояния ±SPREAD. Веса второго слоя LW{2,1} и смещения b{2} определяются путём моделирования выходов первого слоя A{1} и последующего решения системы линейных уравнений:

[LW{2,1} b{2}]*[A{1}; ones] = T.

Функция newrb формирует сеть следующим образом. Изначально первый слой не имеет нейронов. Сеть моделируется и определяется вектор входа с самой большой погрешностью, добавляется нейрон с функцией активации radbas и

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

Радиальная базисная сеть типа GRNN(Generalized Regression Neural Network), или обобщённая регрессионная сеть имеет архитектуру, аналогичную архитектуре радиальной базисной сети общего вида, и отличается от неё структурой второго слоя, в котором используется блок normprod для вычисления нормированного скалярного произведения строки массива весов

LW{2,1} и вектора выхода первого слоя а{1} в соответствии со следующим соотношением:

n{2} = LW{2,1} * a{1}/sum(a{1}).

В общем виде функция normprod определяется так: normprod(W,P) = W * P/sum(P/1),

где W – матрица весов размера S × R,

57

P – массив входов размера R × Q,

sum(P,1) – сумма элементов массива Р по столбцам.

Создание сети осуществляется функцией

net = newgrnn(P,T,SPREAD).

Эта функция устанавливает веса первого слоя равным Р′, а смещение – равным величине 0.8326/SPREAD, что приводит к радиальным базисным функциям, которые пересекают величину 0.5 при значениях взвешенных входов ± SPREAD. Веса второго слоя устанавливаются равными Т. Смещения отсутствуют.

Первый слой сети GRNN – это радиальный базисный слой с числом нейронов, равными числу элементов Q обучающего множества. В качестве начального приближения для матрицы весов выбирается массив Р′, смещение для этого слоя устанавливается равным вектору столбцу с элементами

0.8326/SPREAD. Функция dist вычисляет расстояние между вектором входа и вектором веса нейрона. Вход передаточной функции равен поэлементному произведению взвешенного входа сети на вектор смещения. Входом каждого нейрона первого слоя является значение функции radbas. Если вектор веса нейрона равен транспонированному вектору входа, то взвешенный вход Равен 0,

а выход равен 1. Если расстояние между вектором входа и вектором веса нейрона равно SPREAD, то выход нейрона будет равен 0.5.

Второй слой сети GRNN – это линейный слой с числом нейронов, также равным числу элементов Q обучающего множества, причём в качестве начального приближения для матрицы весов LW{2,1} выбирается массив Т.

Если на вход подаётся вектор Рi, близкий к одному из векторов входа Р из обучающего множества, то этот вектор сгенерирует значение выхода слоя,

близкое к единице. Это приведёт к тому, что выход второго слоя будет близок к

ti.

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

58

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

Радиальная базисная сеть типа PNN (Probabilistic Neural Networks), или вероятностная нейронная сеть, имеет архитектуру, аналогичную архитектуре радиальной базисной сети общего вида, и отличается от неё структурой второго слоя, в котором используются функция взвешивания dotprod (скалярное произведение сигналов и весов), функция накопления netsum и передаточная функция compet – конкурирующая функция, преобразующая вектор входа слоя нейронов таким образом, чтобы нейрон с самым большим входом имел выход,

равной единице, а все другие нейроны имели выходы, равные нулю. Смещения используются только в первом слое.

Создание вероятностей сети осуществляется функцией

net=newpnn(P,T,spread),

где Р – массив размера R*Q из Q входных векторов с R элементами;

T – массив размера S*Q из Q векторов цели и S классов;

SPREAD – параметр влияния, значение по умолчанию 1.0.

Для вероятностей сети необходимо задать обучающее множество из Q пар векторов входа и целей. Каждый вектор цели имеет K элементов, указывающих класс принадлежности и, таким образом, каждый вектор входа ставится в соответствие одному из К классов. В результате образуется матрица связанности T размера K*Q, состоящая из нулей и единиц, строки, которой соответствуют классам принадлежности, а столбцы – векторам входа. Таким образом, если элемент Т(i,j) матрицы связанности равен единице, то это означает, что j-й входной вектор принадлежит к классу i.

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

Весовая матрица второго слоя соответствует матрице связанности Т,

которая строится с помощью функции ind2vec.

59

Самостоятельная работа

Задание 1. Создать радиальную базисную сеть с нулевой ошибкой для обучающей последовательности P = 0:3 и T = [0.0 2.0 4.1 5.9],

проанализировать структурную схему построенной сети и значения параметров ее вычислительной модели, выполнив следующие действия:

1. Создать радиальную базисную сеть с нулевой ошибкой:

P = 0:3;

T = [0.0 2.0 4.1 5.9];

net = newrbe(P, T);

2. Проанализировать параметры вычислительной модели сети:

net

net.layers{1}.size % – число нейронов в первом слое; net.layers{2}.size % – число нейронов во втором слое; net.layers{1}.initFcn

net.layers{1}.netInputFcn

net.layers{1}.transferFcn

net.layers{2}.initFcn net.layers{2}. transferFcn net.layers{2}.netInputFcn net.inputWeights{1, 1}.initFcn net.inputWeights{1, 1}.weightFcn net.inputWeights{2, 1}.initFcn net.inputWeights{2, 1}.weightFcn net.inputWeights{1, 1}.learnFcn net.IW{1, 1}, net.b{1}

net.LW{2, 1}, net.b{2} net.inputWeights{1, 1}, net.biases{1} net.inputWeights{2, 1}, net.biases{2}

Задание 2. Провести аппроксимацию функции f(x) с помощью радиальных базисных функций i (x) в виде следующего разложения в ряд:

60

f(x) i i (x),

i 1n

здесь коэффициенты разложения по радиальным базисным функциям:

p = -3:0.1:3; a1 = radbas(P);

a2 = padbas(P-1.5);

a3 = radbas(P+2);

a = a1 + a2 + 0.5*a3;

plot(P, a1, p, a2, p, 0.5*a3, p, a).

Как видно из графика, разложение по радиальным базисным функциям обеспечивает необходимую гладкость. Разложение указанного вида может быть реализовано на двухслойной нейронной сети, первый слой которой состоит из радиальных базисных нейронов, а второй – из единственного нейрона с линейной характеристикой, на котором суммируются выходы нейронов первого слоя.

Задание 3. Создать обобщённую регрессионную сеть для обучающей последовательности Р=0:3 и Т[0.0 2.0 4.1 5.9], проанализировать её структурную схему и значения параметров вычислительной модели, выполнить моделирование сети для различных входов, построить графики и оценить влияние на выходные значения параметра SPREAD, выполнив следующие команды:

P = 0:3;

T = [0.0 2.0 4.1 5.9];

net = newgrnn(P,T) параметр SPREAD = 1.0; gensim (net)

plot(P,T, ′*r′, ′MarkerSize′, 2, ′LineWidth′, 2) hold on

V = sim(net, P)

plot(P,V, ′o8′, ′MarkerSize′, 8, ′LineWidth′, 2)

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