PyTorch学习记录九——随机数

随机数概述

  • 1.设置种子用于生成相同的随机数,使得结果是确定的,方便下次复现实验结果。
  • 2.seed()用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed()值,则每次生成的随机数都相同。如果不设置随机种子,系统则会根据当前时间作为参数。
  • 3.一个随机种子只能使用一次,作用于下一个随机数的生成。再有随机数生成的话,默认所使用的参数为系统时间(不是真实世界时间)。如果想要在一个脚本中生成好几个相同的随机数,那么就需要设置多个相同的随机种子。
  • 4.即使只设置一个随机种子,如果设置生成两个随机数,他们的值会不一样,但是每次运行test.py脚本的全部输出结果还是一样的。因为第二个随机数的生成虽然不受第一个随机种子的影响,但是它在两次运行脚本的过程中使用的系统时间(程序运行到此处的时间)是相同的。

一、random.seed()

[python官方文档]https://docs.python.org/zh-cn/3/library/random.html
[random.seed()]https://blog.youkuaiyun.com/qq_42951560/article/details/112184965
此模块实现了各种分布的伪随机数生成器。random是python的内置模块,不需要安装,直接Import。

语法

random.seed(a=None, version=2) 
# a是生成随机数的种子,可以设置为一个整型int
# 无返回值

示例(理解随机数概述2.)

  • 设置随机种子
import random 
random.seed(42)
print(random.random())

输出结果如下
在这里插入图片描述
生成的随机数位于[0.0, 1.0),是53位精度的浮点数。

  • 如果不设置随机种子,则每次生成的输出结果不同。如下所示
import random
print(random.random())  
print(random.random())
print(random.random())

在这里插入图片描述

二、numpy.random.seed()

[numpy.random.seed()]https://blog.youkuaiyun.com/qq_45288176/article/details/125117669

示例(理解随机数概述3.)

  • 设置一个随机种子
import numpy as np
np.random.seed(42)
a = np.random.random()
b = np.random.random()
print(a)
print(b)

输出结果如下
在这里插入图片描述

  • 设置多个随机种子
import numpy as np
np.random.seed(42)
a = np.random.random()
np.random.seed(42)
b = np.random.random()
print(a)
print(b)

输出结果如下
在这里插入图片描述

三、torch.manual_seed()

[官方文档torch.random]https://pytorch.ac.cn/docs/2.6/random.html
[torch.manual_seed]https://blog.youkuaiyun.com/weixin_44211968/article/details/123769010

语法

torch.manual_seed()  # 返回一个torch.Generator对象
torch.manual_seed(42)  # 为CPU设置种子,生成随机数
torch.cuda.manual_seed(42)  # 为特定GPU设置种子,生成随机数
torch.cuda.manual_seed_all(42)  # 为所有GPU设置种子,生成随机数

Torch生成随机数的四个函数

https://blog.youkuaiyun.com/qq_41813454/article/details/136326473

  • torch.rand()
  • torch.randn()
  • torch.randint()
  • torch.randperm()

示例(理解随机数概述4.)

此处使用torch.rand()函数作为示例。此函数用于生成具有均匀分布的随机数,这些随机数的范围在[0, 1)间。它接受一个形状参数(shape),返回一个指定形状的张量(tensor)。

  • 不设置随机种子
import torch
# 生成一个形状为(3, 4)的张量,元素值在[0, 1)之间
tensor = torch.rand((3, 4))
print(tensor)

输出结果如下
在这里插入图片描述

  • 设置随机种子
# test.py
import torch
torch.manual_seed(42)
print(torch.rand(3, 4))
print(torch.rand(3, 4))

第一次运行脚本输出结果如下
在这里插入图片描述
第二次运行脚本输出结果如下
在这里插入图片描述
可以发现生成的两个随机数是不一样的,但是两次运行脚本的全部输出结果是一样的。

四、ViT代码示例

def set_seed(args):
    random.seed(args.seed)
    np.random.seed(args.seed)
    torch.manual_seed(args.seed)
    if args.n_gpu > 0:
        torch.cuda.manual_seed_all(args.seed)

在这里插入图片描述
且在函数中设置随机数种子并不需要返回值。

PS

至于为什么随机种子都设置为42,可能是因为深度学习领域一个约定俗成的习惯。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值