random tensor-隨機生成種子操作(tf.set_random_seed(interger))


random seed操作其實分為兩種:graph-level(圖級)和op-level(操作級),隨機數生成種子是在數據流圖資源上運作的,接下來讓我具體介紹它們。

第一種情況:要在Session中生成不同的序列,請既不設置圖級別也不設置op級別種子:

a = tf.random_uniform([1])
b = tf.random_normal([1])
print( "Session 1")
with tf.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.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'

  實驗結果:

 

可以明顯看出,無論是在同一個Session還是在不同的Session中,生成的序列都不同。

第二種情況:要為跨Session生成相同的可重復序列,請為op設置種子:

import tensorflow as tf

a = tf.random_uniform([1], seed=1)     #op-level 隨機生成種子
b = tf.random_normal([1])

print( "Session 1")
with tf.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.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'

 實驗結果:

 

明顯可以看出在op-level級隨機生成種子的操作后,同一個Session內生成不同的序列,跨Session生成相同的序列。

第三種情況:要使所有生成的隨機序列在會話中可重復,就要設置圖級別的種子:

import tensorflow as tf

tf.set_random_seed(1234)
a = tf.random_uniform([1])
b = tf.random_normal([1])

print( "Session 1")
with tf.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.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'

 

 

明顯可以看出,跨Session生成的所有序列都是重復的,但是在檔額Session里是不同的,這就是graph-level的隨機生成種子。這tf.set_random_seed(interger)  中不同的interger沒有什么不同,只是相同的interger每次生成的序列是固定的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM