1)为什么tensorflow要Variable来定义变量,而不用直接采用python语言的方式定义变量?
变量有作用域,普通python变量分局部变量和全局变量,函数体外定义的变量成为全局变量,在函数内部定义的变量称为局部变量。
tf.Variable定义的变量,可以看作图(Graph)作用域变量,相当有计算图中的一个节点(操作),可以这个变量和某个计算图绑定,这样可以通过计算图来共享这个变量,当我们为计算图某层权值参数定义为Variable时,不同的函数都可以访问该参数值,特别是优化函数,可以在训练时更新权值。
2)创建变量方法
w = tf.Variable(<initial-value>, name=<optional-name>)
创建变量的最佳方式是调用 tf.get_variable 函数。此函数要求您指定变量的名称。其他副本将使用此名称访问同一变量,以及在对模型设置检查点和导出模型时指定此变量的值。tf.get_variable 还允许您重复使用先前创建的同名变量,从而轻松定义重复利用层的模型。
my_variable = tf.get_variable("my_variable", [1, 2, 3])
先去集合中找有没有"my_variable"这个变量,如果有直接返回这个变量,如果没有,新建一个变量,并将其加入变量集中。
3)变量集合
新建Variable变量会默认放在这两个集合中
tf.GraphKeys.GLOBAL_VARIABLES- 可以在多台设备间共享的变量,tf.GraphKeys.TRAINABLE_VARIABLES- TensorFlow 将计算其梯度的变量。
如果不希望变量可训练,可以将其添加到 tf.GraphKeys.LOCAL_VARIABLES 集合中。
也可以使用自己的集合。集合名称可为任何字符串,且您无需显式创建集合。
4)初始化变量
要在训练开始前一次性初始化所有可训练变量,用 tf.global_variables_initializer()。此函数会返回一个操作,负责初始化 tf.GraphKeys.GLOBAL_VARIABLES 集合中的所有变量。
5)使用变量
要为变量赋值,使用 assign、assign_add 方法以及 tf.Variable 类中的友元
TensorFlow 支持两种共享变量的方式:
- 显式传递
tf.Variable对象。 - 将
tf.Variable对象隐式封装在tf.variable_scope对象内。
本文深入解析TensorFlow中变量的定义与管理,包括Variable与get_variable的区别,变量集合的作用,初始化变量的方法,以及如何在计算图中共享变量。通过实例讲解,帮助读者理解变量在模型训练中的关键作用。
3232

被折叠的 条评论
为什么被折叠?



