Pytorch:如何在python字典中通过张量(键)访问张量(值)
我有一本有张量键和张量值的字典。我想通过键访问这些值Pytorch:如何在python字典中通过张量(键)访问张量(值),python,python-3.x,pytorch,Python,Python 3.x,Pytorch,我有一本有张量键和张量值的字典。我想通过键访问这些值 from torch import tensor x = {tensor(0): [tensor(1)], tensor(1): [tensor(0)]} for i in x.keys(): print(i, x[i]) 返回: tensor(0) [tensor(1)] tensor(1) [tensor(0)] 但是当我尝试访问值而不循环键时 try: print(x[tensor(0)]) except:
from torch import tensor
x = {tensor(0): [tensor(1)], tensor(1): [tensor(0)]}
for i in x.keys():
print(i, x[i])
返回:
tensor(0) [tensor(1)]
tensor(1) [tensor(0)]
但是当我尝试访问值而不循环键时
try:
print(x[tensor(0)])
except:
print(Exception)
print(x[0])
引发异常:
KeyError Traceback (most recent call last)
<ipython-input-34-746d28dcd450> in <module>()
6 try:
----> 7 print(x[tensor(0)])
8
KeyError: tensor(0)
During handling of the above exception, another exception occurred:
KeyError Traceback (most recent call last)
<ipython-input-34-746d28dcd450> in <module>()
9 except:
10 print(Exception)
---> 11 print(x[0])
12 continue
KeyError: 0
这里至少有三个问题 如果x是张量键的字典,那么x[0]当然不起作用。0不是它的键。因此,在另一个异常期间发生了内部密钥错误。 实际上与您的错误无关,但printException几乎肯定不是您想要的。如果类对象是类异常的正确术语,它将打印该类对象。你可能是故意的
except Exception as e:
print(e)
或者更具体地说,除了KeyError,否则它只会捕获每一种异常。
真正的问题是:首先你不想使用张量作为键。它是一种可变类型,通过引用而不是通过值进行比较。每个tensorsomething调用都将创建一个新对象,散列到与指定为key的tensorsomething不同的值
使用实际整数代替
这里至少有三个问题 如果x是张量键的字典,那么x[0]当然不起作用。0不是它的键。因此,在另一个异常期间发生了内部密钥错误。 实际上与您的错误无关,但printException几乎肯定不是您想要的。如果类对象是类异常的正确术语,它将打印该类对象。你可能是故意的
except Exception as e:
print(e)
或者更具体地说,除了KeyError,否则它只会捕获每一种异常。
真正的问题是:首先你不想使用张量作为键。它是一种可变类型,通过引用而不是通过值进行比较。每个tensorsomething调用都将创建一个新对象,散列到与指定为key的tensorsomething不同的值
使用实际整数代替
在PyTorch中,张量的散列是其id的函数,而不是实际值。因为Python字典使用哈希进行查找,所以查找失败。看
为了实现您想要的,您可以使用普通Python整数作为键,或者使用嵌入对象作为x。在PyTorch中,张量的散列是其id的函数,而不是实际值。因为Python字典使用哈希进行查找,所以查找失败。看
为了实现您想要的,您可以使用普通Python整数作为键,或者使用嵌入对象作为x。为什么要使用它,而不是torch.nn.Embedding?它提供整数查找,就像您的示例一样。无论如何,问题来自hashtensor0!=hashtensor0,所以查找失败。我正在使用pytorch中的字典进行简单的数学运算。我不是在研究神经网络。但是错误似乎很奇怪。嵌入只是一个查找表。没什么,没什么特别的。你为什么要这个,而不是火炬?它提供整数查找,就像您的示例一样。无论如何,问题来自hashtensor0!=hashtensor0,所以查找失败。我正在使用pytorch中的字典进行简单的数学运算。我不是在研究神经网络。但是错误似乎很奇怪。嵌入只是一个查找表。除此之外,没什么特别的。@arya mccarthy所以,从你的两个答案来看,好的解决方法是避免使用张量键,而使用实际整数作为键。感谢一票赞成,一票接受。是的,我不太清楚PyTorch的具体情况,但如果你真的使用嵌入,那么嵌入Arya也听起来是个更好的主意。@Arya mccarthy所以,从你的两个答案来看,好的解决方法是避免使用张量键,而使用实际整数作为键。感谢一票赞成,一票接受。是的,我不太清楚PyTorch的具体情况,但是如果你真的使用嵌入,那么嵌入Arya听起来也是一个更好的主意。我不知道nn.Embedding用例。我一定会试试。我不知道nn.Embedded用例。我一定会试试的。