官网说明:

                 Reproducibility — PyTorch 1.8.0 documentation

参考博客:

                  PyTorch模型可复现性总结 - 简书

pytorch 固定随机数种子踩过的坑_yqf3838751的博客-CSDN博客

PyTorch设置随机数种子使结果可复现 - 简书

代码设置:

        1. 训练文件:

        把以下代码放在主文件的最开始部分。

 #cuDnn中往往会并行跑多个算法来选择效果最好的那个,这里就可能引入噪声。因此,如果为了保证可复现性,可以将这个特性禁用,缺点就是会损失一定的性能。如果为了达到最优的效果,可以将开关打开:def set_seed(seed):torch.manual_seed(seed)torch.cuda.manual_seed(seed)torch.cuda.manual_seed_all(seed)  # if you are using multi-GPU.np.random.seed(seed)  # Numpy module.random.seed(seed)  # Python random module.os.environ['PYTHONHASHSEED'] = str(seed)torch.use_deterministic_algorithms(True)torch.backends.cudnn.enabled = False torch.backends.cudnn.benchmark = False #禁用benchmark,保证可复现#torch.backends.cudnn.benchmark = True #恢复benchmark,提升效果torch.backends.cudnn.deterministic = Trueos.environ['CUBLAS_WORKSPACE_CONFIG'] = ':4096:8'setup_seed(2021)

       2. 数据加载器设置: 

train_dataset = ImageList(opt.training_list,transform)def seed_worker(worker_id):worker_seed = torch.initial_seed() % 2**32numpy.random.seed(worker_seed)random.seed(worker_seed)DataLoader(train_dataset,batch_size=batch_size,num_workers=num_workers,worker_init_fn=seed_worker
)

其他问题:

1.关于nn.SLTM的问题

实验中发现,如果设置了nn.LSTM的dropout参数,是无法通过随机种子的固定来复现实验结果的。这似乎是一个cuDNN的bug,在此记录一下。

相关讨论见nn.LSTM gives nondeterministic results with dropout and multiple layers。

示例如下:

lstm = nn.LSTM(input_size = 256, hidden_size = 128, num_layers = 1, batch_first = True, dropout = 0.5 )

2.关于nn.Embedding()的问题

在数据预处理阶段使用了随机初始化的nn.Embedding(),并将其通过持久化方式pickle保存了下来。

再次使用它时,通过pickle.load()读取,即使固定了随机数种子,此时读取到的nn.Embedding()中的weight与当初保存下来的weight是不同的。

暂不清楚原因。

3.numpy随机数与Dataloader多进程共用的问题

来源:PyTorch + NumPy这么做会降低模型准确率,这是bug还是预期功能?

描述:在 PyTorch 同时使用 NumPy 的随机数生成器和多进程数据加载会导致相同的扩充数据,只有专门设置 seed 才可以解决这个 bug,否则会降低模型的准确率。

个人评价:可能这就是上面个的数据加载器设置中需要有相关设置的原因。

pytorch 可复现性相关推荐

  1. Pytorch 深度学习结果无法复现的解决办法

    解决方案:在你的train 开头加上以下这一段代码 ##model repertition seed = 42 random.seed(seed) # os.environ['PYTHONHASHSE ...

  2. PyTorch中模型的可复现性

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:AI算法与图像处理 在深度学习模型的训练过程中,难免引入 ...

  3. Pytorch坑——模型可复现性实现,随机种子设置

    最近被pytorch的模型复现搞了一波心态,每次训练结果不一样,一开始还以为自己的网络优化有效,谁知每次训练结果是不固定的,调了很久终于让模型固定了下来,在此记录下这个坑. 针对pytorch1.7. ...

  4. Facebook 发布深度学习工具包 PyTorch Hub,让论文复现变得更容易

    近日,PyTorch 社区发布了一个深度学习工具包 PyTorchHub, 帮助机器学习工作者更快实现重要论文的复现工作.PyTorchHub 由一个预训练模型仓库组成,专门用于提高研究工作的复现性以 ...

  5. PyTorch Hub发布获Yann LeCun强推!一行代码调用经典模型

    作者 | Team PyTorch 译者 | Monanfei 责编 | 夕颜 出品 | AI科技大本营(ID: rgznai100) 导读:6月11日,Facebook PyTorch 团队推出了全 ...

  6. 收藏!PyTorch常用代码段合集

    ↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Jack Stark,来源:极市平台 来源丨https://zhu ...

  7. PyTorch 多机多卡训练:DDP 实战与技巧

    作者丨996黄金一代@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/250471767 编辑丨极市平台 零. 概览 想要让你的PyTorch神经网络在多卡环境上跑得又 ...

  8. PyTorch常用代码段合集

    ↑ 点击蓝字 关注视学算法 作者丨Jack Stark@知乎 来源丨https://zhuanlan.zhihu.com/p/104019160 极市导读 本文是PyTorch常用代码段合集,涵盖基本 ...

  9. 清华大学开源迁移学习算法库:基于PyTorch实现,支持轻松调用已有算法

    机器之心报道 编辑:魔王 作者:清华大学大数据研究中心 近日,清华大学大数据研究中心机器学习研究部开源了一个高效.简洁的迁移学习算法库 Transfer-Learn,并发布了第一个子库--深度领域自适 ...

最新文章

  1. 办公族的健康提醒脚本
  2. Python 技术篇-1行代码实现语音识别,speech库快速实现简单的语音对话
  3. oracle缩减临时表空间,oracle的临时表空间写满磁盘空间解决改问题的步骤
  4. Property 'submit' of object #HTMLFormElement is not a function
  5. 如何使mysql编码格式_Mysql设置编码方式及基本操作
  6. 不需要许可认证即可解决WIN2003不能超过2个远程终端用户试用120天的问题
  7. win11资源管理器历史搜索记录如何删除 Windows11禁用资源管理器历史搜索记录的设置方法
  8. false在python什么意思_python – `x [False]`在numpy中做什么?
  9. 2021-08-22监听器实现在线客户端统计
  10. CCPC-WFinal-女生专场
  11. 如何使用SQL语句根据经纬度计算距离
  12. 4.21 使用剪切蒙版命令制作可爱的皮球 [Illustrator CC教程]
  13. 一个字节等于多少位?
  14. 提示Algorithm negotiation failed 错误该如何解决
  15. 网页制作-第一周-任务1_1网页和网站的概念
  16. python 导入excel 分词_如何对excel表格里的词结巴分词python
  17. 国密算法—SM2介绍及基于BC的实现
  18. 《微软云计算Windows Azure开发与部署权威指南》——6.8 AppFabric服务总线的多播服务开发...
  19. 运动想象| EEG信号、共空间模式算法(CSP)
  20. CentOS桌面安装

热门文章

  1. ios获取区域服务器信息,ios获取服务器数据
  2. php7.0搭配nginx,Linux安装配置php7.0+nginx
  3. opencv对图像是软解码_基于opencv和c++的图像处理软件设计与实现(26页)-原创力文档...
  4. 数学实验matlab课后习题,数学实验练习题(MATLAB)
  5. postgresql 自定义表变量_Oracle GoldenGate新支持开源关系型数据库PostgreSQL
  6. 网游源码完整服务端_【每日源码】微人事是一个前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。...
  7. android mvp 登录,Android MVP(初级篇二、登陆案例)
  8. junit 经典示例_JUnit 4,JWebUnit,Arquillian和JSF单元示例教程
  9. python多线程结束线程_Python线程– Python多线程
  10. JavaScript声明全局变量的三种方式