我正在通过一个博客(用我的母语越南语)学习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中的文档没有显示更多的细节。如果有人能详细回答我的任何/所有问题,我会很高兴的。
暂无答案!
目前还没有任何答案,快来回答吧!