发布时间:2024-06-19 08:01
卷积神经网络的概念最早出自科学家提出的感受野,在19世纪60年代科学家通过对猫的视觉皮层细胞研究发现,每一个视觉神经元只会处理一小块区域的视觉图像。这明显区别于传统的神经网络,传统的神经网络是一种全连接模型,在处理大量数据时,由于这种全连接模型使得模型复杂度大大提升,而且易出现过拟合的现象。
1.卷积层
然而在卷积神经网络中,可以利用空间结构关系减少需要学习的参数量,提高算法的训练效率。而且,第一个卷积层会直接接受图像像素级的输入,每一个卷积操作只会处理一小块图像,每经过一次卷积核所得到的新的图像像素都是对原图像最有效的特征提取。
这里,我们所说的卷积核在卷积神经网络中指的是过滤器。过滤器的输入是一小块区域的视觉图像,输出是单位节点矩阵并且深度不限(深度称为过滤器的深度,指的是输出单位节点矩阵的深度,需要人工指定)。在卷积层中,过滤器所处理的节点矩阵的长和宽都是由人工指定的,节点矩阵的尺寸也称为滤波器的尺寸。通常情况下,节点矩阵都是三维矩阵(当图像是黑白图像时只有一个颜色通道此时为二维矩阵;对于RGB图像,有三个颜色通道,为三维矩阵)。常用的过滤器的尺寸有3×3或者5×5。
卷积层结构的前向传播过程就是通过将一个过滤器从输入图像的左上角移动至右下角,并且计算每一个对应的单位矩阵得到的。
我们假设过滤器尺寸为2×2,图像输入节点深度为3,则经过过滤器得到第i个的单位节点矩阵的值为:
a为输入节点矩阵中相应位置处的像素值(f为ReLU函数,通常在神经网络中定义为f=max(0,w^Tx+b))。
具体计算过程如下:
实际上,过滤器是一个二维或者三维的矩阵模板,用于对感受野中的每个通道做特征提取,过滤器的深度即为我们要提取的特征属性的个数,每一个特征属性对应一个feature map。原图像的每一个通道对应过滤器权值矩阵的每个通道,对于输出的单位节点矩阵又对应一个偏置项。通过输入节点矩阵与过滤器对应位置处的权值相乘再求和再加上该输出节点对应的偏置项参数,将结果作为激活函数的自变量,计算得到过滤器的输出,即单位节点矩阵的值。当过滤器的尺寸大小不为1×1时,卷积层前向传播得到的矩阵尺寸要小于当前层矩阵的尺寸。为了避免这种尺寸的变化,我们通过在当前层矩阵的边界处加入全0填充。这样使得卷积层前向传播得到的矩阵大小和当前层矩阵大小保持一致。
我们还可以通过设置过滤器移动的步长来调整结果矩阵的大小。当过滤器的尺寸为2×2,并且对输入节点矩阵使用全零填充时,通过过滤器得到的结果矩阵的大小为(若有余数,向上取整):
当过滤器尺寸不为2×2,并且对输入节点矩阵使用全零或者不使用全零填充时,通过过滤器得到的结果矩阵的大小为:
2.池化层
池化层的作用是降采样,压缩卷积层图像尺寸,保留最显著的特征,一般常用最大池化法和平均池化法。
与卷积层的过滤器类似,池化层的过滤器也需要人工设定过滤器的尺寸、是否需要使用全零填充以及过滤器移动步长等设置,而且这些设置的意义也是一样的。卷积层和池化层中过滤器移动的方式是相似的,唯一的区别就是卷积层使用的过滤器是横跨整个输入节点矩阵的深度,而池化层使用的过滤器只影响一个深度上的节点。所以池化层的过滤器除了在长和宽两个维度移动,还需要在深度这个维度上移动。下图展示了一个最大池化层前向传播计算过程:
MindSpore报错"TypeError: parse() missing 1 required positional."
遗传算法 matlab 详解,遗传算法的Matlab实现讲解
游戏测试 | 游戏工具:做一个可以即时修改卡牌属性的工具方便测试
【牛客网面经整理】7.20shopee一面面经,加入我自己整理的相关拓展问题(redis))
【从零开始】Google OR-Tools源码构建debug(CLion/CMake)
【Kubernetes 系列】K8S 进阶 容器和 Pod 分配内存资源
一、什么Docker? Docker有什么用?Docker能干嘛?