Pytorch 中各种 seed() 的用法总结

1 各种的 seed() 函数

一共有四种 seed() 函数

  • random.seed(): 使用 random 模块生成的随机数种子

  • torch.manual_seed(): pytorch 中为 CPU 设置的随机数种子

  • torch.cuda.manual_seed(): pytorch 中为 GPU 设置的随机数种子

  • torch.cuda.manual_seed_all(): pytorch 中为所有 GPU 设置的随机数种子

2 使用方法:

import random
random.seed(0)
random.seed(1)
import torch
torch.manual_seed(0)
  • seed() 函数中有一个用于规定生成的随机数算法, 不同的算法所产生的随机数不同, 例如seed(0) 和seed(1) 为两种不同的算法, 所产生的随机数也不同, seed(0) 和 seed(0) 是相同的算法, 所产生的随机数也相同

  • 如果不设置seed() 中的键值, 系统会根据时间来自己选择这个值,此时每次生成的随机数会因时间的差异而有所不同

3 程序示例

3.1 不同的seed(), 产生的随机数不同, 相同的seed(), 产生相同的随机数

import random

random.seed(0)
print('First time run seed(0):')
for i in range(0, 5):
    print(random.randrange(0, 100))
random.seed(0)
print('Second time run seed(0):')
for i in range(0, 5):
    print(random.randrange(0, 100))
    

random.seed(1)
print('First time run seed(1):')
for i in range(0, 5):
    print(random.randrange(0, 100))
random.seed(1)
print('Second time run seed(1):')
for i in range(0, 5):
    print(random.randrange(0, 100))

>> 结果展示:
First time run seed(0):
49
97
53
5
33
Second time run seed(0):
49
97
53
5
33
First time run seed(1):
17
72
97
8
32
Second time run seed(1):
17
72
97
8
32

3.2 不在每次循环前重置 seed(), 则循环结果会接着跑下去(print 结果不同)

import random

random.seed(0)
print('First time run seed(0):')
for i in range(0, 5):
    print(random.randrange(0, 100))
print('Second time run seed(0):')
for i in range(0, 5):
    print(random.randrange(0, 100))

>>结果展示:
First time run seed(0):
49
97
53
5
33
Second time run seed(0):
65
62
51
38
61

4 总结

seed() 函数相当与创建了一个随机的, 非常长的列表, 取值范围为[-0x8000000000000000, 0xffffffffffffffff],十进制是[-9223372036854775808, 18446744073709551615],超出该范围将触发RuntimeError报错, 而使用随机生成函数就是从这些列表中一个一个的读出列表中的数, 如果在每次随机生成前打出 random.seed() 的函数, 相当于重置了这个列表, 随机生成的数会再次从列表中的第一数取出来。

你可能感兴趣的:(Python,基础,Pytorch,中的各种函数,python,pytorch)