TensorFlow y incrustaciones de palabras – TypeError: tipo no transitable: ‘numpy.ndarray’

Deseo modificar el código en http://www.brightideasinanalytics.com/rnn-pretrained-word-vectors/ , que trata de predecir la siguiente palabra, para tener un código que predice las respuestas a las preguntas.

Aquí hay un extracto del código con el que estoy teniendo problemas:

import tensorflow.contrib as ct def NHIDDEN(): return 1 g = tf.Graph() tf.reset_default_graph() with g.as_default(): # lines 97-104 of original code # RNN output node weights and biases weights = { 'out': tf.Variable(tf.random_normal([NHIDDEN(), embedding_dim])) } biases = { 'out': tf.Variable(tf.random_normal([embedding_dim])) } with tf.name_scope("embedding"): W = tf.Variable(tf.constant(0.0, shape=[vocab_size, embedding_dim]), trainable=False, name="W") embedding_placeholder = tf.placeholder(tf.float32, [vocab_size, embedding_dim]) embedding_init = W.assign(embedding_placeholder) preimage = tf.nn.embedding_lookup(W, x2) # lines 107-119 of original # reshape input data x_unstack = tf.unstack(preimage) # create RNN cells rnn_cell = ct.rnn.MultiRNNCell([ct.rnn.BasicLSTMCell(NHIDDEN()), ct.rnn.BasicLSTMCell(NHIDDEN())]) outputs, states = ct.rnn.static_rnn(rnn_cell, x_unstack, dtype=tf.float32) # capture only the last output pred = tf.matmul(outputs[-1], weights['out']) + biases['out'] # Create loss function and optimizer cost = tf.reduce_mean(tf.nn.l2_loss(pred-y)) optimizer = tf.train.AdamOptimizer(learning_rate=0.001).minimize(cost) # lines 130, 134 and 135 of original step = 0 acc_total = 0 loss_total = 0 with tf.Session(graph = g) as sess: # lines 138, 160, 162, 175, 178 and 182 of original while step < 1: # training_iters: _,loss, pred_ = sess.run([optimizer, cost, pred], feed_dict = {x: tf.nn.embedding_lookup(W, x2), y: tf.nn.embedding_lookup(W, y)}) loss_total += loss print("loss = " + "{:.6f}".format(loss_total)) step += 1 print ("Finished Optimization") 

El error que recibo es:

 --------------------------------------------------------------------------- TypeError Traceback (most recent call last)  in () 42 while step  44 {x: tf.nn.embedding_lookup(W, x2), y: tf.nn.embedding_lookup(W, y)}) 45 loss_total += loss 46 print("loss = " + "{:.6f}".format(loss_total)) TypeError: unhashable type: 'numpy.ndarray' 

¿Cómo arreglo el código? ¿Es por unstack ?

Contexto adicional: a x2 y y les asigna el valor de retorno de np.array(list(vocab_processor.transform([s]))) donde s es una cadena (pasando cadenas diferentes). embedding_dim , vocab_size y W se calculan utilizando el código en https://ireneli.eu/2017/01/17/tensorflow-07-word-embeddings-2-loading-pre-trained-vectors/ .

El problema se produce aquí: y: tf.nn.embedding_lookup(W, y) . Las claves feed_dict deben ser marcadores de posición del gráfico TensorFlow. Suponiendo que y es un numpy.ndarray contiene los valores objective, puede definir un tf.placeholder y_ para ingresar los valores objective en la red, cambiando la entrada correspondiente de feed_dict a y_: tf.nn.embedding_lookup(W, y) y modificando los otros tensores en consecuencia (es decir, use el tensor y_ para calcular la pérdida).