我对在Keras中应用dropout的不同方式感到有些困惑。
我的模型如下:
model = Sequential()
model.add(Embedding(input_dim=64,output_dim=64, input_length=498))
model.add(LSTM(units=100,dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
假设我在以下方式中在嵌入层后添加了一个额外的Dropout层:
model = Sequential()
model.add(Embedding(input_dim=64,output_dim=64, input_length=498))
model.add(Dropout(0.25))
model.add(LSTM(units=100,dropout=0.5, recurrent_dropout=0.5))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
既然我已经在LSTM参数中明确指定了辍学率为0.5,那么这会有任何影响吗?还是我完全搞错了?
recurrent_dropout=0.5
,因此在每个 X_t 和 X_t+1 之间的激活值有50%会被丢弃。因此,在 LSTM 层中有三种不同的方法来丢弃激活值。一种是通过指定dropout
和recurrent_dropout
在层内部丢弃它们,另一种是添加一个Dropout
层在 LSTM 层之后丢弃它们。 - Björn Lindqvist