2 图像卷积
2.1 互相关运算
- 卷积层表达的运算其实是相关运算(cross-correlation),而不是卷积运算。在卷积层中,输入张量与核张量通过互相关运算产生输出张量。
- 计算0 × 0 + 1 × 1 + 3 × 2 + 4 × 3 = 19
- 假设输入:$n_h \times n_w$,卷积核:$k_h \times k_w$,输出:$n_h - k_h + 1 \times n_w - k_w + 1$
1 | import torch |
tensor([[19., 25.],
[37., 43.]])
2.2 卷积层
- 卷积层对输入和卷积核权重进行互相关运算,并加上偏置后产生输出。
- 卷积层需要学习的参数是卷积核权重和偏置。
- 对于卷积核为h × w的卷积层,也成为h × w卷积层。
1 | # 卷积层 |
2.3 图像中目标的边缘检测
- 卷积层的一个应用:通过找到像素变化的位置,检测图像中不同颜色的边缘。
1 | X = torch.ones((6,8)) |
tensor([[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.],
[1., 1., 0., 0., 0., 0., 1., 1.]])
tensor([[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.],
[ 0., 1., 0., 0., 0., -1., 0.]])
tensor([[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.],
[0., 0., 0., 0., 0.]])
2.4 学习卷积核
- 构造一个卷积层,随机初始化卷积核,通过计算Y与卷积层输出的平方误差更新。
1 | conv2d = nn.Conv2d(1,1,kernel_size=(1,2), bias=False) #忽略偏置,通道数为1 |
epoch2, loss12.452
epoch4, loss3.237
epoch6, loss1.013
epoch8, loss0.363
epoch10, loss0.140
tensor([[[[ 0.9478, -1.0233]]]])
2.5 互相关和卷积
- 卷积运算与互相关运算差别不大,只需要水平和垂直翻转二维卷积核张量,然后对输入张量进行互相关运算。
2.6 特征映射和感受野
- 输出的卷积层有时被称为特征映射(feature map),因为它可以被视为一个输入映射到下一层的空间维度的转换器。
- 在卷积神经网络中,对于某一层的任意元素x,其感受野(receptivefield)是指在前向传播期间可能影响x计算的所有元素(来自所有先前层)
- 感受野可能大于输入的实际大小。如图,如果在后面再加一个2×2的卷积层,输出就是1×1,但是感受野是3×3(原始输入)。