从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

相关推荐
递归不收敛26 分钟前
吴恩达机器学习课程(PyTorch 适配)学习笔记:3.4 强化学习
pytorch·学习·机器学习
StarPrayers.29 分钟前
卷积层(Convolutional Layer)学习笔记
人工智能·笔记·深度学习·学习·机器学习
能不能别报错1 小时前
K8s学习笔记(十五) pause容器与init容器
笔记·学习·kubernetes
WWZZ20251 小时前
ORB_SLAM2原理及代码解析:SetPose() 函数
人工智能·opencv·算法·计算机视觉·机器人·自动驾驶
java1234_小锋1 小时前
TensorFlow2 Python深度学习 - TensorFlow2框架入门 - 立即执行模式(Eager Execution)
python·深度学习·tensorflow·tensorflow2
ᖰ・◡・ᖳ1 小时前
JavaScript:神奇的ES6之旅
前端·javascript·学习·es6
小马学嵌入式~2 小时前
堆排序原理与实现详解
开发语言·数据结构·学习·算法
一人の梅雨2 小时前
1688 拍立淘接口深度开发:从图像识别到供应链匹配的技术实现
人工智能·算法·计算机视觉
递归不收敛2 小时前
吴恩达机器学习课程(PyTorch适配)学习笔记:1.4 模型评估与问题解决
pytorch·学习·机器学习
又是忙碌的一天2 小时前
前端学习 JavaScript
前端·javascript·学习