为什么Keras不能在lstm层返回单元状态的完整序列?

问题描述

我正在尝试实现一种关注机制,其中我需要单元格状态的完整序列(就像隐藏状态的完整序列一样)。 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_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)

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...