TypeError: 'Tensor' object does not support item assignment in TensorFlow

后端 未结 4 1104
长情又很酷
长情又很酷 2020-11-28 09:46

I try to run this code:

outputs, states = rnn.rnn(lstm_cell, x, initial_state=initial_state, sequence_length=real_length)

tensor_shape = outputs.get_shape()         


        
相关标签:
4条回答
  • 2020-11-28 10:29

    Another way you can do it like this.

    aa=tf.Variable(tf.zeros(3, tf.int32))
    aa=aa[2].assign(1)
    

    then the output is:

    array([0, 0, 1], dtype=int32)

    ref:https://www.tensorflow.org/api_docs/python/tf/Variable#assign

    0 讨论(0)
  • 2020-11-28 10:36

    As this comment says, a workaround would be to create a NEW tensor with the previous one and a new one on the zones needed.

    1. Create a mask of shape outputs with 0's on the indices you want to replace and 1's elsewhere (Can work also with True and False)
    2. Create new matrix of shape outputs with the new desired value: new_values
    3. Replace only the needed indexes with: outputs_new = outputs* mask + new_values * (1 - mask)

    If you would provide me with an MWE I could do the code for you.

    A good reference is this note: How to Replace Values by Index in a Tensor with TensorFlow-2.0

    0 讨论(0)
  • 2020-11-28 10:39

    In general, a TensorFlow tensor object is not assignable*, so you cannot use it on the left-hand side of an assignment.

    The easiest way to do what you're trying to do is to build a Python list of tensors, and tf.stack() them together at the end of the loop:

    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)
    

     * With the exception of tf.Variable objects, using the Variable.assign() etc. methods. However, rnn.rnn() likely returns a tf.Tensor object that does not support this method.

    0 讨论(0)
  • 2020-11-28 10:44

    When you have a tensor already, convert the tensor to a list using tf.unstack (TF2.0) and then use tf.stack like @mrry has mentioned. (when using a multi-dimensional tensor, be aware of the axis argument in unstack)

    a_list = tf.unstack(a_tensor)
    
    a_list[50:55] = [np.nan for i in range(6)]
    
    a_tensor = tf.stack(a_list)
    
    0 讨论(0)
提交回复
热议问题