PyTorch 实现多头注意力时为什么要 transpose 再 contiguous()?view 和 reshape 有什么区别?

一句话速记:MHA 需将张量重排为 [B, num_heads, S, D] 以便利用批处理矩阵乘并行计算注意力;输出还原时,transpose(1, 2) 仅改变 stride 导致内存非连续,而 view 要求底层内存连续,因此需先调用 contiguous() 重新分配连续内存;reshape 则是对 view 的安全封装,在内存连续时返回视图,非连续时自动触发数据复制。

PyTorch

同章节的其他八股