J'essaie d'exécuter ce code:
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)
Mais je reçois une erreur sur la dernière ligne: TypeError: 'Tensor' object does not support item assignment
Il semble que je ne puisse pas attribuer au tenseur, comment puis-je le réparer?
En général, un objet tensoriel TensorFlow n'est pas assignable *, vous ne pouvez donc pas l'utiliser sur le côté gauche d'une affectation.
La façon la plus simple de faire ce que vous essayez de faire est de construire une Python liste de tenseurs, et tf.stack()
les ensemble à la fin de la boucle:
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)
* À l'exception des objets tf.Variable
, en utilisant les méthodes Variable.assign()
etc. Cependant, rnn.rnn()
renvoie probablement un objet tf.Tensor
qui ne prend pas en charge cette méthode.
Une autre façon de le faire comme ça.
aa=tf.Variable(tf.zeros(3, tf.int32))
aa=aa[2].assign(1)
alors la sortie est:
tableau ([0, 0, 1], dtype = int32)
réf: https://www.tensorflow.org/api_docs/python/tf/Variable#assign
Lorsque vous avez déjà un tenseur, convertissez-le en une liste en utilisant tf.unstack (TF2.0), puis utilisez tf.stack comme @mrry l'a mentionné. (lors de l'utilisation d'un tenseur multidimensionnel, soyez conscient de l'argument axe dans unstack)
a_list = tf.unstack(a_tensor)
a_list[50:55] = [np.nan for i in range(6)]
a_tensor = tf.stack(a_list)