當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.compat.v1.set_random_seed用法及代碼示例


為默認圖設置 graph-level 隨機種子。

用法

tf.compat.v1.set_random_seed(
    seed
)

參數

  • seed 整數。

遷移到 TF2

警告:這個 API 是為 TensorFlow v1 設計的。繼續閱讀有關如何從該 API 遷移到本機 TensorFlow v2 等效項的詳細信息。見TensorFlow v1 到 TensorFlow v2 遷移指南有關如何遷移其餘代碼的說明。

'tf.compat.v1.set_random_seed' 與即刻模式兼容。但是,在 Eager 模式下,此 API 將設置全局種子,而不是默認圖形的 graph-level 種子。在 TF2 中,此 API 更改為 tf.random.set_seed。

依賴隨機種子的操作實際上是從兩個種子中派生出來的:graph-level 和 operation-level 種子。這將設置 graph-level 種子。

它與operation-level種子的交互如下:

  1. 如果既沒有設置graph-level 也沒有設置操作種子:此操作使用隨機種子。
  2. 如果設置了graph-level 種子,但未設置操作種子:係統確定性地選擇與graph-level 種子一起的操作種子,以便獲得唯一的隨機序列。在同一版本的 tensorflow 和用戶代碼中,此序列是確定性的。但是,在不同的版本中,此順序可能會發生變化。如果代碼依賴於特定的種子來工作,請明確指定 graph-level 和 operation-level 種子。
  3. 如果沒有設置graph-level種子,但設置了操作種子:使用默認的graph-level種子和指定的操作種子來確定隨機序列。
  4. 如果graph-level和操作種子都設置了:兩個種子一起使用來確定隨機序列。

為了說明 user-visible 效果,請考慮以下示例:

要跨會話生成不同的序列,既不設置 graph-level 也不設置 op-level 種子:

a = tf.random.uniform([1])
b = tf.random.normal([1])

print("Session 1")
with tf.compat.v1.Session() as sess1:
  print(sess1.run(a))  # generates 'A1'
  print(sess1.run(a))  # generates 'A2'
  print(sess1.run(b))  # generates 'B1'
  print(sess1.run(b))  # generates 'B2'

print("Session 2")
with tf.compat.v1.Session() as sess2:
  print(sess2.run(a))  # generates 'A3'
  print(sess2.run(a))  # generates 'A4'
  print(sess2.run(b))  # generates 'B3'
  print(sess2.run(b))  # generates 'B4'

要為跨會話的操作生成相同的可重複序列,請設置操作的種子:

a = tf.random.uniform([1], seed=1)
b = tf.random.normal([1])

# Repeatedly running this block with the same graph will generate the same
# sequence of values for 'a', but different sequences of values for 'b'.
print("Session 1")
with tf.compat.v1.Session() as sess1:
  print(sess1.run(a))  # generates 'A1'
  print(sess1.run(a))  # generates 'A2'
  print(sess1.run(b))  # generates 'B1'
  print(sess1.run(b))  # generates 'B2'

print("Session 2")
with tf.compat.v1.Session() as sess2:
  print(sess2.run(a))  # generates 'A1'
  print(sess2.run(a))  # generates 'A2'
  print(sess2.run(b))  # generates 'B3'
  print(sess2.run(b))  # generates 'B4'

要使所有操作生成的隨機序列在會話中可重複,請設置 graph-level 種子:

tf.compat.v1.random.set_random_seed(1234)
a = tf.random.uniform([1])
b = tf.random.normal([1])

# Repeatedly running this block with the same graph will generate the same
# sequences of 'a' and 'b'.
print("Session 1")
with tf.compat.v1.Session() as sess1:
  print(sess1.run(a))  # generates 'A1'
  print(sess1.run(a))  # generates 'A2'
  print(sess1.run(b))  # generates 'B1'
  print(sess1.run(b))  # generates 'B2'

print("Session 2")
with tf.compat.v1.Session() as sess2:
  print(sess2.run(a))  # generates 'A1'
  print(sess2.run(a))  # generates 'A2'
  print(sess2.run(b))  # generates 'B1'
  print(sess2.run(b))  # generates 'B2'

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.compat.v1.set_random_seed。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。