调整 PyTorch 张量的大小
Resize PyTorch Tensor
我目前正在使用 tensor.resize() 函数将张量调整为新形状 t = t.resize(1, 2, 3)
。
这给了我一个弃用警告:
non-inplace resize is deprecated
因此,我想切换到 tensor.resize_()
函数,这似乎是合适的就地替换。然而,这给我留下了
cannot resize variables that require grad
错误。
我可以回到
from torch.autograd._functions import Resize
Resize.apply(t, (1, 2, 3))
这是 tensor.resize() 为避免弃用警告所做的。
这似乎不是一个合适的解决方案,而是对我的黑客攻击。
在这种情况下如何正确使用 tensor.resize_()
?
您可以改为选择 tensor.reshape(new_shape)
or torch.reshape(tensor, new_shape)
,如:
# 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
可以通过tensor.reshape(new_shape)
解决或避免
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]])
如果您真的不想更改其数据,只需使用 t = t.contiguous().view(1, 2, 3)
。
如果不是这样,就地resize_
操作将破坏t
的grad计算图。
如果你不介意,就用t = t.data.resize_(1,2,3)
.
请你试试这样的东西:
import torch
x = torch.tensor([[1, 2], [3, 4], [5, 6]])
print(":::",x.resize_(2, 2))
print("::::",x.resize_(3, 3))
我目前正在使用 tensor.resize() 函数将张量调整为新形状 t = t.resize(1, 2, 3)
。
这给了我一个弃用警告:
non-inplace resize is deprecated
因此,我想切换到 tensor.resize_()
函数,这似乎是合适的就地替换。然而,这给我留下了
cannot resize variables that require grad
错误。 我可以回到
from torch.autograd._functions import Resize
Resize.apply(t, (1, 2, 3))
这是 tensor.resize() 为避免弃用警告所做的。
这似乎不是一个合适的解决方案,而是对我的黑客攻击。
在这种情况下如何正确使用 tensor.resize_()
?
您可以改为选择 tensor.reshape(new_shape)
or torch.reshape(tensor, new_shape)
,如:
# 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
可以通过tensor.reshape(new_shape)
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]])
如果您真的不想更改其数据,只需使用 t = t.contiguous().view(1, 2, 3)
。
如果不是这样,就地resize_
操作将破坏t
的grad计算图。
如果你不介意,就用t = t.data.resize_(1,2,3)
.
请你试试这样的东西:
import torch
x = torch.tensor([[1, 2], [3, 4], [5, 6]])
print(":::",x.resize_(2, 2))
print("::::",x.resize_(3, 3))