当前位置:   article > 正文

随机数种子的作用域问题_random-spilt

random-spilt

项目场景:

机器学习和深度学习中,为了程序的可复现性,需要设置随机数种子。在跑多个模型时,由于数据的预处理不同,数据集进行划分时重复使用torch.utils.data.random_split,需要注意的问题

问题描述:

由于我这里使用的torch是1.5.0版本,torch.utils.data.random_split函数没有generator的参数设置种子,因此需要在代码前加入

#  Fix Seed
torch.manual_seed(0)  # 为CPU设置种子用于生成随机数,以使得结果是确定的
  • 1
  • 2

但是单独跑各个模型和循环跑所有模型的时候,得到的结果不一样

原因分析:

经过一步步调试发现,循环跑所有模型的时候,每次运行到torch.utils.data.random_split函数时,得到的训练集和测试集的indice列表和单独跑模型的时候不同

解决方案:

循环跑模型时,是将设置随机数种子这句话放在了循环外,而设置随机数种子只影响第一个torch.utils.data.random_split函数,因此后面再进入循环,设置随机数种子没有作用了。
numpy设置随机数种子也是同样的道理,下面举两个例子:
只设置一个随机数种子

import numpy as np
np.random.seed(0)
m = np.random.randint(10)
print(m)	# 5
m = np.random.randint(10)
print(m)	# 0
m =
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/878181
推荐阅读
相关标签
  

闽ICP备14008679号