首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >.contiguous().flatten()是否与PyTorch中的.view(-1)相同?

.contiguous().flatten()是否与PyTorch中的.view(-1)相同?
EN

Stack Overflow用户
提问于 2021-04-22 13:49:27
回答 2查看 829关注 0票数 2

这些完全一样吗?

代码语言:javascript
复制
myTensor.contiguous().flatten()
myTensor.view(-1)

他们会返回相同的自动梯度功能等吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-04-22 14:08:35

不,它们不完全一样。

  • myTensor.contiguous().flatten()

在这里,contiguous()要么返回存储在连续内存中的myTensor副本,要么返回myTensor本身(如果它已经是连续的)。然后,flatten()将张量重塑为一个一维。但是,返回的张量可能是与myTensor、视图或副本相同的对象,因此不能保证输出的连续性。

相关文档

还值得一提的是一些具有特殊行为的操作:

  • reshape()、reshape_as()和flatten()可以返回视图或新的张量,用户代码不应该依赖于它是否是视图。
  • 如果输入张量已经是连续的,contiguous()返回自己,否则它通过复制数据返回一个新的连续张量。
  • myTensor.view(-1)

在这里,view()返回一个与myTensor相同数据的张量,并且只有在myTensor已经是连续的情况下才能工作。结果可能不是毗连的取决于myTensor的形状。

票数 4
EN

Stack Overflow用户

发布于 2021-04-22 14:16:48

一些例子:

代码语言:javascript
复制
xxx = torch.tensor([[1], [2], [3]])
xxx = xxx.expand(3, 4)
print ( xxx )
print ( xxx.contiguous().flatten() )
print ( xxx.view(-1) )


tensor([[1, 1, 1, 1],
        [2, 2, 2, 2],
        [3, 3, 3, 3]])
tensor([1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3])
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-7-281fe94f55fb> in <module>
      3 print ( xxx )
      4 print ( xxx.contiguous().flatten() )
----> 5 print ( xxx.view(-1) )

RuntimeError: view size is not compatible with input tensor's size and stride (at least one dimension spans across two contiguous subspaces). Use .reshape(...) instead.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67214586

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档