Python 将辍学学生与CudnnLSTM一起用于培训和验证
我正在尝试使用CudnnLSTM(Python 将辍学学生与CudnnLSTM一起用于培训和验证,python,tensorflow,validation,lstm,Python,Tensorflow,Validation,Lstm,我正在尝试使用CudnnLSTM(tf.contrib.cudnn_rnn.python.layers.CudnnLSTM)中的dropout,我希望能够构建一个图,将dropout设置为非零的分数值进行训练,然后将dropout设置为0以测量验证错误度量。对于通常的Tensorflow LSTM单元(tf.contrib.rnn.LSTMCell),这并不太困难,因为keep_prob参数接受一个Tensor,但我发现这不是CudnnLSTM的选项 为了能够设置辍学率,我尝试使用一个全局变量来
tf.contrib.cudnn_rnn.python.layers.CudnnLSTM
)中的dropout,我希望能够构建一个图,将dropout设置为非零的分数值进行训练,然后将dropout设置为0以测量验证错误度量。对于通常的Tensorflow LSTM单元(tf.contrib.rnn.LSTMCell
),这并不太困难,因为keep_prob
参数接受一个Tensor
,但我发现这不是CudnnLSTM
的选项
为了能够设置辍学率,我尝试使用一个全局变量来设置辍学率,然后在培训和验证之间更改该全局变量的值,但我认为这不起作用(无法证明,但这是我的最佳猜测)。特别是,我的培训和验证错误大致相同,而在过去,当我在RNN(在同一数据集上)中使用辍学进行培训时,验证往往会很快优于培训(因为验证已将辍学百分比设置为0)。我使用了通常的LSTM来获得这样的结果(在相同的数据集上),因此我希望看到与Cudnn
类似的结果
所以我有两个问题
张量,我如何将辍学设置为与培训和验证不同?
我想一种方法是构建两个共享权重的图,但是,如果CudnnLSTM
生成自己的权重,而不是让它们传入,我该怎么做呢?有人能够提供一个代码示例,因为我没有找到一个感谢您的帮助。模型调用方法中的训练参数部分控制退出是否生效。如果training=true,则应用辍学;如果training=false,则忽略辍学
### 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不是零。您是否尝试过可以应用于任何rnn单元的DropOutrapper?@Maxim我将尝试一下,但我的工作假设是DropOutrapper不像CudnnLSTM那样直接与CUDA rnn API一起工作