深度学习第四课——卷积神经网络(week 1)

news2025/2/23 18:42:04

目录

一、前言

1.1 卷积

1.2 其他滤波器

1.3 Padding

1.3.1 解释

1.3.2 填充多少像素的选择

1.4 卷积步长

1.5 三维卷积

1.6 单层卷积网络

1.7 深度卷积神经网络的一个示例

1.8 池化层

1.8.1 最大池化

1.8.2 平均池化

1.8.3 总结

1.9 卷积神经网络示例

1.10 为什么使用卷积


一、前言

1.1 卷积

        为了检测出这个 6 ×6 图像的垂直边缘,构建一个 3×3 的过滤器(filter),或者称为 ,进行卷积运算 *,输出得到一个 4×4 的矩阵,里面元素的运算过程如下图所示,以第一行第一列的元素为例:

这个即为:垂直边缘检测器 

不同编程框架下的卷积运算:

        python:conv_forward 函数

        tensorflow:tf.nn.conv2d 函数

        Keras:Conv2D 函数

为什么这个可以做 垂直边缘检测?

如图,10像素表示 偏亮一点

         在这个例子中,输出图像的中间区域的亮处,表示在图像中间,有一个特别明显的垂直边缘;且这个例子里会发现,检测出来的边缘维度不对,太粗了,这是因为输入的图片太小了,如果是1000×1000 的图片,其实会很好的检测出图片的垂直边缘

        可以发现,明亮的像素在左边,深色的像素在右边,就被视为一个垂直边缘

        同时,这个滤波器可以提供明暗变化的区别,30是由亮到暗,-30是由暗到亮

1.2 其他滤波器

sobel 滤波器:增加了中间的权值,也就是处在图像中间的像素点,这使得结果的鲁棒性更高 

 Scharr 滤波器:与之前有完全不一样的特性,但也是一种垂直边缘检测

        如果把这些元素都当成参数,通过深度学习反向传播去自动学习这些参数,以得到任何角度的边缘       

1.3 Padding

1.3.1 解释

        若对一个 n × n 的图像使用一个 f × f 的滤波器,会输出一个 (n-f+1)×(n-f+1)的图像

        这样有一些缺点:

        (1)就是每做一个图像都会被缩小

        (2)角落的像素点只被一个输出所触碰或被使用,而中间的像素点,则会有多个3×3 的区域与之重叠,所以那些在角落或是在边缘的像素点,在输出中采用较小,意味着你丢掉了图像边缘的位置的许多信息

        所以要想解决,可以在卷积之前,给原图像的外层再填充一层像素;如将一个 6 × 6 的图像填充成 8 × 8 的图像,习惯上用 0 填充,填充的数量 p = padding = 1 的话,相当于填充了1 层,此时输出为(n+2p-f+1)×(n+2p-f+1),这样一来角落或边缘的像素发挥的作用较小,缺点就被削弱了

1.3.2 填充多少像素的选择

(1)Valid 卷积

        不填充,输出 (n-f+1)×(n-f+1)

(2)Same 卷积

        意味着填充后的输出大小和输入大小一样,输出(n+2p-f+1)×(n+2p-f+1)

        而要相等,则令: n = n+2p-f+1,=> p = (f - 1)/ 2

        习惯上,f 通常是 奇数

        可能有两种原因:

        (1)偶数过滤器的话只能使用 不对称填充,只有f是奇数,Same卷积才会有自然的填充,而不是左边多一点、右边少一点这类不对称填充

        (2)奇数维过滤器会有一个中心点,计算机视觉中有个中心像素点会更方便,便于指出过滤器的位置

1.4 卷积步长

        卷积中的步长(步幅)是另一个构建卷积神经网络的基本操作。初始步长为1,而步长为2时,也就是让过滤器再原图像上每次跳过2个步长,由第一个像素起始。下一次到第三个像素

 

设padding为p,步长stride为s。则输出为(n+2p-f+1)/ s + 1 ×(n+2p-f+1)/ s + 1

如果商不是一个整数,就向下取整,符号为:" |_ z_| ",也叫对 z 进行地板除,即将z向下取整到最近的整数,原则就是如果过滤器框超出就不进行卷积

实际上的卷积操作,首先还要给过滤器再水平和垂直轴上做翻转,类似镜像, 将翻转后的矩阵作为过滤器。而我们的操作跳过了这个镜像操作,所以实际上我们之前做的操作有时被称为互相关,而不是卷积,但深度学习文献中,按照惯例,我们将这称为 卷积操作

1.5 三维卷积

        如不是对一个灰度图像进行检测,而是对一个有3个通道的RGB图像进行检测

        图像的通道数和过滤器的通道数必须要一致,如 6×6×6  *  3×3×3   = 4×4×1

与二维的类似,只不过图像和过滤器对应卷积 

作用是什么?

        如要只对红色通道有用的垂直检测过滤器,只需G,B都为0,R过滤器正常1,0,-1即可,若不关心通道,就所有过滤器都为1,0,-1 

        如果想要同时使用多个过滤器,例如下图,上面是垂直检测,下面是水平检测,然后把两个输出堆叠在一起,就获得了一个 4×4×2 的输出,这就是多卷积核形成的多特征平面

        总结一下,一个 n×n×n_c  * f×f×f_c =  (n-f+1) × (n-f+1) × n_c'   (n_c'是过滤器的个数),如果用了不同的步幅还会发生变化,所以,我们可以使用多个过滤器,来检测多个特征,并输出这些特征,输出的通道数就等于你要检测的特征数

        这里的通道数,在一些文献里也被称为 3维立方体的深度 

1.6 单层卷积网络

        上例中,通过两个过滤器输出的结果都各自形成一个卷积神经网络层,然后可以各自增加不同的偏差 b,再运用非线性激活函数 ReLU,得到两个4×4 的矩阵,堆叠一起得到 4×4×2的输出,它是卷积神经网络的一层,把它映射到标准神经网络中四个卷积层中的某一层,或者一个非卷积神经网络中。

        注意,前向传播其中一个操作就是z[1] = W[1] a[0] + b[1],a[0]相当于x,执行非线性函数,a[1] = g(z[1]),左边的 6×6×3 的输入就是a[0],就是x;过滤器用变量W[1]表示,输出结果相当于W[1] a[0] ,到加上b之前都是应用非线性函数ReLU之前的值,最后运用ReLU,称为神经网络的下一层,也就是激活层,这就是a[0]到a[1]的演变过程

用10个3×3×3的过滤器,一个过滤器加上偏差就是28个,10个就是280个,无论输入的图片大小多大,是1000×1000,还是5000×5000,参数始终都是280个,这就是卷积神经网络的一个特征,叫做“避免过拟合” 

上标 ^[l] ,用来表示 l 层 

在第 l 层,图片大小为 n_H^[l-1] × n_W^[l-1] × n_C^[l-1],而 l 层的输入为上一层 l-1层的输出

所以输出图像大小为 n_H^[l] × n_W^[l] × n_C^[l]

具体计算为:

每层过滤器的大小 n_C^[l] = f^[l] × f^[l] × n_C^[l-1]

当执行批量梯度下降或小批量梯度下降,有m个例子,就是有m个激活值的集合,那么输出A[l]为:

参数 W 和偏差 b 该如何确定 

1.7 深度卷积神经网络的一个示例

如图,要做图像分类

一个典型的卷积网络通常有三层:一个是卷积层,常用 Conv(Convolution)标注;还有池化层,称为 POOL(Pooling);还有全连接层,用 FC(Fully connected)表示。

        虽然仅用卷积层,也可能构建出和好的神经网络,但大部分神经网络架构师依然会添加池化层和全连接层 

1.8 池化层

        池化层 可用来缩减模型的大小,提高计算速度,提高所提取特征的鲁棒性

1.8.1 最大池化

        假设输入是一个4×4的矩阵,用到的池化类型是 最大池化(max pooling),执行最大池化的输出是一个2×2的矩阵;执行过程非常简单,把4×4输入拆分成不同的区域,对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值,为了得到输出的元素值,需要对输入矩阵的2×2区域做最大值运算,相当于应用了一个规模是2,即2×2的过滤器,步长也为2,这就是最大池化的超级参数,f=2,s=2

        可以把这个4×4的区域看作是某些特征的集合,也就是神经网络中某一层的反激活值集合,数字大意味着可能提取了某些特定特征,而这里左上象限的特征,可能就是一个垂直边缘,一只眼睛,或者CAP特征;然而右上象限并不存在这个特征,最大化操作的功能就是只要在任何一个象限内提取到某个特征,他都会保留在最大池化的输出里。

        最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值;如果没有提取到这个特征,可能不存在这个特征,那么其中的最大值也还是很小

下面,输入为5×5的矩阵,假设3×3过滤器,即f=3,s=1,所以池化层的输出为 

        这就是二维的最大池化输出演示,如果输入是三维的,那么输出也是三维的,即对每个信道进行相对应的池化计算 

1.8.2 平均池化

        顾名思义,取得不是每个过滤器的最大值,而是平均值

        目前来说,最大池化必平均池化更常用,但也有例外,就是深度很深的神经网络,

1.8.3 总结

        池化层的超级参数,一般来说是f=2,s=2,相当于表示层的高度和宽度缩减一半,也有f=3,s=2的,其他参数就要看用最大池化还是平均池化了,也可以根据自己的意愿去增加 p 这样的参数,虽然很少用

        输出也是计算为:

        需要注意的是,池化过程中没有需要学习的参数 

        执行反向传播时,反向传播没有参数适用于最大池化,只有这些设置过的参数f、s,可能是手动设置的,也可能是通过交叉验证设置的

        最大池化只是计算神经网络某一层的静态属性

 

1.9 卷积神经网络示例

        下例,假设有一张大小为 32×32×3 的输入图片,是RGB模式的,若想做手写数字识别,该图片含有某个数字,比如7,我们想识别他是0-9的哪个数字,构建神经网络来实现,这个网络模型和经典网络LeNet-5非常相似,灵感也来于此

        第一层过滤器f=5,s=1,p=0,6个过滤器,那么输出为 28×28×6 ,这层标记为 CONV1;构建最大池化层,f=2,s=2,输出为 14×14×6 ,标记为 POOL1;把 CONV1 和 POOL1共同作为一卷积层,标记为 Layer1;一般在统计网络层数时,只计算具有权重的层

        再构建一个卷积层,10个f=5,s=1的过滤器,输出一个 10×10×10的矩阵,标记为 CONV2;再做最大池化f=2,s=2,减半,输出为 5×5×10,,标记为 POOL2;标记为Layer2 

        如果应用另一个卷积层,16个f=5,s=1的过滤器,CONV2输出为 10×10×16;执行最大池化f=2,s=2,输出为 5×5×16,为POOL2,有400个元素;将POOL2平整化为一个大小为400的一维向量,可以把平整化结果想象成这样一个神经元集合,利用这400个单元构建下一层,下一层含有120个单元,这就是我们第一个全连接层,标记为FC3;这400个的单元与这120个单元中的每一个连接,有参数w和偏差b,输出120个维度,再添加一个全连接层,假设这一层含有84个单元,标记为FC4;最后用这84个单元填充一个 softmax 单元,如果要识别0-9个数字,那么 softmax 就有10个输出,尽量不要自己设置超级参数,而实查看文献中别人采用的

        神经网络中,另一种常见模式就是一个或多个卷积层后面跟随一个池化层,然后是几个全连接层,最后是一个softmax

 

208 = (5*5+1)* 6 

48001 = 400 * 120 +1

1.10 为什么使用卷积

        和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接

        假设有 32×32×3 (3072个元素)的图片,用6个5×5 的过滤器,输出为 28×28×6(4704个元素),权重矩阵有 3072×4704 =1400万个参数;如果是1000×1000的图片,那么权重矩阵会更大

        这里参数 6×26 = 156个

卷积网络映射这么少参数有两个原因:参数共享、稀疏连接

(1)参数共享:特征检测如垂直边缘检测如果适用于图片的某个区域,那么它也可能适用于图片的其它区域,也就是说,如果用一个3×3的过滤器检测垂直边缘,那么图片的左上角区域以及旁边的各个区域都可以使用这个3×3的过滤器,每个特征检测器以及输出都可以在输入图片的不同区域中使用同样的参数,以便提取垂直边缘或其他特征。它不仅适用于边缘特征这种低级特征,也适用于高价特征,如提取脸上的眼睛,即使减少参数个数,这9个参数也能计算出16个输出

(2)稀疏连接:输出的第一个元素只与输入的左上的3×3的9个元素有关,而其他像素无法影响这个输出的元素,这就是稀疏连接

        神经网络可以通过这两种机制减少参数,以便于我们用更小的训练集来训练它,从而预防过度拟合

        因为神经网络的结构,即使移动几个像素,这张图片依然具有非常相似的特征,属于同样的输出标记。实际上,我们用同一个过滤器生成各层中图片的所有像素值,希望网络通过自动学习变得更加健壮,以便更好地取得所期望的平移不变的属性,这就是卷积或卷积神经网络在计算机视觉任务中表现良好的原因

        最后整合,训练神经网络,使用梯度下降算法或其他梯度下降来优化神经网络中的所有参数,以减少代价函数J的值, 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28812.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

23种设计模式

1.创建型模式 ① 创建型模式的作用就是创建对象,说到创建一个对象,最熟悉的就是 new 一个对象,然后 set 相关属性 ② 但是很多场景下,需要给客户端提供更加友好的创建对象的方式,尤其是那种我们定义了类,但…

leetcode:644. 子数组最大平均数 II【浮点数二分 + 子数组最大平均值技巧】

目录题目截图题目分析ac code总结题目截图 题目分析 枚举铁超时, 10 ** -5考虑二分平均值需要同时考虑总和和长度能否只考虑一个考虑每个数num’ num - avg这样可以忽略长度猜一个guess_avg是否可能达到num’ -> num - avg_guess区间sum(num’) > 0说明其真…

Linux 开机运行sh 脚本 三种方法

一、修改开机启动文件​​​​​​​ /etc/rc.local(或者/etc/rc.d/rc.local) 1、编辑rc.local文件(命令后面让得加&号,表示后台运行) 2、最后修改rc.local文件的执行权限: chmod x /etc/rc.local二…

实践历练的力量

要让你的屁股和椅子建立起深刻的友谊来,要坚持下来。 掌握知识离不开实践和做,只有经历了这样的过程才能将知识转换为自己的。也才能真正明白在什么环境下需要什么样的知识。 解决问题。 真正的学习一定包括实践,而实践是更重要的学习。学…

【sfu】接收侧拼装H264 帧后的回调流程

sfu 基于webrtc协议栈,【sfu】rtc 入口 预先分配了资源,并创建了adpter模块和call模块。【webrtc】rtp包组帧 :涉及到收到rtp包到组帧、传递给Frame处理直到解码器的流程。帧就是从解码器导出的。我们只需要注册1个外部解码器就可以拿到编码后的H264 帧,给到其他流程处理。接…

【JVS低代码开发平台】支持纯手工配置的数据加工、处理、展现的数据仓库

数据智仓英文名称为Smart Data Warehouse,可简写为SDW。数据智仓是JVS整体企业数字化解决方案的核心能力,与JVS的低代码开发套件平级,如下图所示: 数据仓库的目的是构建面向分析的集成化数据环境,为企业提供基于数据的…

SOLIDWORKS 2023新功能揭秘!升级版轻松找到材料明细表修改

SOLIDWORKS 2023版本已经与大家见面,今天众联亿诚继续和大家分享SOLIDWORKS 2023 工程图的亮点新功能之一:材料明细表的覆盖。 材料明细表的覆盖 SOLIDWORKS工程图是我们常用的功能之一。当采用断开链接模式修改材料明细表的内容时,修改的内容…

【强化学习论文合集】AAAI-2022 强化学习论文 | 2022年合集(二)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

【web前端期末大作业】HTML+CSS宠物狗静态网页设计

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

2.18 小红书的表情文案一键生成,原来这么简单【玩赚小红书】

想知道小红书的表情文案是怎么生成的,比如这种: 情人节走心 高调仪式感浪漫小 机! 式秀恩爱,不如比比谁更走心!❤️ EVERYDAY7️⃣彩⭐期裤 高浓度释放爱意讯号~ 今年情 节,大胆直接的爱意让他抱个 怀&…

【爬虫】Python爬取世界杯球员榜单并保存到excel经验分享

大家好 我是Yhen 今天给大家分享一下 如何爬取卡塔尔世界杯球员榜 数据来源:百度体育 https://tiyu.baidu.com/match/%E4%B8%96%E7%95%8C%E6%9D%AF/tab/%E7%90%83%E5%91%98%E6%A6%9C/current/0 文章目录一.需求分析二.思路分析三.代码实战四.源码获取一.需求分析…

XSS game -xss学习

网址 https://xss-game.appspot.com/level1Level 1: Hello, world of XSS payload: <script> alert(1); </script>漏洞产生处: message "Sorry, no results were found for <b>" query "</b>."Level 2: Persistence is key…

基于 urlimport 进行瘦身,提升编译效率

1. 基于 urlimport 进行瘦身&#xff0c;提升编译效率urlImport 是 NextJS 提供的一个实验特性&#xff0c;支持加载远程 esmodule NextJS 会在本地对所加载的远程模块进行缓存&#xff0c;减少了我们所需构建的模块数&#xff0c;缺点是它会影响 treeShaking 的一个效果&…

【强化学习论文合集】ICLR-2022 强化学习论文 | 2022年合集(四)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

Redis学习(二)之 Redis Cluster集群

redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态&#xff0c;如果master节点异常&#xff0c;则会做主从切换&#xff0c;将某一台slave作为master&#xff0c;哨兵的配置略微复杂&#xff0c;并且性能和高可用等方面变现一般&#xff0c;特别是…

使用html+css实现一个静态页面【传统文化茶带音乐6页】HTML学生个人网站作业设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【MySQL篇】第四篇——数据类型

数值类型 整数类型 TINYINT类型 小数类型 FLOAT DECIMAL 日期和时间类型 字符串类型 CHAR VARCHAR 二进制类型 BIT 数据类型是指系统中所允许的数据类型。MySQL数据类型定义了列中可以存储什么数据以及该数据怎么样存储的规则。 数据库中的每个列都应该有适当的数据…

新手如何从零开始搭建配置Windows云服务器?

新手如何从零开始搭建配置Windows云服务器&#xff1f;本文是搭建 Windows 云服务器入门教程&#xff0c;主要介绍如何从零开始&#xff0c;以最简单的方式搭建和配置你的Windows 云服务器。如果您之前没有搭建云服务器的经验&#xff0c;建议您按照本文介绍的方式来购买和配置…

云小课|云小课带您快速了解LTS可视化查看

阅识风云是华为云信息大咖&#xff0c;擅长将复杂信息多元化呈现&#xff0c;其出品的一张图(云图说)、深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云。更多精彩内容请单击此处。 摘要&#xff1a; 可视化查看是日志分析的关键&#xff0c;通过可视化可…

基于SSM的药店管理系统

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…