KeyError: tf.Tensor 'Placeholder_6:0' shape=<unknown> dtype=string

Posted

技术标签:

【中文标题】KeyError: tf.Tensor \'Placeholder_6:0\' shape=<unknown> dtype=string【英文标题】:KeyError: tf.Tensor 'Placeholder_6:0' shape=<unknown> dtype=stringKeyError: tf.Tensor 'Placeholder_6:0' shape=<unknown> dtype=string 【发布时间】:2019-06-15 15:52:46 【问题描述】:

你能解释一下下面的问题吗?这是我的 python 笔记本中的代码片段:

word2int = 
int2word = 

for i,word in enumerate(words):
    word2int[word] = i
    int2word[i] = word

def euclidean_dist(vec1, vec2):
    return np.sqrt(np.sum((vec1-vec2)**2))

def find_closest(word_index, vectors):
    min_dist = 10000 # to act like positive infinity
    min_index = -1
    query_vector = vectors[word_index]
    for index, vector in enumerate(vectors):
        if euclidean_dist(vector, query_vector) < min_dist and not np.array_equal(vector, query_vector):
            min_dist = euclidean_dist(vector, query_vector)
            min_index = index
    return min_index

Z = tf.placeholder(tf.string)
find_closest_word = int2word[find_closest(word2int[Z], vectors)]

# Create SignatureDef metadata for the model
classification_inputs = tf.saved_model.utils.build_tensor_info(Z)
classification_outputs_classes = tf.saved_model.utils.build_tensor_info(find_closest_word)

classification_signature = (
      tf.saved_model.signature_def_utils.build_signature_def(
          inputs=
              tf.saved_model.signature_constants.CLASSIFY_INPUTS:
                  classification_inputs
          ,
          outputs=
              tf.saved_model.signature_constants.CLASSIFY_OUTPUT_CLASSES:
                  classification_outputs_classes
          ,
          method_name=tf.saved_model.signature_constants.CLASSIFY_METHOD_NAME))

这是我运行上面的代码片段时的错误消息:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-65-016dad8c7403> in <module>()
     12     return min_index
     13 Z = tf.placeholder(tf.string)
---> 14 find_closest_word = int2word[find_closest(word2int[Z], vectors)]

KeyError: <tf.Tensor 'Placeholder_7:0' shape=<unknown> dtype=string>

更新问题:

如何将字符串张量Z 转换为python 字符串,以便在word2int 中用作索引?

【问题讨论】:

嗨,你找到解决这个问题的方法了吗?我有一个非常相似的问题,但我仍然找不到解决方法。 我有同样的问题,现在可用的答案并不是很有帮助。很高兴知道如何做到这一点。 【参考方案1】:

根据您的代码,我猜您认为 Z 是您作为输入传递给网络的单词。不是,因为您将其定义为Z = tf.placeholder(tf.string)。因此,Z 是一个 placeholder 对象,当您通过调用 run()tf.Session 实例中运行图形时,该对象将最终在您的 feed_dict 中填充一个字符串方法。

由于您的 word2int 字典只是一个字符串到索引的字典,因此当您尝试使用占位符作为键时,您会得到 KeyError

【讨论】:

感谢您的回答。我刚刚更新了我上面的问题以获取更多详细信息。是的。我希望Z 成为输入参数,int2word[find_closest(word2int[Z], vectors)] 成为输出参数。如何修复 word2int 接受Z 并修复 int2word 输出? 我想我上面的问题不是很清楚。再问一下:如何将字符串张量Z转换为python字符串,以便在word2int中用作索引?

以上是关于KeyError: tf.Tensor 'Placeholder_6:0' shape=<unknown> dtype=string的主要内容,如果未能解决你的问题,请参考以下文章

InvalidArgumentError: 预期 'tf.Tensor(False, shape=(), dtype=bool)' 为真

python str to tensorflow tf.string tensor

在 tf.data 中切片导致“在图形执行中不允许迭代 `tf.Tensor`”错误

tf.lookup 说白了就是tf 的字典

如何使用提供的需要 tf.Tensor 的 preprocess_input 函数预处理 tf.data.Dataset?

Tensorflow 类型错误:不允许使用 `tf.Tensor` 作为 Python `bool`。