为什么我在 forward 函数中定义的张量不能自动转换为 cuda 变量?
Why my tensor defined in forward function can not be transformed in to cuda variable autonomously?
在 PyTorch 中,在模型的 forward
函数中
class my_model(torch.nn.module):
......
def forward():
self.a=torch.zeros(1)
#blabla
model.cuda()
之后,为什么self.a
还是一个cpu
变量?
这是设计使然。
只有作为模型一部分的张量会随 model.cuda()
或 model.to("cuda")
移动。
这些张量已注册到 register_parameter
或 register_buffer
。这还包括使用上述函数注册的子模块、参数和缓冲区。
即使 self.a=torch.zeros(1)
实际上是 class 本身的一部分,按照设计它不会被移动到 CUDA,相反你需要做 a.to("cuda")
,如果你没有没有使用 register*
方法。
一个解决方案:
device=whatever_parameter_in_your_forward_function_args.device
self.a=torch.zeros(1).to(device)
在 PyTorch 中,在模型的 forward
函数中
class my_model(torch.nn.module):
......
def forward():
self.a=torch.zeros(1)
#blabla
model.cuda()
之后,为什么self.a
还是一个cpu
变量?
这是设计使然。
只有作为模型一部分的张量会随 model.cuda()
或 model.to("cuda")
移动。
这些张量已注册到 register_parameter
或 register_buffer
。这还包括使用上述函数注册的子模块、参数和缓冲区。
即使 self.a=torch.zeros(1)
实际上是 class 本身的一部分,按照设计它不会被移动到 CUDA,相反你需要做 a.to("cuda")
,如果你没有没有使用 register*
方法。
一个解决方案:
device=whatever_parameter_in_your_forward_function_args.device
self.a=torch.zeros(1).to(device)