TensorFlow函数——tf.variable( )

本文介绍如何在TensorFlow中创建、初始化、使用及管理变量。包括使用Variable类创建变量的方法、如何在图中使用变量进行计算操作,以及变量的初始化、赋值等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(本文是翻译TensorFlow官网中的tf.variable()函数)

(变量):创建,初始化,保存和加载
您可以通过构造类Variable的实例向图中添加变量。

Variable()构造函数需要变量的初始值,它可以是任何类型和形状的Tensor(张量)。 初始值定义变量的类型和形状。 施工后,变量的类型和形状是固定的。 该值可以使用其中一种赋值方式进行更改。

如果要稍后更改变量的形状,则必须使用带有validate_shape = False的赋值操作。

就像任何Tensor(张量)一样,使用Variable()创建的变量可以用作图中其他操作的输入。 另外,Tensor类重载的所有操作符都被转载到变量中,所以您也可以通过对变量进行算术,将节点添加到图形中。

import tensorflow as tf
# Create a variable.(创建一个变量)
w = tf.Variable(<initial-value>, name=<optional-name>)
# Use the variable in the graph like any Tensor.(使用图形中的变量,如任何张量.)
y = tf.matmul(w, ...another variable or tensor...)(tf.matmul参数为w,其他变量或张量)
# The overloaded operators are available too.(重载运算符也可用。)
z = tf.sigmoid(w + y)
# Assign a new value to the variable with `assign()` or a related method.
#使用`assign()'或相关方法为变量赋值一个新值。
w.assign(w + 1.0)
w.assign_add(1.0)

当您启动图时,Variables(变量)必须被明确的初始化在你使用它们的值进行操作之前,你可以通过1运行其初始化器操作初始化variables,2从保存文件中还原variable,或者3仅仅运行一个赋值操作给variable赋值。实际上,variable初始化器操作只是赋值操作,赋值variable自己的初始化值给他自己(In fact, the variable initializer op is just an assign Op that assigns the variable’s initial value to the variable itself.)

# Launch the graph in a session.(在会话中启动图形)
with tf.Session() as sess:    
    # Run the variable initializer.(运行variable初始化器。)
sess.run(w.initializer)    
# ...you now can run ops that use the value of 'w'...(你现在可以运行使用'w'值的进行操作)

最常见的初始化模式是使用一个便利函数global_variables_initializer( ),将一个可以初始化所有variable的操作添加到图中(the graph)。然后启动图(graph)后运行该操作

# Add an Op to initialize global variables.(添加一个操作去初始化所以variable)
init_op = tf.global_variables_initializer()

# Launch the graph in a session.(在一个session中启动图)
with tf.Session() as sess:    
    # Run the Op that initializes global variables.(运行初始化全局Variable的操作)
sess.run(init_op)    
# ...you can now run any Op that uses variable values...(现在你可以运行所有使用任何variable值的操作)

如果需要创建一个取决于另一个variable的初始值的variable,请使用另一个variable的initialized_value()。 这样可以确保以正确的顺序初始化变量。(下面仅是在官网找的一个例子,详细的可以去官网查一下这个函数)

# Initialize 'v' with a random tensor.
v = tf.Variable(tf.truncated_normal([10, 40]))
# Use `initialized_value` to guarantee that `v` has been
# initialized before its value is used to initialize `w`.
# The random values are picked only once.
w = tf.Variable(v.initialized_value() * 2.0

所有variables都会自动收集到创建它们的图中。 默认情况下,构造函数将新变量添加到Graph集合GraphKeys.GLOBAL_VARIABLES。 这个便利函数global_variables()返回该集合的内容。

在构建机器学习模型时,通常可以方便地区分保存可训练模型参数的variable(变量)和其他variable,例如用于计算训练步骤的全局步长variable(变量)。为了使这更容易,变量构造函数支持trainable = 参数。如果为True,则新variable也将添加到图集合GraphKeys.TRAINABLE_VARIABLES中。

便利函数trainable_variables()返回此集合的内容。 各种Optimizer类使用此集合作为要优化的变量的默认列表。

### TensorFlowVariable的用法 在TensorFlow中,`tf.Variable`类用于表示可训练参数。创建一个变量非常简单,只需要指定其初始值即可[^1]。 对于TensorFlow 2.x版本而言,由于默认启用了即时执行(Eager Execution),因此可以像处理常规Python对象一样轻松地创建和操作这些变量;而在TensorFlow 1.x版本里,则需通过显式的会话(session)机制来进行初始化与更新。 #### 创建并初始化变量 下面展示了一个简单的例子,说明如何定义和初始化一个张量: ```python import tensorflow as tf # 定义一个常数作为初始值 initial_value = [[1., 2.], [3., 4.]] v = tf.Variable(initial_value, name="var", trainable=True) print(v.numpy()) ``` 这段代码展示了如何利用NumPy数组或其他类型的张量来设置变量的初值,并指定了该变量是否参与模型训练过程(`trainable`)属性。 #### 赋予新值给已存在的变量 除了初始化之外,还可以随时改变现有变量的内容: ```python new_value = [[5., 6.], [7., 8.]] assign_op = v.assign(new_value) print(assign_op.numpy()) ``` 这里使用了`.assign()`方法直接修改了之前创建好的变量`v`所持有的数值。 #### 使用优化器自动调整权重 当构建神经网络时,通常不需要手动更改每个参数——而是依赖于内置或自定义的优化算法完成这一工作。例如,在最小化损失函数的过程中,可以通过调用`minimize()`函数让梯度下降等策略自动调节各个层内的权值矩阵和其他相关参数[^3]。 #### 存储和恢复变量状态 为了能够在不同时间点之间保持学习成果不变,或者共享预训练过的模型结构及其对应的内部参数配置,TensorFlow提供了便捷的方式实现持久化的功能。这主要涉及到两个方面的工作:一是导出当前所有的全局变量到文件系统当中去;二是读取先前已经保存下来的数据集以便后续继续训练或是做预测分析用途。 - **保存**:借助`saver.save(sess, save_path)`命令可以把整个计算图连同其中所有节点的状态一并记录起来; - **加载**:相反地,如果想要重新载入某个特定时刻下的快照,则只需执行`saver.restore(sess, save_path)`就可以了[^5]。 注意上述提到的操作均适用于较早版本(TF1.x系列),而对于新版环境(TF2.x及以上),官方推荐采用更现代化的方法论如Checkpoint API 或 SavedModel 格式替代旧有的Saver接口。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值