如何直接在 GPU 上或在另一个张量的设备上创建张量?

Gul*_*zar 5 python gpu pytorch

我发现了关于的讨论,其中代码

if std.is_cuda:
    eps = torch.FloatTensor(std.size()).cuda().normal_()
else:
    eps = torch.FloatTensor(std.size()).normal_()
Run Code Online (Sandbox Code Playgroud)

变得美好

eps = std.new().normal_()
Run Code Online (Sandbox Code Playgroud)

但据说那里

new() 方法已被弃用。


  1. 如何直接在特定设备上创建新的张量?
  2. 如何在同一设备上像另一个张量一样创建一个新的张量而不丑陋if

tri*_*ror 7

我认为文档现在对此已经非常清楚了。这里描述了创建新张量的 4 种主要方法,您只需指定设备即可在 GPU 上创建它:

t1 = torch.zeros((3,3), device=torch.device('cuda'))
t2 = torch.ones_like(t1, device=torch.device('cuda'))
t3 = torch.randn((3,5), device=torch.device('cuda'))
Run Code Online (Sandbox Code Playgroud)

链接添加了有关构造函数的更多信息torch.tensor()。同样,设备是一个需要指定的参数。

如果你想使用另一个张量的设备,你可以通过以下方式访问它tensor.device

t4 = torch.empty((2,2), device=t3.device)
Run Code Online (Sandbox Code Playgroud)