为啥我的 Keras LSTM 不需要 TimeDistributed?

Posted

技术标签:

【中文标题】为啥我的 Keras LSTM 不需要 TimeDistributed?【英文标题】:Why is TimeDistributed not needed in my Keras LSTM?为什么我的 Keras LSTM 不需要 TimeDistributed? 【发布时间】:2019-08-27 04:44:51 【问题描述】:

我知道这个话题有很多问题,但我不明白为什么在我的情况下这两种选择都是可能的。 我在 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 不应该导致编译错误,因为它需要二维输入吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

以上是关于为啥我的 Keras LSTM 不需要 TimeDistributed?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的多标签文本分类 LSTM 表现不佳?

Keras LSTM - 为啥“相同”模型和相同权重的结果不同?

为啥我会收到 Keras LSTM RNN input_shape 错误?

keras 中的小型 LSTM 模型不适合我的 GPU

为啥用于预测的 Keras LSTM 批量大小必须与拟合批量大小相同?

用于 LSTM 的 Keras 多元形状