簡體   English   中英

在嵌入層之后應用Dropout Layer與通過LSTM dropout參數應用dropout具有相同的效果嗎?

[英]Does applying a Dropout Layer after the Embedding Layer have the same effect as applying the dropout through the LSTM dropout parameter?

我對在Keras中將Dropout應用到我的Sequential模型的不同方法感到有些困惑。

我的模型如下:

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,或者我是否認為這一切都錯了?

添加dropout圖層時,只會將dropout添加到上一層的輸出中,在這種情況下,您要將dropout添加到嵌入圖層中。

LSTM單元比單層神經網絡更復雜,當您在LSTM單元中指定丟失時,實際上將丟失應用於LSTM單元中的4個不同的子神經網絡操作。

下面是Colah博客關於LSTMs的LSMT細胞的可視化(LSTM / RNNs的最佳可視化, http: //colah.github.io/posts/2015-08-Understanding-LSTMs/)。 黃色框表示4個完全連接的網絡操作(每個都有自己的權重),這些操作發生在LSTM的引擎蓋下 - 這整齊地包裹在LSTM單元包裝器中,盡管手動編碼並不是很難。

在此輸入圖像描述

當您在LSTM單元格中指定dropout=0.5時,您正在做的工作是將dropout應用於這4個神經網絡操作中的每一個。 這有效地添加了model.add(Dropout(0.25)) 4次,一次在圖中看到的4個黃色塊中的每一個之后,在LSTM單元的內部。

我希望通過簡短的討論可以更清楚地了解LSTM包裝器中應用的壓降是如何應用於LSTM中有效的4個子網絡的,這與您在嵌入層之后在序列中應用一次的壓降有所不同。 並且直接回答你的問題,是的,這兩個輟學定義是非常不同的。

請注意,作為幫助闡明這一點的另一個例子:如果要定義一個簡單的5層完全連接的神經網絡,則需要在每個層之后定義丟失,而不是一次。 model.add(Dropout(0.25)) 不是某種全局設置,它將model.add(Dropout(0.25))操作添加到操作管道中。 如果您有5個圖層,則需要添加5個退出操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM