为什么在pytorch中使用to()方法?

时间:2019-06-23 08:18:21

标签: pytorch

我已经多次看到这种方法。这样做的目的和优势是什么?非常感谢!

2 个答案:

答案 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")被称为张量的原因。

通常,当您加载训练数据集(图像)时:

  • 您从URL(如MNIST http://deeplearning.net/data/mnist/mnist.pkl.gz)中下载它们
  • 打开它们的包装
  • 将它们转换为numpy数组
  • 将numpy数组转换为张量(因为这很快)
  • 将其移动到GPU进行培训。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()