先来一段整体的代码了解一下整体的架构:
<span style="font-size:18px;">input=img; bpnet=newff(minmax(input),[30 30],{'logsig', 'logsig'}, 'traingdx', 'learngdm'); %建立BP神经网络, 12个隐层神经元,4个输出神经元 %tranferFcn属性 'logsig' 隐层采用Sigmoid传输函数 %tranferFcn属性 'logsig' 输出层采用Sigmoid传输函数 %trainFcn属性 'traingdx' 自适应调整学习速率附加动量因子梯度下降反向传播算法训练函数 %learn属性 'learngdm' 附加动量因子的梯度下降学习函数 net.trainParam.epochs=1000;%允许最大训练步数2000步 net.trainParam.goal=0.001; %训练目标最小误差0.001 net.trainParam.show=10; %每间隔100步显示一次训练结果 net.trainParam.lr=0.05; %学习速率0.05 bpnet=train(bpnet,input,label); r=sim(bpnet,input);%预测的输出</span>
使用Matlab建立前馈神经网络主要会使用到下面3个函数:
newff :前馈网络创建函数
train:训练一个神经网络
sim :使用网络进行仿真
下面简要介绍这3个函数的用法。
(1) newff函数
<1>newff函数语法
newff函数参数列表有很多的可选参数,具体可以参考Matlab的帮助文档,这里介绍newff函数的一种简单的形式。
语法:net = newff ( A, B, {C} ,‘trainFun’)
参数:
A:一个n×2的矩阵,第i行元素为输入信号xi的最小值和最大值;
B:一个k维行向量,其元素为网络中各层节点数;
C:一个k维字符串行向量,每一分量为对应层神经元的激活函数;
trainFun :为学习规则采用的训练算法。
<2>常用的激活函数
常用的激活函数有:
a) 线性函数 (Linear transfer function)
f(x) = x 该函数的字符串为’purelin’。
b) 对数S形转移函数( Logarithmic sigmoid transfer function )
该函数的字符串为’logsig’。
c) 双曲正切S形函数 (Hyperbolic tangent sigmoid transfer function )
也就是上面所提到的双极S形函数。
该函数的字符串为’tansig’。
Matlab的安装目录下的toolbox\nnet\nnet\nntransfer子目录中有所有激活函数的定义说明。
<3>常见的训练函数
常见的训练函数有:
traingd:梯度下降BP训练函数(Gradient descent backpropagation)
traingdx :梯度下降自适应学习率训练函数
1.traingd:批梯度下降训练函数,沿网络性能参数的负梯度方向调整网络的权值和阈值. 2. traingdm:动量批梯度下降函数,也是一种批处理的前馈神经网络训练方法,不但具有更快的收敛速度,而且引入了一个动量项,有效避免了局部最小问题在网络训练中出现. 3. trainrp:有弹回的BP算法,用于消除梯度模值对网络训练带来的影响,提高训练的速度.(主要通过delt_inc和delt_dec来实现权值的改变) 4. trainlm:Levenberg-Marquardt算法,对于中等规模的BP神经网络有最快的收敛速度,是系统默认的算法.由于其避免了直接计算赫赛矩阵,从而减少了训练中的计算量,但需要较大内存量. 5. traincgb:Plwell-Beale算法:通过判断前后梯度的正交性来决定权值和阈值的调整方向是否回到负梯度方向上来. 6. trainscg:比例共轭梯度算法:将模值信赖域算法与共轭梯度算法结合起来,减少用于调整方向时搜索网络的时间. 一般来说,traingd和traingdm是普通训练函数,而traingda,traingdx,traingd,trainrp,traincgf,traincgb,trainscg,trainbgf等等都是快速训练函数.总体感觉就是训练时间的差别比较大,还带有精度的差异. all of the list: trainb - 批具有重量与偏见学习规则的培训。 trainbfg - 的BFGS拟牛顿倒传递。 trainbr - 贝叶斯规则的BP算法。 trainbu - 与重量与偏见一批无监督学习规则的培训。 trainbuwb - 与体重无监督学习规则与偏见一批培训。 trainc - 循环顺序重量/偏见的培训。 traincgb - 共轭鲍威尔比尔重新启动梯度反向传播。 traincgf - 共轭弗莱彻-里夫斯更新梯度反向传播。 traincgp - 共轭波拉克- Ribiere更新梯度反向传播。 traingd - 梯度下降反向传播。 traingda - 具有自适应LR的反向传播梯度下降。 traingdm - 与动量梯度下降。 traingdx - 梯度下降瓦特/惯性与自适应LR的反向传播。 trainlm - 采用Levenberg -马奎德倒传递。 trainoss - 一步割线倒传递。 trainr - 随机重量/偏见的培训。 trainrp - RPROP反向传播。 trainru - 无监督随机重量/偏见的培训。 火车 - 顺序重量/偏见的培训。 trainscg - 规模化共轭梯度BP算法。 |
<4>网络配置参数
一些重要的网络配置参数如下:
net.trainparam.goal :神经网络训练的目标误差
net.trainparam.show : 显示中间结果的周期
net.trainparam.epochs :最大迭代次数
net.trainParam.lr : 学习率
net.trainParam.min_grad :最小梯度值
(2) train函数
网络训练学习函数。
语法:[ net, tr, Y1, E ] = train( net, X, Y )
参数:X:网络实际输入Y:网络应有输出tr:训练跟踪信息Y1:网络实际输出E:误差矩阵
(3) sim函数
语法:Y=sim(net,X)
参数:
net:网络
X:输入给网络的K×N矩阵,其中K为网络输入个数,N为数据样本数
Y:输出矩阵Q×N,其中Q为网络输出个数