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

Emm*_*mma 5 python lstm keras tensorflow

我知道这个主题有很多问题,但是我不明白为什么在我看来这两种选择都是可行的 我在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))
Run Code Online (Sandbox Code Playgroud)

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

model.add(TimeDistributed(Dense(2))) # Option 1
Run Code Online (Sandbox Code Playgroud)

或这一个:

model.add(Dense(2)) # Option 2
Run Code Online (Sandbox Code Playgroud)

是否应该Option 2因为需要二维输入而导致编译错误?

Eyp*_*ros 5

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

这是由于您使用了该return_sequences=True参数所导致的,这意味着该Dense层将像每个时间步一样应用到每个时间步,TimeDistributedDense但是如果切换到False该模式,则这两个模型并不相同,并且如果TimeDistributedDense不是版本,则会出现版本错误Dense

这里也针对类似情况提供更详尽的解释。