编程语言
首页 > 编程语言> > python – 构建Keras项目以在GPU中实现可重现的结果

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)

确保在代码的开头包含这两段代码,然后结果将是可重现的.

标签:random-seed,python,tensorflow,gpu,keras
来源: https://codeday.me/bug/20191002/1845118.html