环境:Ubuntu14.04,tensorflow=1.4(bazel源码安装),Anaconda python=3.6
声明变量主要有两种方法:tf.Variable和 tf.get_variable,二者的最大区别是:
(1) tf.Variable是一个类,自带很多属性函数;而 tf.get_variable是一个函数;
(2) tf.Variable只能生成独一无二的变量,即如果给出的name已经存在,则会自动修改生成新的变量name;
(3) tf.get_variable可以用于生成共享变量。默认情况下,该函数会进行变量名检查,如果有重复则会报错。当在指定变量域中声明可
以变量共享时,可以重复使用该变量(例如RNN中的参数共享)。
下面给出简单的的示例程序:
import tensorflow as tf with tf.variable_scope('scope1',reuse=tf.AUTO_REUSE) as scope1: x1 = tf.Variable(tf.ones([1]),name='x1') x2 = tf.Variable(tf.zeros([1]),name='x1') y1 = tf.get_variable('y1',initializer=1.0) y2 = tf.get_variable('y1',initializer=0.0) init = tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) print(x1.name,x1.eval()) print(x2.name,x2.eval()) print(y1.name,y1.eval()) print(y2.name,y2.eval())
输出结果为:
scope1/x1:0 [ 1.] scope1/x1_1:0 [ 0.] scope1/y1:0 1.0 scope1/y1:0 1.0
1. tf.Variable(…)
tf.Variable(…)使用给定初始值来创建一个新变量,该变量会默认添加到 graph collections listed in collections, which defaults to [GraphKeys.GLOBAL_VARIABLES]。
如果trainable属性被设置为True,该变量同时也会被添加到graph collection GraphKeys.TRAINABLE_VARIABLES.
# tf.Variable __init__( initial_value=None, trainable=True, collections=None, validate_shape=True, caching_device=None, name=None, variable_def=None, dtype=None, expected_shape=None, import_scope=None, constraint=None )
2. tf.get_variable(…)
tf.get_variable(…)的返回值有两种情形:
使用指定的initializer来创建一个新变量;
当变量重用时,根据变量名搜索返回一个由tf.get_variable创建的已经存在的变量;
get_variable( name, shape=None, dtype=None, initializer=None, regularizer=None, trainable=True, collections=None, caching_device=None, partitioner=None, validate_shape=True, use_resource=None, custom_getter=None, constraint=None )
3. 根据名称查找变量
在创建变量时,即使我们不指定变量名称,程序也会自动进行命名。于是,我们可以很方便的根据名称来查找变量,这在抓取参数、finetune模型等很多时候都很有用。
示例1:
通过在tf.global_variables()变量列表中,根据变量名进行匹配搜索查找。 该种搜索方式,可以同时找到由tf.Variable或者tf.get_variable创建的变量。
import tensorflow as tf x = tf.Variable(1,name='x') y = tf.get_variable(name='y',shape=[1,2]) for var in tf.global_variables(): if var.name == 'x:0': print(var)
示例2:
利用get_tensor_by_name()同样可以获得由tf.Variable或者tf.get_variable创建的变量。
需要注意的是,此时获得的是Tensor, 而不是Variable,因此 x不等于x1.
import tensorflow as tf x = tf.Variable(1,name='x') y = tf.get_variable(name='y',shape=[1,2]) graph = tf.get_default_graph() x1 = graph.get_tensor_by_name("x:0") y1 = graph.get_tensor_by_name("y:0")
示例3:
针对tf.get_variable创建的变量,可以利用变量重用来直接获取已经存在的变量。
with tf.variable_scope("foo"): bar1 = tf.get_variable("bar", (2,3)) # create with tf.variable_scope("foo", reuse=True): bar2 = tf.get_variable("bar") # reuse with tf.variable_scope("", reuse=True): # root variable scope bar3 = tf.get_variable("foo/bar") # reuse (equivalent to the above) print((bar1 is bar2) and (bar2 is bar3))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]