tf.global_variables_initializer

该篇博客主要记录一些tensorflow api理解

tf.global_variables_initializer

表面上

通常我们可以在一些tensorflow程序中看到有类似这样的一句代码sess.run(tf.global_variables_initializer())
那么为什么会有这么一句呢。那是因为变量必须先初始化之后才可以使用。这也意味着如果你的程序没有变量的话就可以不用写这句代码。如下代码:

1
2
3
4
5
6
7
import tensorflow as tf

tensor = tf.range(10)
out = tf.add(tensor, tensor)

with tf.Session() as sess:
print(out.eval())

上面代码将会打印如下输出:

1
[ 0  2  4  6  8 10 12 14 16 18]

因为上面的代码没有变量(准确说只要没有global_variables就行),所以我们不用写这一句。

变量类型

默认情况下,每个变量tf.Variable放置在两个集合中。

还有如果你希望你的变量不被训练,可以添加到 tf.GraphKeys.LOCAL_VARIABLES。例如,以下代码段展示了如何将名为 my_local 的变量添加到此集合中:

1
my_local = tf.get_variable("my_local", shape=(),collections=[tf.GraphKeys.LOCAL_VARIABLES])

或者,您可以指定 trainable=False(作为 tf.get_variable 的参数):

1
my_non_trainable = tf.get_variable("my_non_trainable", shape=(), trainable=False)

实际上

由上面其实我们就可以看出,tf.global_variables_initializer()实际上是在初始化tf.GraphKeys.GLOBAL_VARIABLES集合中的所有变量.

注意点

默认情况下,tf.global_variables_initializer 不会指定变量的初始化顺序。因此,如果变量的初始值取决于另一变量的值,那么很有可能会出现错误。任何时候,如果您在并非所有变量都已初始化的上下文中使用某个变量值(例如在初始化某个变量时使用另一变量的值),最好使用 variable.initialized_value(),而非 variable

1
2
v = tf.get_variable("v", shape=(), initializer=tf.zeros_initializer())
w = tf.get_variable("w", initializer=v.initialized_value() + 1)

参考

tf.control_dependencies