我正在写一个tensorflow.Keras包装器来执行ML实验.
我需要我的框架能够执行配置yaml文件中指定的实验并在GPU中并行运行.
然后我需要保证,如果我再次运行实验,如果不是完全相同的结果,我会得到合理的接近.
为了确保这一点,我的训练脚本在开头按照official documentation中的指导原则包含这些行:
# Set up random seeds
random.seed(seed)
np.random.seed(seed)
tf.set_random_seed(seed)
事实证明这还不够.
我运行了相同的配置4次,并绘制了结果:
如您所见,运行之间的结果差别很大.
如何在Keras中设置培训课程,以确保在GPU培训时获得相当类似的结果?这甚至可能吗?
完整的培训脚本可以在here找到.
我的一些同事正在使用just pure TF,他们的结果似乎更加一致.更重要的是,除了确保列车和验证拆分始终相同之外,它们似乎没有播种任何随机性.
解决方法:
Keras Tensorflow.
第1步,禁用GPU.
import os
os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = ""
第2步,播种代码中包含的那些库,说“tensorflow,numpy,random”.
import tensorflow as tf
import numpy as np
import random as rn
sd = 1 # Here sd means seed.
np.random.seed(sd)
rn.seed(sd)
os.environ['PYTHONHASHSEED']=str(sd)
from keras import backend as K
config = tf.ConfigProto(intra_op_parallelism_threads=1,inter_op_parallelism_threads=1)
tf.set_random_seed(sd)
sess = tf.Session(graph=tf.get_default_graph(), config=config)
K.set_session(sess)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。