MATLAB BP网络工具箱中不同学习函数,训练函数和性能函数时的学习效率和精度

demo来自《神经网络理论与MATLAB7实现》

首先,介绍一下BP网络在MATLAB工具箱中常用的几类函数:

前向网络创建函数:

 

newcf   创建级联前向网络

newff   创建前向BP网络

newffd   创建存在输入延迟的前向网络

传递函数:

 

logsig   S型的对数函数

dlogsig   logsig的导函数

tansig   S型的正切函数

dtansig   tansig的导函数

purelin   纯线性函数

dpurelin   purelin的导函数

学习函数:

 

learngd   基于梯度下降法的学习函数

learngdm   梯度下降栋梁学习函数

 

训练函数:

trainbrBayes  规范化BP训练函数

 

trainc   循环顺序渐增训练函数

traincgb   Powell-Beale连接梯度BP训练函数

traincgf   Fletcher-Powell连接梯度BP训练函数

traincgp   Polak-Ribiere连接梯度BP训练函数

traingda  自适应lrBP的梯度递减训练函数

traingdx   动量及自适应lrBP的梯度递减训练函数

trainlm   Levenberg-Marquardt BP训练函数

trainoss   一步正切BP训练函数

trainr   随机顺序递增更新训练函数

trainrp   带反弹的BP训练函数

trains   顺序递增BP训练函数

trainscg   量化连接梯度BP训练函数

性能函数:

 

mse  均方误差函数

msereg  均方误差规范化函数

显示函数:

 

plotperf  绘制网络的性能

plotes  绘制一个单独神经元的误差曲面

plotep  绘制权值和阈值在误差曲面的位置

errsurf  计算单个神经元的误差曲面

 

 

MATLAB BP网络工具箱中不同学习函数,训练函数和性能函数时的学习效率和精度

 

 
  1. %% BP网络的一个重要功能就是非线性映射的能力,这个功能非常适用于函数的逼近等,也就是说,找出两组数据间的关系,本例比较BP网络中不同学习函数,和训

  2. %% 练函数学习速率和精度

  3. clc;close all;clear;

  4. P=[0 1 2 3 4 5 6 7 8 9 10];

  5. T=[0 1 2 3 4 3 2 1 2 3 4];

  6. net=newff([0 10],[5,1],{'tansig','purelin'});

  7. %net=newff([0 10],[5,1],{'tansig','purelin'},'traingd','learngd','msereg');

  8. %net=newff([0 10],[5,1],{'tansig','purelin'},'traingdx','learngd','msereg');

  9. net.trainParam.epochs=200;

  10. net=train(net,P,T);

  11. figure;

  12. Y=sim(net,P);

  13. plot(P,T,'+',P,Y,'o')

 

1.创建BP网络的学习函数,训练函数和性能函数都采用default值,分别为learngdm,trainlm和mse时的逼近结果:

 

训练得到的均方误差曲线(训练函数:trainlm):

训练后的网络输出:

由此可见,进过200次训练后,虽然网络的性能还没有为0,但是输出均方误差已经很小了,MSE=6.72804e-0.06,显示的结果也证明P和T之间非线性映射关系的拟合是非常精确的;

 

2.建立一个学习函数为learnd,训练函数为traingd,和性能函数为msereg的BP网络,来完成拟合任务:

网络的输出(训练函数:traingd):

可见,经过200次训练后,网络的输出误差比较大,而且网络误差的收敛速度非常慢。这是由于训练函数traingd为单纯的梯度下降训练函数,训练速度比较慢,而且容易陷入局部最小的情况。结果显示网络精度确实比较差。

 

3.将训练函数修改为traingdx,该i函数也是梯度下降法训练函数,但是在训练过程中,他的学习速率是可变的

网络的训练误差曲线:

网络的输出(训练函数:traingdx)

在200次训练后,以msereg函数评价的网络性能为1.04725,已经不是很大,结果显示P和T之间非线性关系的拟合情况不错,网络的性能不错。

  • 4
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: BP神经网络是一种常见的神经网络模型,它具有良好的分类和预测能力。在MATLAB,我们可以使用工具箱函数来实现BP神经网络,但是,如果不使用工具箱函数,也可以通过编写代码来实现。 首先,我们需要定义神经网络的结构,包括输入层、隐藏层和输出层的神经元数目,以及每个神经元之间的连接权重。可以使用矩阵来表示神经网络的权重。接着,我们需要定义激活函数,常用的激活函数包括sigmoid函数和ReLU函数。在前向传播过程,通过计算输入层和隐藏层之间的输出值,然后通过激活函数进行映射。在反向传播过程,通过计算输出层和隐藏层之间的误差,并根据误差调整权重,以更新网络参数。这样就完成了一次训练迭代。 在编写代码,需要用到一些基本的数学函数,比如矩阵运算和激活函数的计算。此外,还需要一定的数学知识来理解BP神经网络算法的原理和实现细节。 需要注意的是,用代码实现BP神经网络需要掌握较强的数学和编程能力,对于初学者可能会比较困难。如果想要更深入地了解BP神经网络,可以参考相关文献和教程,对于MATLAB编程也需要一定的基础知识。 总之,尽管使用MATLAB工具箱函数可以简化BP神经网络的实现过程,但是如果不使用工具箱函数,也可以通过编写代码来实现。这对于深入理解BP神经网络的原理和实现细节非常有帮助。 ### 回答2: 使用Matlab编写BP神经网络的代码,不使用工具箱函数,可以按照以下步骤进行: 1. 数据准备:将训练数据集分为输入数据和目标数据两部分,分别保存在矩阵X(m*n)和Y(m*1),其m表示样本数量,n表示输入特征数量。 2. 初始化网络参数:设置隐层神经元数量和输出层神经元数量,并生成随机初始权值W(n*h)和V(h*1)(h为隐层神经元数量)。 3. 前向传播:根据当前权值计算隐层和输出层的输出值H(m*h)和O(m*1),其H = sigmoid(X * W),O = sigmoid(H * V)。 4. 计算误差:计算输出误差E(m*1)= Y - O。 5. 反向传播:根据误差调整权值V,再根据输出误差和隐层输出值调整权值W,重复多次迭代直到收敛。 6. 更新权值:根据学习率和调整后的权值更新W和V。 7. 循环迭代:重复步骤3-6,直到达到预设的迭代次数或误差达到某个阈值。 8. 测试模型:使用训练好的权值对新的输入数据进行前向传播,得到预测结果。 该代码实现了最基本的BP神经网络,如果需要增加一些改进的功能,如增加多个隐层、采用不同的激活函数等,可以在以上步骤的基础上进行扩展。 ### 回答3: 使用Matlab代码编写BP神经网络的步骤如下: 1. 初始化网络参数:包括输入层到隐藏层和隐藏层到输出层之间的权重矩阵和阈值。 2. 定义激活函数:一般选择sigmoid函数作为激活函数,可以使用Matlab内置函数如`sigmoid()`。 3. 前向传播:计算每一层的输出值。对于输入层到隐藏层的连接,计算隐藏层输入值再经过激活函数。对于隐藏层到输出层的连接,计算输出层输入值再经过激活函数。 4. 计算误差:根据输出层的输出值和实际值计算误差。 5. 反向传播:根据误差调整权重和阈值。首先计算输出层到隐藏层之间的权重和阈值的梯度,然后根据梯度和调整率更新权重和阈值。然后计算隐藏层到输入层之间的权重和阈值的梯度,并进行相应的更新。 6. 重复步骤3到5,直到达到设定的迭代次数或误差小于预设阈值。 7. 使用训练好的网络进行预测:对于新的输入样本,通过前向传播计算输出值,即为预测结果。 需要注意的是,以上描述仅为BP神经网络的基本实现步骤,实际应用可能还需要进行许多其他的处理,比如数据预处理、交叉验证等。 这些步骤可以根据实际情况进行细化的实现,具体的代码可根据需要编写,利用向量化运算可以提高运算效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值