-----2017年1月24
溯洄从之,道阻且长。溯游从之,宛在水中央。
--------------------------
tensorflow是google的deepMind团队贡献的开源工具。其开源代码可以在github
上找到。tensorflow不仅仅是一个机器学习工具,同时还提供有相应的demo和教程。这也是我想写关于tensorflow总结的原因: 希望可以把有用的东西自己消化一下,并作出总结。以后会不间断的更新文章。
--------------------------------
tensorflow 不止是一面
1. 从tensorflow的目录入手了解tensorflow
个人认为如果想要很好和某人相处,一定要了解他的脾气和性格。这句话对待计算机的工具语言依然使用,因此我们有必要去了解一下github下面的tensorflow的目录结构。
我们发现在github下面其实tensorflow的版本还是比较多的,有master版本、r0.12版本,r0.11版本。但是一般默认使用的master版本。在这里有必要说明一下这些版本名称的意义以及区别。
如图2所示:
master 版本一般指的是最近更新的版本
r0.XXX这种版本一般是发行版本的代号(r代表released:发布、发行的意思)。该版本意味“最终版本”,在前面版本的一系列测试版之后,终归会有一个正式版本,是最终交付用户使用的一个版本。该版本有时也称为标准版。一般情况下,Release不会以单词形式出现在软件封面上,取而代之的是符号(R)。有关发行版本的代号可以的明明规则参见软件发布版本区别介绍。
由于每个一段时间会有较大的变化, 这个较大变化出现之后会将现有改变的版本发布出来,这就使得我们看到了r0.8,r0.12。。。。等诸多的版本。
========》 了解软件发布版本规则,尤其是开源软件的版本,对于学习和掌握开源软件尤为重要。这个不难理解: 假如你在github上面要安装tensorflow,同时按照tensorflow的安装说明文档执行之后发现并不能正常的安装(很多情况下 是由于你下载的是master版本,而教程上用的是发行版本),或者你发现你的tensorflow缺少的很多API (这也有可能是你tensorflow版本过时,而你使用的程序使用的较新的tensorflow)
同时master 这个和branch 之间的关系有涉及到团队开发方面,在此不再细说。(想了解的同学可以看看关于svn 与git 方面的知识)
接下来,我们看到了tensorflow目录、third_party、tools等等目录,这些 目录在个github上面都有说明的。简单的介绍一下这些目录里面一般会放置什么样的文件?
tensorflow 这个目录下面一般存放与tensorflow有关的文件。
third_party 与tools 自不必多说。
我是从tensorflow/example目录开始阅读的。因此下一张会以example里面的demo 一一分析并同时给出所使用的API 的使用说明。
2. 从tensorflow的概念
其实这一方面应该是先入为主的,先介绍一下tensorflow:
TensorFlow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数组,即张量(tensor)。
在以上的描述中我们引入了两个个概念: 数据流图、张量
什么事张量(tensor)?
关于tensor的概念可以参考wiki : https://en.wikipedia.org/wiki/Tensor
当然知乎给出的答案更加容易理解,这里给出链接https://www.zhihu.com/question/20695804
里面的有大神的详细解答。
我个人认为可以暂时将张量(tensor)和矩阵(matrix)近似看待。
矩阵(matrix)相当于二维的tensor , 向量(vector)相当于一维的tensor,[1] , [2]
什么是数据流图(Data Flow Graph)?
数据流图用“结点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点” 一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以输运“size可动态调整”的多维数据数组,即“张量”(tensor)。张量从图中流过的直观图像是这个工具取名为“Tensorflow”的原因。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行地执行运算。