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

这篇具有很好参考价值的文章主要介绍了Pytorch因nn.Parameter导致实验不可复现的一种情况。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

也可以多次实验取均值以避免结果复现。文章来源地址https://www.toymoban.com/news/detail-727570.html

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

到了这里,关于Pytorch因nn.Parameter导致实验不可复现的一种情况的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TypeError: cannot assign ‘torch.cuda.FloatTensor‘ as parameter ‘bias‘ (torch.nn.Parameter or None ex

    报错定位到的位置是在: self.bias = self.bias.cuda() 意为将把bias转到gpu上报错; 网上查询了很多问题都没解决,受到这篇博客的启发;pytorch 手动设置参数变量 并转到cuda上_XiaoPangJix1的博客-CSDN博客 原因可能是:bias是torch.nn.Parameter(),转移到cuda上失败,提示此报错; 其实根本原因

    2024年02月16日
    浏览(45)
  • 【Dijkstra】最短路算法的一种

    首先,本文默认读者基本熟悉Dijkstra基本原理 DIjkstra是单源最短路的一种算法。使用数组d[i]来储存结点i到源点s的最短路径长度,每次更新d[i]数组后,d[i]中最小的一定是一条最短路径长度。也就是说每次更新后都能找到一条最短路径,以下给出证明: 假设d[]数组中当前最小

    2024年02月03日
    浏览(41)
  • 下载YouTube视频的一种方法

    yt-dlp 安装Python环境 pip install yt-dlp 默认格式,高于720P的格式一般是 webm 格式 yt-dlp https://youtu.be/sKrT6mBrosc 下载视频转换成mp4(用–merge-output-format参数) yt-dlp –merge-output-format mp4 https://youtu.be/sKrT6mBrosc 1.只下载音频 找m4a格式,列表越靠后越清晰。比如ID:140 | EXT:m4a | audio onl

    2024年02月13日
    浏览(44)
  • 后端登录安全的一种思路

    PS:作者是小白能接触到的就只会这样写。勿喷。 前提 思路: 结合io流将登录token存储到配置文件中,不将token存储到浏览器端,从而避免盗取。 下面jwt的学习可以参考下这个: JWT --- 入门学习_本郡主是喵的博客-CSDN博客 JWT工具类 IO工具类 测试文件

    2024年02月14日
    浏览(25)
  • 辨别貔貅币的一种代码思路

    说在前头 Web3是一种新兴的网络概念,由于某些原因导致我们能够接触到的相关技术知识实在有限,每当我遇见技术瓶颈总是不能找到充足的资料,这也让我萌生了填补这片空白知识的冲动。 “Hello Web3” 这个专栏会尽力将我掌握的web3 知识分享给大家。如果分享的知识能帮助

    2024年02月05日
    浏览(33)
  • node.js调用C++的一种方案

    nodejs官方维护了一套ABI(应用二进制接口),用于完成nodejs和C++的通信。 官网介绍的Node-API是C API,对应的node-addon-api是它的C++版本,更容易使用,本文介绍的也是这个C++的版本。 通过一个示例来说明如何使用node-addon-api 1、初始化一个空项目(生成package.json文件) npm init 2、

    2024年02月03日
    浏览(30)
  • vscode “未定义标识符”的一种情况

    原来工程复制到新电脑上面,变量出现“未定义标识符”的红色底纹波浪线,按Ctrl + 鼠标左键,可以跳转到定义处(说明,\\\"includePath\\\"项设置正确)。 根据电脑的具体的情况,修改“intelliSenseMode”: 1)如果你的电脑是默认的情况(没有额外安装编译器),设置为\\\"intelliSens

    2024年02月12日
    浏览(32)
  • mac修改/etc/profile导致终端所有命令不可使用

    原因:配置docker环境的时候修改了/etc/profile,没想到导致悲惨事情,输入什么命令都是 Command not found 可恶!!!试了好久,最终这样搞定! 1-终端输入命令 因为sudo命令也不能直接使用了,只能这样调用 2-将之前修改的/etc/profile恢复成原样,我是直接删除 3-重启 祝福你也成功

    2024年04月25日
    浏览(30)
  • Windows上获取父进程的一种简单方法

    测试平台:win10 专业版 21H2 1904 编译平台:gcc version 12.2.0 (x86_64-posix-seh-rev2, Built by MinGW-W64 project) 代码如下:

    2024年02月11日
    浏览(32)
  • FPGA远程更新/远程调试的一种简单方法

    之前介绍过一种远程(无线)更新的方式,详见《起飞!通过无线WIFI下载调试FPGA》,这种方式缺点有两个:一是速度较慢;二是我们的设备中需要增加一个无线设备,增加成本的同时增加了暴露的风险。这两点即无法在调试的时候使用也没办法在实际设备中使用。今天我们

    2024年02月09日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包