张量流中var.op.name和var.name之间有什么区别?

时间:2016-07-07 07:43:46

标签: 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/filt:0 conv1/bias:0

var.op.namevar.name之间有什么区别? :0是什么意思?

2 个答案:

答案 0 :(得分:3)

op.name是操作的名称,而var.name是Tensor的名称。操作是分配内存的东西,并产生端点上可用的输出:0,:1等.Tensor是操作的输出,因此它对应于某个端点。在这种情况下,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") < / p>

答案 1 :(得分:0)

根据我的理解,OP只是添加初始化所有变量。 :0只是第一个输出,所以如果有另一个conv1 / filt,它将显示为conv1 / filt:1。