我们在使用Numpy或Pytorch时有时候需要使用随机数来初始化一个矩阵,randn和rand就属于其中比较常见的两个函数。二者的使用方法相似,在numpy中函数形式为:
numpy.random.randn(d0, d1, d2, ..., dn)
numpy.random.rand(d0, d1, d2, ..., dn)
在Pytorch中的函数形式为:
torch.randn(d0, d1, d2, ..., dn)
torch.rand(d0, d1, d2, ..., dn)
在一些教程中经常会看到作者在写代码时混用它们二者,实际上它们还是有一些区别的。具体来讲,randn是从标准正态分布中返回一个或多个样本值。正态分布,也即这些随机数的期望为0,方差为1;rand则会产生[0, 1)之间的随机数。 关于记忆方法,我们可以把randn中的n看成是正态分布(Normal distribution)中“Normal”的缩写。
多说一句,在Tensorflow中也有类似功能的函数,根据其命名可以很容易推断出其功能。用于产生正态分布的函数为:
tf.random_normal()
常用参数为 (shape,stddev,mean,dtype);
用于产生[0,1)之间随机数的函数为:
tf.random_uniform()
默认产生0,1之间的随机数,不过也可以通过maxval指定上界,通过minval指定下界。