在他们的 API v4 中,torch 引入了reshape()
,更加符合 numpy 的风格。以前,改变火炬张量的形状是通过view()
.
我想知道是否view()
现在将被弃用并查看docs https://pytorch.org/docs/stable/tensors.html#torch.Tensor.view。事实证明reshape()
不仅仅是 numpy 友好的别名view()
,实际上,它有不同的语义。 Torch 尝试尽可能为您提供连续的内存。如果新的视图尺寸违反了连续性约束,则必须显式调用contiguous()
before view()
. Reshape
即使违反此约束也会起作用,但会默默地复制数据。
这与 numpy 中的行为相同,其中reshape
也可以制作副本 https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.reshape.html#numpy-reshape.
一个问题view()
vs reshape()
火炬在这里:pytorch 中的 reshape 和 view 有什么区别? https://stackoverflow.com/questions/49643225/whats-the-difference-between-reshape-and-view-in-pytorch
如果您需要副本,请使用clone() 如果您需要相同的存储使用
看法()。 reshape() 的语义是它可以共享也可以不共享
存储并且您事先不知道。
到目前为止,仅提供火炬view()
。也许是故意迫使他们的开发人员关心内存布局。这让我想知道如何reshape() https://www.tensorflow.org/api_docs/python/tf/reshape在张量流中工作。
在 torch 中,视图和副本之间的区别可能会产生复杂的错误。您假设张量共享数据,但事实并非如此。
在张量流中这个问题不应该存在。张量流张量是符号性的,不保存值。重塑只是张量流图中的一个操作。在评估图表时,占位符和变量中的数据不会改变,因此您正在处理的数据很清楚。
但我不知道这是否会损害性能。复制一个巨大的张量可能非常昂贵。使用时需要小心吗reshape()
,不重复内存?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)