「动手学习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
专知会员服务
348+阅读 · 2020年3月17日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
70+阅读 · 2020年1月17日
TensorFlow 2.0 学习资源汇总
专知会员服务
67+阅读 · 2019年10月9日
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
19+阅读 · 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会员
最新内容
世界模型入门:从序贯决策到通用智能体
专知会员服务
10+阅读 · 10月24日
军事域更好使用人工智能的实用指南
专知会员服务
10+阅读 · 10月22日
《衡量语言模型中的作战规划能力》
专知会员服务
14+阅读 · 10月20日
Maven智能系统:帕兰提尔军事人工智能平台详解
专知会员服务
17+阅读 · 10月20日
《测试自动化框架在敏捷软件开发中的角色》
专知会员服务
9+阅读 · 10月20日
相关资讯
TF Boys必看!一文搞懂TensorFlow 2.0新架构!
引力空间站
19+阅读 · 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会员