TypeError: объект Tensor не поддерживает назначение элемента в TensorFlow

Я пытаюсь запустить этот код:

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)

Но я получаю ошибку в последней строке: TypeError: 'Tensor' object does not support item assignment Кажется, я не могу назначить тензор, как я могу его исправить?

Ответ 1

В общем случае тензорный объект TensorFlow не присваивается *, поэтому вы не можете использовать его в левой части задания.

Самый простой способ сделать то, что вы пытаетесь сделать, - создать список тензоров Python и tf.stack() их вместе в конец цикла:

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)

  * За исключением объектов tf.Variable, используя методы Variable.assign() и т.д. Однако rnn.rnn() скорее всего возвращает объект tf.Tensor, который не поддерживает этот метод.