np.random.xxx

在機器學習和神經網絡中,常常會利用Numpy庫中的隨機函數來生產隨機數,比如隨機初始化神經網絡中的參數權重W(備註:W是不能全部初始化爲0的,這樣會引起symmetry breaking problem,這樣隱藏層設置多個神經元就沒有任何意義了)。
在Numpy庫中,常用使用np.random.rand()、np.random.randn()和np.random.randint()隨機函數。這幾個函數的區別如下:

(1)np.random.randn()函數

語法:

np.random.randn(d0,d1,d2……dn)
1)當函數括號內沒有參數時,則返回一個浮點數;
2)當函數括號內有一個參數時,則返回秩爲1的數組,不能表示向量和矩陣;
3)當函數括號內有兩個及以上參數時,則返回對應維度的數組,能表示向量或矩陣;
4)np.random.standard_normal()函數與np.random.randn()類似,但是np.random.standard_normal()的輸入參數爲元組(tuple).
5)np.random.randn()的輸入通常爲整數,但是如果爲浮點數,則會自動直接截斷轉換爲整數。

作用:

通過本函數可以返回一個或一組服從標準正態分佈的隨機樣本值。

特點:

標準正態分佈是以0爲均數、以1爲標準差的正態分佈,記爲N(0,1)。對應的正態分佈曲線如下所示,即
這裏寫圖片描述

標準正態分佈曲線下面積分布規律是:

在-1.96~+1.96範圍內曲線下的面積等於0.9500(即取值在這個範圍的概率爲95%),在-2.58~+2.58範圍內曲線下面積爲0.9900(即取值在這個範圍的概率爲99%).
因此,由 np.random.randn()函數所產生的隨機樣本基本上取值主要在-1.96~+1.96之間,當然也不排除存在較大值的情形,只是概率較小而已。

用例:
這裏寫圖片描述

應用場景:

在神經網絡構建中,權重參數W通常採用該函數進行初始化,當然需要注意的是,通常會在生成的矩陣後面乘以小數,比如0.01,目的是爲了提高梯度下降算法的收斂速度。
W = np.random.randn(2,2)*0.01

(2) np.random.rand()函數

語法:

np.random.rand(d0,d1,d2……dn)
注:使用方法與np.random.randn()函數相同
作用:
通過本函數可以返回一個或一組服從“0~1”均勻分佈的隨機樣本值。隨機樣本取值範圍是[0,1),不包括1。
應用:在深度學習的Dropout正則化方法中,可以用於生成dropout隨機向量(dl),例如(keep_prob表示保留神經元的比例):dl = np.random.rand(al.shape[0],al.shape[1]) < keep_prob

用例:
這裏寫圖片描述

(3) np.random.randint()函數

語法:

numpy.random.randint(low, high=None, size=None, dtype=’l’)
輸入
low—–爲最小值
high—-爲最大值
size—–爲數組維度大小
dtype—爲數據類型,默認的數據類型是np.int。
返回值
返回隨機整數或整型數組,範圍區間爲[low,high),包含low,不包含high;
high沒有填寫時,默認生成隨機數的範圍是[0,low)

用例:
這裏寫圖片描述

引用:

爲什麼你用不好Numpy的random函數?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章