首页 > 解决方案 > 如何保证神经网络性能的可比性?

问题描述

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

因此,我使用模型动物园中的 faster_rcnn_inception_v2_coco 标准配置和固定的 random.seed(1)。

为了确保我有一个有效的基线实验,我尝试使用相同的数据集、学习时间、池大小等运行对象检测器两次。

无论如何,在 20 个主动学习周期之后绘制的两个图表完全不同,正如您在此处看到的那样: 在此处输入图像描述 是否有可能确保具有可比性的神经网络性能?如果是,如何设置科学实验设置,比较参数变化结果,如学习率、学习时间(这是我们主动学习周期中的一个约束!) poolingsize,...

标签: pythontensorflowmachine-learningdata-scienceobject-detection

解决方案


为了在 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'

为了更清楚地检查运行之间的确定性,我推荐使用我在此处记录的方法。我还建议使用这种方法来确认初始权重(在训练的第一步之前)在运行之间完全相同。


有关 TensorFlow 中确定性的最新信息(重点关注使用 GPU 时的确定性),请查看 NVIDIA 支付给我推动的tensorflow-determinism项目。


推荐阅读