在PyTorch中,.flatten()
和.view(-1)
都可以用来将张量扁平化。它们的区别是什么呢?
.flatten()
是否会复制张量的数据?.view(-1)
是否更快?- 是否存在
.flatten()
无法工作的情况?
回答:
除了@***的评论外,还有一个区别:torch.flatten()
的结果是.reshape()
,而.reshape()
和.view()
之间的区别包括:
[…]
torch.reshape
可能会返回原始张量的拷贝或视图。你不能指望它返回视图或拷贝。另一个区别是
reshape()
可以对连续和非连续张量操作,而view()
只能对连续张量操作。关于连续性的含义,请参见这里。
背景信息:
-
社区对
flatten
功能的需求已经有一段时间了,经过Issue #7743的讨论后,该功能在PR #8578中得以实现。 -
你可以在这里查看
flatten
的实现这里,其中.reshape()
的调用可以在return
行中看到。