我知道这个主题有很多问题,但是我不明白为什么在我看来这两种选择都是可行的
我在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
是否应该因为需要二维输入而导致编译错误? 最佳答案
在您的情况下,您定义的2个模型是相同的。
这是因为您使用了return_sequences=True
参数,这意味着Dense
层像TimeDistributedDense
一样适用于每个时间步,但是如果您切换到False
,则这两个模型并不相同,但是在TimeDistributedDense
版本的情况下会出现错误不在Dense
中。
here也针对类似情况提供了更详尽的解释。
关于python - 为什么我的Keras LSTM中不需要TimeDistributed?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55532683/