python - 我是否需要在导入 numpy 或 tensorflow 的所有模块中设置种子?
问题描述
我正在尝试在使用keras
withtensorflow
作为后端训练深度学习模型时产生可重复的结果。
我浏览了这个文档: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) 我需要在 import 语句之后在每个文件中设置随机种子吗?
b)或者,我是否只需要train.py
在这些设置种子命令之后设置这些种子并从其他模块执行所有导入?
c)tf.set_random_seed(1)
之后还需要做import tensorflow as tf
吗?
tf.set_random_seed(1)
d)即使我没有导入 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)
但是,如果您有多个模块并且它们有一些随机操作(例如权重初始化),那么将这些行添加到您的每个模块中。
此外,这些仅不能保证 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()
推荐阅读
- html - 在 HTML 中添加边框
- html - 在 R distill 博客中通过 css 删除边界线
- python - .readframes(n) 中的 n 是什么意思?- 波Python
- django - Django auto_now 与 auto_now_add
- reactjs - 在 if 条件内调用方法 - React
- python - 如何在 AWS Elastic Beanstalk 中运行烧瓶 CLI 命令
- python - 无法使用 Selenium 访问 Amazon,请启用 Cookie
- angular - Angular invalid configuration(Webpack)
- opentracing - opentrace activeSpan 为空
- java - Java银行程序-如何从余额中扣除