【问题标题】:Tensorflow RNN LSTM output explanationTensorflow RNN LSTM 输出解释
【发布时间】:2021-09-21 13:25:42
【问题描述】:

我有两个与tf.keras.layers.LSTMCell 相关的问题。我们看下面的代码:

inputs = tf.random.normal([32, 10, 8])
rnn1 = tf.keras.layers.RNN(tf.keras.layers.LSTMCell(4))
output = rnn1(inputs)

rnn2 = tf.keras.layers.RNN(
   tf.keras.layers.LSTMCell(4),
   return_sequences=True,
   return_state=True)
whole_seq_output, final_memory_state, final_carry_state = rnn2(inputs)

rnn2 的输出中,我可以看到final_memory_state 包含在whole_seq_output 中:

tf.reduce_all(whole_seq_output[:,-1,:]==final_memory_state)
<tf.Tensor: shape=(), dtype=bool, numpy=True>

因此,我认为final_memory_state 是最终的细胞状态,而whole_seq_output 包含所有细胞状态。此外,final_carry_state 是最终的隐藏状态。在这个众所周知的tutorial 中,单元状态和隐藏状态被称为 C_t 和 h_t。我的理解正确吗?

另外,从rnn1output 不是final_memory_statefinal_carry_state 之一:

>>> tf.reduce_all(output == final_carry_state)
<tf.Tensor: shape=(), dtype=bool, numpy=False>
>>> tf.reduce_all(output == final_memory_state)
<tf.Tensor: shape=(), dtype=bool, numpy=False>

我认为rnn1rnn2 之间的唯一区别是返回值的方式,因此output 应该是final_memory_statefinal_carry_state 之一。你能帮忙解释一下吗?

【问题讨论】:

    标签: tensorflow lstm tensorflow2.0 recurrent-neural-network


    【解决方案1】:

    经过多次测试,发现whole_seq_output 包含了不同时间步的所有输出,而final_memory_state 是最后一个时间步的输出。他们参考了上述教程中的h_t。 此外,final_carry_state 是单元状态(即教程中的 C_t)。 最后,output 确实是final_memory_state。如果使用相同的单元格,它们的值应该相同(我使用了两个不同的单元格)。

    inputs = tf.random.normal([32, 10, 8])
    cell = tf.keras.layers.LSTMCell(4)
    rnn1 = tf.keras.layers.RNN(cell)
    output = rnn1(inputs)
    
    rnn2 = tf.keras.layers.RNN(
       cell,
       return_sequences=True,
       return_state=True)
    whole_seq_output, final_memory_state, final_carry_state = rnn2(inputs)
    

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 1970-01-01
      • 2016-11-21
      • 2018-03-06
      • 2017-12-30
      • 2021-12-30
      • 1970-01-01
      • 2016-08-18
      • 1970-01-01
      相关资源
      最近更新 更多