TensorFlow0.8代码目录结构讲解

源:http://www.linuxidc.com/Linux/2016-07/133215.htm

TensorFlow0.8发布以来受到了大量机器学习领域爱好者的关注,目前其项目在github上的follow人数在同类项目中排名第一。作为google的第一个开源项目,TensorFlow的源码结构较为清晰,相关的代码注释覆盖较全。本文首先从代码结构入手,分析TesnsorFlow的各个模块构成。

根目录结构的相关介绍

以下是TensorFlow项目根目录下的文件结构(目前以TensorFlow-0.8为例) 

以下是对根目录下的几个核心文件和目录的相关介绍:

  • 目录tensorflow 该目录下存放着tensorflow的核心代码
  • 目录google 该目录下存放着protobuf的相关代码,该目录通过在git clone 命令后添加 --recurse-submodules 可以下载得到。protobuf主要用于tensorflow中的各模块通信。
  • 目录third_party/tools/util 目前这三个目录中的文件较少,还未看出其相关作用,可能会在接下来的项目发展中变得更加完善。
  • 文件configure 该文件用于配置tensorflow的安装环境,运行该文件并完成tensorflow的安装环境配置后,运行bazel build -c opt //tensorflow/cc:tutorials_example_trainer 即可完成代码的编译工作。( 需要先安装bazel)

由于目录google 的作用仅为提供protobuf的通信支持,当前我们主要对目录tensorflow的相关结构进行分析。


tensorflow目录结构的相关介绍

以下是目录tensorflow 下的相关目录和文件 

以下是对该目录下的几个重要目录的简单介绍:

  • 目录core 该目录为tensorflow的C++源码的核心存放地点,接下来我们会对该目录中存放的各个模块进行简要介绍。
  • 目录python 该目录下存放了tensorflow使用python编写的相关代码,个人感觉该部分代码主要是使用python封装了相关的机器学习算法,但最终的计算操作是通过调用目录core 中的C++逻辑实现的。这样做的好处是利用了python较方便的编程特性和C++较高效的执行效率。
  • 目录tensorboard tensorborad是tensorflow中非常有特色的一个模块,该模块可以用于生成模型训练中实时生成图表,用于监控模型的训练程度。
  • 目录models 该目录下存放这多个使用pyton实现的模型实例。
  • 目录contrib 该目录下存放有其他项目贡献者添加的相关贡献代码,由于tensorflow受关注程度较高,目前该目录正急剧膨胀。
  • 其他

目前来看tensorflow中很多模块正处于刚开始起步的阶段,很多逻辑还有待完善(如当前支持的模型较少、很多方法还未实现等)。 
本文接下来会对核心目录core 中的文件结构进行简要的介绍。

core目录结构的相关介绍

core目录是tensorflow源码中最核心的一个目录,其代码逻辑主要为C++开发实现。 
以下为该目录的代码组织结构 

以下是对该目录下的几个主要模块(目录)的功能介绍

    • 目录common_runtime 该目录下包含了tensorflow中session执行的通用逻辑流程。
    • 目录distributed_runtime tensorflow 与分布式相关的执行逻辑。
    • 目录graph tensorflow图相关操作的逻辑。由于tensorflow中的数据计算本质上是一个图状结构的计算流程,该过程中存在将图进行切分并且并行化执行的可能性。该目录下的代码逻辑即为对图数据进行结构化定义并进行拆分的相关内容。
    • 目录framework 该目录下对tensorflow进行计算过程中的通用组件进行了定义和实现。
    • 目录kernels 对tensorflow中各个单步操作的具体实现。 该目录中共有约470个文件,其中414个文件和op相关,该目录下包含了大量的tensorflow中单步操作的实现方式。(如Variable())
    • 目录ops 对kernel/ 下的op进行注册和对外声明。
    • 目录models 实现了几个tensorflow支持的计算模型,该部分代码由python实现。
    • 目录client/public tensorflow对外api的定义和实现
    • 目录util/lib 一些公用的调用方法。
    • 目录protobuf tensorflow下各个模块间进行数据传输的数据结构定义,通过proto进行配置实现。
    • 目录user_ops 用户可进行编写自己的op并添加到该目录。



源:http://blog.csdn.net/zhoujunbuaa/article/details/50135787

阅读TensorFlow的代码框架:https://github.com/tensorflow/tensorflow

2015.12.1的情况如上所示:

  • google 目录下主要是Protobuf 的包,也是google的开源工具之一,用于序列化,各种schema格式化,支持多语言(c++、python)之间的转换。
  • TensorFlow目录: 主目录,后面分析的重点。
  • ThirdParty目录:第三方的库所在目录,目前包括eigen3(特征运算的库,包括SVD、LU分解等)、gpus目录(支持cuda)
  • Tools目录:只有一行”build:cuda --crosstool_top=//third_party/gpus/crosstool“, 构建cuda支持。

TensorFlow主目录如下:

可以首先简单的看看

  • cc目录有一个train的样例
  • core是c++编写的主要目录。
  • example目录下有andord系统的一个示例, 以及一个图像标注的例子(用的是一个老头的照片)
  • g3doc顾名思义,是针对c++、python的版本的代码文档,可以点进去看看。
  • models放的是一些通用的模型,里面有google开源的word2vec源码(embedding目录)、图像处理的mxnet、以及rnn(recureent 神经网络)
  • opensource_only  这个只是个申明目录, 呵呵,你懂的。
  • python 目录下 是python的实现,故名思议应该和cc目录对应,然而并没有,实际上是和”core“目录对应的python实现。
  • stream_executor目录,流处理,看里面还有dnn之类,具体详细待定。
  • tensorboard app、web支持,以及脚本支持。
  • tools 一些工具杂项,pip。

后面主要分析的目录包括:core、models、 python、 stream_executor.

时间: 2024-10-12 08:16:38

TensorFlow0.8代码目录结构讲解的相关文章

android项目的目录结构讲解

参考书籍:<第一行代码Android> 一:android项目的目录结构讲解 1..gradle和.idea ? ??? ? 这两个目录下放置的都是Android Studio自动生成的一些文件,我们无须关心,也不要去手动编辑. 2.app ? ??? ? 项目中的代码.资源等内容几乎都是放置在这个目录下的,我们后面的开发工作也基本都是在这个目录下进行的,待会儿还会对这个目录单独展开进行讲解. 3.build ? ??? ? 这个目录你也不需要过多关心,它主要包含了一些在编译时自动生成的文件.

前端代码目录结构、常用 piugin、元素补充用法及其它注意事项

目录结构: app:  .html文件 css: .css文件 script: 脚本文件 plugin: 插件  (此目录放一些通用代码) 注意事项: 1.在IE浏览器下img会显示边框,为了保证兼容性,应在css样式全局写上 img(border:0px;) 2.input 标签默认有 :focus() 伪类样式(点击input输入框,input边框会有颜色变化和稍有突出) 和 padding,在对input定位需要比较精确的时候,要设置input{padding:0px;}(其实在这也没必要

xcode修改代码目录结构出现clang: error: no such file or directory 解决方法

需要迁移一个开源工程的一部分内容到自己工程,迁移对方的工程到自己工程之后,因目录结构配置整理需要,对嵌入的工程目录进行了结构改变,编译后出现: clang: error: no such file or directory: '/Users/username/Desktop/echonest-echoprint-ios-sample-b937c04/Classes/ClassName/clang: error: no such file or directory:' 揪其原因,很明显,因为改变了

详细讲解Android中的动画Animation(依据Android源码目录结构讲解)

Android中Animation如果仔细的整理一下,是一个非常值得学习的模块.由于其中涉及的内容比较多,大家经常在实际的开发的过程中,只是略微的攫取其中的部分进行运用,比较零碎,下面我就对照着源码中的Animation的实际代码结构,对Animation的实际体系进行讲解一下,希望对大家理解Andorid中的Animation的设计理念有一定的理解. 第一个类:AnimationThread 顾名思义,这个类的本质是一个线程.我们主要关注下面几点: 1.其内部有一个静态的内部类,Message

WebRTCDemo.apk代码走读(八):代码目录结构

转载注明出处http://blog.csdn.net/wanghorse ├── ./base //基础平台库,包括线程.锁.socket等 ├── ./build //编译脚本,gyp ├── ./common_audio //基础公共的音频处理 │ ├── ./common_audio/include //就一个类型转换头文件 │ ├── ./common_audio/resampler //音频重采样代码 │ ├── ./common_audio/signal_processing //音

工程代码目录结构及框架

main.cpp   corbaIDLCppMapping XXXIDL6SC.CPP ConfigFiles LogClientConfig.xml ProgramSpecificConfig.xml ProgramCommonConfig.xml CommonDefs EnumDefs.h                              定义枚举类型 XXConstDefs.h                                     定义常量 XXADTDefs.h

Day4 - 迭代器&amp;生成器、装饰器、Json &amp; pickle 数据序列化、软件目录结构规范

---恢复内容开始--- 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 需求:列表a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],要求把列表里的每个值加1 1 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 2 b = [] 3 for i in a: 4 b.append(i+1) 5 a = b 6 print(a) 普通青

关于软件目录结构规范———(转自Alex Li)

软件目录结构规范 为什么要设计好目录结构? "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题. 另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性. 我是比较偏向于后者的,因为我是前一类同学思想行为下的直接受害者.我曾经维护过一个非常不好读的项目,其实现的逻辑并不复杂,但是却耗费

python学习day4软件目录结构规范

为什么要设计好目录结构? 参考:http://www.cnblogs.com/alex3714/articles/5765046.html "设计项目目录结构",就和"代码编码风格"一样,属于个人风格问题.对于这种风格上的规范,一直都存在两种态度: 1.一类同学认为,这种个人风格问题"无关紧要".理由是能让程序work就好,风格问题根本不是问题: 2.另一类同学认为,规范化能更好的控制程序结构,让程序具有更高的可读性: 我是比较偏向于后者的,因为