2016-07-07 7 views
1

私は1つの点が混乱しています。ここでは例のコードは次のとおりです。tensorflowのvar.op.nameとvar.nameの違いは何ですか?

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) 

出力は次のとおりです。conv1/filt conv1/bias

と私はvar.op.name出力

var.nameにを変更したときである: conv1/filt:0 conv1/bias:0

var.op.namevar.nameの違いは何ですか? :0の意味は?

答えて

2

op.nameはOperationの名前であり、var.nameはTensorの名前です。オペレーションはメモリを割り当て、エンドポイントで使用可能な出力を生成するものです(0、:1など)。Tensorは演算の出力であるため、いくつかのエンドポイントに対応します。この場合、conv1/filtはメモリを担当する変数オペレーションであり、conv1/filt:0がそのオペレーションの最初のエンドポイントです。実用上の違いは、が値を取得するために取得できるもの、つまりconv1/filtを使用して操作を保持している間です。すなわち、tf.get_default_graph().get_operation_by_name("conv1/filt")

0

私の理解から、すべての変数を初期化するためにOPが追加されました。 :0はちょうど最初の出力なので、別のconv1/filtがあった場合、conv1/filt:1として表示されます。