【发布时间】:2021-07-21 04:24:15
【问题描述】:
我正在通过博客(用我的母语 - 越南语)学习张量存储,在尝试了这些示例之后,我发现了一些难以理解的东西。给定 3 个张量 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()
当我将每个张量的存储设置为对应的变量时,它们的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
但是当我在同一个 print 语句中对每个原始张量调用 storage() 方法时,无论我尝试了多少次,所有张量都观察到相同的输出:
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? (那个 id 是从哪里来的?)。第三种情况是怎么回事?
另外,我想询问data_ptr() 的方法,因为在我在Pytorch discuss 上看到的一个问题中建议使用它而不是id,但是Pytorch 中的文档只显示没有更多细节。如果有人能给我任何/所有问题的详细答案,我会很高兴。
【问题讨论】:
标签: python memory pytorch tensor