2016-07-07 51 views
1

我有一點讓人困惑。下面是示例代碼:張量流中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.namevar.name

輸出爲:conv1/filt:0 conv1/bias:0

是什麼var.op.namevar.name之間的區別? 和:0是什麼意思?

回答

2

op.name是操作的名稱,而var.name是張量的名稱。操作是分配內存,並在端點上產生可用輸出的東西:0,:1等。張量是操作的輸出,因此它對應於某個端點。在這種情況下,conv1/filt是負責內存的變量操作,而conv1/filt:0是該操作的第一個終結點。實際區別在於,conv1/filt:0是您可以獲取的值,即sess.run(["conv1/filt:0"]),而您使用conv1/filt來獲取操作,即tf.get_default_graph().get_operation_by_name("conv1/filt")

0

根據我的理解,OP只是添加到初始化所有變量。 0:只是第一個輸出,所以如果有另一個conv1/filt,它將被表示爲conv1/filt:1。

相關問題