tf.Variable(), tf.get_variable(), tf.variable_scope(), tf.name_scope()——不同的变量创建方式决定了他们不同的用途

  • tf.get_variable() 创建变量的时候必须要提供 name

  • tf.Variable()创建变量之前不会检查是否有同样name的变量,但tf.get_variable() 会。
  • 因为上一条的原因,所以tf.get_variable() 可以方便共享变量,前提是要配合`tf.variable_scope()`使用。每个在tf.variable_scope()定义的变量命名空间之内创建的变量,都会检查name是否一样,若一样,则采取“变量共享”。但对于tf.Variable(),则是直接创建一个name后面多个“_1”的新变量,变量之间自然也是不共享的
  • tf.variable_scope() & tf.name_scope():
    • tf.name_scope() 主要是用来管理命名空间的,这样子让我们的整个模型更加有条理。
    • tf.variable_scope() 的作用是为了实现变量共享,它和 tf.get_variable() 一起,来完成变量共享的功能。
    • 在tf.name_scope()生成的命名空间内部,对于tf.get_variable()方法产生的变量没有任何限制能力——也就是说,name_scope定义的name不会显现在tf.get_variable()方法产生的变量的name上。
  • 总结:
    • tf.name_scope()是tensorflow帮我出了一套命名管理体系,好比你叫王二,你同学叫李四。然后有两个男人是他俩的爹,你闭着眼都知道王八肯定是王二他爹,李大是李四他爹一样。。。。。这有2张图,生动现实了命名空间name_scope的作用:

                                                                                              没有命名空间 

                                                                                                有命名空间

  • tf.variable_scope()和tf.get_variable()大多数时间是一起使用的,用法为先用tf.variable_scope()创建变量空间,然后在这个变量空间内用tf.variable_scope()创建可以共享的变量,同时这也要求了变量不可有一样的name(name一样你俩就共享了嘛)
  • tf.Variable()创建的变量可以受tf.name_scope()影响。创建的变量也不会被共享,name一样的话就会自动在name后面加后缀
  • 这样区分对于tensorflow程序而言,最大的意义是,对于weight和bias这种,每次进行卷积等操作都需要学习、更新的变量而言,变量的复用是必须的,所以weight和bias变量必须共享,否则几轮梯度下降下来出来了多少个weight和bias,就是去了梯度下降参数更新的意义了。如果用tf.varaible_scope() + tf.get_variable()一起定义共享变量,则每次更新的都是那么一套weight+bias,这就合理了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_illusion_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值