我正在阅读Residual learning,我有一个问题。 什么是3.2中提到的“线性投影”?一旦得到这个看起来很简单,但无法理解......
我基本上不是计算机科学的人,所以如果有人给我一个简单的例子,我将非常感激。
感谢您的帮助
答案 0 :(得分:4)
首先,了解x
,y
和F
是什么以及他们为什么需要任何投影,这一点非常重要。我会尝试用简单的术语解释,但需要对ConvNets有基本的了解。
x
是图层的输入数据(称为 tensor ),如果ConvNets的排名为4.您可以将其视为{{3 }}。 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)
到(64, 32, 32, 16)
。
我想在此强调"重塑"这不是numpy.reshape
所做的。
相反,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]
如果你考虑一下,这是一个三维向量投影到16维。换句话说,我们开始认为我们的向量是相同的,但是还有13个维度。其他x
维度均未更改。
此处为{Tensorflow中的代码4-dimensional array执行此操作。
答案 1 :(得分:1)
线性投影是指每个新要素都是原始要素的加权和的简单投影。如本文所述,这可以用矩阵乘法表示。如果x
是N
输入要素的向量而W
是M
- N
矩阵,那么矩阵乘积Wx
会产生{ {1}}新功能,其中每个功能都是M
的线性投影。 x
的每一行都是一组权重,用于定义W
个线性投影之一(即M
的每一行包含{{1}的加权和之一的系数})。
答案 2 :(得分:0)
在Pytorch(尤其是torchvision \ models \ resnet.py)中,在瓶颈末尾,您将有两种情况
输入向量x的通道,例如x_c(不是空间分辨率,而是通道),小于瓶颈的conv3层之后的输出,例如d维。然后可以通过步长为1的in平面= x_c和out_planes = d的1比1卷积来缓解,然后进行批量归一化,然后假设x和F(x)具有相同的空间分辨率。
x的空间分辨率及其通道数均与BottleNeck层的输出不匹配,在这种情况下,上述1乘1的卷积需要跨度为2才能获得空间分辨率以及与元素逐个添加相匹配的通道数(同样在添加之前对x进行批量归一化)。