举例说明

TensorFlow中的变量一般就是模型的参数。当模型复杂的时候共享变量会无比复杂。

官网给了一个case,当创建两层卷积的过滤器时,每输入一次图片就会创建一次过滤器对应的变量,但是我们希望所有图片都共享同一过滤器变量,一共有4个变量:conv1_weights,conv1_biases,conv2_weights, and conv2_biases。

通常的做法是将这些变量设置为全局变量。但是存在的问题是打破封装性,这些变量必须文档化被其他代码文件引用,一旦代码变化,调用方也可能需要变化。

还有一种保证封装性的方式是将模型封装成类。

不过TensorFlow提供了Variable Scope 这种独特的机制来共享变量。这个机制涉及两个主要函数:

在下面的代码中,通过tf.get_variable()创建了名称分别为weights和biases的两个变量。

但是我们需要两个卷积层,这时可以通过tf.variable_scope()指定作用域进行区分,如with tf.variable_scope("conv1")这行代码指定了第一个卷积层作用域为conv1,

在这个作用域下有两个变量weights和biases。

最后在image_filters这个作用域重复使用第一张图片输入时创建的变量,调用函数reuse_variables(),代码如下:

tf.get_variable()工作机制

tf.get_variable()工作机制是这样的:

当tf.get_variable_scope().reuse == False,调用该函数会创建新的变量

当tf.get_variable_scope().reuse == True,调用该函数会重用已经创建的变量

变量都是通过作用域/变量名来标识,后面会看到作用域可以像文件路径一样嵌套。

tf.variable_scope理解

tf.variable_scope()用来指定变量的作用域,作为变量名的前缀,支持嵌套,如下:

当前环境的作用域可以通过函数tf.get_variable_scope()获取,并且reuse标志可以通过调用reuse_variables()设置为True,这个非常有用,如下

作用域中的resuse默认是False,调用函数reuse_variables()可设置为True,一旦设置为True,就不能返回到False,并且该作用域的子空间reuse都是True。如果不想重用变量,那么可以退回到上层作用域,相当于exit当前作用域,如

一个作用域可以作为另一个新的作用域的参数,如:

不管作用域如何嵌套,当使用with tf.variable_scope()打开一个已经存在的作用域时,就会跳转到这个作用域。

variable scope的Initializers可以创递给子空间和tf.get_variable()函数,除非中间有函数改变,否则不变。

算子(ops)会受变量作用域(variable scope)影响,相当于隐式地打开了同名的名称作用域(name scope),如+这个算子的名称为foo/add

除了变量作用域(variable scope),还可以显式打开名称作用域(name scope),名称作用域仅仅影响算子的名称,不影响变量的名称。另外如果tf.variable_scope()传入字符参数,创建变量作用域的同时会隐式创建同名的名称作用域。如下面的例子,变量v的作用域是foo,而算子x的算子变为foo/bar,因为有隐式创建名称作用域foo

注意: 如果tf.variable_scope()传入的不是字符串而是scope对象,则不会隐式创建同名的名称作用域。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://www.cnblogs.com/MY0213/p/9208503.html

python 作用域 前缀_TENSORFLOW变量作用域(VARIABLE SCOPE)相关推荐

  1. python 作用域 前缀_Python 之作用域和名字空间

    作用域与名字空间 Python有一个核心概念是名字空间(namespace),namespace是一个name到object 的映射关系,Python有很多namespace,因此,在代码中如果碰到一 ...

  2. Python基本语法_变量作用域LEGB

    目录 目录 软件系统 变量的作用域 高级语言对数据类型的使用过程 作用域的产生 作用域的类型 Llocal局部作用域 Eenclosing嵌套作用域 Gglobal全局作用域 Bbuilt-in内置作 ...

  3. python函数对变量的作用域_python函数变量作用域如何理解使用?

    大家对于这个名词"变量作用域"有了解过吗?如果大家没有听说过,小编可以协助大家理解下,拆分出来变量的定义,比如,函数里面去定义变量的,这种叫做局部变量,反之,不再函数里面的,那肯定 ...

  4. Python函数中的变量作用域

    目录 一.变量作用域 二.全局变量和局部变量 一.变量作用域 变量作用域,其实就是变量可以在哪些范围内可以使用,哪些范围内不可以使用.这里只讲函数中变量的作用域,局部变量和全局变量 面向过程编程就涉及 ...

  5. Python循环中的变量作用域的灵异现象

    写在前面的画 最近很想看<名侦探柯南>,但是没有时间看啊.时间实在是太少了,吃的不好睡的不好,只好写篇博客,取的名字就像名侦探柯南盗版破案名字山寨版. 案件描述 事情是这样的,今天写代码, ...

  6. Js作用域链及变量作用域

    要理解变量的作用域范围就得先理解作用域链  用var关键字声明一个变量时,就是为该变量所在的对象添加了一个属性.  作用域链:由于js的变量都是对象的属性,而该对象可能又是其它对象的属性,而所有的对象 ...

  7. python函数变量的作用域_python函数变量的作用域

    python 2.7 变量作用域的疑问 函数a()定义u为全局变量,并赋值为0 函数b()中,设定没有声明u的访问方式 在函数中定义和修改全局变量,需要使用global关键字.但访问全局变量(不修改它 ...

  8. python3_函数_形参调用方式 / 不定长参数 / 函数返回值 / 变量作用域 / 匿名函数 / 递归调用 / 函数式编程 / 高阶函数 / gobal和nonlocal关键字 / 内置函数

    1.形参的调用方式 1. 位置参数调用 2. 关键词参数调用 原则: 关键词参数调用不能写在位置参数调用的前边 def test1(name, age):print("name:" ...

  9. 函数参数的传递方式和变量作用域

    函数参数的传递方式 函数参数的传递方式 基本介绍 两种传递方式 值传递和引用传递使用特点 变量作用域 基本介绍 初始化局部变量和全局变量 作用域的注意事项和细节 练习题 函数参数的传递方式 基本介绍 ...

最新文章

  1. 为什么添加Web引用后,客户端就能远程调用WebService了?
  2. Drawable 详解
  3. fotify php审计,代码安全审计(二)Fortify介绍及使用教程
  4. 提高计算机水平的小技巧,五大电脑小技巧
  5. 机器学习从理论到工程的第二步-开发环境与工具篇(下)
  6. Golang 并发编程之Context
  7. pythonajax学习_python学习-- django 2.1.7 ajax 请求
  8. supervessel-免费云镜像︱GPU加速的Caffe深度学习开发环境
  9. Andorid Kernel 编译测试
  10. 069 模块基础总结
  11. html怎么快捷复制粘贴,如何使用快捷键复制粘贴
  12. 【全文翻译】YOLOv1:统一的实时目标检测
  13. left join 和 left outer join (可解决多个表left join的问题)
  14. 乐讯机器人精简版2016迎春版【隆重发布】
  15. 关于Edge被篡改:打开的主页被改动、收藏夹被改动等问题
  16. 元素始终置于页面底部
  17. t420i升级固态硬盘提升_技术丨如何升级固态硬盘,提高电脑性能
  18. ​如何恢复回收站清空的文件?
  19. 怎样区别交换机、路由器和猫
  20. python开发出来的crm系统_用Python打造一个CRM系统(二)

热门文章

  1. 安装oracle11g后plsql访问,64位Oracle_11g_R2安装+32位Plsql成功登录连接
  2. php 现货 结算算法,PHP算法逻辑:如何计算购买量?
  3. 十、图像参数集Picture Paramater Set(PPS)解析
  4. 一. 视频信息与压缩编码
  5. shell编程中的 ${ }强大功能
  6. 电源稳定性测试软件,电源稳定性测试
  7. java rectangle 类_Java编写的Rectangle类
  8. qt跟随鼠标动态绘制_采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)...
  9. python 3.7.3 运算7错误_Python中通常不应该犯的7个错误
  10. python表单数据系统_使用MultipartPostHandler用Python发布表单数据