首页 > 解决方案 > 为什么我的 Keras LSTM 不需要 TimeDistributed?

问题描述

我知道这个话题有很多问题,但我不明白为什么在我的情况下这两种选择都是可能的。我在 LSTM 中的输入形状是 (10,24,2),我的 hidden_​​size 是 8。

model = Sequential()    
model.add(LSTM(hidden_size, return_sequences=True, stateful = True, 
               batch_input_shape=((10, 24, 2))))
model.add(Dropout(0.1))

为什么可以在下面添加这一行:

model.add(TimeDistributed(Dense(2))) # Option 1

或者这个:

model.add(Dense(2)) # Option 2

不应该Option 2导致编译错误,因为它需要二维输入?

标签: pythontensorflowkeraslstm

解决方案


在您的情况下,您定义的 2 个模型是相同的。

这是由于您使用参数这一事实造成的,return_sequences=True这意味着该Dense层应用于每个时间步,就像TimeDistributedDense但如果您切换到False那么 2 个模型不相同,并且在TimeDistributedDense版本的情况下会引发错误,但不是在Dense一个版本中。

这里也对类似情况提供了更彻底的解释。


推荐阅读