从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

相关推荐
星子yu36 分钟前
【学习】怎么学好数据结构
数据结构·学习
Hello-FPGA44 分钟前
GPU与图像采集卡编程实战 eGrabber + CUDA 图像采集:三种内存模式技术解析
人工智能·深度学习·计算机视觉
~kiss~1 小时前
MoE的痛点:离散路由
学习
Amazing_Cacao1 小时前
CFCA精品可可工艺师初级校准:暴力破解机器黑盒,实现物理参数与最终风味的精准对齐
笔记·学习
浮江雾2 小时前
Flutter第三节----Dart中的数据类型
android·开发语言·学习·flutter·入门·函数
阳明山水2 小时前
从论文到生产:销量预测系统的工程化落地实践
大数据·人工智能·深度学习·机器学习·架构
Token炼金师2 小时前
范式跃迁:从标注囚徒到自监督信徒 —— 大模型时代的机器学习重写
人工智能·深度学习·llm
风和先行2 小时前
Android 数据库相关学习总结
android·数据库·学习
水之子强2 小时前
龙芯2k0300 - 智能车走马观碑组目标分类算法
人工智能·计算机视觉·目标跟踪