このページは Cloud Translation API によって翻訳されました。
Switch to English

tf.random.set_seed

GitHubの上のソースを表示

グローバルランダムシードを設定します。

ノートPCで使用されます

チュートリアルで使用されます

グローバルおよび操作レベルのシード:ランダムシードに依存している操作は、実際には2個の種子からそれを引き出します。これは、グローバルシードを設定します。

次のように操作レベルの種との相互作用は、次のとおりです。

  1. グローバル種子や操作シードどちらも設定されている場合:A無作為に選んだの種子は、このオペレーションのために使用されています。
  2. グラフレベルの種子は設定されているが、操作種がない場合:それはユニークなランダムシーケンスを取得するように、システムは決定論グラフレベルの種子と一緒に動作種を選びます。 tensorflowとユーザーコードの同じバージョンの中で、この順序は決定的です。しかし、異なるバージョン間で、この順序は変更される場合があります。コードが動作する特定の種に依存している場合、明示的に両方のグラフ・レベルと操作レベル種を指定。
  3. 操作種が設定されているが、グローバルシードが設定されていない場合:Aのデフォルトのグローバル種子と指定された操作の種は、ランダムな配列を決定するために使用されています。
  4. 両方のグローバル操作種が設定されている場合:両方の種子をランダムシーケンスを決定するために一緒に使用されます。

ユーザーが目に見える効果を説明するために、これらの例を考えてみます。

グローバル種子や操作シードどちらも設定されている場合は、我々はランダムOPとプログラムの全ての再実行を呼び出すたびに異なる結果が得られます:

 print(tf.random.uniform([1]))  # generates 'A1'
print(tf.random.uniform([1]))  # generates 'A2'
 

(今のプログラムを閉じて、もう一度それを実行)

 print(tf.random.uniform([1]))  # generates 'A3'
print(tf.random.uniform([1]))  # generates 'A4'
 

グローバルシードが設定されているが、操作の種が設定されていない場合、我々はランダムなオペアンプを呼び出すたびに異なる結果が得られますが、プログラムのすべての再実行のための同じシーケンス:

 tf.random.set_seed(1234)
print(tf.random.uniform([1]))  # generates 'A1'
print(tf.random.uniform([1]))  # generates 'A2'
 

(今のプログラムを閉じて、もう一度それを実行)

 tf.random.set_seed(1234)
print(tf.random.uniform([1]))  # generates 'A1'
print(tf.random.uniform([1]))  # generates 'A2'
 

我々はの2回目の呼び出しに代わり「A2」「A1」を取得する理由tf.random.uniform 2回目の呼び出しは異なる動作種子を使用しているため、上記のです。

注ことtf.function 、この場合のプログラムの再実行のような役割を果たします。グローバルシードが設定されているが、操作の種が設定されていない場合は、乱数列は、それぞれで同じですtf.function 。例えば:

 tf.random.set_seed(1234)

@tf.function
def f():
  a = tf.random.uniform([1])
  b = tf.random.uniform([1])
  return a, b

@tf.function
def g():
  a = tf.random.uniform([1])
  b = tf.random.uniform([1])
  return a, b

print(f())  # prints '(A1, A2)'
print(g())  # prints '(A1, A2)'
 

操作種が設定されている場合、我々はランダムOPにすべての呼び出しが、プログラムのすべての再実行のために、同じシーケンスの異なる結果が得られます。

 print(tf.random.uniform([1], seed=1))  # generates 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
 

(今のプログラムを閉じて、もう一度それを実行)

 print(tf.random.uniform([1], seed=1))  # generates 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
 

我々はの2回目の呼び出しに代わり「A1」「A2」を得る理由tf.random.uniform同じため、上記のは、あるtf.random.uniformカーネル(つまり、内部表現が)同じ引数を持つことのすべてのコールに対してTensorFlowで使用されています、カーネルは、異なる結果を生成し、それが実行されるたびにインクリメントされる内部カウンタを維持します。

呼び出しtf.random.set_seedそのようなカウンタをリセットします。

 tf.random.set_seed(1234)
print(tf.random.uniform([1], seed=1))  # generates 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
tf.random.set_seed(1234)
print(tf.random.uniform([1], seed=1))  # generates 'A1'
print(tf.random.uniform([1], seed=1))  # generates 'A2'
 

複数の同一のランダムOPSがに包まれている場合tf.function OPSは何の長い同じカウンタを共有していないので、彼らの行動は変化します。例えば:

 @tf.function
def foo():
  a = tf.random.uniform([1], seed=1)
  b = tf.random.uniform([1], seed=1)
  return a, b
print(foo())  # prints '(A1, A1)'
print(foo())  # prints '(A2, A2)'

@tf.function
def bar():
  a = tf.random.uniform([1])
  b = tf.random.uniform([1])
  return a, b
print(bar())  # prints '(A1, A2)'
print(bar())  # prints '(A3, A4)'
 

2回目の呼び出しfoo代わりに'(A1、A1')の戻り'(A2、A2')のでtf.random.uniform内部カウンタを維持します。あなたがしたい場合foo 「(A1、A1」)毎回返すために、のようなステートレスランダムOPS使用tf.random.stateless_uniform 。参照してくださいtf.random.experimental.Generator自分の状態を管理するために外部変数を使用し、ステートフルランダムOPSの新しいセットのために。

seed 整数。