《面向机器智能的TensorFlow实践》一3.3 通过名称作用域组织数据流图-阿里云开发者社区

开发者社区> 华章计算机> 正文

《面向机器智能的TensorFlow实践》一3.3 通过名称作用域组织数据流图

简介:
+关注继续查看

本节书摘来自华章出版社《面向机器智能的TensorFlow实践》一书中的第3章,第3.3节,作者 山姆·亚伯拉罕(Sam Abrahams)丹尼亚尔·哈夫纳(Danijar Hafner)[美] 埃里克·厄威特(Erik Erwitt)阿里尔·斯卡尔皮内里(Ariel Scarpinelli),更多章节内容可以访问云栖社区“华章计算机”公众号查看。





3.3 通过名称作用域组织数据流图

现在开始介绍构建任何TensorFlow数据流图所必需的核心构件。到目前为止,我们只接触了包含少量节点和阶数较小的张量的非常简单的数据流图,但现实世界中的模型往往会包含几十或上百个节点,以及数以百万计的参数。为使这种级别的复杂性可控,TensorFlow当前提供了一种帮助用户组织数据流图的机制—名称作用域(name scope)。

名称作用域非常易于使用,且在用TensorBoard对Graph对象可视化时极有价值。本质上,名称作用域允许将Op划分到一些较大的、有名称的语句块中。当以后用TensorBoard加载数据流图时,每个名称作用域都将对其自己的Op进行封装,从而获得更好的可视化效果。名称作用域的基本用法是将Op添加到with tf.name_scope(<name>)语句块中。

 

 

为了在TensorBoard中看到这些名称作用域的效果,可打开一个SummaryWriter对象,并将Graph对象写入磁盘。

 

由于SummaryWriter对象会将数据流图立即导出,可在运行完上述代码便启动TensorBoard。导航到运行上述脚本的路径,并启动TensorBoard:

 

与之前一样,上述命令将会在用户的本地计算机启动一个端口号为6006的TensorBoard服务器。打开浏览器,并在地址栏键入localhost:6006,导航至“Graph”标签页,用户将看到类似于下图的结果。

 

我们添加到该数据流图中的add和mul Op并未立即显示出来,所看到的是涵盖它们的命名作用域。可通过单击位于它们右上角的“+”图标将名称作用域的方框展开。

 

在每个作用域内,可看到已经添加到该数据流图中的各个Op,也可将名称作用域嵌入在其他名称作用域内:

 

 

上述代码并未使用默认的Graph对象,而是显式创建了一个tf.Graph对象。下面重新审视这段代码,并聚焦于命名作用域,了解其组织方式:

 

现在对上述代码进行分析就更加容易。这个模型拥有两个标量占位节点作为输入,一个TensorFlow常量,一个名为“Transformation”的中间块,以及一个使用tf.maximum()作为其Op的最终输出节点。可在TensorBoard内看到这种高层的表示:

 

 

 

在Transformation名称作用域内有另外4个命名空间被安排到两个“层”中。第一层由作用域“A”和“B”构成,该层将A和B的输出传给下一层“C”和“D”。最后的节点会将来自最后一层的输出作为其输入。在TensorBoard中展开Transformation名称作用域,将看到类似下图的效果。

 

这同时还赋予了我们一个展示TensorBoard另外一个特性的机会。在上图中,可发现名称作用域“A”和“B”的颜色一致(蓝色),“C”和“D”的颜色也一致(绿色)。这是因为在相同的配置下,这些名称作用域拥有相同的Op设置,即“A”和“B”都有一个tf.mul() Op传给一个tf.sub() Op,而“C”和“D”都有一个tf.div() Op传给tf.add() Op。如果开始用一些函数创建重复的Op序列,将会非常方便。

 

在上图中可以看到,当在TensorBoard中显示时,tf.constant对象的行为与其他Tensor对象或Op并不完全相同。即使我们没有在任何名称作用域内声明static_value,它仍然会被放置在这些名称作用域内,而且,static_value并非只出现一个图标,它会在被使用时创建一个小的视觉元素,其基本思想是常量可在任意时间使用,且在使用时无须遵循任何特定顺序。为防止在数据流图中出现从单点引出过多箭头的问题,只有当常量被使用时,它才会以一个很小的视觉元素的形式出现。

将一个规模较大的数据流图分解为一些有意义的簇能够使对模型的理解和编译更加方便。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
DenseNet实战:tensorflow2.X版本,DenseNet121图像分类任务(小数据集)
本例提取了猫狗大战数据集中的部分数据做数据集,演示tensorflow2.0以上的版本如何使用Keras实现图像分类,分类的模型使用DenseNet121。
8 0
Reddit最热!本科毕业拿到Deepmind软件工程师Offer,几百页课程链接我帮你总结了(下)
Reddit机器学习板块的一个热帖引起了网友的热议!本科毕业,没有机器学习背景,这位小哥在blog分享了自己的实战经验:从自学ML到拿到Deepmind的offer。
9 0
小模型实现大一统!Meta RL华人一作FBNetV5一举包揽CV任务3个SOTA(二)
Meta现实实验室(Meta Reality Lab)华人一作提出FBNetV5,这是一种在一次运行中同时为多个任务搜索架构的神经架构搜索(NAS)算法。针对三个基本的视觉任务:图像分类、物体检测和语义分割,FBNetV5搜索到的模型在所有三个任务中都超过了目前的SoTA水平。
33 0
如何将Yolov5 模型部署到OpenVINO上
OpenVINO是英特尔推出的一款AI工具套件,可以用于快速部署AI应用和解决方案,支持计算机视觉的CNN网络结构超过150余种。它可以兼容多种主流的开源框架如PyTorch,Tensorflow,Keras,mxnet、Caffe和ONNX,并可以将上述开源框架训练好的模型,轻松的通过工具转换到OpenVINO框架上,并支持将预训练模型部署到英特尔的CPU、GPU和VPU上。
18 0
Alink、Tensorflow on Flink 在京东的应用
京东张颖、刘露在 FFA 2021 的分享内容
76 0
DenseNet实战:tensorflow2.X版本,DenseNet121图像分类任务(大数据集)
本例提取了猫狗大战数据集中的部分数据做数据集,演示tensorflow2.0以上的版本如何使用Keras实现图像分类,分类的模型使用DenseNet121。本文实现的算法有一下几个特点: 1、自定义了图片加载方式,更加灵活高效,节省内存 2、加载模型的预训练权重,训练时间更短。 3、数据增强选用albumentations。
6 0
Keras之父写给年轻程序员的33条忠告
  代码是一种交流方式,Keras 之父 Fran?ois Chollet 在本文中为我们总结了在开发过程中、API 设计中及软件职业生涯中应该关注哪些要点。原则是形式化的直觉,比原始模式识别适用于更广泛的情况,Fran?ois Chollet 的这份原则清单将带你领略大师的品味。
6 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载