bp神经网络及matlab实现_bp神经网络应用实例Matlab

bp神经网络及matlab实现_bp神经网络应用实例MatlabBP神经网络通俗教程(matlab实现方法)黑色字体可看可不看,是帮助理解所用红色字体是比较重要的部分,必看BP神经网络是什么BP(Back-propagation,反向传播)神经网络是最传统的神经网络。当下的各种神经网络的模型都可以看做是BP神经网络的变种(虽然变动很大…)。这东西是干什么用的呢?我们在现实中要处理的一切问题映射到数学上只分为两类,可归纳的问题与不可归纳的问题。首先什么是不可归纳的问题,举个例子,你不能用一套完美的数学公式去表达所有的质数,因为目前的研究表明,还没有什么方法

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

BP神经网络通俗教程(matlab实现方法)

BP神经网络是什么

BP(Back-propagation,反向传播)神经网络是最传统的神经网络。当下的各种神经网络的模型都可以看做是BP神经网络的变种(虽然变动很大…)。
这东西是干什么用的呢?
我们在现实中要处理的一切问题映射到数学上只分为两类,可归纳的问题不可归纳的问题。首先什么是不可归纳的问题,举个例子,你不能用一套完美的数学公式去表达所有的质数 , 因为目前的研究表明,还没有什么方法是能够表达质数的,也就是说,质数的出现,本身不具备严格的数学规律,所以无法归纳。
但是我们人眼看到猫猫狗狗的图片就很容易分辨哪个是猫,哪个是狗。这说明在猫和狗之间,确实存在着不同,虽然你很难说清楚它们的不同到底是什么,但是可以知道,这背后是可以通过一套数学表达来完成的,只是很复杂而已。
大部分AI技术的目的就是通过拟合这个复杂的数学表达,建立一个解决客观问题的数学函数。BP神经网络的作用也是如此。
BP神经网络这个名字由两部分组成,BP(反向传播)和神经网络神经网络是说这种算法是模拟大脑神经元的工作机理,并有多层神经元构成的网络。
而这个名字的精髓在BP上,即反向传播。反向传播是什么意思呢。这里举个例子来说明。
比如你的朋友买了一双鞋,让你猜价格。
你第一次猜99块钱,他说猜低了。
你第二次猜101块钱,他说猜高了。
你第三次猜100块钱,他说猜对了。
你猜价格的这个过程是利用随机的数据给出一个预测值,这是一个正向传播
而你的朋友将你的预测值与真实值进行对比,然后给出一个评价,这个过程是一个反向传播
神经网络也是类似的过程,通过对网络的超参数进行随机配置,得到一个预测值。这是一个正向传播的过程。而后计算出预测值与真实值的差距,根据这个差距相应的调整参数,这是一个反向传播的过程。通过多次迭代,循环往复,我们就能计算出一组合适的参数,得到的网络模型就能拟合一个我们未知的复杂函数。
我们来看这个BP神经网络的示意图
bp神经网络及matlab实现_bp神经网络应用实例Matlab
其中蓝色的箭头是正向传播的过程,黄色的线条就是反向传播。

BP 神经网络的具体描述

BP神经网络的拓扑结构

在这里插入图片描述
上面这张图是BP神经网络的拓扑结构。简而言之就是分为三个“层”。输入层、隐藏层和输出层(一般情况下隐藏层会有若干层,这里只画了一个隐藏层)。每个层都包含若干个神经元(图中圆形)。上一层的输出作为下一层输入(数据的联系如图中连线所示)

单个神经元

在这里插入图片描述
单个的神经元如上图所示。 x i x_i xi为输入, w i w_i wi代表权重, θ i θ_i θi代表阈值。 y k y_k yk代表输出。这里还有一个偏置 b b b和激活函数 f ( x ) f(x) fx没有画出。总之,一个神经元需要四个参数和一个函数才能得到输出(输入、权重、阈值、偏置还有激活函数)

具体数学表达为:
n e t i = ∑ i = 0 n x i w i = x 1 w 1 + x 2 w 2 . . . net_i=\sum_{i=0}^n x_iw_i=x_1w_1+x_2w_2… neti=i=0nxiwi=x1w1+x2w2...
如果这个 n e t i net_i neti大于 θ i θ_i θi,那么这个神经元被激活,继续运算
反之这个神经元关闭,没有输出
激活后做如下运算:
y k = f ( n e t i + b ) y_k=f(net_i+b) yk=fneti+b
这样就求得了这个神经元的输出。

激活函数 f ( x ) f(x) fx

在单个神经元中的 f ( x ) f(x) fx是激活函数。下图是三种常用的激活函数。
在这里插入图片描述
为什么要使用激活函数呢?
激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
如果没有激活函数,无论网络有多少层,输出都只能是输入的线性组合,这样就形成了原始的感知机。

反向传播

反向传播是这个算法的精髓!上文已经形象的说明了反向传播的大致原理。下面我们来看反向传播具体是怎么运行的。
就像猜价格游戏一样,通过不断调整你猜的价格,使得预测的价格接近真实的价格。
我们希望通过调整权重 w w w,使得预测值 o o o与真实值 t t t的差距缩小。
那么首先我们需要先定义预测值 o o o与真实值 t t t的差距,我们用损失函数(loss function)来衡量。
下面列出了几种常用的损失函数:
在这里插入图片描述
左边是解决分类问题时常用的损失函数,右边是解决回归问题时常用的损失函数。具体函数的公式我就不写了,你们具体要用的时候直接按照名字百度一下就好。
这边只提一下均方误差损失函数(MSE),因为下文要以他为例子: E = 1 / 2 ( o − t ) 2 E=1/2(o-t)^2 E=1/2(ot)2
其中 E E E代表ERORR值,也叫LOSS值。是衡量误差的指标。
再说一遍,我们的目的就是通过调整权重 w w w E E E尽可能的小。所以我们建立权重 w w w E E E的函数,把权重 w w w看作自变量,把 E E E看作因变量。求出导数。利用梯度下降的原理使 E E E沿着越来越小的方向下降。
推导过程:
在这里插入图片描述
这里的误差函数就是均方误差(MSE),梯度下降的公式中 η η η代表学习率,是人为设定的一个参数。 Δ w j i Δw_{ji} Δwji我们要调整权重的改变值。
输出层求解步骤如下,注意理解Step2是对LOSS函数求偏导,Step3是对激活函数求偏导。
在这里插入图片描述
结果带入梯度下降公式可得:
在这里插入图片描述
隐藏层求解步骤:

在这里插入图片描述带入梯度下降公式可得:
在这里插入图片描述

根据求得的结果相应的调整权重 w w w就完成了一次反向传播。
然后开始下一次迭代,循环往复,直至达到收敛条件,跳出循环。

BP神经网络的基本运行原理就介绍完了。

神经网络的Matlab实现

Matlab自带神经网络的工具包,所以实现的这个环节还是非常简单的。我以Matlab2020为例演示一下。(示例数据和题目来自“清风数学建模”)
例题如下:
在这里插入图片描述给出的数据保存在一个EXCEL文档中。截图了一小部分:
在这里插入图片描述

首先我先将数据导入到Matlab的变量中,X代表训练集和验证集的吸光度数据,Y代表训练集和验证集的辛烷值。new_X代表测试集
在这里插入图片描述打开APP选项卡中的Neural Net Fitting
在这里插入图片描述

弹出如下对话框,这个主要是模型的简介,:
在这里插入图片描述
直接点NEXT得到下面对话框。Input选择输入值,Targets选择目标值。注意我们的数据是按行排列的,Samples选择Matrix rows。然后Next。
在这里插入图片描述
这个是训练集、验证集和测试集的比例,一般默认就好。Next。

在这里插入图片描述
下面设定隐藏层的层数,我选择默认,10层。Next。
在这里插入图片描述
在下图的那个下拉框中选择算法。具体算法的区别可以百度一下。第二种是效果最好的,能有效减少过拟合现象,但收敛速度极慢。1、3两种算法不够准确,但很快。点击Train开始训练你的模型。
在这里插入图片描述弹出如下对话框:
在这里插入图片描述点击Performance查看误差曲线,误差当然是越小越好。
在这里插入图片描述
点Fit查看三个集的回归图,R越接近1越好。
在这里插入图片描述回到下面这个页面,直接Next两次。
在这里插入图片描述
matlab Function是生成模型的matlab代码
Neural Network Diagram是模型示意图,放在论文里比较好看。Next。
在这里插入图片描述点Save Results,然后Finsh。
在这里插入图片描述

模型就训练好了,下面可以做预测了,执行下面代码:

% 这里要注意,我们要将指标变为列向量,然后再用sim函数预测
sim(net, new_X(1,:)')

% 写一个循环,预测接下来的十个样本的辛烷值
predict_y = zeros(10,1); % 初始化predict_y
for i = 1: 10
    result = sim(net, new_X(i,:)');
    predict_y(i) = result;
end
disp('预测值为:')
disp(predict_y)

得到预测结果:
在这里插入图片描述
到这里,实现过程就成功了。

小伙伴,码字很辛苦的,如果你看懂了,请给我一个赞吧!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194721.html原文链接:https://javaforall.net

(0)
上一篇 2025年10月31日 下午12:15
下一篇 2025年10月31日 下午12:43


相关推荐

  • rabbitmq异步处理_怎么解决js异步方法执行顺序

    rabbitmq异步处理_怎么解决js异步方法执行顺序RabbitMQ即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。使用RabbitMQ实现异步更新文章浏览量,提升阅读文章时的响应速度。从直接更新数据库耗时450ms到异步更新数据库耗时50ms,明显提升接口性能,非常的nice~………

    2022年10月4日
    3
  • C3P0数据库连接池连接Mysql8.0.11的配置问题

    C3P0数据库连接池连接Mysql8.0.11的配置问题C3P0(0.9.5.2)连接Mysql8.0.11的配置问题**小白一个,这几天,在学C3P0数据连接池,把遇到的一些问题记录一下,希望能帮到你们。题主的环境:EclipseC3P0-0.9.5.2可参考这里下载Mysql8.0.11****1.创建配置文件c3p0-config.xml**<?xmlversion="1.0&am

    2022年5月4日
    73
  • 华为verilog代码规范(wps初学者入门教程)

    对于初学者,可大致了解VerologHDL所提供的能力,掌握VerilogHDL语言的核心子集。1VerilogHDL语言具有:设计的行为特性、设计的数据流特性、设计的结构组成以及包括响应监控和设计验证方面的时延和波形产生机制。2如何描述自顶向下的设计思想:每个模块实现特定的功能,模块间可进行层次的嵌套,因此可以将大型的数字电路设计分割成大小不一的小模块来实现特定的功能,最后通过由顶层模块调用子模块来实现整体功能。3三种建模方式3.1结构化描述方式结构化建模方式就是通过对电

    2022年4月15日
    114
  • 如何快速学从零开始学习3d建模?

    如何快速学从零开始学习3d建模?其实对于初学者来说,3D建模是一个专业性偏强且极其难入手的游戏制作专业技术。如果是无基础从零开始的学习的话,没有一个好的学习方法和好的指导老师的话,还是比较困难的。那么如何从零基础开始学习3D建模?一、首先得知道什么是游戏3D建模在大型的游戏研发公司,3D建模是一个非常大的职能,分为4个岗位:3D角色低模手绘,3D场景低模手绘,次世代角色高模,次世代场景高模。通常我们所说的3D建模是指低模手绘。如果你需要好的学习环境,好的学习资源,这里欢迎每一位热爱游戏动漫模型的小伙伴,想要学习.

    2022年5月4日
    54
  • 【外行也能看懂的RabbitMQ系列(二)】—— RabbitMQ的Web管理界面(rabbitmq_management)详解(内含Topic模式通配符实操)

    【外行也能看懂的RabbitMQ系列(二)】—— RabbitMQ的Web管理界面(rabbitmq_management)详解(内含Topic模式通配符实操)恭喜所有看到本篇文章的小伙伴 成功解锁了 RabbitMQ 系列之 Web 管理界面详解的内容 通过本文 你将快速了解到 RabbitMQ 的 Web 管理界面 rabbitmq management 是如何操作的 以及对 RabbitMQ 的 RoutingKey 通配符有一个更深刻的印象 接下来 小名通过较为复杂的 Topic 模式作为例子 带大家操作一遍吧

    2026年3月18日
    1
  • GIF录制工具(免安装)

    GIF录制工具(免安装)收集好用的小工具持续更新好用的小工具 尽量为大家提供更多的资源 1 短画面录制为 GIF 使用文章目录收集好用的小工具前言一 ScreenToGif 二 使用方法 1 下载即可使用 2 界面总结前言一 ScreenToGifs 汉化版是一款便捷好用的 gif 动画制作录制软件 二 使用方法 1 下载即可使用 https download csdn net download 界面总结持续更新中

    2026年3月16日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号