4-9 get_variable和Variable的区别
程序:
import tensorflow as tf
tf.reset_default_graph()
var1 = tf.Variable(1.0, name='firstvar')
print("var1:", var1.name)
var1 = tf.Variable(2.0, name='firstvar')
print("var1:", var1.name)
var2 = tf.Variable(3.0)
print("var2:", var2.name)
var2 = tf.Variable(4.0)
print("var1:", var2.name)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("var1=", var1.eval())
print("var2=", var2.eval())
get_var1 = tf.get_variable("firstvar", [1], initializer=tf.constant_initializer(0.3))
print("get_var1:", get_var1.name)
get_var1 = tf.get_variable("firstvar1", [1], initializer=tf.constant_initializer(0.4))
print("get_var1:", get_var1.name)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("get_var1=", get_var1.eval())
结果:
var1: firstvar:0
var1: firstvar_1:0
var2: Variable:0
var1: Variable_1:0
var1= 2.0
var2= 4.0
get_var1: firstvar_2:0
get_var1: firstvar1:0
get_var1= [0.4]
4-10 get_variable配合variable_scope
程序:
import tensorflow as tf
tf.reset_default_graph()
with tf.variable_scope("test1", ):#定义一个作用域test1
var1 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
with tf.variable_scope("test2"):#使用variable_scope隔开
var2 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
print("var1:", var1.name)
print("var2:", var2.name)
结果:
var1: test1/firstvar:0
var2: test2/firstvar:0
4-11 get_variable配合variable_scope1
程序:
import tensorflow as tf
tf.reset_default_graph()
with tf.variable_scope("test1", reuse=tf.AUTO_REUSE):
var1 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
with tf.variable_scope("test2"):
var2 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
print("var1:", var1.name)
print("var2:", var2.name)
with tf.variable_scope("test1", reuse=tf.AUTO_REUSE):
var3 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
with tf.variable_scope("test2"):
var4 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
print("var3:", var3.name)
print("var4:", var4.name)
结果:
var1: test1/firstvar:0
var2: test1/test2/firstvar:0
var3: test1/firstvar:0
var4: test1/test2/firstvar:0
4-12 共享变量的作用域与初始化
程序:
import tensorflow as tf
with tf.variable_scope("test1", initializer=tf.constant_initializer(0.4)):#初始化test1作用域
var1 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
with tf.variable_scope("test2"):
var2 = tf.get_variable("firstvar", shape=[2], dtype=tf.float32)
var3 = tf.get_variable("var3", shape=[2], initializer=tf.constant_initializer(0.3))
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print("var1=", var1.eval())
print("var2=", var2.eval())
print("var3=", var3.eval())
结果:
var1= [0.4 0.4]
var2= [0.4 0.4]
var3= [0.3 0.3]
4-13 作用域与操作符的受限范围
演示variable_scope的as用法,以及对应的作用域
程序:
import tensorflow as tf
tf.reset_default_graph()
with tf.variable_scope("scope1") as sp:
var1 = tf.get_variable("v", [1])
print("sp:", sp.name)#作用域名称
print("var1:", var1.name)
with tf.variable_scope("scope2"):
var2 = tf.get_variable("v", [1])
with tf.variable_scope(sp) as sp1:
var3 = tf.get_variable("v3", [1])
with tf.variable_scope(""):
var4 = tf.get_variable("v4", [1])
print("sp1:", sp1.name)
print("var2:", var2.name)
print("var3:", var3.name)
print("var4:", var4.name)
with tf.variable_scope("scope"):
with tf.name_scope("bar"):
v = tf.get_variable("v", [1])
x = 1.0 + v
with tf.name_scope(""):
y = 1.0 + v
print("v:", v.name)
print("x.op:", x.op.name)
print("y.op:", y.op.name)
结果:
sp: scope1
var1: scope1/v:0
sp1: scope1
var2: scope2/v:0
var3: scope1/v3:0
var4: scope1//v4:0
v: scope/v:0
x.op: scope/bar/add
y.op: add