浅入浅出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 End 和 Exec System,Front 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,作者会在后面拿出一章进行讲解。
另外,要掌握相关调试方法(后续也会介绍)。
- 浅入浅出TensorFlow 1
- TensorFlow 1
- tensorflow(1)
- TensorFlow学习1--TensorFlow基本概念
- [TensorFlow] TensorFlow Get Started (1)
- Tensorflow入门教程【1】---Hello TensorFlow
- TensorFlow教程 1 Tensorflow简介
- TensorFlow学习笔记(1)--Mac安装TensorFlow
- TensorFlow学习笔记(1)--Mac安装TensorFlow
- tensorflow学习(1)初步认识tensorflow
- TensorFlow实战:Chapter-1(TensorFlow介绍)
- TensorFlow Note 1 : Getting Started With TensorFlow
- TensorFlow学习_(1)TensorFlow安装(Mac)
- TensorFlow学习笔记1:Hello TensorFlow!
- 浅入浅出TensorFlow 2
- 浅入浅出TensorFlow 3
- 浅入浅出TensorFlow 4
- 浅入浅出TensorFlow 5
- JSON和Struts2数据传递时反射抛出异常
- poj-3176-Cow Bowling
- 震惊!栈的实现原来……?!
- poj 2481Cows 树状数组
- 浅谈高内聚低耦合
- 浅入浅出TensorFlow 1
- C语言 大数加减乘除
- java学习第三十一天之servlet
- 在Windows平台下搭建Darknet所遇到的问题
- 学生信息的添加与查询
- caffe----deploy.prototxt编写版本
- 用winsw让任何Windows程序都能运行为服务
- HDU1811 Rank of Tetris(并查集+拓扑排序)
- 公告栏轮播,文字轮播