跟李沐学AI随记-9-卷积神经网络-2-填充、步幅、通道与池化

15 阅读3分钟

卷积的输出形状 image.png

填充(padding):扩大输出维度,防止过多信息损失

image.png

--卷积核通常都为奇数

import torch
from torch import nn


# 为了方便起见,我们定义了一个计算卷积层的函数。
# 此函数初始化卷积层权重,并对输入和输出提高和缩减相应的维数
def comp_conv2d(conv2d, X):
    # 这里的(1,1)表示批量大小和通道数都是1
    X = X.reshape((1, 1) + X.shape)
    Y = conv2d(X)
    # 省略前两个维度:批量大小和通道
    return Y.reshape(Y.shape[2:])

# 请注意,这里每边都填充了1行或1列,因此总共添加了2行或2列
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1)
X = torch.rand(size=(8, 8))
comp_conv2d(conv2d, X).shape

conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))
comp_conv2d(conv2d, X).shape

步幅(stride):为了高效计算或是缩减采样次数,卷积窗口可以跳过中间位置,每次滑动多个元素。(通常取2)

image.png

  • 填充和步幅可用于有效地调整数据的维度。

通道(channel):灰度 or RGB

1、多输入通道

对每个通道设置相应的卷积核,再进行通道元素相加 image.png

2、多输出通道

直观地说,我们可以将每个通道看作对不同特征的响应。而现实可能更为复杂一些,因为每个通道不是独立学习的,而是为了共同使用而优化的。因此,多输出通道并不仅是学习多个单通道的检测器。

  • 在互相关运算中,每个输出通道先获取所有输入通道,再以对应该输出通道的卷积核计算出结果。
  • 其实就是利用多个卷积核分别取对输入进行卷积操作,相当于每个输出口是用于提取某一特征(如垂直边缘信息,水平边缘信息等)

当前层的多输出,对下一层相当于多输入,将他们的特征组合起来再进行后续的操作。

1*1卷积层:融合通道中的信息,就是通道中的全连接(不识别空间模式)

image.png

多输入多输出各层的形

image.png

import torch
from d2l import torch as d2l

def corr2d_multi_in(X, K):
    # 先遍历“X”和“K”的第0个维度(通道维度),再把它们加在一起
    return sum(d2l.corr2d(x, k) for x, k in zip(X, K))
```
# 多通道,就是针对多种特征进行提取再进行堆叠
def corr2d_multi_in_out(X, K):
    # 迭代“K”的第0个维度,每次都对输入“X”执行互相关运算。
    # 最后将所有结果都叠加在一起
    return torch.stack([corr2d_multi_in(X, k) for k in K], 0)
# 这里主要要注意各种矩阵的维度
def corr2d_multi_in_out_1x1(X, K):
    c_i, h, w = X.shape
    c_o = K.shape[0]
    X = X.reshape((c_i, h * w))
    K = K.reshape((c_o, c_i))
    # 全连接层中的矩阵乘法
    Y = torch.matmul(K, X)
    return Y.reshape((c_o, h, w))
X = torch.normal(0, 1, (3, 3, 3))
K = torch.normal(0, 1, (2, 3, 1, 1))

Y1 = corr2d_multi_in_out_1x1(X, K)
Y2 = corr2d_multi_in_out(X, K)
assert float(torch.abs(Y1 - Y2).sum()) < 1e-6

池化(pooling)层,它具有双重目的:降低卷积层对位置的敏感性,同时降低对空间降采样表示的敏感性。

  • 步幅与池化窗口大小相同(默认)

image.png

63b200a146d60f14a36c14b06a573a4.jpg 卷积用于融合多个通道,而池化是对每个通道进行处理(就是只处理一下数据)

  • 使用最大汇聚层以及大于1的步幅,可减少空间维度(如高度和宽度)。
  • 汇聚层的输出通道数与输入通道数相同。