我已经多次看到这种方法。这样做的目的和优势是什么?非常感谢!
答案 0 :(得分:1)
我们为什么要在pytorch中使用to(device)方法?
torch.Tensor.to
是多用途方法。
您不仅可以进行类型转换,还可以执行CPU到GPU张量的移动以及GPU到CPU张量的移动:
tensor = torch.randn(2, 2)
print(tensor)
tensor = tensor.to(torch.float64)
print(tensor) #dtype=torch.float64
tensor = tensor.to("cuda")
print(tensor) #device='cuda:0', dtype=torch.float64)
tensor = tensor.to("cpu")
print(tensor) #dtype=torch.float64
tensor = tensor.to(torch.float32)
print(tensor) # won't print dtype=torch.float32 since it is by default
由于CPU和GPU是不同种类的内存,因此必须有一种通信方式。
这就是为什么我们有to("cuda")
和to("cpu")
被称为张量的原因。
通常,当您加载训练数据集(图像)时:
to("cuda")
您可以像这样创建张量并将它们移动到GPU。
torch.zeros(1000).to("cuda")
但是有一个窍门,有时您甚至可以将它们直接加载到GPU,而不会弄乱CPU。
torch.zeros(1000, device="gpu")
答案 1 :(得分:0)
.to(device)
.to()
可用于将张量复制到任何可用设备(CPU、GPU):
x = torch.randn(3)
x_g0 = x.to('cuda:0')
x_c = x.to('cpu')
它有别名 .cuda()
和 .cpu()
。
.to(dtype)
当给定 dtype 作为参数时,.to()
充当铸造方法:
x_d = x.to(torch.double)
它有 dtype 命名的别名 .double()
、.float()
、.int()
等