ランダムシードは、実際には2つの動作に分けられる:グラフレベル(図レベル)およびOPレベル(動作レベル)、乱数発生器のシードは、データフロー図のリソースで動作している、私は、具体的にそれらを導入しましょう。
最初のケース:、設けられていないもOP図レベルレベルシードどちらのセッションで生成される異なるシーケンスを設定してください。
= tf.random_uniform([1]) 、B = tf.random_normal([1])
印刷( "セッション1") tf.Sessionと()sess1として: プリント(sess1.run(A))#は、 'A1'を生成 プリント(sess1.run(A))#が'A2'を生成する プリント(sess1.runを( B))#生成'B1' プリント(sess1.run(B))# 'はB2'を生成する プリント( "セッション2") sess2としてtf.Session(との) プリント(sess2.run(A))# 'が生成しますA3' 、A4 'プリント(sess2.run(A))#が発生' プリント(sess2.run(B))#生成'B3' B4 'を印刷(sess2.run(B))#が生成します'
結果:
明らかなように、同じまたは異なるセッションのセッションでいるかどうか、生成された配列が異なっています。
後者の場合:同じシーケンスを生成するには、セッション間で繰り返すことができ、オペアンプの種を設定してください。
TFとしてインポートtensorflow = tf.random_uniform([1]、種子= 1)#1、OP-レベル随机生成种子 B = tf.random_normal([1]) 、印刷( "セッション1") sess1としてtf.Session()と: プリント(sess1.run(A))# 'はA1'を生成 プリント(sess1.run(A))# 'はA2'を生成する プリント(sess1.run(B))# 'はB1'を生成する プリント(sess1.run(Bを))#生成'B2' プリント( "セッション2") tf.Session有する()sess2として: プリント(sess2.run(A))# 'はA3'を生成 プリント(sess2.run(A))#「はA4を生成します「 プリント(sess2.run(B))#が生成する'B3' B4 'を印刷(sess2.run(B))を#が生成します'
結果:
動作は明らかでランダムに生成されたシード段階のOPレベルの後に、同じセッション内の異なるシーケンスを生成する、インターセッションは同一の配列を生成します。
第三种情况:要使所有生成的随机序列在会话中可重复,就要设置图级别的种子:
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每次生成的序列是固定的。