【TensorFlow 学习】tf.Variable与tf.get_variable

1. tf.Variable()

tf.Variable() 的基本用法:

W = tf.Variable(<initial-value>, name=<optional-name>)
w = tf.Variable(tf.constant(1.0,shape=[1]),name="w")

用于生成一个初始值为initial-value的变量。必须指定初始化值

2.tf.get_variable()

tf.get_variable()的基本用法:

W = tf.get_variable(name, shape=None, dtype=tf.float32, initializer=None,
       regularizer=None, trainable=True, collections=None)
w = tf.get_variable("w",shape=[1],initializer.constant_initializer(1.0))

获取已存在的变量(要求不仅名字,而且初始化方法等各个参数都一样),如果不存在,就新建一个。 可以用各种初始化方法,不用明确指定值。

3.区别

使用tf.Variable()时,如果检测到命名冲突,系统会自己处理。使用tf.get_variable()时,系统不会处理冲突,而会报错

w_1 = tf.Variable(3,name="w_1")
w_2 = tf.Variable(1,name="w_1")
print w_1.name
print w_2.name
#输出
#w_1:0
#w_1_1:0
w_1 = tf.get_variable(name="w_1",initializer=1)
w_2 = tf.get_variable(name="w_1",initializer=2)
#错误信息
#ValueError: Variable w_1 already exists, disallowed. Did
#you mean to set reuse=True in VarScope?

tf.Variable() 每次都在创建新对象。对于get_variable()来说,使用reuse=True,如果已经创建的变量对象,就把那个对象返回,如果没有创建变量对象的话,就创建一个新的。不使用reuse=True,如果已经创建的变量对象,就会报错。

4.推荐使用tf.get_variable()

1. 初始化更方便

W = tf.get_variable("W", shape=[784, 256],
       initializer=tf.contrib.layers.xavier_initializer())

2. 方便共享变量
因为tf.get_variable() 会检查当前命名空间下是否存在同样name的变量,可以方便共享变量。而tf.Variable 每次都会新建一个变量。

需要注意的是tf.get_variable() 要配合reuse和tf.variable_scope() 使用。

with tf.variable_scope("scope1"):
       w1 = tf.get_variable("w1", shape=[])
    w2 = tf.Variable(0.0, name="w2")
with tf.variable_scope("scope1", reuse=True):
    w1_p = tf.get_variable("w1", shape=[])
    w2_p = tf.Variable(1.0, name="w2")
print(w1 is w1_p, w2 is w2_p)
#输出
#True  False

5.参考

https://blog.csdn.net/u012223913/article/details/78533910?locationNum=8&fps=1
https://blog.csdn.net/u012436149/article/details/53696970

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值