变量是输出其当前值的有状态的节点;这意味着它们可以在图形的多次执行中保持其值。它们具有两大特征:
这两个特征使得变量适合被用作网络参数(即权重和偏差)。
tf.Variable is a class, and there are several ways to create tf.Variable including tf.Variable.__init__ and tf.get_variable.
tf.Variable.__init__: Creates a new variable with initial_value.
W = tf.Variable(<initial-value>, name=<optional-name>)
tf.get_variable: Gets an existing variable with these parameters or creates a new one. You can also use initializer.
- W = tf.get_variable(name, shape=None, dtype=tf.float32, initializer=None,
- regularizer=None, trainable=True, collections=None)
It's very useful to use initializers such as xavier_initializer:
- W = tf.get_variable("W", shape=[784, 256],
- initializer=tf.contrib.layers.xavier_initializer())
就像大多数编程语言一样,变量需要在使用之前进行初始化。TensorFlow 虽然不是一门语言,但也不例外。要初始化变量,我们必须调用变量初始化器操作并在sess会话上运行该操作。这是一次初始化所有变量的最简单方法。
例子:
-
- # create graph
- a = tf.get_variable(name="A", initializer=tf.constant(2))
- b = tf.get_variable(name="B", initializer=tf.constant(3))
- c = tf.add(a, b, name="Add")
- # add an Op to initialize global variables
- init_op = tf.global_variables_initializer()
-
- # launch the graph in a session
- with tf.Session() as sess:
- # run the variable initializer operation
- sess.run(init_op)
- # now let's evaluate their value
- print(sess.run(a))
- print(sess.run(b))
- print(sess.run(c))

上图显示生成了两个灰色框,它们代表变量。使用“Add”操作将这两个变量相加。
*注意:变量通常用于神经网络中的权重和偏差。
权重通常使用 正态分布初始化tf.truncated_normal_initializer()。
偏差通常使用从零开始初始化tf.zeros_initializer()。
例子:
- # create graph
- weights = tf.get_variable(name="W", shape=[2,3], initializer=tf.truncated_normal_initializer(stddev=0.01))
- biases = tf.get_variable(name="b", shape=[3], initializer=tf.zeros_initializer())
-
- # add an Op to initialize global variables
- init_op = tf.global_variables_initializer()
-
- # launch the graph in a session
- with tf.Session() as sess:
- # run the variable initializer
- sess.run(init_op)
- # now we can run our operations
- W, b = sess.run([weights, biases])
- print('weights = {}'.format(W))
- print('biases = {}'.format(b))
weights = [[-0.00376599 -0.00506956 0.00082394] [ 0.0016487 0.00981423 -0.00226094]] biases = [0. 0. 0.]