我們在使用Numpy或Pytorch時有時候需要使用隨機數(shù)來初始化一個矩陣,randn和rand就屬于其中比較常見的兩個函數(shù)。二者的使用方法相似,在numpy中函數(shù)形式為:
numpy.random.randn(d0, d1, d2, ..., dn)
numpy.random.rand(d0, d1, d2, ..., dn)
在Pytorch中的函數(shù)形式為:
torch.randn(d0, d1, d2, ..., dn)
torch.rand(d0, d1, d2, ..., dn)
在一些教程中經(jīng)常會看到作者在寫代碼時混用它們二者,實際上它們還是有一些區(qū)別的。具體來講,randn是從標(biāo)準(zhǔn)正態(tài)分布中返回一個或多個樣本值。正態(tài)分布,也即這些隨機數(shù)的期望為0,方差為1;rand則會產(chǎn)生[0, 1)之間的隨機數(shù)。 關(guān)于記憶方法,我們可以把randn中的n看成是正態(tài)分布(Normal distribution)中“Normal”的縮寫。

Numpy - randn

Numpy - rand

Pytorch - randn

Pytorch - rand
多說一句,在Tensorflow中也有類似功能的函數(shù),根據(jù)其命名可以很容易推斷出其功能。用于產(chǎn)生正態(tài)分布的函數(shù)為:
tf.random_normal()
常用參數(shù)為 (shape,stddev,mean,dtype);
用于產(chǎn)生[0,1)之間隨機數(shù)的函數(shù)為:
tf.random_uniform()
默認(rèn)產(chǎn)生0,1之間的隨機數(shù),不過也可以通過maxval指定上界,通過minval指定下界。