繁体   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