微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

python – 构建Keras项目以在GPU中实现可重现的结果

我正在写一个tensorflow.Keras包装器来执行ML实验.

我需要我的框架能够执行配置yaml文件中指定的实验并在GPU中并行运行.

然后我需要保证,如果我再次运行实验,如果不是完全相同的结果,我会得到合理的接近.

为了确保这一点,我的训练脚本在开头按照official documentation中的指导原则包含这些行:

# Set up random seeds
random.seed(seed)
np.random.seed(seed)
tf.set_random_seed(seed)

事实证明这还不够.

我运行了相同的配置4次,并绘制了结果:

enter image description here

如您所见,运行之间的结果差别很大.

如何在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 举报,一经查实,本站将立刻删除。

相关推荐