程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Pytorch Tensor 存储在调用 storage() 方法时具有相同的 id大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Pytorch Tensor 存储在调用 storage() 方法时具有相同的 id?

开发过程中遇到Pytorch Tensor 存储在调用 storage() 方法时具有相同的 id的问题如何解决?下面主要结合日常开发的经验,给出你关于Pytorch Tensor 存储在调用 storage() 方法时具有相同的 id的解决方法建议,希望对你解决Pytorch Tensor 存储在调用 storage() 方法时具有相同的 id有所启发或帮助;

我正在通过博客(以我的母语 - 越南语)学习张量存储,在对示例进行试验后,我发现了一些难以理解的内容。给定 3 个张量 xzzzx_t,如下所示:

import torch

x = torch.tensor([[3,1,2],[4,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

但是当我在同一个 storage() 语句中对每个原始张量调用 print 方法时,无论我尝试了多少次,都会从所有张量中观察到相同的输出:

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 中的文档只是不再显示更多细节。如果有人能给我任何/所有问题的详细答案,我会很高兴

解决方法

在Pytorch 讨论区和Stack Overflow 上搜索后,我看到应该使用data_ptr() 方法来比较张量的位置(根据Python discuss in the question 和this link) (然不完全正确,请查看第一个 Python 讨论以获得更好的比较方法)

关于 id 部分,Stack Overflow 上有很多关于这个主题的问题。我在这里看到了一个 question,其中有很多答案可以解决上述问题的大部分内容。我对id和对象的内存分配也有一些误解,在my recent question

的评论区也有解答

大佬总结

以上是大佬教程为你收集整理的Pytorch Tensor 存储在调用 storage() 方法时具有相同的 id全部内容,希望文章能够帮你解决Pytorch Tensor 存储在调用 storage() 方法时具有相同的 id所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。