TensorFlow2.0 Guide 官方教程 学习笔记12-TensorFlow variables

本笔记参照TensorFlow官方教程,主要是对‘Tensor’教程内容翻译和内容结构编排,原文链接:Variables


TensorFlow变量是能表示由程序操作的,共享的、持续时间长的状态的最好方法。

变量是由‘tf.Variable’类控制的。‘tf.Variable’表示可以被张量上运行的操作改变的张量值。我们可以用特定的操作读取并修改张量的值。高级别的库像tf.keras使用’tf.Variable‘来存储模型参数。在这篇教程里谷歌教我们如何创建、更新和管理TensorFlow里的变量。

一、创建变量

要想创建一个变量,只提供它的初始值就可以做到:

my_variable = tf.Variable(tf.zeros([1., 2., 3.]))

这个创造出来的变量是一个三维张量,它的形状为[1,2,3],里面都是由0填充。默认情况下这个变量的dtype为‘tf.float32’。如果没有指定,dtype默认从变量的初始值推断得到。

如果’tf.device’处于激活状态,变量将被放到这台设备上;否则,变量将放到可以兼容它dtype的最快设备上(也就是说大部分变量会自动的给GPU)。例如,下面这段代码创建了一个变量‘V’,并且把它放到了第二个GPU设备上。

with tf.device("/device:GPU:1"):
  v = tf.Variable(tf.zeros([10, 10]))

理想情况下你应该使用tf.distribute API,因为它允许我们编写一次代码,并让它在许多不同的分布式设置下工作。

二、使用变量

为了使用TensorFlow图中的变量值,我们只需要把它当做正常的张量看待就行了:

v = tf.Variable(0.0)
w = v + 1  # w is a tf.Tensor which is computed based on the value of v.
           # Any time a variable is used in an expression it gets automatically
           # converted to a tf.Tensor representing its value.

我们可以使用‘assign’、‘assign_add’和tf.Variable类的朋友来给变量分配值。例如,下面是教我们如何调用这些方法:

v = tf.Variable(0.0)
v.assign_add(1)

大多数TensorFlow优化器都有专门的操作,可以根据类似梯度下降的算法有效地更新变量的值。更多优化器(optimizer)的详情请参考:tf.keras.optimizers.Optimizer
我们还可以显式地(explicitly)读取变量的当前值,使用’read_value’:

v = tf.Variable(0.0)
v.assign_add(1)
v.read_value()  # 1.0

当最后一个对变量的引用超出作用域时,其内存被释放。

2.1 跟踪变量

TensorFlow里的变量是一个Python对象。正如我们创建层,模型,优化器以及其他关联工具一样,我们也希望在一个模型里得到所有模型的序列。
常用用例为执行‘Layer’子类化。层类递归跟踪变量设置为实例属性:
class MyLayer(tf.keras.layers.Layer):

  def __init__(self):
    super(MyLayer, self).__init__()
    self.my_var = tf.Variable(1.0)
    self.my_var_list = [tf.Variable(x) for x in range(10)]

class MyOtherLayer(tf.keras.layers.Layer):

  def __init__(self):
    super(MyOtherLayer, self).__init__()
    self.sublayer = MyLayer()
    self.my_other_var = tf.Variable(10.0)

m = MyOtherLayer()
print(len(m.variables))  # 12 (11 from MyLayer, plus my_other_var)

如果不开发一个新层,TensorFlow也可以用tf.Module基类来执行变量跟踪。‘tf.Model’的实例有一个’variables‘ 和’trainable_variables‘属性,该属性返回模型可以访问的变量,也可以导航通过其它模块(很像层类所做的跟踪)-----Instances of tf.Module have a variables and a trainable_variables property which return all (trainable) variables reachable from that model, potentially navigating through other modules (much like the tracking done by the Layer class).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值