在学习TensorFlow的Variable时遇到了几个问题,在此记录下
第一个例子
#最简单的一个例子----------------------------------------- a = 3 # 第一步,Create a variable. w = tf.Variable([[0.5,1.0]]) x = tf.Variable([[2.0],[1.0]]) #第二步,做矩阵相乘 y = tf.matmul(w, x) with tf.Session() as sess: tf.global_variables_initializer().run() #第一种方法,直接全局初始化 sess.run(x.initializer) #第二种方法,单独初始化x(当然,只初始化x无法打印y,必须初始化x和w,而y不用初始化) print (y.eval()) #第一种输出y的方法 print(sess.run(y)) #第二种输出y的方法
第二个例子,用tf函数创造variable
import tensorflow as tf x=tf.Variable(tf.random_normal((2,3),stddev=1)) with tf.Session() as sess: tf.global_variables_initializer().run() print(sess.run(x))
输出结果:
上面例子说明varibale可以传tf的函数来构造,此函数式创建(2,3)的variable类型的二维数组,每个数用正态分布构造,标准差是1
第三个例子,用constant创造variable
import tensorflow as tf x=tf.Variable(tf.constant(1.0,shape=[2,3]),name='x') #name可以省略 with tf.Session() as sess: tf.global_variables_initializer().run() print(sess.run(x))输出为:
第四个例子
variable与get_variable的区别(简述)
import tensorflow as tf x=tf.Variable(tf.constant(1.0,shape=[2,3]),'x') y=tf.get_variable("y",shape=[2,3],initializer=tf.constant_initializer(1.0)) #y1=tf.get_variable(tf.constant(1.0,shape=[2,3]),'y1') #会报错 with tf.Session() as sess: tf.global_variables_initializer().run() print(sess.run(x)) print(sess.run(y)) #print(sess.run(y1))
get_variable与Variable传入参数有所不同,主要区别是前者name为必传参数,后者可以没有name,另外就是前者与variable_scope配合使用,这里不做详细描述
注意:get_variable经常的用法是传入name和shape,initializer可以不传,initializer并不代表初始化了此变量,要用此变量还是需要初始化
第五个例子:variable_scope简单实例
import tensorflow as tf with tf.variable_scope('scope1',reuse=False): y=tf.get_variable("y",shape=[2,3],initializer=tf.constant_initializer(1.0)) with tf.Session() as sess: tf.global_variables_initializer().run() print(sess.run(y)) with tf.variable_scope('scope1',reuse=True): y1= tf.get_variable("y",shape=[2,3],initializer=tf.constant_initializer(2.0)) with tf.Session() as sess: tf.global_variables_initializer().run() print(sess.run(y1))可以看出,在reuse=False时是创建变量,一旦变量被创建,则可以在同一个名字的scope中使用(此时reuse=True),即使
重新设置了不同的initializer,输出仍为原始: