从两个方法的名称上,可以简单理解一下,Variable是定义变量,而get_variable是获取变量(只不过如果获取不到就重新定义一个变量),如果按照这种逻辑,已经基本上可以理解两者的差异了。
下面我们通过一些代码,来更深入理解一下两者的差异和各自的特点
先看下面这段代码(最好先不要看下面注释中的输出结果,先自己思考一下会是什么结果)
import tensorflow as tf
v1 = tf.Variable(1,name="V1") # 第1句话
v2 = tf.Variable(2,name="V1") # 第2句话
v3 = tf.Variable(3,name="V1") # 第3句话
v4 = tf.Variable(4,name="V1_1") # 第4句话
print ("v1:",v1.name)
print ("v2:",v2.name)
print ("v3:",v3.name)
print ("v4:",v4.name)
v1 = tf.Variable(1,name="V1") # 第5句话
print ("v1:",v1.name)
### 输出结果为 ###
# v1: V1:0
# v2: V1_1:0
# v3: V1_2:0
# v4: V1_1_1:0
# v1: V1_3:0
这段代码表明,定义一个变量并传入参数name,如果name取值相同,则系统会自动在上一个传入的name后面加上"_n",n从1开始顺序增加。
比如上面的第2句话和第3句话,就是因为定义变量时传入的参数name和第1句话的name取值相同(V1),因此在"V1"的基础上分别加上了"_1"和"_2"。也就是说,虽然在定义变量时,指定了相同的变量name,但是系统会创建一个新的内存空间,并自动生成一个新的name。
上面第4句话传入的参数name