最近刚开始接触tensorflow,第一次尝试读取一个ckpt文件并继续训练一个训练到一半的Alexnet网络。由于是第一次,读取的时候疯狂报错,等我千辛万苦(到处搜索)读取成果,跃跃欲试的敲下tf.graph.get_tensor_by_name()的时候,我惊讶的发现,之前我架网络时竟然忘了给变量赋name了!!!
在官方文档中寻找无果,于是便在jupyter notebook中操作了一番。
打印一个变量,得到如下结果:
可以看到,cost变量是一个tensor,名字是Mean:0,这是tensorflow自动分配的名字。
cost的定义如下:
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=pred,labels=y))
不难发现,cost的名字应该是根据tf.reduce_mean()这一函数自动分配的。可见tensor的默认名字由它所执行的最后一个函数来决定的。
进一步实验发现,operation型变量的命名规则也有这样的特性:
那如果有多个调用的函数相同的变量呢?
可以看到,如果由多个调用相同函数创建的tensor,则在函数名后面加上“_n”;这一规律同样适用于operation.
总结:
tensor命名规则:
> "Placeholder:0"
> "Placeholder_1:0"
# 统一格式
> "Function_last(_n):a"
operation命名规则:
> "Adam"
> "Adam_1"
# 统一格式
> "Function_last(_n)"