2017-05-09 4 views
0

Ich habe eine Frage über zufällige Variablen in Tensorflow. Nehmen wir an, ich brauche eine Zufallsvariable in meiner Verlustfunktion. In Tensorflow Tutorials finde ich zufällige Funktionen zur Initialisierung von Variablen, wie Gewichte, die in einem zweiten Mal durch Trainingsprozess geändert werden. In meinem Fall brauche ich einen zufälligen Vektor von Floats (sagen wir 128 Werte), der einer bestimmten Verteilung folgt (Uniform oder Gaussian), aber das kann jede Verlustberechnung ändern. Definieren Sie diese Variable in meiner Verlustfunktion, ist das Einfache, was ich tun muss, da ich in jeder Epoche neue Werte bekomme (die der gewählten Verteilung folgen) oder bekomme ich die Werte, die in allen Iterationen immer gleich sind?Tensorflow und Zufallsvariablen

Danke,

Daniele

+0

Vielleicht haben Sie auch die Dokumentation auf tf.set_random_seed überprüfen möchten(), wo sie darüber diskutieren, wie die Randomisierung auf der Graph Ebene und detaillierteren Ebenen gesteuert: https: // www .tensorflow.org/api_docs/python/tf/set_random_samen –

Antwort

2

Ein Zufallsknoten in tensorflow nehmen immer einen anderen Wert jedes Mal, sie genannt wird, wie Sie durch den Aufruf mehrmals

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

Es ist nicht verifizieren kann, ist, a Variable in der Tensorflow-Terminologie, wie Sie aus dem obigen Code überprüfen können, der ohne Aufruf der Variableninitialisierung ausgeführt wird.

0

Wenn Sie die zufällig generierten Werte einer Variable zuweisen, bleibt dieser Wert so lange unverändert, bis Sie diese Variable aktualisieren.

Wenn Sie stattdessen in der Verlustfunktion setzt direkt die „Generation“ (tf.random_*) der Zahlen, dann werden sie bei jedem Anruf unterschiedlich sein.

Probieren Sie dies aus:

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))