一、 說明
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確定隨機數數組的生成,參數確定,數組確定,保證生成的隨機數具有可預測性,參數爲非負整數,其選擇不固定,只要保證語句能正常運行即可。
以上爲個人整理總結的知識,如有遺漏或錯誤歡迎留言指出、點評,如要引用,請聯繫通知,未經允許謝絕轉載。