我正在研究一个注意力模型,在运行最终模型之前,我正在研究流经代码的张量形状。我有一个需要重塑张量的操作。张量的形状torch.Size([[30, 8, 9, 64]])
是30
,是注意力头batch_size
的8
数量(这与我的问题无关)9
是句子中的单词数,并且64
是单词的一些中间嵌入表示。torch.size([30, 9, 512])
在进一步处理之前,我必须将张量重塑为 的大小。所以我在网上寻找一些参考资料,他们做了以下事情,x.transpose(1, 2).contiguous().view(30, -1, 512)
而我认为这应该可行x.transpose(1, 2).reshape(30, -1, 512)
。
在第一种情况下grad_fn
是<ViewBackward>
,而在我的情况下是<UnsafeViewBackward>
。这两个不是同一个操作吗?这会导致训练错误吗?