昨天我碰到了this question,并且第一次注意到线性层nn.Linear
的权重需要在应用matmul
之前进行调换。
Code来应用权重:
output = input.matmul(weight.t())
这是什么原因?
为什么权重从一开始就不处于移置形状,因此在应用图层之前不必每次都进行移置?
答案 0 :(得分:3)
我在这里找到了答案: Efficient forward pass in nn.Linear #2159
似乎这背后没有真正的理由。但是,转置操作似乎并不会减慢计算速度。
根据上述问题,在前进过程中,转置操作在计算方面几乎(免费)。在向后传递期间,省去转置操作实际上会使当前实现的计算效率降低。
该期的最后一篇文章很好地总结了这一点:
它是历史重量布局,更改后向不兼容。 除非在速度或便利性方面有很大的好处,否则我们 不会破坏用户空间。
https://github.com/pytorch/pytorch/issues/2159#issuecomment-390068272