最近在使用Pytorch
时遇到一个问题,当我将一个tensor
通过to(device)
的方式放到GPU上时,tensor
从一个叶子节点变为了非叶子节点,经过实验发现和原tensor
中requires_grad
的值相关。
例一:
import torch
x = torch.randn(size=(4, 3), requires_grad=False)
print(x.is_leaf) # Output: True cpu
x = x.to('cuda')
print(x.is_leaf, x.device) # Output: True cuda:0
例二:
import torch
x = torch.randn(size=(4, 3), requires_grad=False)
print(x.is_leaf) # Output: True cpu
x = x.to('cuda')
print(x.is_leaf, x.device) # Output: False cuda:0
具体原因未查明,希望有大佬解答。想要将tensor
转移到GPU中,且仍为叶子节点,可以使用下述代码,或者用detach()
。
import torch
x = torch.randn(size=(4, 3))
print(x.is_leaf, x.device) # Output: True cpu
x = x.to('cuda')
x.requires_grad_(True)
print(x.is_leaf, x.device) # Output: True cuda:0