0%

理解 Keras LSTM 中的参数 return_sequences 和 return_state


今天才注意到 LSTM 的 output 和 hidden_state 是同一个东西!下面分情况讨论参数的设置问题。

return_sequences=False && return_state=False

1
h = LSTM(X)

Keras API 中,return_sequences 和 return_state 默认就是 false。此时只会返回最后一个 LSTM 的 hidden state 值。

return_sequences=True && return_state=False

输出全部时间步 LSTM 的 hidden state 结果。

return_sequences=False && return_state=True

1
lstm1, state_h, state_c = LSTM(1, return_state=True)

stm1 和 state_h 结果都是 hidden state。在这种参数设定下,它们俩的值相同。都是最后一个时间步的 hidden state。 state_c 是最后一个时间步 cell state 结果。

return_sequences=True && return_state=True

1
lstm1, state_h, state_c = LSTM(1, return_sequences=True, return_state=True)

此时,我们既要输出全部时间步的 hidden state ,又要输出 cell state。lstm1 存放的就是全部时间步的 hidden state。state_h 存放的是最后一个时间步的 hidden state,state_c 存放的是最后一个时间步的 cell state
举一个输出例子,假设我们输入的时间步 time step=3:

1
2
3
4
5
[array([[[-0.02145359],
[-0.0540871 ],
[-0.09228823]]], dtype=float32),
array([[-0.09228823]], dtype=float32),
array([[-0.19803026]], dtype=float32)]

可以看到state_h 的值和lstm1的最后一个时间步的值相同。

Reference

  1. https://blog.csdn.net/u011327333/article/details/78501054
  2. Understand the Difference Between Return Sequences and Return States for LSTMs in Keras
支持一根棒棒糖!