TensorFlow и вложения слов: передача словаря - PullRequest
0 голосов
/ 22 мая 2018

Аналогично TensorFlow и встраиваниям слов - TypeError: unhashable тип: 'numpy.ndarray' , я хочу передать значения в feed_dict часть sess.run().Почему я получаю ту же ошибку о неискажаемом типе, когда я также использую reshape, а также flatten (раньше я не наблюдал этих различий по сравнению с кодом на http://www.brightideasinanalytics.com/rnn-pretrained-word-vectors/)?

sent_toks = nltk.sent_tokenize(ctxt)
x2 = np.array(list(vocab_processor.transform(sent_toks)))
y = np.array(list(vocab_processor.transform(<some other string>)))

import tensorflow.contrib as ct

def NHIDDEN():
    return 1

def NINPUT():
    return 50

g = tf.Graph()
tf.reset_default_graph()

with g.as_default():
    with tf.Session(graph = g) as sess:
        while step < 1: # training_iters:
            x2 = np.reshape(np.array(x2.flatten()), [-1, NINPUT()])
            y_embedding = np.reshape(tf.nn.embedding_lookup(W, y), [1,-1])
            _,loss, pred_ = sess.run([optimizer, cost, pred], feed_dict =
                                 {x2: x2, y: y_embedding})
            loss_total += loss
            print("loss = " + "{:.6f}".format(loss_total))
            step += 1
        print ("Finished Optimization")

TypeError                                 Traceback (most recent call last)
<ipython-input-16-ecd566e6a457> in <module>()
     51             y_embedding = np.reshape(tf.nn.embedding_lookup(W, y), [1,-1])
     52             _,loss, pred_ = sess.run([optimizer, cost, pred], feed_dict =
---> 53                                      {x2: x2}) # , y: y_embedding})
     54             loss_total += loss
     55             print("loss = " + "{:.6f}".format(loss_total))

TypeError: unhashable type: 'numpy.ndarray'

1 Ответ

0 голосов
/ 22 мая 2018

Я не пытался понять детали вашего кода, но вижу, что для меня выглядит проблема с использованием вами feed-dict.Синтаксис feed_dict заключается в том, что ключ является тензором в tf-графе - обычно это tf.placeholder, а значение - это данные, которые вы хотите передать ему.Здесь x2 используется как ключ и значение, что, вероятно, является проблемой.Поэтому, если tf_node - это то место, куда вы хотите подать данные, вы должны использовать feed_dict = {tf_node: x2}, а не feed_dict = {x2: x2}.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...