pytorch通过训练结果的复现设置随机种子

作者:tianren9 时间:2021-04-19 07:58:53 

通过设置全局随机种子使得每次的训练结果相同可以复现


def seed_torch(seed=2018):
   random.seed(seed)
   os.environ['PYTHONHASHSEED'] = str(seed)
   np.random.seed(seed)
   torch.manual_seed(seed)
   torch.cuda.manual_seed(seed)
   torch.backends.cudnn.deterministic = True

这里我主要讲一下模型在复现结果遇到的一些问题。

首先在固定随机种子之后,每次模型训练出来的结果一定是一样的,如果不相同,那么说明训练过程中一定还有一部分随机性操作没有被固定。

将模型参数保存下来,然后加载模型参数进行测试,如果发现结果和训练过程中得到的结果有差异。

这个时候就需要按照以下步骤进行分析:

1、先改变batchsize,看看实验复现的结果是否会发生变化。如果发生变化就说明batchsize会影响模型推理过程中的参数。

2、检查一下forward中有哪些参数跟batchsize有关,或者是不是代码写错了。比如batchsize就会影响LSTM的模型参数的初始化。

3、最后检查测试集划分batch的时候是否都一样。


test_loader = DataLoader(test_dataset, batch_size=batchsize, shuffle=True, num_workers=4, pin_memory=True)

比如这样一行代码,测试集每次都被打乱了,虽然固定了随机种子,但是这样只能保证第k轮的随机种子是一样的,而第1轮和第10轮的随机种子是不一样的。

这样的话,比如模型在第13个epoch收敛,得到的结果在是第13轮的测试集进行测试的,而模型在加载的时候是在第一轮的测试进行测试的,结果自然有差异。

来源:https://blog.csdn.net/u010589524/article/details/89371919

标签:pytorch,结果,复现,随机种子
0
投稿

猜你喜欢

  • python基础教程之Hello World!

    2021-03-05 22:45:06
  • python turtle绘图命令及案例

    2022-04-29 10:26:58
  • 一个奇怪的CSS现象

    2010-02-10 12:28:00
  • 图文教程教你asp编译成dll组件

    2010-07-16 13:16:00
  • 批量获取及验证HTTP代理的Python脚本

    2023-11-19 12:10:34
  • python使用参数对嵌套字典进行取值的方法

    2022-04-12 10:13:27
  • 如何把数据库的记录输出到表格去?

    2009-11-06 13:37:00
  • 如何由Sybase向SQL Server移植数据库

    2009-01-20 15:56:00
  • 如何用python实现结构体数组

    2023-10-13 19:07:34
  • 用CSS实现柱状图(Bar Graph)的方法(四)—table实现复杂柱状图

    2008-05-28 12:55:00
  • PL/SQL实现Oracle数据库任务调度

    2010-07-20 12:57:00
  • PHP实现异步定时多任务消息推送

    2023-05-25 09:51:29
  • asp获取完整url地址代码

    2010-03-22 14:25:00
  • 浅谈python在提示符下使用open打开文件失败的原因及解决方法

    2023-12-07 18:31:33
  • 发散后的期望

    2008-07-31 18:32:00
  • Python爬虫之Selenium实现关闭浏览器

    2022-12-09 07:11:03
  • javascript 通用滑动门tab类

    2023-08-05 09:42:25
  • PHP实现将科学计数法转换为原始数字字符串的方法

    2023-10-15 21:13:10
  • ASP控制每页打印行数实例

    2008-04-13 06:48:00
  • golang微服务框架基础Gin基本路由使用详解

    2023-07-23 10:31:19
  • asp之家 网络编程 m.aspxhome.com