tensorflow中的“tf.name_scope()”有什么用?

CPU深度学习训练速度过慢+keras深度学习训练常见函数解释 2020/5/2 日记录 cpu训练速度慢的可能原因 请参考 深度学习训练速度的提高的一些浅见(1)gpu,cpu,硬盘等硬件 1.【线程】 pytorch以及tensorflow的多线程输入设定过大,一般推荐较大数据流4线程,较小2线程。具体问题具体分析,要看数据输入是否是训练速度优化的瓶颈。 numpy或者opencv等的多线程操作或者tensorflow以及pytorch在cpu运行上的op... 阅读详情

转自:https://www.jianshu.com/p/635d95b34e14

1. tf.name_scope()命名空间的实际作用

(1)在某个tf.name_scope()指定的区域中定义的所有对象及各种操作,他们的“name”属性上会增加该命名区的区域名,用以区别对象属于哪个区域;
(2)将不同的对象及操作放在由tf.name_scope()指定的区域中,便于在tensorboard中展示清晰的逻辑关系图,这点在复杂关系图中特别重要。

见下例:

import tensorflow as tf;  
tf.reset_default_graph()

# 无tf.name_scope()
a = tf.constant(1,name='my_a') #定义常量
b = tf.Variable(2,name='my_b') #定义变量
c = tf.add(a,b,name='my_add') #二者相加(操作)
print("a.name = "+a.name)
print("b.name = "+b.name)
print("c.name = "+c.name)

# 有tf.name_scope()
# with tf.name_scope('cgx_name_scope'): #定义一块名为cgx_name_scope的区域,并在其中工作
#     a = tf.constant(1,name='my_a')
#     b = tf.Variable(2,name='my_b')
#     c = tf.add(a,b,name='my_add')
# print("a.name = "+a.name)
# print("b.name = "+b.name)
# print("c.name = "+c.name)

# 保存graph用于tensorboard绘图
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    writer = tf.summary.FileWriter("./test",sess.graph)
    print(sess.run(c))
writer.close()
# 输出结果
# 无tf.name_scope()
a.name = my_a:0
b.name = my_b:0
c.name = my_add:0

# 有tf.name_scope()
a.name = cgx_name_scope/my_a:0
b.name = cgx_name_scope/my_b:0
c.name = cgx_name_scope/my_add:0

从输出结果可以看出,在tf.name_scope()下的所有对象和操作,其name属性前都加了cgx_name_scope,用以表示这些内容全在其范围下。
下图展示了两种情况的tensorboard差异,差别一目了然。

 

namescope.jpg

2. name_scope()只决定“对象”属于哪个范围,并不会对“对象”的“作用域”产生任何影响。

tf.name_scope()只是规定了对象和操作属于哪个区域,但这并不意味着他们的作用域也只限于该区域(with的这种写法很容易让人产生这种误会),不要将其和“全局变量、局部变量”的概念搞混淆,两者完全不是一回事。在name_scope中定义的对象,从被定义的位置开始,直到后来某个地方对该对象重新定义,中间任何地方都可以使用该对象。本质上name_scope只对对象的name属性进行圈定,并不会对其作用域产生任何影响。这就好比甲、乙、丙、丁属于陈家,这里“陈家”就是一个name_scope划定的区域,虽然他们只属于陈家,但他们依然可以去全世界的任何地方,并不会只将他们限制在陈家范围。
见下例:
(1)程序首先指定了命名区域cgx_1,并在其中定义了变量a,紧接着case1直接在cgx_1中输出a.name = cgx_1/my_a:0,这很好理解,跟想象的一样;
(2)case2在cgx_1之外的公共区域也输出了相同的a.name,这就说明a的作用范围并没有被限制在cgx_1中;
(3)接着程序又新指定了命名区域cgx_2,并在其中执行case3,输出a.name,结果还是和case1和case2完全相同,实际上还是最前面定义的那个a,这更进一步说明name_scope不会对对象的作用域产生影响;
(4)★★接着在cgx_2中重新定义了变量“a”,紧接着就执行case4,输出a.name = cgx_2/my_a:0,可见此时的结果与前面三个case就不同了,说明这里新定义的a覆盖了前面的a,即使他们在两个完全独立的name_scope中;
(5)case5输出的结果与case4结果相同,这已经无须解释了。

#name_scope 的影响范围
with tf.name_scope('cgx_1'): #指定cgx_1区域
    a = tf.Variable(tf.constant(4),name='my_a') #定义变量a
    print("case1: a.name="+a.name) #cgx_1区域内输出
print("case2: a.name="+a.name) #cgx_1区域外输出

# 保存graph用于tensorboard绘图
with tf.name_scope('cgx_2'): #新指定cgx_2区域
    print("case3: a.name="+a.name) #在cgx_2内输出cgx_1中定义a.name
    a = tf.Variable(tf.constant(4),name='my_a') #★★重新定义a这个变量
    print("case4: a.name="+a.name)
print("case5: a.name="+a.name)
# 输出结果:
case1: a.name = cgx_1/my_a:0
case2: a.name = cgx_1/my_a:0
case3: a.name = cgx_1/my_a:0
case4: a.name = cgx_2/my_a:0
case5: a.name = cgx_2/my_a:0

3. tf.name_scope('cgx_scope')语句重复执行几次,就会生成几个独立的命名空间,尽管表面上看起来都是“cgx_scope”,实际上tensorflow在每一次执行相同语句都会在后面加上“_序数”,加以区别。

见下例:
(1)指定了“cgx_scope”命名区域,并在其中定义变量a;
(2)又指定了相同名称的“cgx_scope”命名区域,并在其中定义变量b;
(3)输出a.name = cgx_scope/my_a:0和b.name = cgx_scope_1/my_b:0,可见b.name已经自动加了“_1”,这是tensorflow的特点,自动检测是否重复,有重复就自动增加数字作为标记。

with tf.name_scope('cgx_scope'):
    a = tf.Variable(1,name='my_a')

with tf.name_scope('cgx_scope'):
    b = tf.Variable(2,name='my_b')

c = tf.add(a,b,name='my_add')

print("a.name = "+a.name)
print("b.name = "+b.name)

# 保存graph用于tensorboard绘图程序(同上)
# 输出结果
a.name = cgx_scope/my_a:0
b.name = cgx_scope_1/my_b:0 #自动增加了“_1”

下图进一步说明a和b不在同一个name_scope中

 

相同name_scope.jpg

4. 如何在不同的地方将对象指定到相同的name_scope中?

方法:
with tf.name_scope('cgx_scope') as cgxscope:
……
with tf.name_scope(cgxscope) :
……
见下例:
将前一例程序做简单修改,输出结果a和b都在cgx_scope的命名范围内,后面的tensorboard也说明了这点。

with tf.name_scope('cgx_scope') as cgxscope:
    a = tf.Variable(1,name='my_a')

with tf.name_scope(cgxscope):
    b = tf.Variable(2,name='my_b')

c = tf.add(a,b,name='my_add')

print("a.name = "+a.name)
print("b.name = "+b.name)
# 输出结果
a.name = cgx_scope/my_a:0
b.name = cgx_scope/my_b:0

下图说明此例中a和b位于相同的name_scope中。

 

相同name_scope.jpg

5. 多重name_scope命名空间

多个with tf.name_scope()重叠使用,如下例。

with tf.name_scope('cgx_scope_1'): #第一重命名空间
    with tf.name_scope('cgx_scope_2'): #第二重命名空间
        a = tf.Variable(1,name='my_a')

with tf.name_scope('cgx_scope_3'):
    b = tf.Variable(2,name='my_b')

c = tf.add(a,b,name='my_add')

print("a.name = "+a.name)
print("b.name = "+b.name)
# 输出结果
a.name = cgx_scope_1/cgx_scope_2/my_a:0
b.name = cgx_scope_3/my_b:0

多重名命名空间.jpg

6. 常量tf.constant()即使在某个name_scope下被定义,在tensorboard中也不会被绘制到该name_scope下,主要考虑到图像的结构问题。

如下例:
常量a和变量b都定义在cgx_scope下,操作c定义在公共区域。从输出结果看,一切正常。但后面的tensorboard图跟想象的有点区别,按规律my_a和my_b都应该在cgx_scope内,但图中显然没有。猜测,tensorboard中常量通常在水平左侧,形式比较固定,而变量通常在下侧,形式也比较随意,因此把常量和变量画在同一name_scope下对图的逻辑有较大影响。

该例中如果把c = tf.add(a,b,name='my_add')同样写入cgx_scope下,那么在tensorboard中整个过程都会被放入cgx_scope下。

with tf.name_scope('cgx_scope'):
    a = tf.constant(1,name='my_a')
    b = tf.Variable(2,name='my_b')

c = tf.add(a,b,name='my_add')

print("a.name = "+a.name)
print("b.name = "+b.name)
print("c.name = "+c.name)
# 输出结果
a.name = cgx_scope/my_a:0
b.name = cgx_scope/my_b:0
c.name = my_add:0

常量一般不显示在name_scope内.jpg

7. tf.name_scope()对由tf.get_variable()产生的变量没有影响

如下例:
在cgx_scope命名空间下,a是由tf.get_variable()生成的变量,b是由tf.Variable()生成的变量,按规律a.name和b.name的前缀都是cgx_scope,但从输出结果可看出,a.name的前缀没出现,说明a不在该命名空间。后面的tensorboard图也说明了这点。出现这种情况是由tf.get_variable()的特性决定的,详见其他文章。

with tf.name_scope('cgx_scope'):
    a = tf.get_variable('my_a',initializer=4)
    b = tf.Variable(2,name='my_b')

c = tf.add(a,b,name='my_add')

print("a.name = "+a.name)
print("b.name = "+b.name)
# 输出结果
a.name = my_a:0
b.name = cgx_scope/my_b:0

get_valuable()不受name_scope影响.jpg

tensorflow入门:tf.name_scope,tf.variable_scope、变量共享 1. tf.name_scope('scope_name')或tf.name_scope(named_scope)主要与tf.Variable搭配使用;当传入字符串时,用以给变量名添加前缀,类似于目录,如case1所示;当传入已存在的name_scope对象时,则其范围内变量的前缀只与当前传入的对象有关,与更上层的name_scope无关,如case2所示。import tensorflow as... 阅读详情

相关推荐

彻底弄懂tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope异同

我之前有转载过一篇讲tf.variable_scope和tf.name_scope的文章,今天一看,觉得还是没介绍太清楚,没讲到点子上,毕竟英文什么的看起来还是挺麻烦的。故而,今天来细细梳理下tf.Variable、tf.get_variable、tf.variable_scope以及tf.name_scope四者之间的区别与联系。

qq_22522663的博客 8155

tf.name_scope

tf.name_scope site/en/api_docs/api_docs/python/tf/name_scope.md tf.name_scope 函数是为了解决命名冲突问题。 1. Class name_scope 1.1 Aliases Class tf.keras.backend.name_scope Class tf.name_scope aliases:n. 别名 (alias 的复数) scope [skəʊp]:n. 范围,余地,视野,眼界,导弹射程 vt. 审视 A conte

程永强 2534

tensorflow里面共享变量、name_scope, variable_scope等如何理解

tensorflow里面共享变量、name_scope, variable_scope等如何理解 name_scope, variable_scope目的:1 减少训练参数的个数。 2 区别同名变量 为什么要共享变量?我举个简单的例子:例如,当我们研究生成对抗网络GAN的时候,判别器的任务是,如果接收到的是生成器生成的图像,判别器就尝试优化自己的网络结构来使自己输出0,如果接收到的是来自真实数据的图

u012564409的专栏 4433

tf.name_scope用法

tf.name_scope:用于定义Python op的上下文管理器。 tf.name_scope( name ) 此上下文管理器将推送名称范围,这将使在其中添加的所有操作的名称带有前缀。 例如,定义一个新的Python opmy_op: def my_op(a, b, c, name=None): with tf.name_scope("MyOp") as scope: a = tf.convert_to_tensor(a, name="a") b = tf.co.

qq_36201400的博客 7786

tensorflow学习之路(2-2):tf.variable_scope(),tf.name_scope(),tf.get_variable()的认识(补充)

tensorflow tf.get_variable() tf.variable_scope() tf.name_scope()

IB_H20的博客 3718

STM32CubeMX+Keil5实战:手把手教你用STM32F103C8T6开发扫地机器人(附完整代码)

本文详细介绍了如何使用STM32F103C8T6开发智能扫地机器人,从STM32CubeMX配置到Keil5代码实现的全过程。涵盖硬件选型、时钟树配置、GPIO外设设置、电机驱动、超声波测距及自动避障算法等核心内容,并提供完整代码示例,助力开发者快速掌握智能硬件开发技巧。

weixin_30329623的博客 81

tf.name_scope()详解【命名空间其实就是给几个变量包一层名字,方便变量管理】

命名空间其实就是给几个变量包一层名字,方便变量管理。函数是:tf.name_scope 另外,就像操作系统文件夹命名一样,不同的顶层文件夹下,可以有同名文件夹。这里,不同的命名空间下,可以有名字相同的变量。 tf.name_scope 主要结合 tf.Variable() 来使用,方便参数命名管理。 Signature: tf.name_scope(*args, **kwds) Docstring: Returns a context manager for use when defining a P

Drug discovery 1万+

锐捷交换机配置SSH

锐捷交换机配置ssh 一、组网需求 通过ssh功能可以远程登录管理设备 二、配置步骤 全局开启ssh服务,并且指定ssh版本 Ruijie>enable Ruijie#configure terminal Ruijie(config)#enable service ssh-server ------>开启SSH服务,默认关闭 Ruijie(config)#ip ssh version 2 ------>默认1.99版本,设置为版本2 添加登

Loners_fan的博客 1万+

02 tensorflow中的“tf.name_scope()”

链接:https://www.jianshu.com/p/635d95b34e14 (1)在某个tf.name_scope()指定的区域中定义的所有对象及各种操作,他们的“name”属性上会增加该命名区的区域名,用以区别对象属于哪个区域; (2)将不同的对象及操作放在由tf.name_scope()指定的区域中,便于在tensorboard中展示清晰的逻辑关系图,这点在复杂关系图中特别重要。 ...

qq_40723205的博客 204

从FPGA工程师视角看CXP-12:如何用Xilinx GTX/GTH收发器搞定一条50Gbps的工业相机数据流?

本文从FPGA工程师视角详细解析了如何利用Xilinx GTX/GTH收发器实现50Gbps的CXP-12工业相机数据流传输。通过协议分析、硬件设计要点和FPGA逻辑实现,帮助开发者高效构建高带宽工业视觉系统,特别适合4K/8K高分辨率图像处理需求。

weixin_42533622的博客 282

ArcGIS学习记录—SHP文件转换为KML KMZ数据,并显示面要素相应的标注

使用相应软件操作获取KMZ数据得以下发到外业调查人员,使得矢量数据能够更显而易见,可视化,让外业人员的工作减轻许多。(过程步骤是借鉴于网络上的相关人士给的建议,根据这些建议自己做出来的步骤,可能有些粗略,有问题的话可以再进行探讨)...

qq_41046162的博客 5万+

tf.variable_scope和tf.name_scope的用法

tf.variable_scope可以让变量有相同的命名,包括tf.get_variable得到的变量,还有tf.Variable的变量 tf.name_scope可以让变量有相同的命名,只是限于tf.Variable的变量 例如: import tensorflow as tf; import numpy as np; import matplotlib.pyplot as plt

UESTC_C2_403的博客 5万+

无线传感网络的Matlab实现

Matlab是一种功能强大的数值计算和数据分析工具,也可以用于无线传感网络的建模和仿真。根据实际需求,可以进一步扩展和优化模型,例如考虑节点能量消耗、网络路由、数据融合等方面的问题。函数用于绘制节点之间的连接关系,其中第一个参数是邻接矩阵,描述了节点之间的连接关系。这里使用了一个4个节点的简单例子,可以根据实际需求修改节点数量和连接关系。可以使用Matlab中的图形绘制函数来可视化节点的位置和连接关系。在无线传感网络中,节点的能量是一个关键因素。通过计算节点的剩余能量,可以评估节点的能量消耗情况。

2301_79331387的博客 250

Tensorflow中tf.name_scope() 和 tf.variable_scope() 的区别

目录 一、name_scope和variable_scope的用途 (1)variable_scope用途:共享变量 (2)可视化用途:画Tensorboard流程图时封装 二、TensorFlow中name_scope和variable_scope区别 (1)TF中创建变量的方式有两种:tf.get_variable()和tf.Variable() (2)Tensorflow中有两种...

Microstrong 1640

基于ZYNQ的HP总线与DDR交互:实现PL与PS高效数据传输的完整指南

本文将深入探讨如何通过AXI HP总线实现PL与PS的DDR交互,结合代码示例、硬件配置与创新优化,助力开发者掌握这一关键技术。ZYNQ内部通过AXI HP接口直接连接PL与DDR控制器,PL通过AXI协议发送读写请求,绕过PS的CPU直接操作DDR。通过AXI HP总线实现PL与PS的DDR交互,开发者可充分发挥ZYNQ异构架构的优势。在Xilinx ZYNQ系列芯片中,PS(Processing System)与PL(Programmable Logic)的协同设计是其核心优势。

QQ_778132974的博客 1224

Vue3 - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海康监控及实时监控显示、回放、放大缩小画面、视频画面截图、截屏抓拍、摄像头控制,实时推流及播放器解决延迟卡顿等问题(详细代码)

vue3,nuxt3,海康威视,海康监控,摄像头监控,实时监控画面,海康插件,视频播放,回放,视频流地址,取流协议,视频sdk播放,hik,rtsp,rtmp,hls,ws,网站,网页,h5页面,后台管理系统,vue3对接海康监控设备,无法连接,报错,vue3对接海康处理接口认证规则,监控实时预览和回放功能,海康api接口,安全认证,海康开放平台,官方文档,播放海康摄像头的监控视频,海康实时监控播放详细步骤,web,黑屏,特别卡不流畅怎么办,解决无法推流,录像,连接不上,vue3,海康,vue海康视频监控,

🏆 前端领域优质创作者 1万+

【TensorFlow】tf.name_scope、tf.variable_scope使用

一、tf.name_scope(‘scope_name’) tf.name_scope 主要结合 tf.Variable() 来使用,方便参数命名管理。 import tensorflow as tf ''' Signature: tf.name_scope(*args, **kwds) Docstring: Returns a context manager for use when d...

秋天 996

使用cutoff包基于最小p值法方法计算最佳截断值(基于LIRI基因数据集) R语言

这个方法在生物学研究中具有重要的意义,能够帮助我们从大规模基因表达数据中准确地找到差异显著的基因。在上述代码中,calculate_p_values函数是一个自定义函数,用于计算差异表达基因的p值。在本文中,我们将介绍如何使用R语言的cutoff包来基于最小p值法方法计算最佳的截断值,以便筛选出差异显著的基因。通过以上步骤,我们成功地使用cutoff包基于最小p值法方法计算了最佳的截断值,并筛选出了差异显著的基因。最后,我们可以根据得到的最佳截断值将基因表达数据集进行筛选,提取出差异显著的基因。

ByteKnight的博客 1291

『tensorflow笔记』两种作用域类型tf.name_scope,tf.name_scope

命名域 (name scope),通过tf.name_scope 或 tf.op_scope创建; 变量域 (variable scope),通过tf.name_scope或 tf.variable_op_scope创建; 这两种作用域,对于使用tf.Variable()方式创建的变量,具有相同的效果,都会在变量名称前面,加上域名称。 对于通过tf.get_variable()方式创建的变量,只...

AI新视界 2453

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

关于tensorflow中的scope的命名及使用方法

相信大家在学习和使用tensorflow的过程中肯定会遇到过关于scope的一些问题,scope是一种给变量命名的方法,它会让变量命名变得简单,同时也常用于reusing variable 代码中,下面将会给大家讲解一下tensorflow中两种定义scope的方法,来帮助大家更好的理解和使用scope。前言:scope的命名方式分为两种,tf.name_scope( )和tf.variable_s

Winter_FDd的博客 1万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

(TensorFlow)——tf.variable_scope和tf.name_scope详解

这几天学习tensorflow,看到关于tf.variable_scope和tf.name_scop,一直没有深入了解其中的作用。转载一篇博客: Tensorflow中tf.name_scope() 和 tf.variable_scope() 的区别记录一下作用,一面以后忘记。 在这里简单点说下: tf.variable_scope可以让变量有相同的命名,包括tf.get_variable...

weixin_41637329的博客 408

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

tf.name_scope与tf.variable_scope区别

命名机制与变量共享 Variable 变量 (一般表达参数)、Tensor(操 作输出)、操作 Operation、Placeholder 输 入都有名字 当模型复杂的时候,需要有效的命名机制: 方便、清晰 TF 中的命名机制 有效的命名机制: 起名方便 (不用从 w1 起到 w1024…) 甚至不显式写名,也能自动给个好找的名字 3. 同时避免重名带来的名字冲突 TF ...

博客 606

TensorFlow笔记:tf.get_variable,tf.Variable(),tf.variable_scope,tf.name_scope

tf.get_variable,tf.Variable() tf.get_variable(“vname”)在创建变量时,如果这个变量vname已经存在,直接使用这个变量,如果不存在,则重新创建; tf.Variable()在创建变量时,一律创建新的变量,如果这个变量已存在,则后缀会增加0、1、2等数字编号予以区别。 import tensorflow as tf with tf.name_sc...

qq_38410428的博客 500

tf.name_scope()和tf.variable_scope()的用法

tf.name_scope()实现变量的分级管理,该作用域中的tf.Variable变量的name前面会自动加上scope_name的前缀,而tf.get_variable变量不会受到影响,既不会加前缀 import tensorflow as tf with tf.name_scope("scp1"): v1=tf.get_variable('v1', shape=[1], initiali...

eefresher的博客 1104

Tensorflow中的tf.name_scope()应用

1. tf.name_scope()命名空间的实际作用 (1)在某个tf.name_scope()指定的区域中定义的所有对象及各种操作,他们的“name”属性上会增加该命名区的区域名,用以区别对象属于哪个区域; (2)将不同的对象及操作放在由tf.name_scope()指定的区域中,便于在tensorboard中展示清晰的逻辑关系图,这点在复杂关系图中特别重要。 见下例: import t...

lty_sky的专栏 437
上一篇: tensorflow中os.environ["TF_CPP_MIN_LOG_LEVEL"]的值的含义
下一篇: tf.placeholder函数说明
money_yuan
博客等级 码龄10年 104粉丝 80原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值