从0开始学习计算机视觉--Day09--卷积与池化

在卷积神经网络中,由于卷积核在输入的数据上滑动时,输出的总是一个尺寸更小的数据,假如神经网络有很多层,那么最后输出的图片不仅尺寸会跟初始数据不一样,还会有很多特征丢失。为了防止这种情况,同时尽可能地保留初始特征,也就是尽可能地让边缘的数据参与激活函数的运算,我们会在滑动前,对数据做零填充,即在数据外多一层填充了0的数据,从而让输出的数据保持原来的尺寸。假设输入的数据是7×7,卷积核是3×3,步幅为1的话,这样输出的就是5×5的尺寸,而在外围包了一层后,原来的尺寸就变成了9×9,输出也就变为了7×7,而由于我们使用的0填充,做了点积运算后,结果还是0,不影响实际的运算。

当然,在实际使用中,图片的数据是有深度的,比如32×32×3,这里的3指的就是图像数据的3个通道,比如红,绿,蓝,所以我们的输出的数据理所当然的也会有深度,但并不是对齐输入数据的深度,输出数据的深度取决于我们所用的卷积核的数量,这是因为不管输入数据的深度是多少,卷积核的深度与其保持一致,做了点积后输出的是尺寸×尺寸×1,然后再乘以卷积核的数量,也就是输出的数据叠在一起(有多少个卷积核就有多少个数据叠在一起)。注意,最终输出的数据的参数总数,等于输出数据的长乘宽后要加1再乘以深度,这里的1指的是偏置项,适用于调整权重矩阵的。

总的来说,卷积改变的是输入数据的深度,可以想象一下假如用的卷积核是1×1的尺寸,那么你选用的个数,就是你输出的数据的深度,即通过卷积改变了输入数据的深度,同时提取到了一部分特征(比较边缘化)。

而池化层部分,改变的则是数据的宽度,即尺寸的长和宽,这么做的意义是,减少输出数据的参数量,让训练不会过于复杂(且池化层部分是没有超参数的,计算复杂度更小),从而能让模型更好地学习到特征,对后续图片的分类有更大的帮助。一般我们用最大池化法,也就是选定每个区域内最显著的那个参数作为输出,而步幅我们会选择在滑动时尽量没有重叠的大小,比如输入的尺寸是4×4,池化器的大小是2×2,那么步幅就设置为2,滑动3次就将输入的数据的区域都覆盖过了。这部分也不需要做0填充,因为池化本质就是在减少数据的宽度,不需要担心有边缘数据因为大小限制没被纳入。

学习来自于斯坦福教程:Stanford University CS231n: Deep Learning for Computer Vision

相关推荐
学历真的很重要8 分钟前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
UnderTurrets16 分钟前
A_Survey_on_3D_object_Affordance
pytorch·深度学习·计算机视觉·3d
koo36418 分钟前
pytorch深度学习笔记13
pytorch·笔记·深度学习
高洁0121 分钟前
CLIP 的双编码器架构是如何优化图文关联的?(3)
深度学习·算法·机器学习·transformer·知识图谱
yugi9878381 小时前
用于图像分类的EMAP:概念、实现与工具支持
人工智能·计算机视觉·分类
码农小韩1 小时前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
MM_MS1 小时前
Halcon图像锐化和图像增强、窗口的相关算子
大数据·图像处理·人工智能·opencv·算法·计算机视觉·视觉检测
嵌入式-老费1 小时前
外壳3D结构设计(学习的方法)
学习
山土成旧客1 小时前
【Python学习打卡-Day40】从“能跑就行”到“工程标准”:PyTorch训练与测试的规范化写法
pytorch·python·学习
Yyuanyuxin1 小时前
保姆级学习开发安卓手机软件(一)--安装软件及配置
学习