Intento ejecutar este código:
outputs, states = rnn.rnn(lstm_cell, x, initial_state=initial_state, sequence_length=real_length) tensor_shape = outputs.get_shape() for step_index in range(tensor_shape[0]): word_index = self.x[:, step_index] word_index = tf.reshape(word_index, [-1,1]) index_weight = tf.gather(word_weight, word_index) outputs[step_index, :, :]=tf.mul(outputs[step_index, :, :] , index_weight)
Pero me sale un error en la última línea: TypeError: 'Tensor' object does not support item assignment
Parece que no puedo asignar un tensor, ¿cómo puedo solucionarlo?
En general, un objeto tensorial TensorFlow no es asignable *, por lo que no puede usarlo en el lado izquierdo de una asignación.
La forma más fácil de hacer lo que estás tratando de hacer es construir una lista de tensores Python, y tf.stack()
juntos al final del bucle:
outputs, states = rnn.rnn(lstm_cell, x, initial_state=initial_state, sequence_length=real_length) output_list = [] tensor_shape = outputs.get_shape() for step_index in range(tensor_shape[0]): word_index = self.x[:, step_index] word_index = tf.reshape(word_index, [-1,1]) index_weight = tf.gather(word_weight, word_index) output_list.append(tf.mul(outputs[step_index, :, :] , index_weight)) outputs = tf.stack(output_list)
* Con la excepción de los objetos tf.Variable
, utilizando los métodos Variable.assign()
etc. Sin embargo, rnn.rnn()
probablemente devuelve un objeto tf.Tensor
que no admite este método.
Otra forma de hacerlo es así.
aa=tf.Variable(tf.zeros(3, tf.int32)) aa=aa[2].assign(1)
entonces la salida es:
array ([0, 0, 1], dtype = int32)
ref: https://www.tensorflow.org/api_docs/python/tf/Variable#assign