Python tensorflow中的var.op.name和var.name之间有什么区别?

Python tensorflow中的var.op.name和var.name之间有什么区别?,python,tensorflow,deep-learning,Python,Tensorflow,Deep Learning,我有一点让人困惑。下面是示例代码: 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/f

我有一点让人困惑。下面是示例代码:

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.name
var.name
之间有什么区别?
什么是
:0
意思?

据我所知,OP只是用来初始化所有变量的。:0只是第一个输出,因此如果有另一个conv1/filt,它将显示为conv1/filt:1。

op.name
是操作的名称,而
var.name
是张量的名称。操作是指分配内存,并在端点:0、:1等上生成可用的输出。张量是操作的输出,因此它对应于某个端点。在这种情况下,
conv1/filt
是负责内存的变量操作,
conv1/filt:0
是该操作的第一个端点。实际的区别是
conv1/filt:0
是您可以获取值的内容,即
sess.run([“conv1/filt:0”)
,而您使用
conv1/filt
获取操作,即
tf.get\u default\u graph().get\u operation\u按名称(“conv1/filt”)