pytorch初学者:tensor.new方法

abc*_*ire 11 pytorch

大家,我有一个小问题。

tensor.new(..)Pytorch 中该方法的目的是什么,我在文档中没有找到任何内容。看起来它创建了一个新的Tensor(顾名思义),但是为什么我们不只是使用torch.Tensor构造函数,而不是使用这种需要现有张量的新方法。

先感谢您。

Was*_*mad 13

正如tensor.new()的文档所述:

构造与自身张量相同数据类型的张量。

另请注意:

对于CUDA张量,此方法将在与此张量相同的设备上创建张量。


dev*_*rfu 9

在较新版本的 PyTorch 中,似乎有许多不同的new_*方法旨在取代这种“遗留”new方法。

因此,如果您有一些张量,t = torch.randn((3, 4))那么您可以使用以下方法之一构造一个具有相同类型和设备的新张量,具体取决于您的目标:

t = torch.randn((3, 4))
a = t.new_tensor([1, 2, 3])  # same type, device, new data
b = t.new_empty((3, 4))      # same type, device, non-initialized
c = t.new_zeros((2, 3))      # same type, device, filled with zeros
... 
Run Code Online (Sandbox Code Playgroud)
for x in (t, a, b, c):
    print(x.type(), x.device, x.size())
# torch.FloatTensor cpu torch.Size([3, 4])
# torch.FloatTensor cpu torch.Size([3])
# torch.FloatTensor cpu torch.Size([3, 4])
# torch.FloatTensor cpu torch.Size([2, 3])
Run Code Online (Sandbox Code Playgroud)


Aru*_*iRC 6

这是一个简单的用例和示例 using new(),因为没有这个,这个函数的效用不是很清楚。

假设您想在不知道先验数据类型的情况下将高斯噪声添加到张量(或变量)中。

这将创建一个高斯噪声张量,与 Variable 具有相同的形状和数据类型X

 noise_like_grad = X.data.new(X.size()).normal_(0,0.01)
Run Code Online (Sandbox Code Playgroud)

这个例子也说明了 的用法new(size),所以我们得到一个与 相同类型和相同大小的张量X