Вы находитесь на странице: 1из 18

Лабораторная работа 1

Линейная нейронная сеть. Правило обучения Уидроу-Хоффа.

МУРВИРАПАЧЕНА КЛАЙВ, ГРУППА М10-118М-22

вариант 12

Цель работы:

Исследование свойств линейной нейронной сети и алгоритмов её


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

1. Использовать линейную нейронную сеть для классификации


точек по двум классам. Значения весовых коэффициентов и
смещений нейронной сети, рассчитанные по методу наименьших
квадратов, сравнить со значениями, полученными при обучении
по правилу Уидроу-Хоффа. Отобразить изменение
среднеквадратичной ошибки сети при обучении и результаты
распознавания.
2. Использовать линейную нейронную сеть с задержками для
аппроксимации функции. Произвести адаптацию сети и
отобразить ошибку обучения.
3. Использовать линейную нейронную сеть с задержками в
качестве адаптивного фильтра для подавления помех.
Отобразить ошибку обучения.
Этап 1:

Обучающее множество:

1. P - множество входных данных, T - их классификация


P=[2.7 -3.8 -0.4 -1.7 2.9 0.2; 4.3 0.6 -4.9 -3.4 -1.9 -3.4]
P=
2.7000 -3.8000 -0.4000 -1.7000 2.9000 0.2000

4.3000 0.6000 -4.9000 -3.4000 -1.9000 -3.4000

T=[0 0 1 1 1 1]

T=

001111
net=newlind(P,T);
IW=net.IW{1,1};
b= net. b{1,1}

display(IW);

display(b);

plotpv(P,T);
grid on;
plotpc(net.IW{1},0);
Вывод:

IW=

0.0813 -0.1522

b = 0.4473
Рис. 1. Отображение сети, обучающей выборки,
дискриминантной линии

Создаемсеть с помощью функции newlin,


задаеммаксимальную скорость обучения и конфигурируем ее
под обучающее множество:

lr= maxlinlr ( P,'bias');


net= newlin([-6 6;-8 8],1,0,lr);
display (net);

Вывод:
net =
Neural Network
name: 'Custom Neural Network'
userdata: (your custom info)

dimensions:

numInputs: 1

numLayers: 1
numOutputs: 1
numInputDelays: 0
numLayerDelays: 0
numFeedbackDelays: 0
numWeightElements: 3
sampleTime: 1
connections:
biasConnect: true
inputConnect: true
layerConnect: false
outputConnect: true
subobjects:
input: Equivalent to inputs{1}
output: Equivalent to outputs{1}
inputs: {1x1 cell array of 1 input}
layers: {1x1 cell array of 1 layer}
outputs: {1x1 cell array of 1 output}
biases: {1x1 cell array of 1 bias}
inputWeights: {1x1 cell array of 1 weight}
layerWeights: {1x1 cell array of 0 weights}

functions:

adaptFcn: 'adaptwb'
adaptParam: (none)
derivFcn: 'defaultderiv'
divideFcn: (none)
divideParam: (none)
divideMode: 'sample'
initFcn: 'initlay'
performFcn: 'mse'
performParam: .regularization, .normalization
plotFcns: {'plotperform', 'plottrainstate'}
plotParams: {1x2 cell array of 2 params}
trainFcn: 'trainb'
trainParam: .showWindow, .showCommandLine, .show, .epochs,
.time, .goal, .min_grad, .max_fail
weight and bias values:
IW: {1x1 cell} containing 1 input weight matrix
LW: {1x1 cell} containing 0 layer weight matrices
b: {1x1 cell} containing 1 bias vector

methods:

adapt: Learn while in continuous use


configure: Configure inputs & outputs
gensim: Generate Simulink model
init: Initialize weights & biases
perform: Calculate performance
sim: Evaluate network outputs given inputs
train: Train network with examples
view: View diagram
unconfigure: Unconfigure inputs & outputs

Инициализируем сеть случайными значениями:

net.inputweights{1,1}.initFcn = 'rands';
net.biases{1}.initFcn = 'rands';
net = init(net);

Отображаем весовые коэффициенты и смещения:


IW = net . IW{1,1};
b=net.b{1};
display(IW);

display(b);

Весовые коэффициенты и смещения:


IW =
-0.5130 0.8585

b = 0.6286

Проводим обучение сети с помощью функции train с числом эпох


100 и отображаем весовые коэффициенты и смещения:
net.trainParam.epochs = 100;
net = train(net,P,T);
IW = net . IW{1,1};
b = net.b{1};
display (IW);

display(b);

plotpv(P,T);
grid minor
plotpc (net.IW{1},0);

Вывод:
IW =

-0.5130 0.8585

b = 0.6286
Рис. 2. Окно Neural Network Training
Комментарий и вывод к этапу 1

Значения весовых коэффициентов и перемещений нейронной сети не


лежали на линейном графике, а были разбросаны по его сторонам.
Значения, полученные во время обучения по правилу Уидроу-Хоффа,
приводили к меньшему количеству ошибок.
Этап 2:

Построим обучающее множество: в качестве входного множества


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

𝑥 = sin (𝑡 2 − 15 𝑡 + 3 ) , 𝑡 ∈ [ 0 . 5 , 3 ] , ℎ = 0 . 01

Обучающее множество:
h=0.01;
t0=0.5;
t1=3;
n=(t1-t0)/h+1;
p=zeros(1,n);
x=t0:h:t1;
for i=1:n
t=(i-1)*h;
p(i)=sin(t.^2-15.*t+3)-sin(t).^2

end

P=con2seq(p);
T=P;

Задаем задержки от 1 до 5 и скорость обучения 0.1,


инициализируем сеть случайными значениями и
отображаем весовые коэффициенты и смещение:
net=newlin([-1,1],1,0,0.1);
net.inputweights{1,1}.delays=1:5;
net.inputweights{1,1}.initFcn='rands';
net.biases{1}.initFcn='rands';
net=init(net);
IW=net.IW{1,1};
b=net.b{1};
display(IW);

display(b);
Весовые коэффициенты и смещение:

IW=

0.0938 0.9150 0.9298 -0.6848 0.9412

b=

-0.4430

Выполняем адаптацию с числом циклов равным 50 и строим


величину ошибки обучения:
net.adaptParam.passes=50;
[net,y,E,pf,af]=adapt(net,P(6:n),T(6:n),P(1:5));
display(sqrt(mse(E)));

view(net);

error=cell2mat (E);
output=cell2mat (y);
etalon =cell2mat (T);
plot (x(6:n),output, x,etalon),grid,legend('output','etalon');
plot (x(6:n),error), grid, legend ('error');

Вывод:
Error =

0.1734
Рис. 5. Структура полученной нейросети
Рис. 6. Эталонные и предсказанные нейросетью значения
Рис. 7. Ошибка обучения

Комментарий и вывод к этапу 2


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

Этап 3:
Построим обучающее множество: в качестве входного множества
используем значения второго входного сигнала на заданном интервале.
Эталонными выходами сети являются значения второй эталонной
функции на заданном интервале.
Входное множество:
𝑥=cos(t 2 ¿,𝑡∈ [0,4 ],ℎ=0.02

Выходное множество:
1
𝑦= 2 cos ⁡¿ 2𝜋)

h=0.01;
t0=0;
t1=4;
n=(t1-t0)/h+1;
p=zeros(1,n);
x=t0:h:t1;
for i=1:n
t=(i-1)*h;
p(i)=cos(t.^2)
T1(i)=(1/2).*cos(t.^2+2.*pi);

end

P=con2seq(p);
T=con2seq(T1);

Задаём задержки и скорость обучения:

net=newlin([-1,1],1,0,0.1);
net.inputweights{1,1}.delays=1:5;

net.inputweights{1,1}.initFcn='rands';
net.biases{1}.initFcn='rands';
net=init(net);
IW=net.IW{1,1};
b=net.b{1};
display(IW);

display(b);

Вывод:

IW = 1×5
-0.7228 -0.7014 -0.4850 0.6814 -0.4914
b=

0.0944

Выполним адаптацию с числом циклов, равным 50


net.adaptParam.passes=50;
[net,y,E,pf,af]=adapt(net,P(6:n),T(6:n),P(1:5));

display(sqrt(mse(E)));

view(net);

input = cell2mat (P);


error=cell2mat (E);
output=cell2mat (y);
etalon =cell2mat (T);
figure
plot (x,input,x(6:n),output,
x,etalon),grid,legend('input','output','etalon');

figure
plot (x(6:n),error), grid, legend ('error');

Величина ошибки:

Error =

0.1590

Вывод:
Рис. 8. Структура полученной нейросети
Рис. 9. Входное, эталонное выходное и предсказанное сетью значения
Рис. 10. Ошибка обучения.

Комментарий и вывод к этапу 3

входные и выходные значения различаются, ошибка становится меньше с


количеством итераций, пока она не может стать лучше, как показано на
графике ошибок

Выводы к лабораторной работе в целом

Значения весовых коэффициентов и расположение нейронной сети.


не лежат на линейном графике, а разбросаны по нему. Знания, полученные
во время обучения по правилам
Видроу-Хоффа, привело к меньшему количеству ошибок.
» Графики контрольных показателей и прогнозируемых нейронных оценок
входные и выходные значения различаются  

Вам также может понравиться