用Matlab算BP神经网络的具体算法?

用Matlab算BP神经网络的具体算法?,第1张

BP神经网络的传递函数一般采用sigmiod函数,学习算法一般采用最小梯度下降法;下面是具体的程序例子:

例1 采用动量梯度下降算法训练 BP 网络。

训练样本定义如下:

输入矢量

p =[-1 -2 3 1

-1 1 5 -3]

目标矢量为 t = [-1 -1 1 1]

解:本例的 MATLAB 程序如下:

close all

clear

echo on

clc

% NEWFF——生成一个新的前向神经网络

% TRAIN——对 BP 神经网络进行训练

% SIM——对 BP 神经网络进行仿真

pause

% 敲任意键开始

clc

% 定义训练样本

% P 为输入矢量

P=[-1, -2,3,1 -1,1,5, -3]

% T 为目标矢量

T=[-1, -1, 1, 1]

pause

clc

% 创建一个新的前向神经网络

net=newff(minmax(P),[3,1],{'tansig','purelin'},'traingdm')

% 当前输入层权值和阈值

inputWeights=net.IW{1,1}

inputbias=net.b{1}

% 当前网络层权值和阈值

layerWeights=net.LW{2,1}

layerbias=net.b{2}

pause

clc

% 设置训练参数

net.trainParam.show = 50

net.trainParam.lr = 0.05学习速率

net.trainParam.mc = 0.9动量系数

net.trainParam.epochs = 1000

net.trainParam.goal = 1e-3

pause

clc

% 调用TRAINGDM 算法训练 BP 网络

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

pause

clc

% 对 BP 网络进行仿真

A = sim(net,P)

% 计算仿真误差

E = T - A

MSE=mse(E)

pause

clc

echo off

这是一个简单的求异或问题的bp程序。你好好看看。自然就明白了。

程序可在matlab中直接执行

%%%2-2-1Bp网络求异或问题%%%

clear

lr=0.1%学习速率

eps=0.0001 %精度

times=20000

result=zeros(1,4)

p=[0 0 1 10 1 0 1]%输入

t=[0 1 0 1]%参考输出

w1=rand(2,2) %权值初始化

b1=rand(2,1)

w2=rand(2,1)

b2=rand(1)

for i=1:times

error=0

cw1=zeros(size(w1))

cb1=zeros(size(b1))

cw2=zeros(size(w2))

cb2=zeros(size(b2))

for j=1:4

hl=w1'*p(:,j)+b1

hlo=1./(1+exp(-hl))%隐含层作用函数

ol=w2'*hlo+b2

deta=t(j)-ol

cw2=cw2+lr*deta*hlo

cb2=cb2+lr*deta

deta2=hlo.*(1-hlo).*w2*deta%隐含层作用函数的反函数

cb1=cb1+lr*deta2

cw1=cw1+lr*p(:,j)*deta2'

error=error+0.5*(t(j)-ol)*(t(j)-ol)

end

w1=w1+cw1b1=b1+cb1%权值调整

w2=w2+cw2b2=b2+cb2

if error<eps

break %检验精度

end

end

for j=1:4 %训练完之后检验结果

hl=w1'*p(:,j)+b1

hlo=1./(1+exp(-hl))

ol=w2'*hlo+b2

result(j)=ol

end

error,i,result %结果输出


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11152193.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存