【发布时间】: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。我的理解正确吗?
另外,从rnn1,output 不是final_memory_state 或final_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>
我认为rnn1 和rnn2 之间的唯一区别是返回值的方式,因此output 应该是final_memory_state 或final_carry_state 之一。你能帮忙解释一下吗?
【问题讨论】:
标签: tensorflow lstm tensorflow2.0 recurrent-neural-network