【发布时间】:2017-07-08 15:56:24
【问题描述】:
我希望我训练的 CNN 获得可重现的结果。因此我将种子设置在my script:
import tensorflow as tf
tf.set_random_seed(0) # make sure results are reproducible
import numpy as np
np.random.seed(0) # make sure results are reproducible
set_random_seed 和 np.random.seed 的文档没有报告 0 种子的任何特殊行为。
当我在几分钟内在同一台机器上运行相同的脚本两次并且没有进行更新时,我希望得到相同的结果。然而,事实并非如此:
运行 1:
0;0.001733;0.001313
500;0.390164;0.388188
运行 2:
0;0.006986;0.007000
500;0.375288;0.374250
如何让网络产生可重现的结果?
系统
$ python -c "import tensorflow;print(tensorflow.__version__)"
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.so.5 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.so.8.0 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.so.1 locally
I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.so.8.0 locally
1.0.0
$ python -c "import numpy;print(numpy.__version__)"
1.12.0
【问题讨论】:
-
TF 在运行前应用了一些图形优化/修剪。我不确定该过程是否具有确定性。
-
@Kh40tiK 你知道是否有办法让它具有确定性吗?你知道我可以在哪里寻求这个问题的答案吗?
-
TF mailing list 或 github issues 如果缺少此功能。
-
有人刚刚有了另一个想法,为什么结果可能无法重现:Floating point multiplication is not associative。可能是节点计算其结果的顺序在训练之间有所不同。因此结果不同。
标签: python numpy tensorflow