1 使用tf.Variable函数创建变量

tf.Variable(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)

函数功能:

  创建一个新的变量,变量的值是initial_value,创建的变量会被添加到[GraphKeys.GLOBAL_VARIABLES]默认的计算图列表中,如果trainable被设置为True,这个变量还会被添加到GraphKeys.TRAINABLE_VARIABLES计算图的集合中。

参数:

  • initial_value:默认值是None,张量或者是一个python对象可以转成张量,这个initial_value是初始化变量的值。它必须有一个特殊的shape,除非validate_shape设置为False。
  • trainable:默认的是True,变量还会被添加到GraphKeys.TRAINABLE_VARIABLES计算图集合中。
  • collections:变量会被添加到这个集合中,默认的集合是[GraphKeys.GLOBAL_VARIABLES]。
  • validate_shape:如果是False,允许这个变量被初始化一个不知道shape。默认的是True,这个initial_value的shape必须是知道的。
  • name:变量的名字。
  • dypte:变量的类型,小数的默认是float32,整数默认是int32。

2 使用tf.get_variable函数创建变量

tf.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)
函数功能:

  根据变量的名称来获取变量或者创建变量。

参数:

  • name:变量的名称(必选)。
  • shape:变量的shape。
  • dtype:变量的数据类型。
  • initializer:变量的初始化值。

2.1 根据变量的名称创建变量

b = tf.get_variable(name="b", initializer=[1., 2., 3.])
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
print(b.eval(session=sess))
#[ 1. 2. 3.]
print(b.dtype)
#<dtype: 'float32_ref'>

使用tf.get_variable创建变量的时候,如果不指定name,会报TypeError: get_variable() missing 1 required positional argument: 'name'

2.2 根据变量的名称获取变量

with tf.variable_scope("f"):
#初始化一个变量名称为c的变量
c = tf.get_variable(name="c",shape=[3],initializer=tf.constant_initializer([1,2,3])) with tf.variable_scope("f",reuse=True):
d = tf.get_variable(name="c",shape=[3])
sess = tf.Session()
init = tf.initialize_all_variables()
sess.run(init)
print(d.eval(session=sess))
#[ 1. 2. 3.]
print(c.eval(session=sess))
#[ 1. 2. 3.]
print(d == c)
#True

  在使用tf.get_variable()根据变量的名称来获取已经生成变量的时候,需要通过tf.variable_scope函数来生成一个上下文管理器,并明确指定在这个上下文管理器中。获取变量值的时候,需要将上下文管理器中的reuse设置为True,才能直接获取已经声明的变量,如果不设置reuse会报错。需要注意的是,如果变量名在上下文管理器中已经存在,在获取的时候,如果不将reuse设置为True则会报错。同理,如果上下文管理器中不存在变量名,在使用reuse=True获取变量值的时候,也会报错。
补充:

(1)tf.variable_scope的嵌套

with tf.variable_scope("a"):#默认是False
  #查看上下文管理器中的reuse的值
  print(tf.get_variable_scope().reuse) #False
  with tf.variable_scope("b",reuse=True):
    print(tf.get_variable_scope().reuse) #True
#如果reuse是默认的则保持和上一层的reuse值一样
with tf.variable_scope("c"):
  print(tf.get_variable_scope().reuse) #True
print(tf.get_variable_scope().reuse) #False

(2)上下文管理器与变量名

#没有上下文管理器
a = tf.get_variable(name="a",shape=[2],initializer=tf.constant_initializer([1,2]))
print(a.name) #a:0,a就是变量名 #声明上下文管理器
with tf.variable_scope("f"):
  b = tf.get_variable(name="b",shape=[2],initializer=tf.constant_initializer([1,2]))
  print(b.name) #f/b:0,f代表的是上下文管理器的名称,b代表的是变量的名称
  #嵌套上下文管理器
  with tf.variable_scope("g"):
    c = tf.get_variable(name="c",shape=[2],initializer=tf.constant_initializer([1,2]))
    print(c.name)#f/g/c:0

(3)通过上下文管理器和变量名来获取变量

#通过带上下文管理器名称和变量名来获取变量
with tf.variable_scope("",reuse=True):
  d = tf.get_variable(name="f/b")
  print(d == b) #True
  e = tf.get_variable(name="f/g/c")
  print(e == c) #True

转:修炼之路的博客(侵删)

TensorFlow创建变量的更多相关文章

  1. 使用TensorFlow创建第变量定义和运行方式

    import tensorflow as tf# 熟悉tensorflow的变量定义和运行方式v1 = tf.Variable(2) #定义变量并给变量赋值v2 = tf.Variable(48) c ...

  2. TensorFlow 使用变量共享

    参考: https://www.tensorflow.org/programmers_guide/variable_scope 举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时 ...

  3. tensorflow冻结变量方法(tensorflow freeze variable)

    最近由于项目需要,要对tensorflow构造的模型中部分变量冻结,然后继续训练,因此研究了一下tf中冻结变量的方法,目前找到三种,各有优缺点,记录如下: 1.名词解释 冻结变量,指的是在训练模型时, ...

  4. Tensorflow之变量赋值输出1+2+3+4+5+6+7+8+...

    一.导入tensorflow import tensorflow as tf 二.定义计算图 (1)常量初始化 constant_name = tf.constant(value) (2)变量初始化 ...

  5. TensorFlow创建DeepDream网络

    TensorFlow创建DeepDream网络 Google 于 2014 年在 ImageNet 大型视觉识别竞赛(ILSVRC)训练了一个神经网络,并于 2015 年 7 月开放源代码. 该网络学 ...

  6. TF:Tensorflow定义变量+常量,实现输出计数功能—Jason niu

    #TF:Tensorflow定义变量+常量,实现输出计数功能 import tensorflow as tf state = tf.Variable(0, name='Parameter_name_c ...

  7. Robotframework(4):创建变量的类型和使用

    转载:http://www.cnblogs.com/CCGGAAG/p/7800321.html 实际的测试过程中,编写脚本时,我们需要创建一些变量来暂时或者永久性的存储数据,那么在Robotfram ...

  8. js 动态创建变量

      js 动态创建变量 CreationTime--2018年7月2日15点04分 Author:Marydon 1.实现方式 通过eval()实现 2.代码实现 /** * 声明一个函数 * @ex ...

  9. Tensorflow创建和读取17flowers数据集

    http://blog.csdn.net/sinat_16823063/article/details/53946549 Tensorflow创建和读取17flowers数据集 标签: tensorf ...

随机推荐

  1. BZOJ4303:数列

    浅谈\(K-D\) \(Tree\):https://www.cnblogs.com/AKMer/p/10387266.html 题目传送门:https://lydsy.com/JudgeOnline ...

  2. BZOJ2141:排队

    浅谈分块:https://www.cnblogs.com/AKMer/p/10369816.html 题目传送门:https://lydsy.com/JudgeOnline/problem.php?i ...

  3. vijos1369:难解的问题

    描述 在你的帮助下,蔚蓝来到了埃及.在金字塔里,蔚蓝看到了一个问题,传说,能回答出这个问题的人就能受到埃及法老的祝福,可是蔚蓝日夜奋战,还是想不出来,你能帮帮他么?(XXX: 胡扯,教主怎么可能想不出 ...

  4. 机器学习:模型泛化(L1、L2 和弹性网络)

    一.岭回归和 LASSO 回归的推导过程 1)岭回归和LASSO回归都是解决模型训练过程中的过拟合问题 具体操作:在原始的损失函数后添加正则项,来尽量的减小模型学习到的 θ 的大小,使得模型的泛化能力 ...

  5. pushd,popd,dirs,cd -让切换目录更方便

    与linux cd命令相似,用pushd实现在不同目录间切换 在命令行模式下,当你工作在不同目录中,你将发现你有很多时间都浪费在重复输入上如果这些目录不在同一个根目录中,你不得不在转换时输入完整的路径 ...

  6. linux命令 把Windows 文件拷贝到linux

    scp build.zip mesadmin@dpydalapp01.sl.bluecloud.ibm.com:/tmp   // 把Windows上的build.zip拷贝到mesadmin@dpy ...

  7. libstdc++.so.6

    libstdc++.so.6遇到的问题: 1.提示version `GLIBCXX_3.4.14' not found /usr/lib64/libstdc++.so.: version `GLIBC ...

  8. 2016全国大学生信息安全竞赛(Misc)

    你好,i春秋: 关注i春秋公众微信号,然后发送CTF,机器人会问星期几,按实回答,然后发送你好,机器人会回复你好,然后随便发几句,机器人会问是否愿意陪他聊天,回复不愿意,机器人就会发flag kill ...

  9. jhipster初接触

    在Windows7部署之前把几个依赖下了 jdk:1.80 Maven :3.3.9 git:2.14.1 npm:唯一要注意的就是配置一个阿里的镜像,不然慢的你崩溃 Yeoman: npm inst ...

  10. 很详细的Nginx配置说明

    这篇文章主要为大家分享了一篇很详细的Nginx配置说明,主要内容包括Nginx常用功能.Nginx配置文件结构,想要了解Nginx配置的朋友不要错过,参考一下   Nginx是lgor Sysoev为 ...