就我的论文而言,我正在尝试使用张量流(v 1.14)评估不同参数对我的主动学习对象检测器的影响。
因此,我正在使用来自Zoo模型的fast_rcnn_inception_v2_coco标准配置和固定的random.seed(1)。
为了确保我有一个正常的基准实验,我尝试使用相同的数据集,学习时间,poolingsize等两次运行对象检测器。
无论如何,经过20个活跃的学习周期后,这两个绘制的图有很大的不同,您可以在此处看到:
是否有可能确保可比的神经网络性能?如果是,如何设置科学实验设置,以比较参数变化的结果,例如学习率,学习时间(这是我们积极学习周期的约束!)
最佳答案
为了在使用CPU进行培训时获得确定性,以下条件就足够了:
1.设置所有种子
SEED = 123
os.environ['PYTHONHASHSEED']=str(SEED)
random.seed(SEED)
np.random.seed(SEED)
tf.set_random_seed(SEED)
2.将CPU线程数限制为一
session_config.intra_op_parallelism_threads = 1
session_config.inter_op_parallelism_threads = 1
3.数据集共享
如果使用的是
tf.data.Dataset
,请确保分片的数量限制为一个。4.梯度门
对于确定性功能,某些类型的模型可能在会话配置中需要
gate_gradients=tf.train.Optimizer.GATE_OP
。5.水平
如果您使用Horovod使用两个以上的GPU进行训练,就像这样,
os.environ['HOROVOD_FUSION_THRESHOLD']='0'
为了更清楚地检查两次运行之间的确定性,我建议使用已记录的here方法。我还建议使用这种方法来确认两次跑步之间的初始权重(在训练的第一步之前)完全相同。
有关TensorFlow中确定性的最新信息(着重于使用GPU时的确定性),请查看NVIDIA请我驱动的tensorflow-determinism项目。
关于python - 如何确保神经网络性能的可比性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59032574/