bp神经网络学习

2023-12-17 18:17:23

1.input(1:m,:)‘含义

矩阵A第一列的转置矩阵。(x,y)表示二维矩阵第x行第y列位置的元素,x为:则表示所有的行。因此,A(:,1)就表示A的第1列的所有元素,这是一个列向量。

所以这里input(1:m,:)表示1到m行,所有列,而后面有个'这代表转置,综合来看就是将一个1到m行,所有列的矩阵进行转置。

2.如何在workspace中导入数据

首先点击左上角的import data

选择要导入的文件即可,之后会弹出新的界面,界面如下:

这里用到的地方就是range(范围)以及matrix(矩阵),range选择自己想要的的行与列即可。

之后点击对勾就可以导入到workspace里面。

3.newff函数

参考文章:

Matlab中newff函数使用方法和搭建BP神经网络的方法-CSDN博客

net = newff(data,label,[8,8],{'tansig','purelin'},'trainlm')


data:训练时网络的输入数据。newff函数会把data的一列当作一个样本,如果你的数据集是一行当作一个样本,记得将你的输入数据矩阵转置data.‘
label:对应输入数据的标签,也可以看作真实输出。同上,newff函数会把label的一列当作一个样本的标签,如果你的数据集是一行当作一个样本,记得将你的输入数据矩阵转置label.‘
[8,8]:用于确定神经网络隐藏层的层数以及每层的神经单元个数。[8,8]就表示该网络包含两个隐藏层,每个隐藏层有8个神经单元
{‘tansig’,‘purelin’}:表示个隐藏层所用的激活函数。{‘tansig’,‘purelin’}表示第一层用tansig激活函数,是一种S型激活函数;第二次用purelin激活函数,是一种线性型激活函数。常见的激活函数如下:

 logsig:对数S型函数
 tansig:正切S型函数
 purelin:线性型函数

‘trainlm’:确定训练函数,默认为trainlm函数,该方法需要占用更大的存储空间,使用了Levenberg-Marquardt算法,对于中等规模的BP神经网络有最快的收敛速度。由于其避免了直接计算赫赛矩阵,从而减少了训练中的计算量,但需要较大内存量,随着神经元的增多,训练时间增加较大。常见的训练方法如下:
?

 traingd:梯度下降算法
 traingdm:带动量的梯度下降算法
 traingda:学习率变化的梯度下降算法
 traingdx:学习率变化带动量的梯度下降算法
 trainrp:RPROP算法,内存需求小,适用于大型网络
 trainoss:OneStep Secant Algorithm,计算量与内存需求较小,适用于大型网络

(2)其他参数设置:
net.trainParam.goal = 1e-3 :确定目标值为0.001,到此值时训练停止
net.trainFcn=‘trainlm’ :确定训练函数trainlm。如果newff()中设置了,后续可以用不设置
net.trainParam.lr = 0.1 : 确定学习率为0.1
net.divideFcn = ‘’ :取消newff()默认再次划分操作。newff()默认将训练集重新划分6:2:2,训练集:测试集:验证集,在训练过程中会自动在某一处停止,我认为是为了防止过拟合吧,实践中在新训练集损失和新验证集损失下降不明显,且验证损失有上升的趋势时停止。对于数据本来就少的情况,建议取消划分。
net.trainParam.epochs = 1000 :训练最大迭代次数
net.trainParam.min_grad =1e-24 : 最小梯度值,到此值时训练停止
4.net.iw与net.b的含义

MATLAB中多层网络的net.lw{i,j}和net.b{k}的含义 - 知乎 (zhihu.com)

先假设神经网络结构,{ 9 [80 50 20] 1 };9为输入层,[80 50 20]为隐层,1为输出层。

  1. net.iw{1,1} 表示?输入层?到?第1层隐层?的权重,为80*9的矩阵;
  2. net.lw{2,1} 表示?第1层隐层?到?第2层隐层?的权重,为50*80的矩阵;
  3. net.lw{3,2} 表示?第2层隐层?到?第3层隐层?的权重,为20*50的矩阵;
  4. net.lw{4,3} 表示?第3层隐层?到?输出层?的权重,为1*20的矩阵;
  5. net.b{1} 表示?第1层隐层?的偏置,为80*1的矩阵;
  6. net.b{2} 表示?第2层隐层?的偏置,为50*1的矩阵;
  7. net.b{3} 表示?第3层隐层?的偏置,为20*1的矩阵;
  8. net.b{4} 表示?输出层?的偏置,为1*1的矩阵;

可以以此类推。

所以net.iw{1,1},模式也是固定的,仅表示输入层到第1层隐层的权重,之后就net.lw的事情了。net.lw{i,j}?表示?第j层隐层?到?第i层隐层?的权重。net.b{k}?表示?第k层隐层?的偏置或者说阈值,结构都为列向量。可以看出,这里假设的隐含层只有3层[80 50 20],但net中将最后一层输出层也当隐含层用了,所以?i?和?k?可以取到4。

知道权重和偏置的位置,可以用算法优化,如遗传算法等。

文章来源:https://blog.csdn.net/weixin_48433993/article/details/135041262
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。