2016-07-07 10 views
1

Ich habe einen Punkt verwirrend. Hier ist der Beispielcode:Was ist der Unterschied zwischen var.op.name und var.name im Tensorflow?

opt = tf.train.GradientDescentOptimizer(1e-4) 
grads_and_vars = opt.compute_gradients(total_loss)  
for grad, var in grads_and_vars:   
    print(var.op.name) 

der Ausgang ist: conv1/filt conv1/bias

und wenn ich var.op.name in var.name

ändern die Ausgabe lautet: conv1/filt:0 conv1/bias:0

Was ist der Unterschied zwischen var.op.name und var.name ? und was bedeutet :0?

Antwort

2

op.name ist der Name des Vorgangs, während var.name der Name des Tensors ist. Operation ist die Sache, die Speicher zuweist und Ausgänge erzeugt, die auf Endpunkten verfügbar sind: 0,: ​​1 usw. Tensor ist eine Ausgabe einer Operation, also entspricht sie einem Endpunkt. In diesem Fall ist conv1/filt die Variable Operation, die für den Speicher zuständig ist, und conv1/filt:0 ist der erste Endpunkt dieser Operation. Der praktische Unterschied ist, dass conv1/filt:0 ist, was Sie holen können, um den Wert zu erhalten, dh , während Sie verwenden conv1/filt, um einen Halt der Operation zu erhalten, dh tf.get_default_graph().get_operation_by_name("conv1/filt")

0

Von meinem Verständnis, OP ist nur hinzugefügt, um alle Variablen zu initialisieren. Das: 0 ist nur die erste Ausgabe. Wenn also ein anderes conv1/filt vorhanden wäre, würde es als conv1/filt: 1 angezeigt.