Tensorflow Variable

Submitted by Lizhe on Thu, 08/17/2017 - 11:51

Tensor对象和Operation对象都是不可变的,如果需要可变对象需要使用Variable对象

a=tf.Variable(3, name="my_variable")

variable对象可以代替Tensor对象传入Tensorflow函数或Operation中使用

例如

add = tf.add(a, 5)

variable对象的初始值通常是0,1或者随机数填充的阶数较高的张量,不过可以使用辅助Op来初始化特定的值

tf.zeros()

tf.ones()

tf.random_uniform()

这些op都可以接收shape参数

2行2列的全0矩阵

zeros = tf.zeros([2,2])

长度6的全1向量

ones = tf.ones([6])

 

variable对象由session管理, 因此必须在一个session对象内对variable对象进行初始化, 这样session对象才能追踪这个variable值的变化

variable对象的初始化需要将 tf.initialize_all_variables() 传给Session.run()

import tensorflow as tf
a=tf.Variable(5, name="a")
b=tf.Variable(3, name="b")
c=a*b
sess = tf.Session()

#print(sess.run(a))

init = tf.initialize_all_variables()
sess.run(init)

print(sess.run(a))
 

[root@localhost session]# python helloVariable.py 
5
[root@localhost session]# 

如果使用下面代码在调用初始化之前尝试输出变量a会得到如下错误

import tensorflow as tf
a=tf.Variable(5, name="a")
b=tf.Variable(3, name="b")
c=a*b
sess = tf.Session()

print(sess.run(a))

init = tf.initialize_all_variables()
sess.run(init)

print(sess.run(a))

tensorflow.python.framework.errors.FailedPreconditionError: Attempting to use uninitialized value a

 

要修改Variable对象的值, 可以使用Variable.assign()方法, 该方法的作用是对Variable对方赋值, 要注意的是这个方法需要在session.run()之后才会生效

import tensorflow as tf
a=tf.Variable(5, name="a")
a_square=a.assign(a*a)
sess = tf.Session()

#print(sess.run(a))

init = tf.initialize_all_variables()
sess.run(init)
sess.run(a_square)

print(sess.run(a))

以上代码会得到输出

[root@localhost session]# python helloVariable.py 
25
[root@localhost session]# 

 

不同的session会维护各自的variable对象, 如果希望所有variable都恢复初始值可以再调用一次

tf.initialize_all_variables() 

如果是恢复单个值

tf.initialize_variables()

 

关于trainable参数

如果不希望Optimizer类自动修改某些variable值 ( 例如迭代计数器) 可以使用trainable=false作为参数

not_trainable = tf.Variable(0, trainable=false)