当前位置: 首页 > news >正文

Pytorch因nn.Parameter导致实验不可复现的一种情况

文章首发见博客:https://mwhls.top/4871.html。
无图/格式错误/后续更新请见首发页。
更多更新请到mwhls.top查看
欢迎留言提问或批评建议,私信不回。

没解决,只是记录这种情况。

也可以多次实验取均值以避免结果复现。

场景
  • 自己的模块中,包含一个与x相加的可学习参数,导致单卡同种子下结果无法复现。
    • 去掉该模块,能正常复现。
    • 保留声明,注释使用后,能正常复现。且结果与无该模块的结果一致。
  • 除了在训练前设定种子外,我还在模块内部再次设置了种子,但依然无效。
相关代码
    def __init__(self):self.pos = torch.nn.Parameter(torch.zeros((1, 1, config.DATA.HEIGHT, config.DATA.WIDTH)))def set_seed(self):seed = 1random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.backends.cudnn.deterministic = Truetorch.backends.cudnn.benchmark = Falsedef forward(self, x):x += self.posreturn x
吐槽
  • 在第一次增加后,性能增了1个点,我还以为我nb起来了。
    • 后来习惯性复现的时候,发现结果又变了。
    • 调试几天才发现是这个原因。
  • 考虑的性能变好,大不了我多次实验取均值。
    • 结果多次实验都掉了,再也回不去了。
    • 所以也没继续解决。
  • 值得一提的是,TransReID的代码中,就是这么用的,但是它的结果就能复现,咱们明明都设置种子了。下面是TransReID里用的。
    self.pos_embed = nn.Parameter(torch.zeros(1, num_patches + 1, embed_dim))
http://www.lryc.cn/news/187644.html

相关文章:

  • MySQL表名区分不区分大小写,规则是怎样
  • Design patterns--观察者模式
  • 【Spring Boot】SpringBoot 单元测试
  • ansible 调研
  • QT UI控件汇总介绍
  • 【垃圾回收概述及算法】
  • 2021年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 为什么通过一致性正则化方法就可以避免将所有未标记数据集分配给同一类?
  • 第4章 决策树
  • 在Remix中编写你的第一份智能合约
  • 如何查看dll文件内导出函数名称
  • 学习笔记|串口通信的基础知识|同步/异步|RS232|常见的串口软件的参数|STC32G单片机视频开发教程(冲哥)|第二十集:串口通信基础
  • JAVA String 和 String[][]互转的两种方法
  • 推荐几个制作svg的工具
  • Java实现防重复提交,使用自定义注解的方式
  • Springboot实现Web组件注册
  • Element组件案例 Vue路由 前端打包部署步骤
  • mysql5.7停止维护时间
  • 解密.kat6.l6st6r勒索病毒:保护数据的关键方法
  • Godot 添加信号
  • JS如何判断文字是否溢出(被ellipsis)?
  • pb:常用函数和语句清单
  • (8)SpringMVC中的视图类型及其特点,以及视图控制器view-controller的配置
  • ansible学习笔记分享
  • 以dzzoffice为例设置通过 SOCKET 连接 SMTP 服务器发送(支持 ESMTP 验证)
  • 加拿大艾伯塔省执法部门利用OpenText Encase显着提高案件效率
  • 【Codeforces】Educational Codeforces Round 156 [Rated for Div. 2]
  • 结合swagger的前端架构小记
  • Python字典全解析:从基础到高级应用
  • Fourier变换中的能量积分及其详细证明过程