numpy之random.seed()的使用

一、 說明

random.seed()函數是numpy.random的常用函數,確定隨機數生成器的種子,可以保證生成的隨機數具有可預測性,使多次生成的隨機數相同,可以在調用其他隨機模塊函數之前調用此函數。

  • 如果使用相同的seed( )值,則每次生成的隨即數都相同;
  • 如果不設置這個值,則系統根據時間來自己選擇這個值,此時每次生成的隨機數因時間差異而不同。

在機器學習和深度學習中,如果要保證部分參數(比如W權重參數)的隨機初始化值相同,可以採用這種方式來實現。

二、 問題

對於seed()的使用,會有以下疑問:

  • 利用隨機數種子,保證生成的隨機數具有可預測性。怎麼理解?
  • random.seed(x),隨機數種子x的參數怎麼選擇?

三、 使用

1.語法

import numpy as np
random.seed ( x ) #x爲非負整數

2.示例說明
多次運行以下python代碼

import numpy as np

if __name__ == '__main__':
    i = 0
    np.random.seed(0)
    while(i < 3):
        print("\n\r1.定義seed(0)數組{}:".format(i), np.random.randn(1, 5))
        i += 1
    i = 0

    print("---------------------------------")
    j = 0
    while(j < 3):
        print("\n\r2.未定義seed()數組{}:".format(j), np.random.randn(1, 5))
        j += 1

    print("---------------------------------")
    np.random.seed(3)
    m = 0
    while(m < 3):
        print("\n\r3.定義seed(3)數組{}:".format(m), np.random.randn(1, 5))
        m += 1

    print("---------------------------------")
    np.random.seed(0)
    n = 0
    while(n < 3):
        print("\n\r4.再次定義seed(0)數組{}:".format(n), np.random.randn(1, 5))
        n += 1

每次每個數組生成的結果一樣

1.定義seed(0)數組0[[1.76405235 0.40015721 0.97873798 2.2408932  1.86755799]]

1.定義seed(0)數組1[[-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]

1.定義seed(0)數組2[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
---------------------------------

2.未定義seed()數組0[[ 0.33367433  1.49407907 -0.20515826  0.3130677  -0.85409574]]

2.未定義seed()數組1[[-2.55298982  0.6536186   0.8644362  -0.74216502  2.26975462]]

2.未定義seed()數組2[[-1.45436567  0.04575852 -0.18718385  1.53277921  1.46935877]]
---------------------------------

3.定義seed(3)數組0[[ 1.78862847  0.43650985  0.09649747 -1.8634927  -0.2773882 ]]

3.定義seed(3)數組1[[-0.35475898 -0.08274148 -0.62700068 -0.04381817 -0.47721803]]

3.定義seed(3)數組2[[-1.31386475  0.88462238  0.88131804  1.70957306  0.05003364]]
---------------------------------

4.再次定義seed(0)數組0[[1.76405235 0.40015721 0.97873798 2.2408932  1.86755799]]

4.再次定義seed(0)數組1[[-0.97727788  0.95008842 -0.15135721 -0.10321885  0.4105985 ]]

4.再次定義seed(0)數組2[[0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]

每次生成數組一致,可知:說明加入確定的隨機數種子,後面的隨機數組都是按一定的順序生成的,不管運行多少次,結果數組都相同
對比1和2,可知:隨機數種子對後面的結果一直有影響
對比1和3,可知:不同參數生成不同系列的隨機數
對比1和4,可知:相同參數生成相同系列的隨機數,即參數確定,隨機數確定
綜上所述,random.seed ( x ) 參數x確定隨機數數組的生成,參數確定,數組確定,保證生成的隨機數具有可預測性,參數爲非負整數,其選擇不固定,只要保證語句能正常運行即可。

以上爲個人整理總結的知識,如有遺漏或錯誤歡迎留言指出、點評,如要引用,請聯繫通知,未經允許謝絕轉載。

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