就我的论文而言,我正在尝试使用张量流(v 1.14)评估不同参数对我的主动学习对象检测器的影响。

因此,我正在使用来自Zoo模型的fast_rcnn_inception_v2_coco标准配置和固定的random.seed(1)。

为了确保我有一个正常的基准实验,我尝试使用相同的数据集,学习时间,poolingsize等两次运行对象检测器。

无论如何,经过20个活跃的学习周期后,这两个绘制的图有很大的不同,您可以在此处看到:
python - 如何确保神经网络性能的可比性?-LMLPHP
是否有可能确保可比的神经网络性能?如果是,如何设置科学实验设置,以比较参数变化的结果,例如学习率,学习时间(这是我们积极学习周期的约束!)

最佳答案

为了在使用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/

10-12 21:32