loa*_*box 0 python numpy keras tensorflow
我试图在训练使用keraswithtensorflow作为后端的深度学习模型时产生可重复的结果。
我浏览了这个文件:https : //keras.io/getting-started/faq/#how-can-i-obtain-reproducible-results-using-keras-during-development来设置 numpy 的、python 的和 tf 的随机种子train.py我用于训练的文件。
现在,这个文件从其他两个模块utils.py和model.py. 在这两个文件中,我都有import numpy as np和import tensorflow as tf在顶部。我的问题是 - 从不同模块导入和设置随机种子如何工作?
a) 我需要在导入语句后在每个文件中设置随机种子吗?
b) 或者,我是否只需要在 中设置这些种子train.py并在这些设置种子命令之后从其他模块执行所有导入?
c)tf.set_random_seed(1)以后import tensorflow as tf还需要做吗?
d)tf.set_random_seed(1)即使我不导入 tensorflow 或 keras 而只是从 keras 导入层,我是否需要设置?
首先,使用 tensorflow.keras 而不是 keras。
通常,按以下方式在主脚本中使用种子就足够了。
import random
random.seed(1)
import numpy as np
np.random.seed(1)
import tensorflow as tf
tf.random.set_seed(1)
Run Code Online (Sandbox Code Playgroud)
但是,如果您有多个模块并且它们有一些随机操作(例如权重初始化),那么将这些行添加到您的每个模块中。
此外,这些仅不能保证 100% 的可重复性,如果您使用的是 GPU,也可能因此而存在一些随机性。
您可以使用https://github.com/NVIDIA/tensorflow-determinism
os.environ['TF_DETERMINISTIC_OPS'] = '1' 对于张量流==2.1.0
对于张量流 < 2.1
import tensorflow as tf
from tfdeterminism import patch
patch()
Run Code Online (Sandbox Code Playgroud)