tensorflow - Tensorflow RNN LSTM 输出解释
问题描述
我有两个与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
是最终的隐藏状态。在这个著名的教程中,单元状态和隐藏状态被称为 C_t 和 h_t 。我的理解正确吗?
此外,从rnn1
, theoutput
不是final_memory_state
or之一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
or之一final_carry_state
。你能帮忙解释一下吗?
解决方案
经过多次测试,结果表明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)
推荐阅读
- android - 如何使用 Moor_Flutter 从数据库中获取单个值
- c++ - 如何使用虚幻引擎“过滤”多播?
- javascript - 确定给定数组中对值的数量
- android - 如何在android的recylerview中搜索数据
- php - 2 个域之间的 cookie 或会话
- pdf - 在 Alfresco 中将 DOCX 转换为 PDF - 大小限制
- tcp - 占用大量TCP端口进行测试?
- java - 使用 Spring/Spring Boot 注册 Bean Validation ValueExtractor
- elasticsearch - elasticsearch more_like_this 查询不适用于大于 6 的数组
- angular - Gitlab Pipeline作业失败的角度构建