热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

浅入浅出TensorFlow9代码框架解析

一.TensorFlow源码截止到目前为止,TensorFlow在【Github】的Contributors已经接近900人,Fork30000次。学习这么庞大的开源项目,首先必须

一. TensorFlow 源码

截止到目前为止,TensorFlow 在 【Github】 的 Contributors 已经接近900人,Fork 30000次。

学习这么庞大的开源项目,首先必须要搞清楚其代码组织形式,我们先来看目录结构:

《浅入浅出TensorFlow 9 - 代码框架解析》
《浅入浅出TensorFlow 9 - 代码框架解析》

Project 目录分为4个:

1)tensorflow

核心代码目录,图中可以看到其子目录结构,后面我们会展开讲解。

2)third_party

第三方库,包括:eigen3,fft2d,hadoop,mkl,probuf 等。

3)tools

只有两个文件 bazel.rc 和 tf_env_collect.sh。

4)util/python

存放用到的 python 工具。

另外一个比较重要的文件是 configure,用于配置 tensorflow 的安装环境。

对于 tensorflow 核心目录,里面比较关键的几个模块:

1.1)core

这是 tensorflow 的核心代码模块.

1.2)tensorboard

不用解释,应该都清楚,这是可视化工具 tensorboard 的代码目录。

1.3)stream_executor

tensorflow 流图的并行计算执行,核心代码。

1.4)go,java,python

主要的第三方 API。

1.5)contrib

存放有其他项目贡献者添加的相关贡献代码,非核心官方代码,有具体方向的应用可以参考这里面的模块。

《浅入浅出TensorFlow 9 - 代码框架解析》
《浅入浅出TensorFlow 9 - 代码框架解析》

二. 核心代码目录 Core

Core 目录是代码最核心的部分,包含 框架、图、会话、runtime 最核心的部分,主要模块包括:

● common_runtime:公共运行库,包含 会话(session)、线程(thread),内存管理(memory), 设备调度(device)等基本运行库。

● distributed_runtime:分布式运行库,与上面类似,作为分布式情况下的运行库,提供运行支撑。

● framework:框架基础模块定义,主要是通用组件的结构格式定义;

● graph:计算流图相关基础操作(类结构),包括 拆分、合并、执行 等操作,被外面的 executor 调用;

● kernels:核心操作定义,像常用的运算 matmul,sigmoid 等操作;

● lib:基础库用于内部调用,包括 hash、io、jpeg、math 等;

● ops:对 kernel 下的op进行注册和对外声明;

● protobuf:Google 的传输交换模块,用于传输时的数据序列化;

三. Graph 与 Session

关于 Graph 和 Session 前面已经有篇幅讲过,概念上可能大家并没有完全理解,本篇再讲一下。

● Graph

首先搞清一个概念,Graph 是 Tensorflow 必须要存在的,是灵魂核心,你所看到的任何一个 图都是通过 Graph来组织的。

《浅入浅出TensorFlow 9 - 代码框架解析》

再来看一段你已经很熟悉的代码:

>>> import tensorflow as tf
>>> str = tf.constant("Hello World!")
>>> se = tf.Session()
>>> print se.run(str)

没看到 Graph 的创建对不对? 实际上在你创建 Session 的时候,系统自动为你创建了一个 默认Graph,用于接下来所有 OP 的组织和存放。

某些情况下,你可以同时维护两个以上的 Graph,比如我们经常会遇到这样一句, tf.Graph.as_default()

curr_graph = tf.Graph()
with curr_graph.as_default():
c_val = tf.constant(1.0)
assert c_val.graph is curr_graph

在定义 OP 操作的时候可以选择Graph 作为 default,那么你所创建的 OP 就建立在对应 Graph 下面了。

● Session

TensorFlow 的 Session 用法你可能比较熟了,来回顾一下:

# method 1
sess = tf.Session()
print sess.run()
sess.close()
# method 2
with tf.Session() as sess:
print sess.run()
# method 3 - 仅用于交互式环境
sess = tf.InteractiveSession()
a = tf.constant(1.0)
b = tf.constant(2.0)
c = a + b
# 我们直接使用'c.eval()' 而不是'sess.run'
print(c.eval())
sess.close()

对于 Graph 和 Session 的关系,需要记住,Graph 可以在对应多个 Session 中执行。


推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
author-avatar
jerry827900
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有