利用随机数种子来使pytorch中的结果可以复现

在神经网络中,参数默认是进行随机初始化的。不同的初始化参数往往会导致不同的结果,当得到比较好的结果时我们通常希望这个结果是可以复现的,在pytorch中,通过设置随机数种子也可以达到这么目的。

在百度如何设置随机数种子时,搜到的方法通常是:

SEED = 0
torch.manual_seed(SEED)
torch.cuda.manual_seed(SEED)

自己在按照这种方法尝试后进行两次训练所得到的loss和误差都不同,结果并没有复现。

也搜过一些方法,比如设置参数:

torch.backends.cudnn.deterministic = True

但是在自己的网络中这样设置并没有用,依然得到不同的结果。

后面偶然在google中搜到有人在设置随机数种子时还加上了np.random.seed(SEED),经过尝试后发现结果是可复现的了。但检查自己网络的实现发现并没有直接调用numpy来产生随机数的地方,推测可能是pytorch内部调用了numpy的一些函数。去查看了一些pytorch中关于参数初始化的代码,比如normal的初始化:

点开source查看源码:

发现是调用了tensor.normal_函数,再去文档查看这个函数发现查看不了源码:

通过这些还是没能发现pytorch和numpy除了之前众所周知的接口外的内在联系,希望在以后的学习中随着对这两个库的理解与应用的深入能够了解,届时会对这篇文章做再次更新,毕竟知其然还要知其所以然嘛~

后面补充更新:在整理代码时,发现自己在处理数据时用上了这样一行:

data1 = data1.sample(frac=1).reset_index(drop=True) 

当时是用来打乱数据。这里是调用的pandas里面的方法,把这行代码注释掉再把np.random.seed(SEED)注释掉发现结果可以复现。可以推断是这里的随机需要给numpy也设置随机数种子。

如果没有涉及其他随机处理的话这两行可以固定pytorch中的随机数。

SEED = 0
torch.manual_seed(SEED)
torch.cuda.manual_seed(SEED)

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏华章科技

不会用Photoshop抠图?Python助你一键“除”人!

导读:看过英剧《黑镜》吗?圣诞特别版《白色圣诞节》中有这样一个场景:其中一个未来科技有自由屏蔽人像的功能,可以让你屏蔽任何一个不想看见或不喜欢的人,然后留下的是...

1441
来自专栏CreateAMind

开源|MultiNet模型解决Kitti数据集自动驾驶中的道路分割、车辆检测和街道分类(附源代码)

MultiNet能够同时完成道路分割、汽车检测和道路分类的任务。MultiNet模型的实时存档速度和分割性能都处于最先进水平。详细的模型描述请查阅我们的论文。

1953
来自专栏ATYUN订阅号

TensorFlow:使用Cloud TPU在30分钟内训练出实时移动对象检测器

是否能够更快地训练和提供对象检测模型?我们已经听到了这种的反馈,在今天我们很高兴地宣布支持训练Cloud TPU上的对象检测模型,模型量化以及并添加了包括Ret...

2295
来自专栏IT派

干掉照片中那些讨厌的家伙!Mask R-CNN助你一键“除”人!

【导读】:看过英剧《黑镜》吗?圣诞特别版《白色圣诞节》中有这样一个场景:其中一个未来科技有自由屏蔽人像的功能,可以让你屏蔽任何一个不想看见或不喜欢的人,然后留下...

1020
来自专栏梦里茶室

毫秒级检测!你见过带GPU的树莓派吗?

树莓派3B+英特尔神经计算棒进行高速目标检测 转载请注明作者梦里茶 ? 代码: 训练数据预处理: https://gist.github.com/ahan...

3.8K8
来自专栏小巫技术博客

Python 中文图片OCR

2433
来自专栏Java进阶架构师

dubbo源码解析-详解LoadBalance

终于到了集群容错中的最后一个关键词,也就是LoadBalance(负载均衡),负载均衡必然会涉及一些算法.但是也不用太担心,算法这个词虽然高大上,但是算法也有简...

1343
来自专栏实用工具入门教程

如何部署 TensorFlow 服务器

TensorFlow是一款由Google构建的用于训练神经网络的开源机器学习软件。TensorFlow的神经网络以有状态数据流图的形式表示。图中的每个节点表示神...

3613
来自专栏专知

【干货】快速上手图像识别:用TensorFlow API实现图像分类实例

【导读】1月17日,Arduino社区的编辑SAGAR SHARMA发布一篇基于TensorFlow API的图像识别实例教程。作者通过TensorFlow A...

7677
来自专栏北京马哥教育

手把手教你用 1 行命令实现人脸识别

? 人脸识别很难吗? -- Kangvcar 本文导航 ◈ 环境要求00% ◈ 环境搭建03% ◈ 实现人脸识别19% ◈ 示例一(1 行命令实现人脸识别):...

3306

扫码关注云+社区