Tensorflow变量
在Tensorflow的计算之前,需要将所有用到的变量初始化。也就是说,虽然在变量定义时给出了变量初始化的方法,但这个方法并没有被真正的运行。所以在计算之前,需要通过运行initializer方法来给变量赋值。虽然直接调用每个变量的初始化过程是一个可行的方案,但是当变量数目增多,或者变量之间存在依赖关系时,单个调用方案就比较麻烦,可以通过tf.global_variables_initializer函数实现初始化所有变量的过程:
init_op = tf.global_variables_initializer()
sess.run(init_op)
通过该函数,就不需要将变量一个一个的初始化了,这个函数也会自动处理变量之间的依赖关系。
1、变量和张量的关系
在Tensorflow中,变量的声明函数tf.Variable是一个运算。这个运算的输出结果就是一个张量,这个张量也是本篇中讲到的变量。所以变量只是一种特殊的张量。下面呢给出tf.Variable操作在Tensorflow中底层是如何实现的:
上图中的黑色椭圆代表变量w1,w1是一个Variable运算。在这张图的下方可以看到w1通过一个read操作将值提供给一个乘法运算,这个乘法操作就是tf.matmul(x,w1)。初始化变量w1的操作就是通过Assign操作完成的。Assign这个节点的输入为随机数生成函数的输出,而输出赋给了变量w1,这样就完成了变量初始化过程。
在计算过程中,所有变量都会被自动地加入到GraphKeys.VaRIABLES这个集合中。通过tf.global_variables()函数可以拿到当前计算图上所有的变量。拿到计算图上所有的变量有助于持久化整个计算图的运行状态。当构建机器学习模型时,可以通过变量声明函数中的trainable参数来区分需要优化的参数。Tensorflow中提供的神经网络优化算法会将GraphKeys.TRAINABLE_VARIABLES集合中的变量作为默认的优化对象。