BP神经网络续1

原创
2017/12/25 21:00
阅读数 25

一、BP网络中的函数

1.创建函数

1) cascadeforwardnet函数

cascadeforwardnet(hiddenSizestrainFcn)

其中参数hiddenSizes为隐含层神经元节点的个数,如果有多个隐含层,则hiddenSizes是一个行向量,默认值为10;参数trainFcn为训练函数(默认值为trainlm)。

2) feedforwardnet(hiddenSizes,trainFcn)

3) newff函数

4) newcf函数

2.传递函数

1) logsig函数

A = logsig(N,FP)NSxQ维的网络输入(列)向量,FP为性能参数

dA_dN = logsig(dn,N,A,FP)

返回A关于N的导数dA_dN,如果AFP没有给出,则FP返回默认参数

2) tansig函数

3) purelin函数

该函数为线性传递函数

3.学习函数

1) learngd函数

2) learngdm函数

4.训练函数

1) trainbfg函数

准牛顿BP算法

2) traingd函数

该函数为负梯度下降BP算法函数

3) traindm函数

该函数为负梯度下降动量BP算法函数

5.性能函

perf = msereg(E,Y,X,FP)

参数E表示误差矩阵或向量(E=T-YT表示网络的目标向量);Y为网络的输出向量;X为所有权值和阈值的向量;FP表示性能参数;返回参数perf为平均绝对误差

6.显示函数

1) plotperf函数

用于绘制一个单独神经元的额误差曲面

plotperf(tr,goal,name,epoch)

其中tr为网络训练记录;参数goal为性能目标,默认值为NaN;参数name为训练函数名称,默认为空;参数epoch为训练步数,默认训练记录的长度。

2) errsurf函数

errsurf(P,T,WV,BV,F)

P为输入行向量,T为目标行向量;WV为权值列向量;BV为阈值列向量;F为函数名字

3) plotes函数

plotes(WV,BV,ES,V)

其中,参数WV为权值的N维列向量;参数BVM维的阈值行向量;参数ES为误差向量组成的MxN维矩阵;参数V为视角,默认为[-37.5,30]

4) plotep函数

H = plotep(W,B,E)

参数W为当前权值;参数B为当前阈值;参数E为当前神经元的输入误差

二、BP神经网络的应用

1.分类

p=[1 2;-1 1;-2 1;-4 0]';

t=[0.2 0.8 0.8 0.2];

net=newff([-1 1;-1 1],[5 1],{'logsig','logsig'},'traingd');

net.trainParam.goal = 0.001;

net.trainParam.epochs = 5000;

[net,tr]=train(net,p,t);

iw1=net.iw{1}

ib1=net.b{1}

iw2=net.iw{2}

ib2=net.b{2}

save li3_27 net;

load li3_27 net;

p1=[1 2;-1 1;-2 1;-4 0]';

a2=sim(net,p1)

disp('输出分类结果为:')

a2=a2>0.5

2.BP网络去除噪声

clear all;

[alphabet,targets]=prprob;

[R,Q]=size(alphabet);

[S2,Q]=size(targets);

S1=10;

P=alphabet;

net=newff(minmax(P),[S1 S2],{'logsig','logsig'},'traingdx');

net.LW{2,1}=net.LW{2,1}*0.01;

net.b{2}=net.b{2}+0.01;

% 无噪声训练

T=targets;

net.performFcn='sse';

net.trainParam.goal=0.1;

net.trainParam.show=20;

net.trainParam.epochs=5000;

net.trainParam.mc=0.95;

[net,tr]=train(net,P,T);

% 有噪声训练

netn=net;

netn.trainParam.goal=0.6;

netn.trainParam.epochs=300;

T=[targets targets targets targets];

for pass=1:10

    P=[alphabet,alphabet,(alphabet+rand(R,Q)*0.1),(alphabet+randn(R,Q)*0.2)];

        [netn,tr]=train(netn,P,T);

end

% 再次进行无噪声训练,为了使得网络得到理想信号

netn.trainParam.goal=0.1;

netn.trainParam.epochs=5000;

netn.trainParam.show=5;

P=alphabet;

T=targets;

% [net,tr]=train(netn,P,T);

% 系统性能

noise_range=0:0.05:0.5;

max_test=100;

network1=[];

network2=[];

T=targets;

for noiselevel=noise_range

    errors1=0;

    errors2=0;

    for i=1:max_test

        P=alphabet+randn(35,26)*noiselevel;

        A=sim(net,P);

        AA=compet(A);

        errors1=errors1+sum(sum(abs(AA-T)))/2;

        An=sim(netn,P);

        AAn=compet(An);

        errors2=errors2+sum(sum(abs(AA-T)))/2;

    end

    network1=[network1 errors1/26/100];

    network2=[network2 errors2/26/100];

end

plot(noise_range,network1*100,'--',noise_range,network2*100);

xlabel('噪声指标');

ylabel('无噪声训练 -- 有噪声训练 ---');

legend('无噪声训练网络','有噪声训练');

% 对训练的网络进行仿真

noisyA=alphabet(:,1)+randn(35,1)*0.2;

figure;

plotchar(noisyA);

A2=sim(net,noisyA);

A2=compet(A2);

answer=find(compet(A2)==1);

figure;plotchar(alphabet(:,answer));


       

 

 

 


本文分享自微信公众号 - 瓜大三哥(xiguazai_tortoise)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部