为什么我的Keras LSTM中不需要TimeDistributed?

时间:2019-04-05 09:51:29

标签: python tensorflow keras lstm

我知道这个主题有很多问题,但是我不明白为什么在我看来这两种选择都是可行的 我在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 个答案:

答案 0 :(得分:4)

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

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

对于类似情况,也提供了更详尽的说明here