一、由来

深度学习中需要使用大量的变量集,以往写代码我们只需要做全局限量就可以了,但在tensorflow中,这样做既不方便管理变量集,有不便于封装,因此tensorflow提供了一种变量管理方法:变量作用域机制

二、两个重要API

tf.get_variable(name, shape=None)        # 根据给定的名字创建或返回一个变量

tf.variable_scope(name_or_scope, reuse=None)  # 将name_or_scope下的所有变量组成一个命名空间  

三、解读

先说第一个API

tf.get_variable(name, shape=None)这个方法在建立变量时与tf.Variable()完全相同,区别在于它还会搜索是否有同名变量;

 import tensorflow as tf

 with tf.variable_scope('const'):
a = tf.get_variable('a', [1], initializer=tf.constant_initializer(1.))

再说第二个API

这个方法最重要的参数时reuse,有三个取值:None、True、tf.AUTO_REUSE

reuse = None:继承父类的reuse标志

reuse = True:只能复用,不能创建

 import tensorflow as tf

 with tf.variable_scope('const'):
a = tf.get_variable('a', [1]) with tf.variable_scope('const', reuse=tf.AUTO_REUSE):
b = tf.get_variable('a', [1]) print(a==b) # True

reuse = tf.AUTO_REUSE:没有就创建,有了就复用,这是最安全的用法

 import tensorflow as tf

 def test():
with tf.variable_scope('const', reuse=tf.AUTO_REUSE):
a = tf.get_variable('a', [1]) return a x = test() # 没有就创建
y = test() # 有了就复用
print(x==y) # True

tensorflow的变量作用域的更多相关文章

  1. 『TensorFlow』线程控制器类&变量作用域

    线程控制器类 线程控制器原理: 监视tensorflow所有后台线程,有异常出现(主要是越界,资源循环完了)时,其should_stop方法就会返回True,而它的request_stop方法则用于要 ...

  2. tensorflow变量作用域(variable scope)

    举例说明 TensorFlow中的变量一般就是模型的参数.当模型复杂的时候共享变量会无比复杂. 官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望 ...

  3. 4、TensorFlow基础(二)常用API与变量作用域

    1.图.操作和张量 TensorFlow 的计算表现为数据流图,所以 tf.Graph 类中包含一系列表示计算的操作对象(tf.Operation),以及在操作之间流动的数据 — 张量对象(tf.Te ...

  4. tensorflow中使用变量作用域及tf.variable(),tf,getvariable()与tf.variable_scope()的用法

    一 .tf.variable() 在模型中每次调用都会重建变量,使其存储相同变量而消耗内存,如: def repeat_value(): weight=tf.variable(tf.random_no ...

  5. TensorFlow 使用变量共享

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

  6. TensorFlow笔记-变量,图,会话

    变量 存储一些临时值的作用或者长久存储.在Tensorflow中当训练模型时,用变量来存储和更新参数.变量包含张量(Tensor)存放于内存的缓存区.建模时它们需要被明确地初始化,模型训练后它们必须被 ...

  7. javascript中的变量作用域以及变量提升

    在javascript中, 理解变量的作用域以及变量提升是非常有必要的.这个看起来是否很简单,但其实并不是你想的那样,还要一些重要的细节你需要理解. 变量作用域 “一个变量的作用域表示这个变量存在的上 ...

  8. [转]深入理解JavaScript的变量作用域

    1.JavaScript的作用域链 2.函数体内部,局部变量的优先级比同名的全局变量高. 3.JavaScript没有块级作用域. 4.函数中声明的变量在整个函数中都有定义. 5.未使用var关键字定 ...

  9. Java基础知识笔记(七:接口、变量作用域和参数传递)

    一.接口 Java语言不允许一个子类拥有多个直接父类,即任何子类只能有一个直接父类.但允许一个类实现多个接口,即在定义类的接口名称列表中可以包含1个或多个接口名称,从而实现多重继承的特性.接口的定义格 ...

随机推荐

  1. String StringBuffer StringBuilder区别与联系

    java.lang.String.java.lang.StringBuffer.java.lang.StringBuilder都是字符串类型,是Java中用于处理字符串常用的三个类.它们主要有以下区别 ...

  2. Linux下面MariaDB 管理命令基础使用

    MariaDB 是 MySQL 的一个分,由于某些原因,使之取代了Mysql成为了 RHEL/CentOS 7 的默认数据库.针对数据库的操作我们经常做的操作就是增删查改,接下来就介绍下 MariaD ...

  3. 小记-----如何把本地jar包加载到maven库中

    1.从maven中央库下载下jar包

  4. C++中的异常处理(上)

    1,C++ 内置了异常处理的语法元素 try ... catch ...: 1,try 语句处理正常代码逻辑: 2,catch 语句处理异常情况: 3,try 语句中的异常由对应的 catch 语句处 ...

  5. springboot处理单个文件上传

    1. 引入pom.xml <dependencies> <dependency> <groupId>org.springframework.boot</gro ...

  6. Python sklearn拆分训练集、测试集及预测导出评分 决策树

    机器学习入门 (注:无基础可快速入门,想提高准确率还得多下功夫,文中各名词不做过多解释) Python语言.pandas包.sklearn包   建议在Jupyter环境操作 操作步骤 1.panda ...

  7. python3小demo

    总结常用的功能小实例,快速学习并掌握python技能 1.墨迹天气 import requests from lxml.html import etree import json import tim ...

  8. Java的duotaix

    今天看到博客园上一位原创的博文讲解Java多态性,觉得不错,不过没有解释,特此注释,侵删 public class MyTest { public static void main(String ar ...

  9. Haproxy学习总结

    一.Haproxy介绍 1.实现了一种事件驱动,单一进程模型,支持数万计的并发连接,用于为tcp和http应用程序提供高可用,负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制 ...

  10. keepalived和lvs实现mysql读负载均衡

    keepalived+lvs实现对mysql读负载均衡 环境:redhat 6.5 real server: 172.25.254.189 172.25.254.224 lvs: 172.25.254 ...