在 numpy 中,我们ndarray.reshape()用于重塑数组。
ndarray.reshape()
我注意到在 pytorch 中,人们torch.view(...)出于相同的目的使用,但同时,也有一个torch.reshape(...)存在的。
torch.view(...)
torch.reshape(...)
所以我想知道它们之间有什么区别以及何时应该使用它们中的任何一个?
torch.view已经存在了很长时间。它将返回一个具有新形状的张量。返回的张量将与原始张量共享基础数据。请参阅此处的文档。
torch.view
另一方面,似乎torch.reshape 最近在 0.4 版本中引入了。根据文件,这种方法将
torch.reshape
返回具有与输入相同的数据和元素数量的张量,但具有指定的形状。如果可能,返回的张量将是输入的视图。否则,它将是副本。可以在不复制的情况下重新调整连续输入和具有兼容步幅的输入,但您不应依赖于复制与查看行为。
这意味着torch.reshape可能会返回原始张量的副本或视图。您不能指望返回视图或副本。据开发商介绍:
如果您需要副本,请使用 clone();如果您需要相同的存储,请使用 view()。reshape() 的语义是它可能共享也可能不共享存储,并且您事先不知道。
另一个区别是reshape()可以对连续张量和非连续张量进行view()操作,而只能对连续张量进行操作。
reshape()
view()