1. ホーム
  2. python

[解決済み] TypeError: 'Tensor'オブジェクトはTensorFlowのアイテム割り当てをサポートしていません。

2022-02-09 03:19:48

質問

このコードを実行しようとしています。

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 テンソルへの代入ができないようですが、どうしたらいいですか?

どのように解決するのですか?

一般に、TensorFlowのテンソルオブジェクトはassignable*ではないので、代入の左辺で使用することはできない。

あなたがやろうとしていることを行う最も簡単な方法は、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 オブジェクトは、このメソッドをサポートしていません。