0

Ich bin verwirrt darüber, wie ich meine TensorBoard-Graph-Visualisierung dazu bringen kann, die Tatsache zu erfassen, dass ich berechneten Werten einige meiner Platzhalter zuführe.Kann ich berechnete Tensoren erhalten, um eine Verbindung zu den Platzhaltern herzustellen, die sie in meinem TensorBoard-Diagramm ausfüllen?

Ich habe definiert Platzhalter

with tf.name_scope('params'): 
    keep_prob_later = tf.placeholder(tf.float32, name='keep_prob_later') 
    keep_prob_early = tf.placeholder(tf.float32, name='keep_prob_early') 
    keep_prob_input = tf.placeholder(tf.float32, name='keep_prob_input') 

und entsprechenden Tensoren für ihre Werte Berechnung

with tf.name_scope('param_vals'):  
    with tf.name_scope('keep_prob_later_val'): 
     keep_prob_later_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.keep_prob_later, global_step, 
                    FLAGS.decay_steps, 
                    FLAGS.dropout_decay_rate, staircase=False)) 
    with tf.name_scope('keep_prob_early_val'): 
     keep_prob_early_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.keep_prob_early, global_step, 
                    FLAGS.decay_steps, 
                    FLAGS.dropout_decay_rate, staircase=False)) 
    with tf.name_scope('keep_prob_input_val'): 
     keep_prob_input_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.keep_prob_input, global_step, 
                    FLAGS.decay_steps, 
                    FLAGS.dropout_decay_rate, staircase=False)) 

die ich dann füttern, wenn ich mein Modell

sess.run(train_step, feed_dict={x: batch_xs, y_: batch_ys, 
           keep_prob_later: sess.run(keep_prob_later_val), 
           keep_prob_early: sess.run(keep_prob_early_val), 
           keep_prob_input: sess.run(keep_prob_input_val)}) 

aber meine TensorBoard Graphvisualisierung trainieren zeigt diese nicht "angeschlossen" an.

Ich sehe die richtig an den Rest meines Graph

und ich sehe alle entsprechenden berechneten Werte zu

enter image description here

verbunden Platzhalter aber letztere nicht Verbindung mit dem ehemaligen.

Ist das das erwartete Verhalten? Gibt es eine Möglichkeit, in der TensorBoard-Visualisierung meines Graphen die Tatsache zu erfassen, dass die berechneten Werte verwendet werden, um die entsprechenden Platzhalter zu füllen?


Wenn es keine Möglichkeit gibt, die berechneten Werte mit dem Graphen zu verbinden, warum dann? Und warum andere berechnete Werte korrekt angezeigt werden. Zum Beispiel meine berechneten Impulswerte, die ebenso wie die oben fed Dropout definiert sind Werte

with tf.name_scope('param_vals'): 
    with tf.name_scope('momentum_val'): 
     momentum_val = tf.sub(1.0, tf.train.exponential_decay(1 - FLAGS.initial_momentum, global_step, 
                  FLAGS.decay_steps, FLAGS.momentum_decay_rate, 
                  staircase=False)) 

zeigen nach oben verbunden ist allen Teilen des Graphen sie beeinflussen.

+0

Warum verwenden Sie einen Zwischen 'tf.placeholder' für die' keep_prob _ *** ', statt nur die Tensoren mit' keep_prob _ *** _ val' Sie berechnet? –

+0

@OlivierMoindrot: Ich muss die Platzhalter füttern. Manchmal füttere ich das entsprechende '... _val' (zum Trainieren) und manchmal füttere ich' 1.0' (zur Vorhersage und zur Validierung). – orome

+0

Auf jeden Fall ist es das normale Verhalten, dass TensorFlow die Verbindung nicht sehen, weil die Verbindung in Python getan wird, ohne TensorFlow es zu wissen. Wenn du die Verbindung sehen willst, könntest du eine 'tf.cond()' Sache benutzen, mit einem booleschen 'Zug als Bedingung? –

Antwort

1

Ich sehe die richtig an den Rest meines Graph verbunden Platzhalter, und ich sehe alle entsprechenden zu berechneten Werten, aber diese keine Verbindung zur ehemaligen.

Ist das das erwartete Verhalten?

In der Tat ist es das richtige Verhalten. Ihr Diagramm wird in zwei Teile zerlegt:

  1. Der Teil, in dem Sie die Werte keep_prob_***_val
  2. Der Teil berechnen, wo Sie die Platzhalter keep_prob_***

Teile 1 und 2 definieren, sind in der Grafik nicht verbunden. Wenn Sie sess.run(keep_prob_***_val) aufrufen, erstellen Sie ein Python-Objekt. Dieses Objekt wird dann dem zweiten Teil des Graphen zugeführt, aber der Graph weiß nicht, dass es aus dem ersten Teil stammt.


Gibt es eine Möglichkeit, die Tatsache in der TensorBoard Visualisierung meines Graphen zu erfassen, dass die berechneten Werte die entsprechenden Platzhalter zu füllen verwendet werden?

Sie können tf.cond() (doc) verwenden, um zwischen unter Verwendung der Werte berechnet im ersten Teil des Diagramms oder die Testwerte (wie 1. für keep_prob) zu wählen:

is_train = tf.placeholder(tf.bool, []) 

def when_train(): 
    return keep_prob_late_val 

def when_not_train(): 
    return 1. 

keep_prob_later = tf.cond(is_train, when_train, when_not_train) 

Und warum andere berechnete Werte korrekt angezeigt werden. Zum Beispiel zeigen sich meine berechneten Momentum-Werte, die genauso wie die oben genannten Dropout-Werte definiert sind, in Verbindung mit allen Teilen des Graphen, die sie beeinflussen.

In diesem Fall Sie keine Zwischen Platzhalter so der Graph verwenden ist voll angeschlossen!