PyTorch - nn.Linear 权重的形状

blu*_*nox 5 matrix matrix-multiplication neural-network deep-learning pytorch

昨天我遇到了这个问题,第一次注意到线性层的权重nn.Linear需要在应用之前进行转置matmul

应用权重的代码:

output = input.matmul(weight.t())
Run Code Online (Sandbox Code Playgroud)


这是什么原因呢?

为什么权重不是从一开始就处于转置形状,因此不需要每次在应用图层之前都进行转置?

blu*_*nox 4

我在这里找到了答案: Efficient Forward Pass in nn.Linear #2159

这背后似乎没有真正的理由。然而,转置操作似乎并没有减慢计算速度。

根据上述问题,在前传递期间,转置操作在计算方面(几乎)是免费的。而在向后传递过程中,省略转置操作实际上会使当前实现的计算效率降低。

该期的最后一篇文章总结得很好:

它是历史权重布局,更改它是向后不兼容的。除非在速度或便利性方面有一些巨大的好处,否则我们不会破坏用户空间。

https://github.com/pytorch/pytorch/issues/2159#issuecomment-390068272