pytorchTensor存储在调用storage()方法时具有相同的id

7rfyedvj  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(206)

我正在通过一个博客(用我的母语越南语)学习Tensor存储,在尝试了这些例子之后,我发现了一些难以理解的东西。给定3个Tensor x , zzz ,和 x_t 具体如下:

import torch

x = torch.tensor([[3, 1, 2],
                  [4, 1, 7]])
zzz = torch.tensor([1,2,3])

# Transpose of the tensor x

x_t = x.t()

当我将每个Tensor的存储设置为相应的变量时,它们的ID就不同了:

x_storage = x.storage()
x_t_storage = x_t.storage()
zzz_storage = zzz.storage()
print(id(x_storage), id(x_t_storage), id(zzz_storage)) 
print(x_storage.data_ptr())   
print(x_t_storage.data_ptr())

输出:

140372837772176 140372837682304 140372837768560
94914110126336
94914110126336

但是当我打电话给 storage() 方法对每个原始Tensor在同一个 print 语句中,无论我尝试了多少次,从所有Tensor中观察到的输出都是相同的:

print(id(x.storage()), id(x_t.storage()), id(zzz.storage()))

# 140372837967904 140372837967904 140372837967904

当我把它们分别打印在不同的行上时,情况变得更奇怪了;有时结果不同,有时结果相同:

print(id(x.storage()))
print(id(x_t.storage()))

# Output:

# 140372837771776

# 140372837709856

所以我的问题是,为什么在第一种情况下存储的id与在第二种情况下观察到的相同id之间存在差异(那个身份证是从哪里来的?)。第三个案子发生了什么?
另外,我想问一下方法 data_ptr() ,因为它被建议用来代替 id 我在pytorch上看到的一个问题是讨论的,但是pytorch中的文档没有显示更多的细节。如果有人能详细回答我的任何/所有问题,我会很高兴的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题