Path: blob/master/site/zh-cn/guide/variable.ipynb
25115 views
Copyright 2020 The TensorFlow Authors.
变量简介
TensorFlow 变量是用于表示程序处理的共享持久状态的推荐方法。本指南介绍在 TensorFlow 中如何创建、更新和管理 tf.Variable
的实例。
变量通过 tf.Variable
类进行创建和跟踪。tf.Variable
表示张量,对它执行运算可以改变其值。利用特定运算可以读取和修改此张量的值。更高级的库(如 tf.keras
)使用 tf.Variable
来存储模型参数。
设置
本笔记本讨论变量布局。如果要查看变量位于哪一个设备上,请取消注释这一行代码。
创建变量
要创建变量,请提供一个初始值。tf.Variable
与初始值的 dtype
相同。
变量与张量的定义方式和操作行为都十分相似,实际上,它们都是 tf.Tensor
支持的一种数据结构。与张量类似,变量也有 dtype
和形状,并且可以导出至 NumPy。
大部分张量运算在变量上也可以按预期运行,不过变量无法重构形状。
如上所述,变量由张量提供支持。您可以使用 tf.Variable.assign
重新分配张量。调用 assign
(通常)不会分配新张量,而会重用现有张量的内存。
如果在运算中像使用张量一样使用变量,那么通常会对支持张量执行运算。
从现有变量创建新变量会复制支持张量。两个变量不能共享同一内存空间。
生命周期、命名和监视
在基于 Python 的 TensorFlow 中,tf.Variable
实例与其他 Python 对象的生命周期相同。如果没有对变量的引用,则会自动将其解除分配。
为了便于跟踪和调试,您还可以为变量命名。两个变量可以使用相同的名称。
保存和加载模型时会保留变量名。默认情况下,模型中的变量会自动获得唯一变量名,所以除非您希望自行命名,否则不必多此一举。
虽然变量对微分很重要,但某些变量不需要进行微分。在创建时,通过将 trainable
设置为 False 可以关闭梯度。例如,训练计步器就是一个不需要梯度的变量。
您可以将变量或张量的位置设置在一个设备上,然后在另一个设备上执行计算。但这样会产生延迟,因为需要在两个设备之间复制数据。
不过,如果您有多个 GPU 工作进程,但希望变量只有一个副本,则可以这样做。
注:由于 tf.config.set_soft_device_placement
默认处于打开状态,所以,即使在没有 GPU 的设备上运行此代码,它也会运行,只不过乘法步骤会在 CPU 上执行。
有关分布式训练的详细信息,请参阅指南。
后续步骤
要了解变量的一般用法,请参阅有关自动微分的指南。