【问题标题】:Why does Keras not return the full sequence of cell state in lstm layer?为什么 Keras 没有在 lstm 层返回完整的单元状态序列?
【发布时间】:2020-09-22 12:24:01
【问题描述】:

我正在尝试实现一种注意力机制,其中我需要单元状态的完整序列(就像隐藏状态的完整序列一样)。 Keras LSTM 但是只返回最后一个单元格状态:

output, state_h, state_c = layers.LSTM(units=45, return_state=True, return_sequences=True)

state_c 的形状为(batch size, 1, 45),其中输出(即全序列隐藏状态)的形状为(batch size, 5, 45)。 5是时间窗口长度

为什么 Keras 不返回完整的序列单元状态?有没有比下面的方法更好的方法来获取细胞状态的完整序列?

full_hidden, full_cell, outputs = [], [], []
state = None
input = layers.Input(shape=(time_window,features), dtype='float32')
output = layers.LSTM(units=45, return_state=True)

for i in range(time_window):
    input_t = input[:, i, :]
    input_t = tf.expand_dims(input_t, 1)
    out, state_h, state_c = lstm(input_t, initial_state=state)
    state = state_h, state_c
    full_hidden.append(state_h)
    full_cell.append(state_c)
    outputs.append(out)

【问题讨论】:

  • 您正在实施哪种类型的关注?对于某些人来说,您只需要最后一个单元格状态。
  • 我正在实施DA-RNN。等式 8 表明我需要每个时间步的每个细胞状态。

标签: python keras deep-learning lstm attention-model


【解决方案1】:

您需要将标志 return_sequences 设置为 True 以获取所有时间状态。您使用的标志return_state=True 使图层返回最终状态。

【讨论】:

  • return_state=True 仍然不会返回每个时间步的单元状态。它返回最后一个时间步的细胞状态
  • 是的,这就是我的意思,您需要将return_sequences 设置为True
  • 再次,仍然返回单元格状态的最后一个值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
  • 1970-01-01
  • 2021-10-25
  • 2017-10-31
  • 2019-03-12
  • 2017-10-14
相关资源
最近更新 更多