PyTorch 中的 .flatten() 和 .view(-1) 有什么区别?

ipi*_*pid 19 python pytorch

双方.flatten().view(-1)压平PyTorch张量。有什么不同?

  1. 是否.flatten()复制张量的数据?
  2. .view(-1)更快吗?
  3. .flatten()没有不工作的情况?

Ber*_*iel 15

除了@ adeelh的评论,还有另外一个区别:torch.flatten()在结果.reshape(),以及之间的差异.reshape(),并.view()有:

  • [...]torch.reshape可能会返回原始张量的副本或视图。您不能指望它返回视图或副本。

  • 另一个区别是 reshape() 可以对连续和非连续张量进行操作,而 view() 只能对连续张量进行操作。另请参阅此处有关连续的含义

对于上下文:


uke*_*emi 14

flatten只是 的常见用例的方便别名view1

还有其他几个:

功能 等价view逻辑
flatten() view(-1)
flatten(start, end) view(*t.shape[:start], -1, *t.shape[end+1:])
squeeze() view(*[s for s in t.shape if s != 1])
unsqueeze(i) view(*t.shape[:i-1], 1, *t.shape[i:])

请注意,这flatten允许您使用start_dimend_dim参数展平维度的特定连续子集。


  1. 实际上表面reshape上在幕后是等价的。