Python Tensorflow:DropoutRapper导致不同的输出?

Python Tensorflow:DropoutRapper导致不同的输出?,python,tensorflow,lstm,Python,Tensorflow,Lstm,我构建了一个LSTM,如: lstm_cell = tf.nn.rnn_cell.LSTMCell(n_hidden, forget_bias=1.0, state_is_tuple=True, activation=tf.nn.tanh) lstm_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob=0.5) lstm_cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] *

我构建了一个LSTM,如:

lstm_cell = tf.nn.rnn_cell.LSTMCell(n_hidden, forget_bias=1.0, state_is_tuple=True, activation=tf.nn.tanh)
lstm_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob=0.5)
lstm_cell = tf.nn.rnn_cell.MultiRNNCell([lstm_cell] * 3, state_is_tuple=True)
然后我训练模型,并保存变量。 下次我加载保存的变量并跳过训练时,它会给我一个不同的预测

如果我将
output\u keep\u prob
更改为1,则此模型始终可以向我显示相同的预测,但如果
output\u keep\u prob
小于1,如0.5,则此模型每次向我显示不同的预测

所以我想如果DropOutRapper导致不同的输出? 如果是,我如何解决这个问题


谢谢

尝试使用
seed
关键字参数来
dropoutrapper(…)


请参阅DropOutRapper的文档。Dropout将随机激活网络的一个子集,并在训练期间用于正则化。因为您已将退出硬编码为0.5,这意味着每次运行网络时,一半节点将被随机静音,从而产生不同的随机结果


您可以通过设置一个种子来检查这是怎么回事,这样每次退出时相同的节点都会“随机”静音。但是,您可能想做的是将dropout设置为占位符,以便在测试期间将其设置为1.0(即保留所有节点),这将为每个输入确定地产生相同的输出。

由于它是一个随机整数,每个
种子是否对应不同的退出方式?如果是,我是否应该尝试不同的
种子
以获得优化结果?尝试所有随机整数似乎是一个大项目……嘿@nickzxd和@kempy!在
DropOutRapper
中设置
种子后,我无法获得一致的结果。还需要什么吗?
lstm_cell = tf.nn.rnn_cell.DropoutWrapper(lstm_cell, output_keep_prob=0.5, seed=42)