tensorflow实战——Day4

终于考完了数值分析,终于可以接上tensorflow学习了。。

TensorFlow通过名字管理变量

在写代码的时候,我们会发现,参数真的太多太多了,传这里传一下weight,那里传一下bias,头都要大了,还好,TensorFlow为我们提供了一种通过名字管理变量的办法,这里说的名字不同于变量名。举个栗子,有个变量就是[[1],[1]],然后我们给它叫一个名字,这个名字是唯一的,比如“one_matrix”,好了,下次张三用的时候,他就直接写a=one_matrix,李四用的时候,他就写b=one_matrix,有点全局变量的意思。由此可见,可以通过多个不同变量名(a、b)的变量来引用这个被取了名字的变量one_matrix。

import tensorflow as tf
with tf.variable_scope("namespace"):
    # 创建一个变量
    v=tf.get_variable(name="var",shape=[2,3],initializer=tf.constant_initializer(value=2.))

with tf.variable_scope("namespace",reuse=True):
    # 引用定义好的变量
    v1=tf.get_variable(name="var")
    print(v1.shape)
    print(v1.name)
    print(v==v1)

在namespace命名空间下创建了一个名叫var的变量(常量)。下次再用它的时候也要打开相应的命名空间,并且设置reuse=True,然后再引用它,并且只要告诉名字就够了,不要再给出过shape、initializer这些参数。如果要在这个命名空间里加一个变量,就reuse=False,然后再添加就好了。

print(v==v1)这句输出是True,说明两个变量(v,v1)引用的是同一个东西。

variable_scope 嵌套

variable_scope 这个东西是可以嵌套的,可以看作就是一层层的目录,命名空间就看作是目录名,里面还会有别的目录或者变量。需要注意的就是,reuse这个变量的值如果没显示指明,就和上一层的一样,如果是根命名空间,那就是False,来个代码直观理解一下。

# variable_scope 嵌套
with tf.variable_scope("root"):
    # 这个输出为False
    print(tf.get_variable_scope().reuse)
    # 创建一个root_var变量
    v1=tf.get_variable(name="root_var",shape=[2,3],initializer=tf.constant_initializer(value=2.))
    with tf.variable_scope("sub_root",reuse=True):
        # 这个输出为True
        print(tf.get_variable_scope().reuse)
        with tf.variable_scope("sub_sub_root"):
            # 这个输出为True
            print(tf.get_variable_scope().reuse)

    # 这个输出为False,回到了根命名空间
    print(tf.get_variable_scope().reuse)

# 输出如下
False
True
True
False

当然,可以在命名空间a中,引用命名空间b里面创建的变量。前提是你必须知道那个给好了名字的变量具体是怎么嵌套的。接上面的代码,我们可以在一个“”命名空间下,去用root下的root_var变量,有点类似目录中文件选择。

这个命名空间的名字必须是空的,假如不是空(例如给个b),就成了b/root/root_var,这个显然是没有的。

with tf.variable_scope("", reuse=True):
    # 使用root命名空间下的root_var变量
    v2=tf.get_variable(name="root/root_var")
    print(v2.name)
    print(v2.shape)

#输出如
root/root_var:0
(2, 3)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值