每次我imdb_lstm.py从Keras框架运行示例时,我得到不同的结果(测试准确性)(https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py)代码包含np.random.seed(1337)在顶部,在任何keras之前进口.它应该防止它为每次运行生成不同的数字.我错过了什么?
更新:如何重现:
UPDATE2:我在Windows 8.1上使用MinGW/msys运行它,模块版本:
theano 0.7.0
numpy 1.8.1
scipy 0.14.0c1
更新3:我把问题缩小了一点.如果我用GPU运行示例(设置theano flag device = gpu0),那么每次都会得到不同的测试精度,但是如果我在CPU上运行它,那么一切都按预期工作.我的显卡:NVIDIA GeForce GT 635)
在一般的张量流设置中
model = construct_model()
with tf.Session() as sess:
train_model(sess)
Run Code Online (Sandbox Code Playgroud)
其中construct_model()包含模型定义,包括权重(tf.truncated_normal)的随机初始化并train_model(sess)执行模型的训练 -
我必须设置哪些种子,以确保重复运行上面的代码片段之间的100%可重复性?该文件为tf.random.set_random_seed可能是简洁的,但给我留下了有点混乱.我试过了:
tf.set_random_seed(1234)
model = construct_model()
with tf.Session() as sess:
train_model(sess)
Run Code Online (Sandbox Code Playgroud)
但每次都得到不同的结果.
我想更多地了解这两个参数:intra 和 inter op parallelism threads
session_conf = tf.ConfigProto(
intra_op_parallelism_threads=1,
inter_op_parallelism_threads=1)
Run Code Online (Sandbox Code Playgroud)
我读了这篇文章,其中有一个很好的解释:TensorFlow: inter- and intra-op parallelism configuration
但我正在寻求确认并在下面提出新问题。我在 keras 2.0.9、tensorflow 1.3.0 中运行我的任务:
提前谢谢了
我正在编写一个 tensorflow.Keras 包装器来执行 ML 实验。
我需要我的框架能够执行配置 yaml 文件中指定的实验并在 GPU 中并行运行。
然后我需要保证,如果我再次运行该实验,即使不是完全相同的结果,我也会得到相当接近的结果。
为了确保这一点,我的训练脚本在开头包含这些行,遵循官方文档中的指导原则:
# Set up random seeds
random.seed(seed)
np.random.seed(seed)
tf.set_random_seed(seed)
Run Code Online (Sandbox Code Playgroud)
这已被证明是不够的。
我运行了 4 次相同的配置,并绘制了结果:
如您所见,运行之间的结果差异很大。
如何在 Keras 中设置训练课程以确保在 GPU 中训练时获得相当相似的结果?这甚至可能吗?
可以在此处找到完整的培训脚本。
我的一些同事只使用纯 TF,他们的结果似乎更加一致。更重要的是,他们似乎没有播种任何随机性,只是为了确保训练和验证拆分始终相同。