运用Matlab创建BP神经网络

运用Matlab创建BP神经网络(R2010b)
BP神经网络属于前向网络
以下为创建BP神经网络的方法及参数意义
(1)net=newff(P,T,S)或者net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
P:输入参数矩阵。(RxQ1)
T:目标参数矩阵。(SNxQ2)
S:N-1个隐含层的数目(S(i)到S(N-1)),输出层的单元数目取决于T,默认为空矩阵。
TF:相关层的传递函数,默认隐含层为tansig函数,输出层为purelin函数。
BTF:BP神经网络学习训练函数,默认值为trainlm函数。
BLF:权重学习函数,默认值为learngdm。
PF:性能函数,默认值为mse。
IPF,OPF,DDF均为默认值即可。
(2)传递函数
purelin 线性传递函数
tansig 正切 S 型传递函数
logsig 对数 S 型传递函数
隐含层和输出层函数的选择对BP神经网络预测精度有较大影响,一般隐含层节点转移函数选用 tansig函数或logsig函数,输出层节点转移函数选用tansig函数或purelin函数。
(3)学习训练函数
神经网络的学习分为有导师学习和无导师学习。
最速下降BP算法:traingd
动量BP算法:traingdm
学习率可变的BP算法:trainda(学习率可变的最速下降BP算法);traindx(学习率可变的动量BP算法)
弹性算法:trainrp
变梯度算法:traincgf(Fletcher-Reeves修正算法)
            traincgp(Polak_Ribiere修正算法)
            traincgb(Powell-Beale复位算法)
            trainbfg(BFGS 拟牛顿算法)
trainoss(OSS算法)
trainlm(LM算法)
参数说明:通过net.trainParam可以查看参数
    Show Training Window Feedback   showWindow: true
    Show Command Line Feedback showCommandLine: false
    Command Line Frequency            show: 两次显示之间的训练次数
    Maximum Epochs                   epochs: 训练次数 
    Maximum Training Time              time: 最长训练时间(秒)
    Performance Goal                      goal: 网络性能目标
    Minimum Gradient                  min_grad: 性能函数最小梯度
    Maximum Validation Checks         max_fail: 最大验证失败次数
    Learning Rate                           lr: 学习速率
    Learning Rate Increase              lr_inc: 学习速率增长值
    Learning Rate                       lr_dec: 学习速率下降值
    Maximum Performance Increase  max_perf_inc:
Momentum Constant                       mc: 动量因子
(4)BP神经网络预测函数
SimOut = sim('model', Parameters) & y=sim(net,x)
函数功能:用训练好的BP神经网络预测函数输出
net:训练好的网络
x:输入数据
y:网络预测数据
(5)训练函数
[net,tr] = train(Net,P,T,Pi,Ai)
其中,
Net  待训练的网络
P    输入数据矩阵
T    输出数据矩阵 (default = zeros)
Pi   初始化输入层条件 (default = zeros)
Ai   初始化输出层条件 (default = zeros)
net   训练好的网络
tr    训练过程记录
注意:P   Ni-by-TS cell array   Each element P{i,j,ts} is an Ni-by-Q matrix.
T   Nl-by-TS cell array   Each element T{i,ts} is a Ui-by-Q matrix.

BP网络的常用函数表
函数类型        函数名称        函数用途
前向网络创建函数        newcf        创建级联前向网络
        Newff        创建前向BP网络
传递函数        logsig        S型的对数函数
        tansig        S型的正切函数
        purelin        纯线性函数
学习函数        learngd        基于梯度下降法的学习函数
        learngdm        梯度下降动量学习函数
性能函数        mse        均方误差函数
        msereg        均方误差规范化函数

显示函数        plotperf        绘制网络的性能
        plotes        绘制一个单独神经元的误差曲面
        plotep        绘制权值和阈值在误差曲面上的位置
        errsurf        计算单个神经元的误差曲面

范例(网上搜寻的,谢谢原作者)
现给出一药品商店一年当中12个月的药品销售量(单位:箱)如下:
2056 2395 2600 2298 1634 1600 1873 1487 1900 1500 2046 1556
训练一个BP网络,用当前的所有数据预测下一个月的药品销售量。
我们用前三个月的销售量预测下一个月的销售量,也就是用1-3月的销售量预测第4个月的销售量,用2-4个月的销售量预测第5个月的销售量,如此循环下去,直到用9-11月预测12月份的销售量。这样训练BP神经网络后,就可以用10-12月的数据预测来年一月的销售量。
实现程序如下:
P =[2056 2395 2600;2395 2600 2298;2600 2298 1634;2298 1634 1600;...
   1634 1600 1873;1600 1873 1478;1873 1478 1900;1478 1900 1500;...
   1900 1500 2046;];
T = [2298 1634 1600 1873 1487 1900 1500 2046 1556];
pmax = max(P);
pmax1 = max(pmax);
pmin = min(P);
pmin1 = min(pmin);
for i=1:9
    P1(i,:)=(P(i,:)-pmin1)/(pmax1-pmin1);
    T1(i)=(T(i)-pmin1)/(pmax1-pmin1);
end
net = newff(P1',T1,[3 7],{'tansig' 'logsig'},'traingd');
for i = 1:9
    net.trainParam.epochs = 15000;
    net.trainParam.goal=0.01;
    net.trainParam.lr = 0.1
    net = train(net,P1(i,:)',T1(i));
end
y=sim(net,[1500 2046 1556]');
y1=y*(pmax1-pmin1)+pmin1;

如果神经网络的训练函数使用trainlm,则仿真步骤会很少,但需要较大的系统内存。
经预测,来年一月的销售量(y1)为1.6845e+003箱(每次运行后的结果可能不同)。
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值