1.one-hot编码:用到的函数ind2vec,vec2ind。

用法举例如下:

对 index 的两种表示,一种是用向量化的 0,1 矩阵表示(稀疏矩阵,one-hot编码),一种是用线性数值 1,2,3表示

vec = [1 0 0 0; 0 0 1 0; 0 1 0 1]    
ind = vec2ind(vec)  

结果&解释:

vec =
     1     0     0     0
     0     0     1     0
     0     1     0     1

ind =
     1     3     2     3

**结果解释:

ind以列为单位(与原向量列)相同,分别对应列表示"1"所在行的位置,从第一列开始,1所在的位置(行)分别为,第一行(1),第三行(3),第二行(2),第三行(3)

反之,ind2vec道理相同,举例:

ind = [1 3 2 3]
vec = full(ind2vec(ind))

结果:

ind =
     1     3     2     3

vec =
     1     0     0     0
     0     0     1     0
     0     1     0     1


2.matlab神经网络工具箱主要参数说明:

常见的训练函数:
训练方法 训练函数

  • 梯度下降法 traingd
  • 有动量的梯度下降法 traingdm
  • 自适应lr梯度下降法 traingda
  • 自适应lr动量梯度下降法 traingdx
  • 弹性梯度下降法 trainrp
  • Fletcher-Reeves共轭梯度法 traincgf
  • Ploak-Ribiere共轭梯度法 traincgp
  • Powell-Beale共轭梯度法 traincgb
  • 量化共轭梯度法 trainscg
  • 拟牛顿算法 trainbfg
  • 一步正割算法 trainoss
  • Levenberg-Marquardt trainlm

神经网络的学习参数:
训练参数 参数介绍

  • net.trainParam.epochs 最大训练次数(缺省为10)
  • net.trainParam.goal 训练要求精度(缺省为0)
  • net.trainParam.lr 学习率(缺省为0.01)
  • net.trainParam.max_fail 最大失败次数(缺省为5)
  • net.trainParam.min_grad 最小梯度要求(缺省为1e-10)
  • net.trainParam.show 显示训练迭代过程(NaN表示不显示,缺省为25)
  • net.trainParam.time 最大训练时间(缺省为inf)
  • net.trainParam.mc 动量因子(缺省0.9)
  • net.trainParam.lr_inc 学习率lr增长比(缺省为1.05)
  • net.trainParam.lr_dec 学习率lr下降比(缺省为0.7)
  • net.trainParam.max_perf_inc 表现函数增加最大比(缺省为1.04)
  • net.trainParam.delt_inc 权值变化增加量(缺省为1.2)
  • net.trainParam.delt_dec 权值变化减小量(缺省为0.5)
  • net.trainParam.delt0 初始权值变化(缺省为0.07)
  • net.trainParam.deltamax 权值变化最大值(缺省为50.0)
  • net.trainParam.searchFcn 一维线性搜索方法(缺省为srchcha)
  • net.trainParam.sigma 因为二次求导对权值调整的影响参数(缺省值5.0e-5)
  • net.trainParam.lambda Hessian矩阵不确定性调节参数(缺省为5.0e-7)
  • net.trainParam.men_reduc 控制计算机内存/速度的参量,内存较大设为1,否则设为2(缺省为1)
  • net.trainParam.mu u的初始值(缺省为0.001)
  • net.trainParam.mu_dec u的减小率(缺省为0.1)
  • net.trainParam.mu_inc u的增长率(缺省为10)
  • net.trainParam.mu_max u的最大值(缺省为1e10)

神经网络学习主要函数说明

newff:前馈网络创建函数
语法:

  • net = newff(A,B,{C},’trainFun’,’BLF’,’PF’)。
  • A:一个n*2的矩阵,第i行元素为输入信号Xi的最大最小值
  • B:一个K维行向量,其元素为网络中各个节点的数量。
  • C:一个K维字符串行向量,每一个分量为对应层的神经元的激活函数,默认为“tansig”
  • trainFun:为学习规则的采用的训练算法。默认为:“trainlm”
  • BLF:BP权值/偏差学习函数。默认为:“learngdm”
  • PF:性能函数,默认为“mse”

--------------------------------------------穿插newff具体用法,后期整理---------------------------------------------

1,newff函数参数说明

net = newff(P,T,S)                             % 这两种定义都可以
net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
1
2
   P:输入参数矩阵。(RxQ1),其中Q1代表R元的输入向量。其数据意义是矩阵P有Q1列,每一列都是一个样本,而每个样本有R个属性(特征)。一般矩阵P需要归一化,即P的每一行都归一化到[0 1]或者[-1 1]。
  T:目标参数矩阵。(SNxQ2),Q2代表SN元的目标向量。
  S:N-1个隐含层的数目(S(i)到S(N-1)),默认为空矩阵[]。输出层的单元数目SN取决于T。返回N层的前馈BP神经网络
   TF:相关层的传递函数,默认隐含层为tansig函数,输出层为purelin函数。
  BTF:BP神经网络学习训练函数,默认值为trainlm函数。
  BLF:权重学习函数,默认值为learngdm。
  PF:性能函数,默认值为mse,可选择的还有sse,sae,mae,crossentropy。
  IPF,OPF,DDF均为默认值即可。
  例子:

net = newff( input,output, [50] , { 'logsig' 'purelin' } , 'traingdx' ) ;    
1
2,传递函数TF
  purelin: 线性传递函数。
  tansig :正切S型传递函数。
  logsig :对数S型传递函数。 
  隐含层和输出层函数的选择对BP神经网络预测精度有较大影响,一般隐含层节点转移函数选用 tansig函数或logsig函数,输出层节点转移函数选用tansig函数或purelin函数。
3,学习训练函数BTF
  traingd:最速下降BP算法。
  traingdm:动量BP算法。
  trainda:学习率可变的最速下降BP算法。
  traindx:学习率可变的动量BP算法。
  trainrp:弹性算法。
  变梯度算法:
    traincgf(Fletcher-Reeves修正算法)
     traincgp(Polak_Ribiere修正算法)
     traincgb(Powell-Beale复位算法)
     trainbfg(BFGS 拟牛顿算法)
     trainoss(OSS算法)

4,参数说明
  通过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: 动量因子
-------------------------------------------分割线----------------------------------------------------------------------------

train函数 即网络学习函数
语法:

  • [net,tr,YI,E] = train(net,X,Y)
  • X:网络实际输入
  • Y:网络应有输出
  • tr:网络跟踪信息
  • YI:网络实际输出
  • E:误差矩阵

sim函数
语法:

  • Y = sim(net,X)
  • X:输入给网络的K*N矩阵,K为网络输入个数,N为样本数据量
  • Y:输出矩阵Q*N,其中Q为网络输出个数

一个完整的神经网络训练模型demo如下: 

clear,clc
p=[-4:0.1:4]; %神经网络输入值
t=sin(pi*p); %神经网络目标值
n=15; %隐藏层神经元个数
net=newff(minmax(p),[1,n,1],{'tansig','tansig','purelin'},'trainlm'); %建立网络结构
net.trainParam.epochs=200; %最大训练步数
net.trainParam.goal=0.1; %最大训练误差
net=train(net,p,t); %训练网络
y=net(p); %神经网络输出值
plot(p,t,'*',p,y,'-')
title('使用BP神经网络函数逼近');
xlabel('输入值');
ylabel('目标值/输出值');
mse=mse(y,t) %实际误差

感谢参考:

BP神经网络逼近非线性函数——Matlab工具箱 - 知乎 (zhihu.com)icon-default.png?t=M276https://zhuanlan.zhihu.com/p/370009532

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐