「动手学习Tensorflow」- Tensorflow综述I

2020 年 3 月 27 日 AINLP

 一文概览Tensorflow方方面面。





大家好,我是人工智能工程师Alpha浪。


今天,我们开始「动手学习Tensorflow - Tensorflow 综述」部分。


快速学习一门新技术的最好方法之一,就是首先对这门技术有着全局的认识,然后在深入了解每一部分的细节。


综述就是最好的给你全局认识的读物。


关注公众号“AI工程师成长之路”, 回复"Tensorflow知多少", 获取最新最全的自制tensorflow综述PPT。





01


什么是Tensorflow




Tensorflow 是Google在2015年发布的一个端到端开源机器学习平台。


它的前身是Google内部从2011年开始使用的Disbelief。



那么为什么叫做 Tensorflow 呢?


Tensor 表示多维数组,Flow表示流动,从字面上来看Tensorflow的意思为多维数组在流动。


Tensorflow将数值计算表达为一个计算图,图中的节点为算子,图中的边为多维数组。


一次数值计算由对应的多维数组 (Tensor) 流过相应的算子 (Operator)而表达,即Tensor 在Flow,所以叫做Tensorflow。





02


Why Tensorflow



为什么我们要选择使用Tensorflow呢?

Tensorflow 由Google出品,Google家开源的工具一般都还不错 (Google 大法好)。

Tensorflow有着强大的社区和生态,在工业界有着广泛的成功案例。Tensorflow从2015年发布到2020年,已经是一项很成熟的技术方案了,部署在线上的Tensorflow,已经经历过了数次双十一流量高峰检验。




Tensorflow支持多种语言,C++, Python, java,javascript,swift etc。Java在国内是很多科技公司的线上编程语言,支持Java的tensorflow比那些只支持c++和python的库要能打的很多。

Tensorflow支持分布式训练和部署。

更多选择Tensorflow的理由,我们在上一篇 深度学习框架纷争 也有提及。






Tensorflow从2015年开源到现在,已经发布了104个版本,从单纯的机器学习算法开发包,已经发展到一个巨大的生态系统,成为了一个端到端的机器学习平台。

如今的Tensorflow包含以下四个部分:
  • Tensorflow核心开源库
  • Tensorflow.js
  • 针对移动设备和IOT设备的Tensorflow Lite
  • 针对成产环境的Tfx和Tensorflow Serving






03


Tensorflow核心库



Tensorflow核心库是我们最常用的部分了,通过它,我们可以轻松构建机器学习模型。

通常来讲,我们都是使用Tensorflow 核心库的python api进行模型的编写。

在下一篇文章中,我们会介绍Tensorflow入门实战,本先介绍Tensorflow核心库的一些基础以及概念。

Tensorflow中的两种模式


Tensorflow中存在两种模式。

在Tensorflow2.X之后,默认是eager execution模式,即动态图模式。

动态图模式,在执行计算的同时构建计算图,可以像获取python中的变量值一样获取Tensor中的值,编写模型和调试起来非常方便。
 
在Tensorflow1.x的版本中,默认是非eager execution模式,即静态图模式。

静态图模式,首先进行计算图的构建,然后在该计算图上才执行多次计算来进行模型的训练和评估。

Tensor值不能在它定义的时候获取的到,只有在真正计算的时候才能从session中获取,调试起来非常麻烦,被很多人吐槽。

动态图模式非常适合线下编写调试模型;静态图模式则比较适合线上的场景,一次构建好计算图,然后在这个计算图上执行计算,比边构建图边计算工程效率要高很多。

Tensorflow三种实现模型的方式


在Tensorflow中,我们可以有三种实现模型的方式。

在早期的Tensorflow1.x版本中,大家都是通过low-level api,直接使用graph和session来编写模型。

在后来的Tensorflow1.x版本中,则是推荐使用Estimator来编写模型。

在如今的Tensorflow2.x版本中,官方推荐使用Keras api来编写模型。

Tensorflow编程模型中的一些基本概念


Tensorflow中,我们会遇到以下概念:Tensor,Variable,Placeholder和 Operator。

广义上说,Tensorflow中变量分为两种类型,Tensor和Operator,其中,Tensor表示多维数组,包括了像Variable和Placeholder这样的specific tensor。Operator表示算子,例如相加,相乘等。

例如,我们想执行下图中的一个简单的relu模型。

参数W和b我们会定义成Variable,一般模型的参数都会定义成Variable类型的Tensor。

输入变量X会定义成Placeholder,Placeholder是我们要fed进计算图的那部分tensor,例如输入和label。

而像Add,MatMul和RELU则是算子,对输入的Tensor值进行相关计算。




Tensorflow中模型的三种存储格式


Tensorflow中模型可以有三种存储格式,分别是check point,saved model以及frozen graph格式。


Check point模型可能是我们接触最多的模型格式了,我们在Tensorflow中直接模型存储的方式就是以check point的格式来存储。


Check point将全部学到的Variable tensor值进行保存,但是不保存模型结构,因此只有在模型source code存在的时候才能对check point格式的模型进行加载。


Saved model是Tensorflow Serving加载的模型格式。除了保存变量Variable的值之外,它还保存模型的结构,因此没有模型的Source code也能对saved model进行加载。


Saved model格式常用在线上部署,例如通过Tensorflow serving来部署,或者通过tensorflow c++或者java api来进行模型的inference。


Frozen Graph格式目前在Tensorflow官方文档中已经看不到了,但是它在业界还是有一定的应用场景的。


Frozen Graph根据模型的输入和输出,只保留在infercne阶段和它们相关联的计算图中的节点和边,进而可以去除掉在Inference阶段用不到的tensor和operator,使得模型更小。


Tensorflow Dataset


Tensorflow Dataset是用来构建模型输入pipeline的。

例如,我们通过Tensorflow Dataset来设定batch size的大小以及迭代的epoch轮数。

Tensorflow Dataset是Estimator和Keras Model的输入格式。


Tensorboard


Tensorboard 是Tensorflow中提供的可视化工具。


它不仅可以可视化模型试验过程中模型的metrics,如accuracy,loss等;它还可以可视化计算图中的节点和边;同时它还可以可视化图片,可视化降维后embedding的低维空间等。


值得提的一点是,不仅Tensorflow可以使用Tensorboard进行可视化,像Pytorch等也可以使用它做可视化。




TfDebug


TfDebug还是Tensorflow1.x版本中的一个工具,现在在Tensorflow 2.x的文档中中已经没有了它的身影。

在Tensorflow1.x静态图模式下,只有在计算图真正执行的时候才能获取Tensor的值,而不能在Tensor定义的地方获取它的值。

那是一段痛苦的记忆,那个时候只有通过Tfdebug这个工具,才能进行debug,既麻烦低效又痛苦。

现在Tensorflow2.x版本中,默认是动态图方式,debug非常方便,TfDebug也就再也用不到了^_^ 。

Tensorflow中GPU的使用


在这里要提一个在Tensorflow中使用GPU的好习惯。


Tensorflow默认会对GPU卡全部占用,即使是执行很少的运算。而如果这块卡被一个人全部占用,那么其他人就得不到使用。


因此在使用gpu的时候,一定要进行以下设置:





可以使用tf.test.is_gpu_avaibalbe() 来查看当前gpu是否可用,如果不可用,要检查下是否是gpu驱动没有安装,以及是否没有安装Tensorflow-gpu。

可以使用 os.environ['CUDA_VISIBLE_DEVICES'] = 0,1 来进行gpu卡的选择。





我们会在下一篇文章中完成剩下的Tensorflow综述部分。


关注公众号“AI工程师成长之路”, 回复"Tensorflow知多少", 获取最新最全的自制tensorflow综述PPT。


推荐阅读

AINLP年度阅读收藏清单

风云三尺剑,花鸟一床书---对联数据集和自动对联机器人

使用Encoder-Decoder模型自动生成对联的思路

逆向而行,中文轻量级预训练模型的探索之路

From Word Embeddings To Document Distances 阅读笔记

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

这门斯坦福大学自然语言处理经典入门课,我放到B站了

可解释性论文阅读笔记1-Tree Regularization

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLP君微信(id:AINLP2),备注工作/研究方向+加群目的。



登录查看更多
1

相关内容

Google发布的第二代深度学习系统TensorFlow
【干货书】机器学习Python实战教程,366页pdf
专知会员服务
338+阅读 · 2020年3月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
TensorFlow 2.0 学习资源汇总
专知会员服务
66+阅读 · 2019年10月9日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
基于TensorFlow的深度学习实战
七月在线实验室
9+阅读 · 2018年4月25日
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
史上最全TensorFlow学习资源汇总
深度学习世界
7+阅读 · 2018年4月12日
快使用TensorFlow,哼哼哈嘿
图灵教育
5+阅读 · 2018年3月16日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Next Item Recommendation with Self-Attention
Arxiv
5+阅读 · 2018年8月25日
Arxiv
14+阅读 · 2018年5月15日
Arxiv
8+阅读 · 2018年1月25日
VIP会员
相关资讯
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
18+阅读 · 2019年1月16日
深度学习开发必备开源框架
九章算法
12+阅读 · 2018年5月30日
机器学习者必知的 5 种深度学习框架
深度学习世界
7+阅读 · 2018年5月3日
基于TensorFlow的深度学习实战
七月在线实验室
9+阅读 · 2018年4月25日
Tensorflow Eager Execution入门指南
专知
6+阅读 · 2018年4月16日
史上最全TensorFlow学习资源汇总
深度学习世界
7+阅读 · 2018年4月12日
快使用TensorFlow,哼哼哈嘿
图灵教育
5+阅读 · 2018年3月16日
TensorFlow神经网络教程
Python程序员
4+阅读 · 2017年12月4日
手把手教TensorFlow(附代码)
深度学习世界
15+阅读 · 2017年10月17日
Top
微信扫码咨询专知VIP会员