首先,重要的是要了解什么x
, y
and F
以及为什么他们需要任何投影。我将尝试用简单的术语解释,但基本理解ConvNets是必须的。
x
是一个输入数据(称为tensor) 的层,对于 ConvNets,它的等级是 4。你可以将其视为4维数组. F
通常是一个转换层(conv+relu+batchnorm
在本文中),以及y
将两者结合在一起(形成输出通道)。的结果F
也是等级 4,并且大部分维度将与x
,除了一个。这正是转型应该修补的内容。
例如,x
形状可能是(64, 32, 32, 3)
,其中 64 是批量大小,32x32 是图像大小,3 代表(R、G、B)颜色通道。F(x)
可能(64, 32, 32, 16)
:批量大小永远不会改变,为了简单起见,ResNet 卷积层也不会改变图像大小,但可能会使用不同数量的滤波器 - 16。
所以,为了y=F(x)+x
是一个有效的操作,x
必须“重塑”自(64, 32, 32, 3)
to (64, 32, 32, 16)
.
这里我想强调的是,这里的“重塑”并不是什么numpy.reshape
does.
反而,x[3]
用 13 个零填充,如下所示:
pad(x=[1, 2, 3],padding=[7, 6]) = [0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 0, 0, 0, 0, 0, 0]
如果您仔细想想,这是 3 维向量到 16 维的投影。换句话说,我们开始认为我们的向量是相同的,但还有 13 个维度。其他都没有x
尺寸发生变化。
Here's the link到 Tensorflow 中执行此操作的代码。