我是靠谱客的博主 自觉可乐,最近开发中收集的这篇文章主要介绍tf.Variable()与tf.get_variable()与不同之处,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

tf.Variable()可以定义名字相同的变量,

tf.Variable函数会返回一个variable,如果给出的name已经存在,会自动修改name,生成个新的

比如:下面定义两个名字同为a1的变量,但是,系统为自动给重新分配变量名

import tensorflow as tf

a1 = tf.Variable(1, name='a1')   # 定义a1变量
a2 = tf.Variable(1, name='a1')   # 定义a2变量

print a1.name    # 输出变量名:a1:0
print a2.name    # 输出变量名:a1_1:0

init = tf.global_variables_initializer()  #输出数据时必须要全局初始化
  
with tf.Session() as sess:  
    sess.run(init)  
    print sess.run(a1)    # 输出值:1
    print sess.run(a2)    # 输出值:1


tf.get_variable()可以定义名字相同的变量,

tf.get_variable函数拥有一个变量检查机制,会检测已经存在的变量是否设置为共享变量,如果已经存在的变量没有设置为共享变量,TensorFlow 运行到第二个拥有相同名字的变量的时候,就会报错。
不同的变量之间不能有相同的名字,除非你定义了variable_scope,这样才可以有相同的名字。

a3 = tf.get_variable(name='a3', initializer=2) 
a4 = tf.get_variable(name='a3', initializer=2) 

print a3.name     
print a4.name     

init = tf.global_variables_initializer()  #输出数据时必须要全局初始化
   
with tf.Session() as sess:  
    sess.run(init)  
    print sess.run(a3)     
    print sess.run(a4)     
报错信息如下:

ValueError: Variable a3 already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:
    a3 = tf.get_variable(name='a3', initializer=2)


tf.get_variable一般和tf.variable_scope配合使用,用于在同一个的变量域中共享同一个变量,

with tf.variable_scope('scope1') as scope1:
    a1 = tf.Variable(1, name='w1')
    print(a1.name)   # a1变量的名字:scope1/w1:0         
 
    a2 = tf.get_variable(name='a3', initializer=1.0)
    print(a2.name)   # a2变量的名字:scope1/a3:0
    
    tf.get_variable_scope().reuse_variables() # 或用 scope1.reuse_variables()
    
    a3 = tf.get_variable(name='a3', initializer=2.0)
    print(a3.name)   # a3变量的名字:scope1/a3:0
    
init = tf.global_variables_initializer()  #输出数据时必须要全局初始化
    
with tf.Session() as sess:
    sess.run(init) 
    print sess.run(a1) # a1变量的值:1
    print sess.run(a2) # a2变量的值:1.0
    print sess.run(a3) # a3变量的值:1.0 a3使用a2的值


或在不同变量域中使用同名变量。

with tf.variable_scope("scope2") as scope1:
    a2 = tf.get_variable(name='a3', initializer=1.0)
with tf.variable_scope(scope1, reuse = True):
    a3 = tf.get_variable(name='a3', initializer=2.0)

print(a2.name) # scope2/a3:0
print(a3.name) # scope2/a3:0 

init = tf.global_variables_initializer()    
with tf.Session() as sess:
    sess.run(init) 
    print sess.run(a2) # a2变量的值:1.0
    print sess.run(a3) # a3变量的值:1.0    a3使用scope2中的a2值


tf.Variable()

tf.get_variable() 不受tf.name_scope约束


import tensorflow as tf

with tf.name_scope("my_scope"):
    v1 = tf.get_variable("a", [1], dtype=tf.float32)
    v2 = tf.Variable(1, name="b", dtype=tf.float32)
    mysum = tf.add(v1, v2)

print(v1.name)      # a:0
print(v2.name)      # my_scope/b:0
print(mysum.name)   # my_scope/Add:0

tf.Variable()

tf.get_variable() 都 受tf.variable_scope约束

with tf.variable_scope("my_scope"):
    v1 = tf.get_variable("a", [1], dtype=tf.float32)
    v2 = tf.Variable(1, name="b", dtype=tf.float32)
    mysum = tf.add(v1, v2)

print(v1.name)      # my_scope/a:0
print(v2.name)      # my_scope/b:0
print(mysum.name)   # my_scope/Add:0


最后

以上就是自觉可乐为你收集整理的tf.Variable()与tf.get_variable()与不同之处的全部内容,希望文章能够帮你解决tf.Variable()与tf.get_variable()与不同之处所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部