【发布时间】:2021-01-10 15:35:35
【问题描述】:
我正在尝试将 dropout 与 CudnnLSTM (tf.contrib.cudnn_rnn.python.layers.CudnnLSTM) 一起使用,我希望能够只构建一个图并将 dropout 设置为某个非零小数值进行训练,然后将 dropout 设置为 0测量验证错误指标。使用通常的 Tensorflow LSTM 单元 (tf.contrib.rnn.LSTMCell),这并不太难,因为 keep_prob 参数接受 Tensor,但我发现这不是 CudnnLSTM 的选项。
为了能够设置 dropout,我尝试使用全局变量来设置 dropout,然后在训练和验证之间更改该全局变量的值,但我认为这不起作用(无法证明但这是我最好的猜测)。特别是我的训练和验证错误大致相同,而在过去,当我在 RNN 中使用 dropout 进行训练时(在同一数据集上),验证往往会很快优于训练(因为验证将 dropout % 设置为 0 )。我已经使用了通常的 LSTM 来获得这样的结果(在相同的数据集上),所以我希望看到与 Cudnn 类似的东西。
所以我有两个问题。
- 当我更改用于设置它的全局变量的值时,我如何才能确定 dropout 是否正在改变?(我的猜测不是,但如果有人告诉我我错了......我怎样才能验证这一点?)。我注意到 git 提交历史记录,至少对我而言,对于 dropout 是否在层实现中实际起作用有点令人困惑。
-
如果通过全局设置 dropout 不起作用,并且我不能使用
Tensor,如何将 dropout 设置为不同的训练和验证?我想一种方法这是为了构建两个共享权重的图,但是考虑到CudnnLSTM自己制作权重而不是让它们传入,我该怎么做?有人能提供一个我找不到的代码示例吗?
感谢您的帮助。
【问题讨论】:
-
你试过
DropoutWrapper可以应用于任何rnn单元格吗? -
@Maxim 我会试一试,但我的工作假设是 DropoutWrapper 不像 CudnnLSTM 那样直接使用 CUDA RNN API
标签: python tensorflow validation lstm