gpt4 book ai didi

python - 使用 dropout 和 CudnnLSTM 进行训练和验证

转载 作者:太空宇宙 更新时间:2023-11-04 04:53:13 25 4
gpt4 key购买 nike

我正在尝试将 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 类似的结果。

所以我有两个问题。

  1. 当我改变我用来设置它的全局变量的值时,我怎么才能确定 dropout 是否在变化?(我的猜测是没有,但如果有人告诉我我错了...我如何验证这一点?)。我注意到 git 提交历史,至少对我来说,对于 dropout 是否真的在层实现中起作用有点困惑。
  2. 如果通过全局设置 dropout 不起作用,并且我不能使用 Tensor,我如何将 dropout 设置为不同的训练和验证? 我想实现此目的的一种方法是构建两个共享权重的图,但考虑到 CudnnLSTM 生成自己的权重而不是让它们传入,我将如何做到这一点?有人可以提供代码示例吗,因为我找不到代码示例?

感谢您的帮助。

最佳答案

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

### testing out dropout with cudnn_rnn to see how it works
layers = 5
hidden_units = 3
dropout = 1.0
model = cudnn_rnn.CudnnGRU(layers, hidden_units, dropout = dropout)

data = tf.ones([128, 100, 3])
model.build(data.shape)

training_output, training_state = model(data, training = True)
inference_output, inference_state = model(data, training = False)

sess = tf.Session()
sess.run(tf.global_variables_initializer())
x, y = sess.run([training_output, training_state])
w, v = sess.run([inference_output, inference_state])

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

关于python - 使用 dropout 和 CudnnLSTM 进行训练和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com