目录
  • 一、torch.manual_seed(seed) 介绍
    • torch.manual_seed(seed) 功能描述
    • 语法
    • 参数
    • 返回
  • 二、类似函数的功能
    • 三、实例
      • 实例 1 :不设随机种子,生成随机数
      • 实例 2 :设置随机种子,使得每次运行代码生成的随机数都一样
      • 实例 3 :不同的随机种子生成不同的值
    • 总结

      一、torch.manual_seed(seed) 介绍

      torch.manual_seed(seed) 功能描述

      设置 CPU 生成随机数的 种子 ,方便下次复现实验结果。

      为 CPU 设置 种子 用于生成随机数,以使得结果是确定的。

      当你设置一个随机种子时,接下来的随机算法生成数根据当前的随机种子按照一定规律生成。
      随机种子作用域是在设置时到下一次设置时。要想重复实验结果,设置同样随机种子即可。

      语法

      torch.manual_seed(seed) → torch._C.Generator

      参数

      seed,int类型,是种子 – CPU生成随机数的种子。取值范围为 [-0x8000000000000000, 0xffffffffffffffff] ,十进制是 [-9223372036854775808, 18446744073709551615] ,超出该范围将触发 RuntimeError 报错。

      返回

      返回一个torch.Generator对象。

      二、类似函数的功能

      为CPU中设置种子,生成随机数:

      torch.manual_seed(number)
      

      为特定GPU设置种子,生成随机数:

      torch.cuda.manual_seed(number)
      

      为所有GPU设置种子,生成随机数:

      # 如果使用多个GPU,应该使用torch.cuda.manual_seed_all()为所有的GPU设置种子。
      torch.cuda.manual_seed_all(number)
      

      使用原因 :

      在需要生成随机数据的实验中,每次实验都需要生成数据。设置随机种子是为了确保每次生成固定的随机数,这就使得每次实验结果显示一致了,有利于实验的比较和改进。使得每次运行该 .py 文件时生成的随机数相同。

      三、实例

      实例 1 :不设随机种子,生成随机数

      # test.py
      import torch
      print(torch.rand(1)) # 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数
      

      每次运行test.py的输出结果都不相同:

      tensor([0.4351])

      tensor([0.3651])

      tensor([0.7465])

      实例 2 :设置随机种子,使得每次运行代码生成的随机数都一样

      # test.py
      import torch
      # 设置随机种子
      torch.manual_seed(0)
      # 生成随机数
      print(torch.rand(1)) # 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数
      

      每次运行 test.py 的输出结果都是一样:

      tensor([0.4963])

      实例 3 :不同的随机种子生成不同的值

      改变随机种子的值,设为 1 :

      # test.py
      import torch
      torch.manual_seed(1)
      print(torch.rand(1)) # 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数
      

      每次运行 test.py,输出结果都是:

      tensor([0.7576])

      改变随机种子的值,设为 5 :

      # test.py
      import torch
      torch.manual_seed(5)
      print(torch.rand(1)) # 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数
      

      每次运行 test.py,输出结果都是:

      tensor([0.8303])

      可见不同的随机种子能够生成不同的随机数。

      但只要随机种子一样,每次运行代码都会生成该种子下的随机数。

      实例 4 :设置随机种子后,是每次运行test.py文件的输出结果都一样,而不是每次随机函数生成的结果一样
      # test.py
      import torch
      torch.manual_seed(0)
      print(torch.rand(1))
      print(torch.rand(1))
      

      输出结果:

      tensor([0.4963])
      tensor([0.7682])

      可以看到两次打印 torch.rand(1) 函数生成的结果是不一样的,但如果你再运行test.py,还是会打印:

      tensor([0.4963])
      tensor([0.7682])

      实例 5 :如果你就是想要每次运行随机函数生成的结果都一样,那你可以在每个随机函数前都设置一模一样的随机种子

      # test.py
      import torch
      torch.manual_seed(0)
      print(torch.rand(1))
      torch.manual_seed(0)
      print(torch.rand(1))
      

      输出结果:

      tensor([0.4963])
      tensor([0.4963])

      参考链接

      【pytorch】torch.manual_seed()用法详解

      总结

      声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。