TensorFlow LSTM Dropout 实现

Posted

技术标签:

【中文标题】TensorFlow LSTM Dropout 实现【英文标题】:Tensorflow LSTM Dropout Implementation 【发布时间】:2017-07-18 05:27:10 【问题描述】: 在调用 tf.nn.rnn_cell.DropoutWrapper() 时,tensorflow 如何具体应用dropout

我读到的关于将 dropout 应用于 rnn 的所有内容都参考了 Zaremba et. al 的这篇论文,其中说不要在循环连接之间应用 dropout。神经元应该在 LSTM 层之前或之后随机退出,而不是 LSTM 层间。好的。

我的问题是神经元是如何随时间关闭的?

在每个人引用的论文中,似乎在每个时间步都应用了一个随机的“dropout mask”,而不是生成一个随机的“dropout mask”并重复使用它,将其应用于给定层中的所有时间步被丢弃出去。然后在下一批生成一个新的“dropout mask”。

此外,也许目前更重要的是,tensorflow 是如何做到的?我检查了 tensorflow api 并尝试四处寻找详细的解释,但还没有找到。

有没有办法深入了解实际的 tensorflow 源代码?

【问题讨论】:

所有源码都在github上 【参考方案1】:

你可以检查实现here.

它在 RNNCell 的输入上使用dropout op,然后在输出上使用您指定的保持概率。

您输入的每个序列似乎都有一个新的输入掩码,然后是输出掩码。序列内部没有变化。

【讨论】:

谢谢。这确实给了我答案,在 tensorflow 中的 rnn 中使用 dropout 时不会经常应用它。对于任何想要此功能的人,我在 github 上打开了一个问题,问题 #7927。

以上是关于TensorFlow LSTM Dropout 实现的主要内容,如果未能解决你的问题,请参考以下文章

深度学习(08)_RNN-LSTM循环神经网络-03-Tensorflow进阶实现

Tensorflow 做LSTM 恢复模型测试时相同输入数据 给出的输出却不一样,这是怎么回事?

Keras:LSTM dropout 和 LSTM 循环 dropout 的区别

中文文本分类之TextRNN

TensorFlow搭建双向LSTM实现时间序列预测(负荷预测)

Keras Lstm中dropout机制