tensorflow中的权值共享 tf.variable()与tf.get_variable()区别

这篇文章讲的很详细

创建变量
创建变量上,tf.variable()与tf.get_variable()二者的功能基本等价,差别就是在于指定变量名称的参数。
对于 tf.variable 来说,变量的名称是一个可选的参数。
对于 tf.get_variable 这个函数来说,它参数列表当中的 name 是一个必填的参数。在编译的时候, tf.get_variable 会根据这个给出的 name 参数的值来创建或者是获取一个变量。如果这个变量不存在,那么一切都正常,他会创建一个;但是如果这个变量是已经存在了的,这时候程序就会报错。

tf.name_scope() 并不会对 tf.get_variable() 创建的变量有任何影响。 tf.name_scope() 主要是用来管理命名空间的,这样子让我们的整个模型更加有条理。

而 tf.variable_scope() 的作用是为了实现变量共享,它和 tf.get_variable() 来完成变量共享的功能。

权值共享
共享不是复制, 共享是每次使用同一组参数, 不是把一组参数复制了四处取用。
大部分情况下,variable_scope跟 tf.get_variable() 配合使用,实现变量共享的功能。with tf.variable_scope('scopename', reuse=True): func() 函数调用,则函数func内部定义的变量空间名 在前面也会加上scopename的空间。

import tensorflow as tf

with tf.variable_scope("a"):
    v1 = tf.get_variable("v", [1], initializer=tf.constant_initializer(1.0))
# with tf.variable_scope("a"):
#     v2 = tf.get_variable("v", [1])   # 报错 ValueError: Variable a/v already exists,
 
with tf.variable_scope("a", reuse=True):
    v3 = tf.get_variable("v", [1])
    print(v3 == v1)  # True
 
with tf.variable_scope("b", reuse=True):
    v4 = tf.get_variable("v", [1])  # 报错 ValueError: Variable b/v does not exist, or was not created with tf.get_variable().
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值