首页 > 解决方案 > Keras中的变分辍学

问题描述

我正在尝试基于 Yarin Gal 和 Zoubin Ghahramani 的论文https://arxiv.org/pdf/1512.05287.pdf在 Python 中使用带有 Tensorflow 后端的 Keras 中定义的变分 RNN 架构来实现 LSTM 神经网络。

这个想法基本上是在每个时间步应用相同的 dropout 掩码,包括输入/​​输出连接和循环连接,如下图所示:

数字

阅读 Keras 文档,我看到我们可以使用参数dropoutrecurrent_dropout. 我的第一个问题是:

  1. 仅使用这些参数,是否在每个时间步都应用了相同的 dropout 掩码?如果没有,有没有办法做到这一点?

然后,我还看到我们可以在 LSTM 单元之后创建一个 Dropout 层,并且使用该noise_shape参数,我们可以强制该层每次都应用相同的 dropout 掩码。我通过设置来做到这一点noise_shape=(K.shape(x)[0], 1, K.shape(x)[2])。我的第二个问题是:

  1. 如果放置在 LSTM 层之后,Dropout 层是否适用于循环连接?

总而言之,我的感觉是,使用第一种方法,我们可以在循环连接上应用 dropout,但我们不能在每个时间步应用相同的 dropout 掩码,而使用第二种方法,情况正好相反。我错了吗?

标签: pythontensorflowkeraslstm

解决方案


推荐阅读