KeyError: tf.Tensor 'Placeholder_6: 0' shape = <unknown>dtype = string - PullRequest
0 голосов
/ 22 января 2019

Не могли бы вы объяснить проблему ниже? Вот мой фрагмент кода в моей записной книжке 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 Ответ

0 голосов
/ 22 января 2019

Я полагаю, из вашего кода Z - это слово, которое вы передаете в качестве входа в сеть.Это не так, поскольку вы определяете это как Z = tf.placeholder(tf.string).Таким образом, Z является заполнителем объектом, который в конечном итоге будет заполнен строкой в ​​вашем feed_dict, когда вы запустите граф в экземпляре tf.Session, вызвав его метод run().

Поскольку ваш словарь word2int - это просто указатель строки на индекс, вы получаете KeyError, когда пытаетесь использовать заполнитель в качестве ключа.

...