凯拉斯的变异辍学

时间:2018-12-06 09:52:47

标签: python tensorflow keras lstm

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

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

figure

通过阅读Keras文档,我发现我们可以使用参数dropoutrecurrent_dropout在LSTM单元上应用dropout。我的第一个问题是:

  1. 仅使用这些参数,是否在每个时间步骤都应用了相同的辍学掩码?如果没有,有办法吗?

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

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

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

0 个答案:

没有答案