相同的神经网络模型,采用相同数据集训练,得到的权重参数是否相同?

讨论深度神经网络否能被完全复现

请注意,本文编写于 429 天前,最后修改于 429 天前,其中某些信息可能已经过时。

关于神经网络是否可以复现,之前一直也很感兴趣。在群里问过一个大佬后,大佬说是cudnn的一些操作导致结果无法完全复现。刚刚在zhihu上也看到相应问题,在这里做个记录,之后有空希望能做个实验。

1) 数据方面

  • 数据的预处理方式可能不一样.数据增强方式可能不一样, 且数据增强具有一定的随机性.
  • 数据的训练顺序, 采样方式可能不一样.
    2) 模型方面
  • 模型参数的初始化方式和初始值可能不一样.
  • 模型中一些操作具有一定的随机性 (如 dropout 等).
    3) 训练方面训练采用的优化器 (optimizer) 可能不一样.
  • 与训练相关的一些超参或设置 (如 batch size, learning rate scheduler 等) 可能不一样.
  • 如果采用不同的训练框架方式训练, 框架在实现上的差异也会导致结果存在差异.

除开上述这些因素外,有人提出了这种方案来达成结果复现
第一步,设置一样的seed

np.random.seed(cfg.RNG_SEED)
torch.manual_seed(cfg.RNG_SEED)
torch.cuda.manual_seed_all(cfg.RNG_SEED)
random.seed(cfg.RNG_SEED)

第二步,关闭cudnn,打开determinstic,假如你依旧想获得cudnn加速效果,可以这么整:

torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.enabled = True

除此之外,浮点数运算的舍入舍出也存在数据精度的丢失,

要完全复现结果,我想到了几个方向:

  • 网络初始化要一致
  • 我们训练得到的梯度大小和方向也必须一致
    • 各种随机操作的随机种子必须一致
    • 每次读进来的数据要一致
    • 学习率要一致

参考资料

此处评论已关闭

aurogra 100 online https://aurogra.buszcentrum.com/

dapoxetine generic drug https://ddapoxetine.com/

how to take dapoxetine citrate https://dapoxetine.bee-rich.com/

nolvadex tablets https://tamoxifen.mrdgeography.com/

generic viagra 150 mg http://droga5.net/

walmart tadalafil vidalista 20mg https://vidalista.mlsmalta.com/

ivermectin pills cvs https://ivermectin.webbfenix.com/

mint hydroxychloroquine side effects https://hydroxychloroquine.mlsmalta.com/

remdesivir versus hydroxychloroquine https://hydroxychloroquine.webbfenix.com/

ivermectin overdose in humans https://ivermectin.mlsmalta.com/

dapoxetine hydrochloride 60 https://salemeds24.wixsite.com/dapoxetine

careprost eyelash growth https://carepro1st.com/

viagra without viagra without a doctor prescription https://buszcentrum.com/

uses for acyclovir https://www.herpessymptomsinmen.org/productacyclovir/

  1. 1
  2. ...
  3. 13
  4. 14