简单来说就是指定随机数种子(种子可以是个任意int值),用来生成伪随机数:
import torch
torch.manual_seed(1)
print(torch.rand(1))
print(torch.rand(1))
print(torch.rand(1))
输出:
tensor([0.7576])
tensor([0.2793])
tensor([0.4031])
之后再运行同样会生成相同的随机数序列。
这样的意义在于可以保证在深度网络在随机初始化各层权重时,多次试验的初始化权重是一样的,结果可以复现。
此外,还可以给GPU设置种子,上面讲的是给CPU设置的情况:
# 为当前GPU设置
if args.cuda:
torch.cuda.manual_seed(args.seed)
# 为所有GPU设置
torch.cuda.manual_seed_all(args.seed)