浅入浅出TensorFlow 1

来源:互联网 发布:优化采购流程 编辑:程序博客网 时间:2024/06/01 17:04

一. TensorFlow 的发展历程

       OpenCV 可能是多数人都很熟悉的计算机视觉库,参考下图机器学习库的发展轴线。

       近几年,随着深度学习技术的快速发展,诞生了 Torch、Theano、Caffe、MxNet 等一批深度学习库,而 TensorFlow 正是这些框架中的佼佼者,得益于其 优秀的架构设计理念及工程实现,以及丰富的学习资料,目前 TensorFlow 已经超越 Caffe(目前已经不怎么更新了) 成为使用率最高的DL框架,大有成为机器学习领域的Android之势。


       TensorFlow 优势在于强大的分布式计算能力,相较于 Caffe 等传统单机版系统有不可比拟的优势,这得益于Google在分布式计算层面的技术优势。另外,对于Android系统的原生支持 也给 TensorFlow 带来了庞大的用户量。

       TensorFlow 由Google 工程大神 Jeff Dean 领衔开发。字面意思来看,Tensor(张量)表示N维数组,Flow(流)意味着基于数据流图的计算,TensorFlow 为张量从流图的一端流动到另一端计算过程。


二. TensorFlow 版本、SDK

       TensorFlow 目前版本为 1.1.0,之前第一个正式版本是 1.0.0。

       主要支持 python/C++ 接口,1.0版本加入了Java API,另外也可以选择 R、Go 语言API(需要第三方支持) 以及 Keras,不作为讨论内容。

       官网地址:https://www.tensorflow.org/versions/r1.0/

       GitHub:https://github.com/tensorflow/tensorflow/releases


三. 模块结构

       TensorFlow 分为 Front EndExec SystemFront End是指 API接口,Exec System 对应Work执行。层次结构图示意如下:

         

        对应模块描述为:

模块组成

功能说明

备注

 Client

  主要用于计算图构造,并调用后端的Runtime,进行计算图的执行;

 

 Runtime

  Master 负责总体计算任务分配及合并,包括:

      A) 接收前端Session数据,优化计算图(消除冗余计算,常量折叠等);

      B) 拆分任务,将计算图分裂为子图,发送给Work;

      C) 协同任务,得到计算结果;

  Worker

      A) 根据图节点的依赖,调用Kernel完成计算;

      B) 将计算结果发送到其他Worker;

      C) 接受来自其他Worker的计算结果;

 执行实际计算

 Kernel

    根据当前可用的硬件环境(GPU/CPU),执行OP计算

    OP计算是指对不同硬件的统一封装调用,属于一种多态应用技术。

CPU, GPU, Arm, X86

 Device

  设备网络层

      支持硬件封装 - CPU  GPU  Android  IOS

      支持网络通信 - gRPC  RDMA

 

 


四. 认识数据流图

       TensorFlow 通过数据流图进行计算,何为数据流图? 来看个例子(左图是一个典型的计算图,右图描述计算过程):

    

       数据流图 是 用 Node(结点)Edge(边) 的有向图来描述数学计算:

       Node 用来表示 输入/输出 数据(对应 起始终止点),也就是Tensor - 张量,对应左图圆形;

                也用来表示 数学操作,对应左图矩形。

       Edge 表示 Node之间的输入/输出关系,计算过程即 数据流动过程 - Flow

       左图公式对应TensorFlow代码(先熟悉一下): 

import tensorflow as tfb = tf.Variable( tf.zeros([100]) )                       # 100-d vector, init to 0W = tf.Variable( tf.random_uniform([784,100],-1,1) )     # 784*100 matrix W/rnd valsx = tf.nn.relu(tf.matmul(W, x) + b)                      # Relu(W * x +b)C = [...]                                                #Const computed as a functions = tf.Session() for step in xrange(0, 10):    input = ...construct 100-D input array ...           # Create 100-d vector for input    result = s.run(C, feed_dict={x: input} )             # Fetch cost,feeding x=input    print step, result


五. TensorFlow 的学习步骤

       大多数Blog 只是人云亦云,以转载抄袭为主,参考价值不大,作者在整理资料的同时(Blog仅作为本人学习和备忘,请勿转载),给初学者的学习思路如下:

1)看书 or 少数有价值的Blog

      市场上很多书都是骗钱的,某某号称TensorFlow工程总监推荐,销量榜很高,作为菜鸟级的初步了解尚可,实际用作用不大,当然这个也根据个人实际情况,做好甄别和筛选。

      另外Blog 也不少,一搜一大把,凑热闹的居多,不置可否。

2)教程

     个人认为最好的入门工具还是官方的白皮书,不需要花钱,很多书和教程都是由此而来,有的改都没改。

     下载:TensorFlow 官方文档中文版 v1.2

               TensorFlow 技术白皮书

     莫烦的视频教程作为初学者可以看一下,毕竟有人对视频教程很有偏好,优酷视频 。

3)代码

     代码是学习最好的帮手,这个不需要质疑,Github上Down下来代码,自己Run例子。

     你需要了解里面的 模块结构 和 类划分,这对于理解框架以及熟练使用是很有帮助的。

4)学好工具的使用

     一定要熟练掌握 TensorFlow 的工具,特别是可视化工具 TensorBoard,作者会在后面拿出一章进行讲解。

    另外,要掌握相关调试方法(后续也会介绍)。

5 0
原创粉丝点击