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. bzoj 3527 [Zjoi2014]力——FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 把 q[ i ] 除掉.设 g[ i ] = i^2 ,有一半的式子就变成卷积了:另一 ...

  2. HDU5468(dfs序+容斥原理)

    Puzzled Elena Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  3. openwrt: Makefile 框架分析[转载]

    openwrt目录结构 上图是openwrt目录结构,其中第一行是原始目录,第二行是编译过程中生成的目录.各目录的作用是: tools - 编译时需要一些工具, tools里包含了获取和编译这些工具的 ...

  4. java流类、、、理解不够,流太多不知怎么用好?

    总结:输入流.输出流..子类多.需要加强: package com.da; import java.io.*; public class rtr { public static void main(S ...

  5. stdin和STDIN_FILENO的区别

    STDIN_FILENO与stdin的区别: STDIN_FILENO: 1).数据类型:int 2).层次:系统级的API,是一个文件句柄,定义在<unistd.h>中. 3).相应的函 ...

  6. php大型网站如何提高性能和并发访问

    一.大型网站性能提高策略: 大型网站,比如门户网站,在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器. ...

  7. eclipse下搭建Drools规则引擎环境

    插件下载地址:http://download.jboss.org/drools/release/ 1.点开对应的版本文件,选择标红的两个压缩包下载,其他的如有需要也可以自行选择: 2.将下载的压缩包解 ...

  8. ORA-04098 trigger 'DBBJ.DB_EV_ALTER_ST_METADATA' is invalid and failed re-validation

    转自:https://blog.csdn.net/dragoo1/article/details/9411105 ORA-04098: trigger 'DBBJ.DB_EV_ALTER_ST_MET ...

  9. 解决Xcode在debug时不在断点处停止的方法<转>

    搞了老半天不知道为什么 后来查了一下才解决问题,多谢原创作者的贡献. 新年后的第一发! -------------------------------- 前几天在开发的时候,Xcode设置断点后依然无 ...

  10. Android添加Menu菜单

    在安卓中添加Menu菜单十分简单. 步骤: 1.在menu文件夹中的main.xml文件中添加要添加的项目. <menu xmlns:android="http://schemas.a ...