FL训练 set_seed(8 * fold_idx) 被调用了两次

set_seed(8 * fold_idx) 被调用了两次,分别在以下两个阶段:

  1. 模型初始化前(在设置损失函数 criterion 和定义 global_model 之前):

    set_seed(8 * fold_idx)

    这个调用的作用是确保在创建模型和其他随机相关变量(如参数初始化等)时,随机数生成器的状态是可控的,从而保证模型的初始化是可重复的。
    这种设置对于调试和实验结果的复现非常重要,尤其是在联邦学习这种可能跨多个实验运行的环境中。

  2. 训练循环开始前(在每个 fold 开始训练前):

    set_seed(8 * fold_idx)

    这个调用的作用是确保训练过程中的随机数生成器状态一致,例如数据加载器中的随机打乱顺序(shuffle)、数据增强操作,以及任何其他需要随机数的操作。这是为了避免由于训练过程中随机性带来的不可控因素影响实验的公平性或结果的稳定性。

为什么需要两次设置?

这两次 set_seed 设置的重点不同:

  • 第一次:为了控制模型初始化阶段的随机性,确保所有实验中模型的初始状态一致。
  • 第二次:为了控制训练阶段的随机性,保证每个 fold 内的训练数据处理和随机操作是一致的。

这样可以分别对不同的随机性来源进行独立控制,确保从模型初始化到训练过程的每一步都具备可重复性。

是否可以合并为一次?

虽然表面上看似重复,但两次调用的作用不同,实际上不可简单合并。如果合并为一次,可能导致以下问题:

  • 如果只在模型初始化前调用 set_seed,训练过程中涉及的随机性(如数据增强或采样)可能失去可控性。
  • 如果只在训练循环开始时调用 set_seed,模型初始化阶段的随机性(如权重初始化)可能无法保持一致。

因此,为了严格控制实验的可重复性,两次单独调用是必要且合理的。

Pytorch为什么总要设置随机种子_pytorch神经网络为什么要设置seed-CSDN博客icon-default.png?t=O83Ahttps://blog.csdn.net/m0_45866718/article/details/111804716

【调参侠的修炼笔记2】随机种子Seed的讲人话解释 - 知乎icon-default.png?t=O83Ahttps://zhuanlan.zhihu.com/p/545344518

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值