使用张量是tensorflow中的字典键

使用张量是tensorflow中的字典键,tensorflow,tensorflow2.0,Tensorflow,Tensorflow2.0,我已经看到了答案。这不是我要找的 我在tensorflow2.0上运行这个 我阅读了TensorFlow文档中的以下句子: 除了tf.Variable,张量的值是不可变的, 这意味着,在单个执行的上下文中,仅使用张量 只有一个值。然而,计算同一张量两次可以 返回不同的值;例如,张量可以是 从磁盘读取数据,或生成随机数 我尝试使用张量作为字典键,但出现以下错误: Tensor is unhashable if Tensor equality is enabled. Instead, use ten

我已经看到了答案。这不是我要找的

我在tensorflow2.0上运行这个

我阅读了TensorFlow文档中的以下句子:

除了tf.Variable,张量的值是不可变的, 这意味着,在单个执行的上下文中,仅使用张量 只有一个值。然而,计算同一张量两次可以 返回不同的值;例如,张量可以是 从磁盘读取数据,或生成随机数

我尝试使用张量作为字典键,但出现以下错误:

Tensor is unhashable if Tensor equality is enabled. Instead, use tensor.experimental_ref() as the key
  • 这个错误意味着什么
  • 变量也是可散列的吗?他们也定义了一个计算,而不是一个计算,那么为什么会有“除了tf.Variable,张量的值是不可变的”的区别呢
  • 这个错误意味着什么

    我想你可以在源代码中找到第一个问题的答案

    查看上面的注释,您必须显式地为张量启用哈希,如下所示

    tf.compat.v1.disable_tensor_equality()
    
    x = tf.ones(shape=[10,2], dtype=np.float32)
    dct = {x: 1} # Works fine
    
    发生的情况是,现在返回一个正确的ID,而不是引发错误。这允许您将其用作字典中的键

    禁用此功能的缺点是,您无法再使用张量执行元素级比较。比如说,

    x = tf.ones(shape=[10,2], dtype=np.float32)
    print((x==1.0))
    
    在平等回报的情况下, 在平等的情况下, 变量也是可散列的吗?他们也定义了一个计算,而不是一个计算,那么为什么会有“除了tf.Variable,张量的值是不可变的”的区别呢

    是的。如果查看
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    函数,它。我不太了解如何使用
    id
    生成散列id。但只要它是独一无二的,就不成问题。事实上,当变量值成为字典中的键后,您也可以更改它

    >>> tf.Tensor(
    [[ True  True]
     [ True  True]
     ...
     [ True  True]
     [ True  True]], shape=(10, 2), dtype=bool)
    
    >>> False