【问题标题】:How to ensure neural net performance comparability?如何保证神经网络性能的可比性?
【发布时间】:2020-03-20 18:55:35
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: python tensorflow machine-learning data-science object-detection


    【解决方案1】:

    要在 CPU 上进行训练时实现确定性,以下内容就足够了:

    1.设置所有种子

    SEED = 123
    os.environ['PYTHONHASHSEED']=str(SEED)
    random.seed(SEED)
    np.random.seed(SEED)
    tf.set_random_seed(SEED)
    

    2。将 CPU 线程限制为 1 个

    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 时的确定性),请查看tensorflow-determinism NVIDIA 慷慨资助我推动的项目。

    【讨论】:

      猜你喜欢
      • 2021-06-18
      • 1970-01-01
      • 2017-10-20
      • 2019-04-25
      • 2019-11-26
      • 2012-05-05
      • 2010-10-24
      • 2017-08-31
      相关资源
      最近更新 更多