简介
定义变量是必要的,因为它们包含参数。没有参数,就不能执行训练、更新、保存、恢复和其他节点。
tensorflow 中定义的变量只是具有特定形状和类型的张量。张量必须初始化值才能有效。
创建 Variables
创建张量变量,使用tf.Variables() 类。当我们定义一个变量时,我们基本上把一个张量及其值传递给 graph 图。一般地,一个变量张量会转递给 graph 图,通过 tf.assign 初始化设置该变量值。
import tensorflow as tf
from tensorflow.python.framework import ops
# 定义变量
# 1.创建随机正态分布产生2行3列矩阵变量
weight = tf.Variable(tf.random_normal([2, 3], stddev=0.1),name='weight')
# 2.创建全是 0 的数组
bias = tf.Variable(tf.zeros(3), name='bias')
custom = tf.Variable(tf.zeros(3), name='custom')
# 得到所有变量的张量并将它们存储在一个列表中
all_var_list = ops.get_collection(ops.GraphKeys.GLOBAL_VARIABLES)
在上面的代码中,ops.get_collection从已定义的 graph 图中获取所有已定义变量的列表。变量里的 “name”键,为图中的每个变量定义一个特定的名称。
初始化
变量可以部分初始化,全局地初始化,或者从其他变量初始化
########################## 局部初始化 ##################################
# 可以这样定义:
var_list_custom = [weight, custom]
init_custom_op = tf.variables_initializer(var_list = var_list_custom)
######################### 全局初始化 ###################################
# 自定义全部初始化
# 第一种方式
init_all_op = tf.global_variables_initializer()
# 另一种方式, all_var_list 是在上面的存储列表 ops_get_collection()
init_all_op = tf.variables_initializer(var_list=all_var_list)
######################### 已有变量初始化 ################################
# 创建另一个变量 (weight 第一张图刚创建的变量)值相同的变量
WeightsNew = tf.Variable(weights.initialized_value(), name="WeightsNew")
# 初始化这个变量
init_WeightsNew_op = tf.variables_initializer(var_list=[WeightsNew])
运行会话
目前所做的只是定义初始化器的操作并将它们放到图中。为了真正地初始化变量,必须在会话中运行已定义的初始化器的ops
with tf.Session() as sess:
# 运行初始化op
sess.run(init_all_op)
sess.run(init_custom_op)
sess.run(init_WeightsNew_op)