2017-05-09 4 views
0

テンソルフローのランダム変数について質問が1つあります。私の損失関数の中にランダム変数が必要であるとしましょう。 テンソルフローチュートリアルでは、変数を初期化するためにランダム関数が使用されています。たとえば、トレーニングプロセスによって2回目に変更された重みなどがあります。 私の場合は、特定の分布(均一またはガウス分布)に従うが、それぞれの損失計算を変更することができるfloatのランダムベクトルが必要です(128の値としましょう)。 私の損失関数でこの変数を定義するのは、各エポックで新しい値を得る(選択した分布に従う)か、すべての反復で常に同じ値を取得するので、私が行う必要がある簡単なことですか?あなたはそれを呼び出すことで確認することができますようテンソルフローとランダム変数

おかげで、

ダニエル

+0

あなたはまた、彼らはランダムにグラフレベルと、より細かいレベルで制御されている方法について説明tf.set_random_seed上のドキュメントを()をチェックすることをお勧めします// WWWを.tensorflow.org/api_docs/python/tf/set_random_seed –

答えて

2

tensorflowのランダムなノードは常に、別の値にそれが呼び出されるたびにかかり、数回

import tensorflow as tf 
x = tf.random_uniform(shape=()) 
sess = tf.Session() 
sess.run(x) 
# 0.79877698 
sess.run(x) 
# 0.76016617 

そうではありませんa Variableテンソルの用語では、上記のコードから確認することができますが、変数の初期化を呼び出さずに実行されます。

0

ランダムに生成された値をVariableに割り当てると、この変数は、この変数を更新するまで固定されたままになります。

代わりに、損失関数を数字の「世代」(tf.random_*)に直接入力すると、呼び出しごとに異なることになります。

ただ、これを試してみます。https::

import tensorflow as tf 

# generator 
x = tf.random_uniform((3,1), minval=0, maxval=10) 

# variable 
a = tf.get_variable("a", shape=(3,1), dtype=tf.float32) 

# assignment 
b = tf.assign(a, x) 

with tf.Session() as sess: 
    sess.run(tf.global_variables_initializer()) 
    for i in range(5): 
     # 5 different values 
     print(sess.run(x)) 

    # assign the value 
    sess.run(b) 
    for i in range(5): 
     # 5 equal values 
     print(sess.run(a)) 
関連する問題