调整PyTorch Tensor的大小

时间:2018-06-06 10:23:30

标签: python deep-learning pytorch tensor deprecation-warning

我目前正在使用tensor.resize()函数将张量大小调整为新形状t = t.resize(1, 2, 3)

这给了我一个弃用警告:

  

非现场调整大小已弃用

因此,我想切换到tensor.resize_()函数,这似乎是适当的就地替换。但是,这给我留下了

  

无法调整需要grad

的变量

错误。 我可以回到

from torch.autograd._functions import Resize
Resize.apply(t, (1, 2, 3))

是tensor.resize()的作用,以避免弃用警告。 这似乎不是一个合适的解决方案,而是对我来说是一个黑客攻击。 在这种情况下,如何正确使用tensor.resize_()

3 个答案:

答案 0 :(得分:2)

您可以选择使用tensor.reshapetorch.reshape,如下所示:

# a `Variable` tensor
In [15]: ten = torch.randn(6, requires_grad=True)

# this would throw RuntimeError error
In [16]: ten.resize_(2, 3)
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
<ipython-input-16-094491c46baa> in <module>()
----> 1 ten.resize_(2, 3)

RuntimeError: cannot resize variables that require grad
# RuntimeError can be resolved by using `tensor.reshape`
In [17]: ten.reshape(2, 3)
Out[17]: 
tensor([[-0.2185, -0.6335, -0.0041],
        [-1.0147, -1.6359,  0.6965]])

# yet another way of changing tensor shape
In [18]: torch.reshape(ten, (2, 3))
Out[18]: 
tensor([[-0.2185, -0.6335, -0.0041],
        [-1.0147, -1.6359,  0.6965]])

答案 1 :(得分:0)

如果您不想更改其数据,只需使用t = t.contiguous().view(1, 2, 3)即可。

如果不是这种情况,就地resize_操作将打破t的渐变计算图。 如果它对您不重要,请使用t = t.data.resize_(1,2,3)

答案 2 :(得分:0)

请您可以尝试以下操作:

import torch
x = torch.tensor([[1, 2], [3, 4], [5, 6]])
print(":::",x.resize_(2, 2))
print("::::",x.resize_(3, 3))