Semilla aleatoria fija para todos (pytorch, python, numpy)

    args.seed =42
    torch.manual_seed(args.seed)
    torch.cuda.manual_seed_all(args.seed)
    torch.cuda.manual_seed(args.seed)

    np.random.seed(args.seed)
    random.seed(args.seed)
    torch.backends.cudnn.deterministic = True

En los experimentos que requieren la generación aleatoria de datos, se generan datos para cada experimento. La semilla aleatoria se configura para garantizar que se genere un número aleatorio fijo cada vez, lo que hace que los resultados de cada experimento sean consistentes, lo que conduce a la comparación y mejora de los experimentos. para que el número aleatorio generado sea el mismo cada vez que se ejecuta el archivo .py.

pytorch (cpu, gpu, gpu)

1. Configure la semilla para que la CPU genere números aleatorios:

torch.manual_seed(seed)

2. Configure la semilla para una GPU específica para generar números aleatorios:

torch.cuda.manual_seed(number)

3. Establezca semillas para todas las GPU para generar números aleatorios:

torch.cuda.manual_seed_all(number)

Si no se establece ninguna semilla aleatoria, los resultados aleatorios serán diferentes cada vez. Los resultados aleatorios son los mismos después de la configuración.

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


# 设置随机种子
import torch
# 设置随机种子
torch.manual_seed(0) # 不同的随机种子生成随机数不同,换成其他值随机数不一样
# 生成随机数
print(torch.rand(1)) # 返回一个张量,包含了从区间[0, 1)的均匀分布中抽取的一组随机数
print(torch.rand(1)) # 设置随机种子后,是每次运行.py文件的输出结果都一样,随机函数结果不同。
# 输出结果:
tensor([0.4963])
tensor([0.7682])


#若想要结果都一样,那你可以在每个随机函数前都设置一模一样的随机种子
torch.manual_seed(0)
print(torch.rand(1))
torch.manual_seed(0)
print(torch.rand(1))
# 输出结果:
tensor([0.4963])
tensor([0.4963])


entumecido

import numpy as np

np.random.seed(1)
L1 = np.random.randn(3, 3)
np.random.seed(1)
L2 = np.random.randn(3, 3)
print(L1)
print(L2)

# 结果
[[ 1.62434536 -0.61175641 -0.52817175]
 [-1.07296862  0.86540763 -2.3015387 ]
 [ 1.74481176 -0.7612069   0.3190391 ]]
 
[[ 1.62434536 -0.61175641 -0.52817175]
 [-1.07296862  0.86540763 -2.3015387 ]
 [ 1.74481176 -0.7612069   0.3190391 ]]

pitón

random.seed(1)
print(random.randrange(10))

La esencia es usar su propia función, y el número aleatorio se fija después de usar la semilla. Al igual que random.seed(), el uso de la función aleatoria de random fijará el número aleatorio. Usando np.random.seed(), np.random.randn() arreglará el número aleatorio.

referencia:

[PyTorch] Explicación detallada de torch.manual_seed()

Supongo que te gusta

Origin blog.csdn.net/qq_41458274/article/details/129740005
Recomendado
Clasificación