“ 一文概览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
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卡的选择。
Be First to Comment