我有一点令人困惑。以下是示例代码:
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
是什么意思?
答案 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。