TensorFlow Keras LSTM 输出解释

这篇博客探讨了在Keras中使用LSTM层时的输出结构。当return_state=True时,LSTM返回整个序列的输出、最终的记忆状态和单元状态。记忆状态相当于隐藏状态,单元状态是LSTM单元内部的状态。输出维度取决于return_sequences参数:为True时为(batch_size, seq_length, units),为False时为(batch_size, units)。源码展示了LSTM单元的内部计算过程,包括输入门、遗忘门、细胞状态和输出门的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考文章:
What does Tensorflow LSTM return?
Tensorflow RNN LSTM output explanation

>>> inputs = tf.random.normal([32, 10, 8])
>>> lstm = tf.keras.layers.LSTM(4)
>>> output = lstm(inputs)
>>> print(output.shape)
(32, 4)
>>> lstm = tf.keras.layers.LSTM(4, return_sequences=True, return_state=True)
>>> whole_seq_output, final_memory_state, final_carry_state = lstm(inputs)
>>> print(whole_seq_output.shape)
(32, 10, 4)
>>> print(final_memory_state.shape)
(32, 4)
>>> print(final_carry_state.shape)
(32, 4)

在这里插入图片描述
其中图里上方的输出 h t h_t ht可以视为 o t o_t ot

在Keras中如果return_state=True则LSTM单元有三个输出,分别为

  • 一个输出状态(output state) o t o_t ot
  • 一个隐藏状态(hidden state) h t h_t ht
  • 一个单元状态(cell state) c t c_t ct

keras 文档中给出的写法如下:

whole_seq_output, final_memory_state, final_carry_state = lstm(inputs)

在文档中,他们不使用隐藏和单元状态这些术语。他们使用memory state表示短期记忆,即上面提到的隐藏状态。用carry state 通过所有LSTM单元,即上面提到的单元状态。

下面是前向传播的一部分源码

def step(cell_inputs, cell_states):
    """Step function that will be used by Keras RNN backend."""
    h_tm1 = cell_states[0]   #previous memory state
    c_tm1 = cell_states[2]   #previous carry state

    z = backend.dot(cell_inputs, kernel)
    z += backend.dot(h_tm1, recurrent_kernel)
    z = backend.bias_add(z, bias)

    z0, z1, z2, z3 = array_ops.split(z, 4, axis=1)

    i = nn.sigmoid(z0)
    f = nn.sigmoid(z1)
    c = f * c_tm1 + i * nn.tanh(z2)
    o = nn.sigmoid(z3)

    h = o * nn.tanh(c)
    return h, [h, c]

从源码中可以看出,第一个和第二个输出是output/hidden state,第三个输出是cell state。并且从注释中可以看出,将hidden state 命名为 memory state ;将cell state 命名为 carry state。

return_sequences=True时,whole_seq_output是整个序列的输出,维度为(batch_size,seq_length,units)。
return_sequences=False时,whole_seq_output是最后一个单元的输出,维度为(batch_size,units),此时与第二个输出相同。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值