卷积神经网络(CNN)中卷积层计算细节

卷积计算过程

单通道图像

输入层大小为5x5, 卷积核为3x3,输出的计算过程如下:

Stride和Padding

如果将输入层想像成黑板,局部感受野就像是黑板擦,他会从左往右,从上至下的滑动,每次滑动 1 个步长(Stride)并且每次滑动都重复上述的计算过程,我们就可以得到输出的特征图(feature map),有时候,按照规定步数滑动到黑板边缘时,黑板擦一部分会露出在黑板外,这个时候就 不能够顺利执行卷积过程, 有两种处理方法:

1、Valid方法

Valid 是丢弃的方法,比如上述的 input_width = 7,kernel_width = 5,stride = 3,只允许滑动 1 次,多余的元素则丢掉。

2、Same方法

Same就是再边缘补0,对于上面的情况,在左右分别补两个0,这样就可以扫描3次,所有数据都被扫描到。这种方式不会丢弃边缘信息。

 

多通道图像

卷积层尺寸计算原理

  • 输入矩阵格式,四个维度,依次是,图片数,图片高,图片宽,通道数
  • 卷积核格式,四个维度,   依次是, 图片高,图片宽,输入通道数,输出通道数(卷积核个数)
  • 输出矩阵格式,四个维度,依次是, 图片数, 高度,宽度,通道数(卷积核个数)

计算流程:

每个Feature map的具体计算过程如下:

特征图尺寸计算公式:

heght_{out} = (height_{in} - height_{kernel} + 2*padding) / stride + 1

width_{out} = (width_{in} - width_{kernel} + 2*padding)/stride +1

 

卷基层计算举例:


以 AlexNet 模型的第一个卷积层为例,
- 输入图片的尺寸统一为 227 x 227 x 3 (高度 x 宽度 x 颜色通道数),
- 本层一共具有96个卷积核,
- 每个卷积核的尺寸都是 11 x 11 x 3。
- 已知 stride = 4, padding = 0,
- 假设 batch_size = 256,
- 则输出矩阵的高度/宽度为 (227 - 11) / 4 + 1 = 5

1 x 1 卷积计算举例

后期 GoogLeNet、ResNet 等经典模型中普遍使用一个像素大小的卷积核作为降低参数复杂度的手段。
从下面的运算可以看到,其实 1 x 1 卷积没有什么神秘的,其作用就是将输入矩阵的通道数量缩减后输出(512 降为 32),并保持它在宽度和高度维度上的尺寸(227 x 227)。

全连接层计算举例

实际上,全连接层也可以被视为是一种极端情况的卷积层,其卷积核尺寸就是输入矩阵尺寸,因此输出矩阵的高度和宽度尺寸都是1。

参考链接:

https://blog.csdn.net/dcrmg/article/details/79652487

https://blog.csdn.net/qq_21997625/article/details/87252780

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值