在用PyTorch做深度学习开发过程中,时常用到随机数生成功能,但经常记不住几个随机数生成函数的用法,现在正好有点时间,整理一下。
1. torch.rand()
torch.rand(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor
该函数可以生成一个范围在[0, 1)之间均匀分布的随机tensor,tensor的形状由size指定。随机数类型默认为torch.float32,也可以通过torch.set_default_tensor_type()指定默认类型,例如:
>>> torch.tensor([1.2, 3]).dtype # initial default is torch.float32
torch.float32
>>> torch.set_default_tensor_type(torch.DoubleTensor)
>>> torch.tensor([1.2, 3]).dtype # a new floating point tensor
torch.float64
Example:
生成一个3x4的tensor:
torch.rand(3,4)
2. torch.randn()
torch.randn(*size, *, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False, pin_memory=False) → Tensor
该函数用来生成一个均值为0,方差为1的正态分布tensor,tensor的形状由size指定,默认类型为torch.float32,也可由torch.set_default_tensor_type()指定默认类Example:
Example:
生成一个2x8的正态分布tensor:
torch.randn(2,8)
3. torch.randint()
该函数的定义为:
torch.randint(low=0, high, size, \*, generator=None, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) → Tensor
利用该函数,生成一个范围在[low, hight)之间的均匀分布随机整数tensor,tensor的形状通过size来定义。该函数默认生成torch.int64类型数据,如果需要生成其他类型,则可以通过dtype指定,例如可以指定dtype=torch.float32。
example:
生成一个大小为5x5的范围在0~10之间的tensor:
torch.randint(0, 10, (5,5))
4. torch.rand_like()
除了以上几种需要指定生成tensor形状的函数之外,还可以根据已知对象的形状来生成新的张量,这就是几个*_like函数的妙用,包括torch.rand_like,torch.randn_like,torch.randint_like。
其中,torch.rand_like的定义如下:
torch.rand_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format) → Tensor
该函数返回一个与输入对象input相同形状的tensor,该tensor符合[0, 1)之间的均匀分布。该函数与
torch.rand(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)
具有相同的效果。
Example:
已知张量A,生成一个与A同形状的张量B:
A = torch.ones(4,5)
B = torch.rand_like(A)
torch.randn_like、torch.randint_like与torch.rand_like用法相似,下面只给出两个函数的定义,不再赘述。
torch.randn_like(input, *, dtype=None, layout=None, device=None, requires_grad=False, memory_format=torch.preserve_format) → Tensor
torch.randint_like(input, low=0, high, \*, dtype=None, layout=torch.strided, device=None, requires_grad=False, memory_format=torch.preserve_format) → Tensor