当前位置: 首页 > news >正文

车辆重识别(关于卷积神经网络一些资料)2024/9/11

关于卷积神经网络的介绍
一,全连接神经网络
1,全连接神经网络的整体结构
请添加图片描述
X代表左边输入的数据(向量或者矩阵等等),Y代表模型对数据处理之后的结果,中间的节点都可以算作为隐藏层。请添加图片描述
2,全连接神经网络的单元结构
请添加图片描述
x1,x2,x3是输入的数据,w1,w2,w3是权重,b1是偏置项,h是激活函数,a是输出。以此图为例,节点是一个求和函数,它负责把x1w1,x2w2,x3*w3,b1这几项加起来,得到的结果再通过激活函数的处理,最终得到输出a。
假如x1,x2,x3是一张图片的数据,如果输出a为1,那么这张图片是狗,如果为0,那么这张图片是猫。对于这张图片来说,我们现在的目的就是为了找一组w和b,使得这张图片的数据经过处理,要么为1,要么为0,从而能够对这张图片进行分类,那么这个模型就暂时被训练完成。但是现在这个模型仅仅能够识别这一张图片,而对于不同的多组图片来说,我们的目的是能够尽量地找到一组w和b,使得这个模型对于不同的多组图片的识别尽量地贴合输出结果a,那这样这个模型就能够暂时的对图片进行识别。

3,激活函数
激活函数的功能其实和寻找一组w和b的用途一样,也是为了对输入数据处理后的结果进行调整,使其能够贴合预期输出的结果a。另外,激活函数分为线性和非线性的,对于线性的激活函数,存在的问题就是客观上可能会减少神经网络的层数(一般情况下神经网络层数越深,模型效果越好)。
请添加图片描述
具体的激活函数的优缺点暂时不做解释,等全部内容学完之后,再解释为什么不同的激活函数有不同的优缺点或者说为什么这种激活函数会有这种优缺点。
补充
请添加图片描述
请添加图片描述
请添加图片描述
通过后面的学习,我们发现对于w的更新,存在一个公式:w=w(旧)-a*(损失函数对w的偏导)。其实这个损失函数对w的偏导是一个激活函数导数(这个导数对x*w+b的导数)的乘积式子,在输入数据和学习率a不变时,w的更新就和激活函数的导数有密切关系,这就解释了为什么不同的激活函数有不同的优缺点。

对于sigmod函数的缺点1的解释:就比如(x*w+b)的值小于-5或大于5时,这时候sigmod的导数变化很小,就导致w的变化很小。
对于sigmod函数的缺点3的解释:sigmod导数的范围是(0-0.25),最大的导数值也就是0.25,这就导致w(旧)每次向使得损失函数达到最小值的w1走的步幅太小,结果就是训练所需要的轮次多,训练耗时长。
对于Tanh函数优点2的解释:Tanh导数的范围是(0-1),最大的导数值是1,这就导致w(旧)每次向使得损失函数达到最小值的w1走的步幅较大,结果就是训练所需要的轮次少,训练时间短。

总之,如果想要达到较好的训练过程,学习率a和激活函数的最大导数值不能太大也不能太小。
请添加图片描述

4,神经网络的前向传播
所谓前向传播就是输入数据经过每一层网络不断计算的过程。

5,损失函数
如果一个模型的预测值为连续的值,那么每一轮预测结束,结果都会与真实值之间存在误差。但是误差的计算绝对不能让预测值与真实值进行简单的相减,这样会出现一些问题,所以在这种情况下采取均方误差的方式来计算误差。
损失函数还有一种用途:通过绘制损失和训练轮数的图表,可以看到当训练达到一定轮数后,损失就会稳定在一个值左右,这表明模型在某轮之后达到收敛,再训练已经无法提升模型的性能了。
这告诉了我们模型训练的一系列步骤,先前向传播传递输入数据,计算结果,再计算误差。如果误差比较大,那就反向传播调整w权重和b偏置项,然后再前向传播重复此过程。

6,梯度下降法
在这里插入图片描述
那么梯度下降法如何对w和b进行更新呢?首先观察这个误差公式可以看出(在假定w只有一个):在每一次传输图片数据时,x是确定的。数据通过前向传播最终得到的结果也是确定的,然后y’(真实值)也是确定的,那么唯一不确定的就是w和b,最终这个误差函数其实是关于w和
b的二元二次函数。既然知道了这个函数那么我们就可以绘制出这个函数图像,通过图像可以看出,我们可以使得w和b在梯度方向上不断减少,最终可以得到误差的最小值。
在这里插入图片描述
在这里插入图片描述
既然理论上已经可行了,我们该如何确定具体的w和b呢?
首先我们还是要看这个误差函数,当我们只针对w时,b暂且可以看做常量,那么这个函数就是关于w的一元二次函数(对于多个w时也是一样,只是把w1、w2、w3等看做常量而已)。但是这时候想要求最小的loss值不能用求根公式,因为w不只是一个变量,也有可能时一个矩阵,所以这时候只能用梯度下降的方式来接近w1(得到最小loss值的w),所以对于w的更新公式如图所示,w(旧)一步步地走,直到接近w1。而对于b,也是一样的理论。
另外,图上的a也叫做学习率。对于a来说,不能太大也不能太小。如果a太小,那么w接近w1的速度会很慢,也就是说可能训练很多轮,w变化不大。如果a太大,那么w有可能会走过头,直接越过
w1导致训练效果没有变化或者变差。

7,图像在计算机中的本质
在这里插入图片描述
图像在计算机中其实就是矩阵,对于灰度图来说,每个像素点的值的范围是0-255,其中0是黑色,255是白色,值越大越偏向255,那么颜色越浅,值越小越偏向0,那么颜色越深。我们把这种图叫做单通道的图,也就是说只有一张图片。
在这里插入图片描述
对于彩色图来说,都是由红绿蓝三种颜色的图组合而成的,每一张图的每一个像素点又有不同的值。这种图叫做三通道的图,是由三张图片叠加而成的。

8,全连接神经网络存在的问题
在这里插入图片描述
全连接神经网络接收的是长条形的数据,而对于图片这种矩阵类型的数据来说,全连接神经网络不适合处理这种数据,如果想要处理这种图片,就要把图片进行切割、拼接,但是这样会破坏原本的图片信息。

二,卷积神经网络
1,卷积运算过程
什么是卷积神经网络?我们可以说含有卷积运算的神经网络就是卷积神经网络。请添加图片描述
在这里插入图片描述
其实整个卷积运算过程和全连接神经网络的过程差不多,只不过我们把运算的单位聚焦在每一个小矩阵上而不是一个变量,那么这个运算过程就是输入数据与卷积核相乘,再加偏置,最后经过激活函数的处理得到最终结果。对于输入的图片数据,每一个小矩形的这些小方块其实就是x1、x2、x3、x4,卷积核的这些小方块其实就是w1、w2、w3、w4。以上图为例,运算过程是:选取第一个22矩形,x1w1、x2w2…对应位置的元素值相乘,最后相加,再和偏置项b相加,然后经过激活函数处理,得到结果,然后22矩形进行平移,再继续上述运算。
(①22矩形块在运算时可以上下左右甚至斜着平移
②偏置项b可以有也可以没有
③最后不要忘了经过激活函数处理得到最终结果
④卷积核的大小也不是固定的,不一定都是2
2)

2,关于步幅
在这里插入图片描述
当这个输入图片稍微大些时,面对一个较小的卷积核,这个2*2的计算单位每次不一定要平移一格,也可以平移两格,不同的平移情况会导致最终得到的特征图的大小不一样。

3,关于填充
在这里插入图片描述
我们观察发现,输入图像经过卷积之后得到的特征图是比本来的图像小了,但是在应用层面上来说,我们的运行过程是卷积-池化-卷积-池化,也就是说我们需要不断地卷积,但是经过多次卷积之后原图可能会和卷积核一样大,这样再卷积下去原图就比卷积核要小了,这就导致无法再卷积,因为这种情况我们提出了填充操作,就比如在原图上增加一圈0。

4,计算输出特征图
请添加图片描述
根据输入图片和卷积核计算输出特征图大小,H是输入图片高,W是输入图片宽,P是输入图片填充的圈数,S是步幅,FH是卷积核高,FW是卷积核宽,OH是输出特征图高,OW是输出特征图宽。
有可能算出来的OH和OW是小数,这时候因为不同框架的处理结果不同,有可能是向上取整也可能是向下取整。

5,多通道数据卷积运算
在这里插入图片描述
比如三通道的图片,如图所示,我们暂且把它的这三张图称为上中下通道,在做卷积运算时,都有与其对应的卷积核的上中下通道,然后输入图片的上通道与卷积核的上通道进行卷积,输入图片的中通道与卷积核的中通道进行卷积,输入图片的下通道与卷积核的下通道进行卷积分别得到上通道特征图、中通道特征图、下通道特征图,最后这三个特征图合在一起成为最终的特征图(这个最终的特征图是单通道,也就是说输出特征图的通道数取决于卷积核的数量)。
在这里插入图片描述
如果卷积核数量多,则可以形成多通道的输出特征图。

6,池化层
在这里插入图片描述
在这里插入图片描述
对于池化操作而言,尤其是最大池化和平均池化,其实就是选择计算单位的最大值或者平均值,然后这些值重新组成一张数据(叫做感受野)。和卷积操作相比,同样有步幅的概念,计算输出特征图的公式也一样。
另外,最重要的一点,对于卷积操作而言,输出特征图的通道数是由卷积核的数量决定,而对于池化操作而言,输出特征图的通道数是由输入特征图的通道数决定。

7,卷积神经网络整体结构
在这里插入图片描述
通过不断卷积和池化操作后的数据再直接输入到全连接神经网络进行处理就不会出现破坏原有信息。
**补充
关于卷积神经网络的一些疑问:
1,在卷积操作中可以设置不同的步幅吗?
在同一层网络中步幅必须一致,在不同层可以设置不同的步幅。
2,那么在卷积过程中,一会步幅为1,一会步幅为2,这样可以吗?
不行,因为步幅是一个参数,在运行过程中要保证参数统一性。
3,如果想要识别一张图片,可以采用全连接神经网络吗?
可以,但是比较麻烦,就比如一张28×28像素的灰度图片,把它展开成一条向量就是784个元素,这就导致网络的参数太多。
4,能不能举个例子,来说明全连接神经网络如何工作的?
5,“输出层可能有10个神经元,每个神经元代表一个数字(0-9)”,那么那个神经元代表哪一个数字是人为指定的吗?
在训练之前,也就是说在构造网络的时候就规定了。
6,对于手写数字识别,如果识别错误该如何通过反向传播调整参数?请举个例子说明?
7,如果隐藏层有多层,那么内部层该如何调整参数?
假设现在有一个三层的全连接神经网络,1,2,3,层为隐藏层。我们对于3层参数的调整很熟悉了,现在要调整2层的参数,把损失函数再写开一层,那么这个函数就是关于w2,b2的,之前的w3,b3已经调整完了,那么在1层的输出不变的情况下,我们仍然可以用之前的方法进行调整,这样一层一层扩展,最终所有参数都调整完毕。
8,损失函数不同,为什么梯度下降法都是适用的?
只要有梯度,我们都可以用这种方法来处理。
**

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【454. 四数相加 II】
  • 【设计模式-外观】
  • 解密AI创作:提升Prompt提示词的提问技巧
  • 《Google软件测试之道》笔记
  • 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)
  • VMware网络配置
  • Redis的C客户端(hiredis库)使用
  • 深入解析:如何通过网络命名空间跟踪单个进程的网络活动(C/C++代码实现)
  • PostgreSQL的walsender和walreceiver进程介绍
  • ubuntu20.04/22.04/24.04 docker 容器安装方法
  • 借助大模型将文档转换为视频
  • 【测试开岗面试】知识点总结
  • JDBC笔记
  • UE5源码Windows编译、运行
  • 办了房屋抵押经营贷,空壳公司不怕被查吗?续贷不上怎么办?
  • 【comparator, comparable】小总结
  • 30秒的PHP代码片段(1)数组 - Array
  • Docker: 容器互访的三种方式
  • ES6系列(二)变量的解构赋值
  • golang中接口赋值与方法集
  • js操作时间(持续更新)
  • js面向对象
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • SpiderData 2019年2月13日 DApp数据排行榜
  • Vue2 SSR 的优化之旅
  • vue从创建到完整的饿了么(18)购物车详细信息的展示与删除
  • windows下mongoDB的环境配置
  • 大数据与云计算学习:数据分析(二)
  • 飞驰在Mesos的涡轮引擎上
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 批量截取pdf文件
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 推荐一个React的管理后台框架
  • 想写好前端,先练好内功
  • 移动端唤起键盘时取消position:fixed定位
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • $.ajax()
  • $.ajax()参数及用法
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (C)一些题4
  • (Git) gitignore基础使用
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (备份) esp32 GPIO
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)计算机毕业设计ssm电影分享网站
  • (四)React组件、useState、组件样式
  • (转) 深度模型优化性能 调参
  • (转)ObjectiveC 深浅拷贝学习
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .md即markdown文件的基本常用编写语法
  • .NET 8.0 中有哪些新的变化?