例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 %结果输出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)