🐳填充和步幅
2021-11-30
| 2023-8-6
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
Property
 
 
有时,在应用了连续的卷积之后,最终得到的输出远小于输入大小。这是由于卷积核的宽度和高度通常大于所导致的。比如,一个 像素的图像,经过的卷积后,将减少到像素。如此一来,原始图像的边界丢失了许多有用信息。而填充是解决此问题最有效的方法。 有时,我们可能希望大幅降低图像的宽度和高度,例如原始的输入分辨率十分冗余,步幅则可以在这类情况下提供帮助。

填充

由于通常使用小卷积核,对于任何单个卷积可能只会丢失几个像素。 但随着应用许多连续卷积层,累积丢失的像素数就多了。 解决这个问题的简单方法即为填充(padding):在输入图像的边界填充元素(通常填0)。
例如,在图中将 输入填充到,那么输出就增加为
notion image
如果添加行填充(大约一半在顶部,一半在底部)和列填充(左侧大约一半,右侧一半),则输出形状将为:
输出的高度和宽度将分别增加
 
在许多情况下,我们需要设置 ,使输入和输出具有相同的高度和宽度,这样可以在构建网络时更容易地预测每个图层的输出形状。
卷积神经网络中卷积核的高度和宽度通常为奇数。选择奇数的好处是,保持空间维度的同时,可以在顶部和底部填充相同数量的行,在左侧和右侧填充相同数量的列。此外,使用奇数的核大小和填充大小也提供了书写上的便利。对于任何二维张量X,当满足: 1. 卷积核的大小是奇数; 2. 所有边的填充行数和列数相同; 3. 输出与输入具有相同高度和宽度 ,则可以得出:输出Y[i, j]是通过以输入X[i, j]为中心,与卷积核进行互相关计算得到的。
 

步幅

在计算互相关时,卷积窗口从输入张量的左上角开始,向下、向右滑动。 在前面的例子中,我们默认每次滑动一个元素。 但是,有时候为了高效计算或是缩减采样次数,卷积窗口可以跳过中间位置,每次滑动多个元素。我们将每次滑动元素的数量称为步幅(stride)
                        垂直步幅为3,水平步幅为2
垂直步幅为3,水平步幅为2
可以看到,为了计算输出中第一列的第二个元素和第一行的第二个元素,卷积窗口分别向下滑动三行和向右滑动两列。但是,当卷积窗口继续向右滑动两列时,没有输出,因为输入元素无法填充窗口(除非我们添加另一列填充)
通常,当垂直步幅为、水平步幅为时,输出形状为:
如果设置了,则输出形状将简化为
更进一步,如果输入的高度和宽度可以被垂直和水平步幅整除,则输出形状将为
 
 
 
为了简洁起见,当输入高度和宽度两侧的填充数量分别为时,称之为填充。当 时,填充是。同理,当高度和宽度上的步幅分别为时,称之为步幅。当时的步幅为时,步幅为。默认情况下,填充为0,步幅为1。在实践中,很少使用不一致的步幅或填充,也就是说,通常有
 
  • PyTorch
  • 图像卷积多输入多输出
    目录