相关阅读Pytorch基础https://blog.csdn.net/weixin_45791458/category_12457644.html?spm1001.2014.3001.5482有时候如果需要代码在多个运行中具有可重复性可以通过以下方式来设置随机种子import torch import numpy as np import random def set_seed(seed): random.seed(seed) # 设置Python的随机种子 np.random.seed(seed) # 设置NumPy的随机种子 torch.manual_seed(seed) # 设置PyTorch的CPU随机种子 torch.cuda.manual_seed(seed) # 设置当前GPU的随机种子如果使用GPU torch.cuda.manual_seed_all(seed) # 设置所有GPU的随机种子如果使用多个GPU torch.backends.cudnn.deterministic True # 确保每次卷积操作结果一致 torch.backends.cudnn.benchmark False # 禁用CUDNN的自动优化 # 调用这个函数并传递相同的seed值 set_seed(42)torch.manual_seed()函数设置了CPU的随机种子在deviceCPU的情况下。torch.cuda.manual_seed()函数设置了当前GPU的随机种子在device当前GPU的情况下有关当前GPU的设置方式见Pytorch基础torch.cuda.set_device函数。torch.cuda.manual_seed_all()函数设置了所有GPU的随机种子在使用多个GPU的情况下。上面三个函数会影响下面这些有随机性的函数torch.rand()生成[0, 1)区间的均匀分布随机数张量。torch.randn()生成均值为0方差为1的标准正态分布随机数张量。torch.randint()生成指定范围内的随机整数张量。torch.randperm()生成从0到n-1的随机排列张量dataloader的打乱就是靠这个实现。torch.bernoulli()根据伯努利分布生成随机张量。torch.normal()根据正态分布生成随机张量。torch.randlike()生成[0, 1)区间的均匀分布随机数张量与给定张量形状相同。torch.nn.init.xavier_uniform_()根据Xavier均匀分布初始化权重。torch.nn.init.kaiming_normal_()根据He正态分布初始化权重。.....如果重新调用这三个函数会导致重置相应的随机数生成器的状态因此生成的随机数序列又会从头开始如下所示。import torch import random import numpy as np def set_seed(seed): random.seed(seed) # 设置Python的随机种子 np.random.seed(seed) # 设置NumPy的随机种子 torch.manual_seed(seed) # 设置PyTorch的随机种子 torch.cuda.manual_seed(seed) # 设置PyTorch CUDA的随机种子如果使用GPU torch.cuda.manual_seed_all(seed) # 设置所有GPU的随机种子如果使用多个GPU torch.backends.cudnn.deterministic True # 保证卷积操作的确定性 torch.backends.cudnn.benchmark False # 禁用CUDNN的自动优化 # 设置种子并生成随机张量 set_seed(42) a torch.rand(5) print(a) # 输出tensor([0.3745, 0.9507, 0.7319, 0.5987, 0.1560]) # 再次设置相同的种子并生成随机张量 set_seed(42) b torch.rand(5) print(b) # 输出tensor([0.3745, 0.9507, 0.7319, 0.5987, 0.1560])torch.backends.cudnn.deterministicTrue表示启用cuDNN的确定性行为确保每次卷积操作产生相同的结果。因为cuDNN在默认情况下会进行某些非确定性的优化这些优化有时会导致相同输入在不同次运行时产生略微不同的结果。torch.backends.cudnn.benchmarkFalse表示禁用cuDNN的自动优化功能。默认情况下cuDNN会根据每个卷积层的输入大小和配置动态选择最快的实现方法。