使用CudnnLSTM的退出进行培训和验证

时间:2017-12-07 20:40:01

标签: python validation tensorflow lstm cudnn

我正在尝试使用CudnnLSTM(tf.contrib.cudnn_rnn.python.layers.CudnnLSTM)的dropout,我希望能够构建一个图并将dropout设置为一些非零小数值进行训练,然后将dropout设置为0用于测量验证错误指标。使用通常的Tensorflow LSTM单元格(tf.contrib.rnn.LSTMCell),这并不太难,因为keep_prob参数接受Tensor,但我发现这不是CudnnLSTM的选项。

为了能够设置dropout,我尝试使用全局变量设置dropout,然后在训练和验证之间更改该全局变量的值,但我认为这不起作用(无法证明它但这是我最好的猜测)。特别是我的训练和验证错误大致相同,而在过去当我在RNN中训练时(在同一数据集上),验证往往比训练更快(因为验证已将丢失%设置为0) )。我已经使用了通常的LSTM这样的结果(在相同的数据集上),所以我希望看到与Cudnn类似的东西。

所以我有两个问题。

  1. 当我更改用于设置它的全局变量的值时,我怎么能确定地知道丢失是否正在改变?(我的猜测不是,但如果有人告诉我我错了......我怎么验证这个?)。我注意到git提交历史,至少对我而言,即使在层实现中,丢失是否真的有效也有点令人困惑。
  2. 如果通过全局设置丢失不起作用,并且我无法使用Tensor,那么如何将退出设置为不同的培训和验证? I假设一种方法是建立两个共享权重的图形,但是如果CudnnLSTM自己的权重而不是传入它们,我该如何做呢?有人能够提供代码示例,因为我找不到一个吗?
  3. 感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

模型调用方法中的training参数部分控制dropout是否生效。如果training = true,则应用dropout;如果training = false,则忽略dropout。

405 Method Not Allowed

我们可以看到x和y都是0,因为dropout设置为1.0。但是w和v都不是零。