TensorFlow函数——tf.variable( )

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

(本文是翻译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类使用此集合作为要优化的变量的默认列表。

TensorFlow 1.X 是一个早期的主流版本,它与后续的 TensorFlow 2.X 在架构和 API 上存在显著差异。在 TensorFlow 1.X 中,用户需要显式地管理计算图(computation graph)和会话(session),这种基于静态图的方式要求先定义完整的计算流程,再通过 `tf.Session()` 执行操作。 ### 获取 TensorFlow 1.X 使用文档和教程 TensorFlow 官方提供了针对 1.X 版本的文档支持。尽管当前官方主推的是 TensorFlow 2.X,但可以通过切换文档版本访问旧版内容。例如,在 TensorFlow 的官方文档页面中,通常可以找到“r1.15”或类似标签,代表 TensorFlow 1.15 的稳定版本文档[^2]。 具体地址如下: - **官方文档**:https://tensorflow.google.cn/api_docs/python/tf - 切换到 1.x 版本文档的方法是点击网页右上角的“版本”选项,选择如 “r1.15” 这样的 1.X 版本标签。 - **GitHub 源码仓库**:https://github.com/tensorflow/tensorflow/tags 可以查看并下载历史版本源代码,包括多个 TensorFlow 1.X 的发布版本[^1]。 ### 推荐的学习资源 #### 官方资源 - **TensorFlow 1.X 教程**:虽然官方推荐使用 2.X,但在文档中仍保留了大量适用于 1.X 的示例和说明,尤其是关于低级 API 和自定义模型构建的部分。 - **社区博客**:许多开发者分享了关于 TensorFlow 1.X 的详细教程,涵盖从基础概念(如占位符、变量、会话)到复杂模型(如 CNN、RNN)的实现方法。 #### 第三方资源 - **书籍**:《TensorFlow实战》、《深度学习入门:基于Python的TensorFlow实现》等书籍中广泛使用了 TensorFlow 1.X,并提供完整的项目案例。 - **在线课程**:Coursera、Udacity 和 Bilibili 上有大量关于 TensorFlow 1.X 的教学视频,适合不同层次的学习者。 #### 示例代码 以下是一个简单的线性回归模型在 TensorFlow 1.X 中的实现: ```python import tensorflow as tf import numpy as np # 准备数据 X_train = np.random.rand(100).astype(np.float32) y_train = 3 * X_train + 2 y_train = np.vectorize(lambda y: y + np.random.normal(loc=0.0, scale=0.1))(y_train) # 定义模型参数 W = tf.Variable(1.0) b = tf.Variable(0.0) # 定义损失函数和优化器 loss = tf.reduce_mean(tf.square(W * X_train + b - y_train)) optimizer = tf.train.GradientDescentOptimizer(0.1) train_op = optimizer.minimize(loss) # 启动会话进行训练 with tf.Session() as sess: sess.run(tf.global_variables_initializer()) for step in range(201): sess.run(train_op) if step % 20 == 0: print(f"Step {step}: W={sess.run(W)}, b={sess.run(b)}") ``` 该代码展示了 TensorFlow 1.X 的典型编程风格 —— 先构建静态计算图,再通过 `Session` 执行图中的操作。这种方式对于理解底层机制非常有帮助,但也增加了开发复杂模型时的代码量和维护成本[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值