Pytorch 0.4.0:在CUDA设备上有三种方法可以创建张量.它们之间有什么区别吗?

lar*_*ang 8 pytorch tensor

我以第三种方式失败了.t3还在CPU上.不知道为什么.

a = np.random.randn(1, 1, 2, 3)

t1 = torch.tensor(a)
t1 = t3.to(torch.device('cuda'))

t2 = torch.tensor(a)
t2 = t2.cuda() 

t3 = torch.tensor(a, device=torch.device('cuda'))
Run Code Online (Sandbox Code Playgroud)

Uma*_*pta 11

这三种方法都适合我.

在1和2中,您在CPU上创建张量,然后在使用.to(device)或时将其移动到GPU .cuda().它们在这里是一样的.

但是,当您使用.to(device)方法时,您可以通过设置明确告诉手电筒移动到特定的GPU device=torch.device("cuda:<id>").与.cuda()你必须做到.cuda(<id>)移动到某个特定的GPU.


为什么这两种方法存在呢?

.to(device)在0.4中引入,因为device在代码顶部声明变量更容易

device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")

.to(device)到处使用.这使得从CPU切换到GPU非常容易,反之亦然

在此之前,我们必须使用,.cuda()并且您的代码将if检查cuda.is_available()所有在GPU/CPU之间切换的麻烦.


第三种方法不会在CPU上创建张量并直接将数据复制到GPU,这样效率更高.