2017-01-13 3 views
2
import tensorflow as tf 
import numpy as np 

x_tf = tf.placeholder('float',[None, 2, 5, 1]) 
x_np = np.random.noraml(0,1,[1,2,5,1]) 

# ======== filter option1 and option2 =========== 
f_np = np.random.normal(0,1,[1,3,1,1]) 
f_tf = tf.constant(f_np,'float') # option 1 
f_tf = tf.random_normal([1,3,1,1]) # option 2 
# =============================================== 

x_conv = tf.nn.conv2d(x_tf,f_tf,[1,1,1,1],'SAME') 

with tf.Session() as sess: 
    tf.global_variables_initializer().run() 
    x_conv_np = sess.run(x_conv, feed_dict={x_tf: x_np}) 
    x_conv_np2 = sess.run(x_conv, feed_dict={x_tf: x_np}) 

Wenn ich den Code oben mit option1 laufen, ich die gleichen Werte für x_conv_np erhalten und x_conv_np2 Allerdings, wenn ich die oben mit option2 laufen, bekomme ich verschiedene Werte für x_conv_np und x_conv_np2.Sitzung Laufmehrmal mit tf.random gibt unterschiedliche Werte für conv2d

Ich vermute, die tf.random_normal wird jedes Mal initialisiert, wenn die Sitzung ausgeführt wird. Soll das geschehen? Das passiert auch, wenn ich die tf.set_random_seed Kann jemand erklären, wie TensorFlow seine zufälligen Variablen initialisiert, wenn die Sitzung ausgeführt wird?  

+0

Haben Sie keinen Tippfehler in Ihrem Code? Ihr feed_dict sollte '{x_tf: x_np}' –

+0

Vielen Dank! Fehler behoben –

Antwort

3

Alle der random number ops in TensorFlow (einschließlich tf.random_normal()) jedes Mal eine neue zufällige Tensor probieren sie läuft:

TensorFlow hat mehrere ops, die zufällige Tensoren mit verschiedenen Distributionen erstellen. Die zufälligen Ops sind statusbehaftet und erstellen bei jeder Auswertung neue Zufallswerte.

Wenn Sie die Verteilung einmal probieren möchten und dann wiederverwenden, um das Ergebnis, sollten Sie eine tf.Variable verwenden und initialisieren es durch tf.random_normal() einmal ausgeführt wird. Der folgende Code wird beispielsweise zweimal den gleichen Zufallswert ausgeben:

f_tf = tf.Variable(tf.random_normal([1, 3, 1, 1])) 
# ... 
init_op = tf.global_variables_initializer() 
# ... 
with tf.Session() as sess: 
    sess.run(init_op) 
    print(sess.run(f_tf)) 
    print(sess.run(f_tf)) 
+0

Vielen Dank! Ich habe komplett vergessen, ich musste das Gewicht als tf.Variable initialisieren (...) –

Verwandte Themen