首先是tf.get_variable和tf.Variable:
tf.get_variable通常和variable_scope一起使用管理变量命名空间,且通过reuse实现变量的复用,通过该方法获得变量必须指明变量名,否则报错。且name_scope对该方法无效,比如:
with name_scope('haha'):
a = tf.get_variable(name='a',shape=(2))
sess.run(a.name)
"a:0"
tf.Variable通常和name_scope 一起使用,name_scope会对tf.Variable起作用,且该方法获得变量时不用对变量命名,且命名重复时,会自动对其处理(variable_name:0,variable_name_1:0)
还有对加载模型(预训练模型),对参数的复用:
保存,加载模型可以看这儿:tensorflow保存加载模型
这儿主要是有个graph.get_tensor_by_name方法,这个方法通过变量名获取变量,那为什么可以通过op_name获得变量呢,发现这儿有答案:点击打开链接
原来每个op的输出依次为op_name:0,op_name:1......所以通过graph.get_tensor_by_name(op_name:0)可以拿到op的第一个输出,而通过graph.get_operation_by_name()是拿不到输出的,因为op只是一个操作,是个“壳”,但是也可以通过graph.get_operation_by_name().outputs[0]拿到第一个输出。