我发现了关于这个的讨论,其中代码
if std.is_cuda:
eps = torch.FloatTensor(std.size()).cuda().normal_()
else:
eps = torch.FloatTensor(std.size()).normal_()
变成了好的
eps = std.new().normal_()
但是这里说
new()方法已弃用。
- 如何在特定设备上直接创建一个新的张量?
- 如何在相同的设备上创建一个新的张量,就像另一个张量一样,没有丑陋的
if
?
我认为文档现在已经很清楚了。这里描述了创建新张量的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'))
这个链接增加了关于torch.tensor()
构造器的更多信息。同样,设备是一个要指定的参数。
如果你想使用另一个张量的设备,你可以使用tensor.device
:
t4 = torch.empty((2,2), device=t3.device)
torch.ones_like(std).normal_()
ones_like
的参数之一是device
,(来自文档)说:
device (torch.device,可选)-返回张量的期望设备。默认值:如果为None,则默认为输入
的设备
也可以使用torch.zeros_like