前言:最近做一个实验,遇到TensorFlow变量作用域问题,对tf.name_scope()、tf.variable_scope()等进行了较为深刻的比较,记录相关笔记:
tf.name_scope()、tf.variable_scope()是两个作用域函数,一般与两个创建/调用变量的函数tf.variable() 和tf.get_variable()搭配使用。常用于:
1)变量共享;2)tensorboard画流程图进行可视化封装变量。
通俗理解就是:tf.name_scope()、tf.variable_scope()会在模型中开辟各自的空间,而其中的变量均在这个空间内进行管理,但是之所以有两个,主要还是有着各自的区别。
1.name_scope 和 variable_scope:
name_scope 和 variable_scope主要用于变量共享。其中,变量共享主要涉及两个函数:tf.variable() 和tf.get_variable();即就是必须要在tf.variable_scope的作用域下使用tf.get_variable()函数。这里用tf.get_variable( ) 而不用tf.Variable( ),是因为前者拥有一个变量检查机制,会检测已经存在的变量是否设置为共享变量,如果已经存在的变量没有设置为共享变量,TensorFlow 运行到第二个拥有相同名字的变量的时候,就会报错。
注意,tf.variable() 和tf.get_variable()有不同的创建变量的方式:tf.Variable() 每次都会新建变量。如果希望重用(共享)一些变量,就需要用到了get_variable(),它会去搜索变量名,有就直接用,没有再新建。此外,为了对不同位置或者范围的共享进行区分,就引入名字域。既然用到变量名了,就涉及到了名字域的概念。这就是为什么会有scope 的概念。name_scope 作用域操作,variable_scope 可以通过设置reuse 标志以及初始化方式来影响域下的变量,因为想要达到变量共享的效果, 就要在 tf.variable_scope()的作用域下使用 tf.get_variable() 这种方式产生和提取变量. 不像 tf.Variable() 每次都会产生新的变量, tf.get_variable() 如果遇到了已经存在名字的变量时, 它会单纯的提取这个同样名字的变量,如果不存在名字的变量再创建.
例如:

  1. [/code]输出:
  2. [code]

复制代码

2.name scope和variable scope区别
TF中有两种作用域类型:命名域 (name scope),通过tf.name_scope 或 tf.op_scope创建;
变量域 (variable scope),通过tf.variable_scope 或 tf.variable_op_scope创建;
这两种作用域,对于使用tf.Variable()方式创建的变量,具有相同的效果,都会在变量名称前面,加上域名称。对于通过tf.get_variable()方式创建的变量,只有variable scope名称会加到变量名称前面,而name scope不会作为前缀。
举例1:

  1. [/code]输出:
  2. [code]

复制代码

举例2:

  1. [/code]输出:
  2. [code]

复制代码

总结:
1、name_scope不会作为tf.get_variable变量的前缀,但是会作为tf.Variable的前缀。(举例1)
2、在variable_scope的作用域下,tf.get_variable()和tf.Variable()都加了scope_name前缀。因此,在tf.variable_scope的作用域下,通过get_variable()可以使用已经创建的变量,实现了变量的共享,即可以通过get_variable()在tf.variable_scope设定的作用域范围内进行变量共享。(举例2)
3、在重复使用的时候, 一定要在代码中强调 scope.reuse_variables()

参考链接:
[1] scope 命名方法 - Tensorflow | 莫烦Python
[2] tf.name_scope()和tf.variable_scope() - AI-FUTURE - CSDN博客

通俗理解tf.name_scope()、tf.variable_scope()相关推荐

  1. tf.name_scope tf.variable_scope学习

    1. 首先看看比较简单的 tf.name_scope('scope_name'). tf.name_scope 主要结合 tf.Variable() 来使用,方便参数命名管理. ''' Signatu ...

  2. TensorFlow基础笔记(13) tf.name_scope tf.variable_scope学习

    转载http://blog.csdn.net/jerr__y/article/details/60877873 1. 首先看看比较简单的 tf.name_scope('scope_name'). tf ...

  3. tf.name_scope()与tf.variable_scope()

    TensorFlow的tf.name_scope().tf.variable_scope()是两个作用域函数,一般与两个创建/调用变量的函数tf.variable() 和tf.get_variable ...

  4. tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope

    tf.Variable与tf.get_variable tensorflow提供了通过变量名称来创建或者获取一个变量的机制.通过这个机制,在不同的函数中可以直接通过变量的名字来使用变量,而不需要将变量 ...

  5. tf.Variable,tf.get_variable,tf.variable_scope,tf.name_scope区别分析

    1.tf.Variable与tf.get_variable ①在创建变量的时候,两者是等价的 ②tf.Variable的变量名是一个可选项,而tf.get_variable必须要有变量名 import ...

  6. tf.Variable() 和 tf.get_variable(),tf.name_scope() 和 tf.variable_scope()

    在gpu并行训练网络时,往往需要共享已创建的变量,tensorflow中为了使这些变量名和操作名唯一并且不重复,用了几个函数来应对这种情况.于是就有了tf.Variable(), tf.get_var ...

  7. 通俗理解tf.nn.conv2d() tf.nn.conv3d( )参数的含义 pytorhc 卷积

    20210609 例如(3,3,(3,7,7))表示的是输入图像的通道数是3,输出图像的通道数是3,(3,7,7)表示过滤器每次处理3帧图像,卷积核的大小是3 x 7 x 7. https://blo ...

  8. tf.name_scope() 和 tf.variable_scope() 的用法和玄机

    2019独角兽企业重金招聘Python工程师标准>>> 一. name_scope 和 variable_scope的用途 用途1: 共享变量 TensorFlow (TF) 中,n ...

  9. tf.variable和tf.get_Variable以及tf.name_scope和tf.variable_scope的区别

    在训练深度网络时,为了减少需要训练参数的个数(比如具有simase结构的LSTM模型).或是多机多卡并行化训练大数据大模型(比如数据并行化)等情况时,往往需要共享变量.另外一方面是当一个深度学习模型变 ...

最新文章

  1. P1505 [国家集训队]旅游 树链剖分
  2. python画三维几何图-Python常见几何图形绘制
  3. 趣链 BitXHub跨链平台 (7)应用链插件
  4. obs 推流编码在哪设置_OBS录屏软件
  5. jQuery按键事件keyup
  6. 面向对象和面向过程的区别个人觉得是目前解释最好的
  7. 开发经验分享_06_前端开发技巧
  8. 零基础想学Python,明白这2点,越快年薪30W!
  9. hive metastore mysql_Hive初步使用、安装MySQL 、Hive配置MetaStore、配置Hive日志《二》...
  10. GestureDetector类的用法
  11. [ZJOI2007][BZOJ1059] 矩阵游戏|二分图匹配|匈牙利算法
  12. kubernetes视频教程笔记 (20)-ingress
  13. java replace三个参数_javascript replace()第二个参数为函数时的参数用法
  14. redis 无法启动
  15. DP分类题目 转载 《志当存高远》大神的 没有冒犯的意思 只是拿过来学习的
  16. Part 1 函数、极限与连续
  17. Corona SDK 游戏开发引擎介绍
  18. VB界面一点美化技巧
  19. 知虾数据:店铺精细化运营提高商品曝光率,远超出竞品效果
  20. JavaIO流详解——Java教案(十)

热门文章

  1. 一图了解git常用开源许可证书
  2. 2022-2028年中国钛合金行业深度调研及投资前景预测报告
  3. 利用c语言找出输入文本最长的一行
  4. 第四天:Vue组件的slot以及webpack
  5. 利用硅光子学的移动心脏监护仪
  6. 目标检测coco数据集点滴介绍
  7. Dialog 带白色的边的处理方法
  8. 微信小程序点击图片切换图片
  9. 上一篇的js处理失真数据存在问题换了种方法
  10. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)