TypeError: el objeto ‘Tensor’ no admite la asignación de elementos en TensorFlow

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