2019年TensorFlow2.0正式问世,2.0版本是对之前版本的彻底的革命性的改造,他非常的简单,清晰好用并且容易扩展,极大的降低了深度学习编程的门槛,他的目标是让普通人也能够使用人工智能技术解决问题,因此对于刚刚开始接触人工智能领域的小白来说,现在正是开始学习的最佳时机。
下面我们就来看一下,和之前的版本相比,TensorFlow2.0有哪些新的特点?
程序包含两个阶段,构建阶段和执行阶段,在构建阶段创建计算图来描述任务流程,例如要完成a加b,那么首先要构建这样的计算图,其中包含三个节点,input_a和input_b,是常量节点,add_c是实现加法运算的节点,这是对应的代码。
a = tf.constant(2, name="input_a")
b = tf.constant(3, name="input_b")
c = tf.add(a, b, name="add_c")
通过这段代码完成了计算图的定义,但是它不会产生任何输出,这些语句只是描述了计算图,并没有实质的计算发生,如果使用print函数打印输出c,会发现并没有打印出计算结果,而是解释这个c是怎么计算的。也就是说在计算图中只是保存了计算的过程,而并没有进行计算,因此称为静态图。
要想得到计算结果,就要在执行阶段运行这个计算图,这时需要创建一个会话 session。在会话中运行计算图并输出c的值得到计算结果。这种机制被称为延迟执行机制
或者静态图机制
。之所以采用这种机制是为了提高代码执行的效率,因为神经网络需要大量的运算,TensorFlow在会话中能够更加高效的运行代码来执行这些复杂的计算,另外TensorFlow中的许多运算,都可以在GPU甚至多台机器多台GPU中同时运行,如果一步一步执行的话,那么GPU会把大量的资源浪费在多次接收和返回数据上,远不如一次性接收和返回数据效率更高。
动态图机制作为默认的执行机制,在这种模式下,使用tensor flow编程,就像使用Python、numpy一样的简单完成这个加法运算,只需要一行代码就可以了,执行这行代码可以立刻得到运算结果。
a = tf.constant(2, name="input_a")
b = tf.constant(3, name="input_b")
print(a+b)
而在TensorFlow1默认的静态图机制中,静态图只需要创建一次,然后就可以不断的重复使用它还可以在运行之前对计算图做优化效率更高,在部署中很实用。
为了兼顾应用性和执行效率,TensorFlow2.0仍然保留了静态图机制,我们可以在程序的调试阶段使用动态图,快速建立模型调试程序,在程序的部署阶段,采用静态图机制,从而提高模型的性能和部署能力。
在实现同样的功能时,可以有很多种不同的方法。例如
自从2015年诞生之后,tensor flow的开发团队不断的推出新的组件,在参差flow2.0的版本中,这些组件被打包成一个能够支持机器学习的综合平台,可以看到它包括训练模型,保存模型和工作模型,这样一个完整的工作流程。
在训练阶段,首先使用tf.data加载数据读取训练数据,利用tf.feature columns描述特征,然后使用tf.keras或者premade estimators构建训练和验证模型,如果不想从头开始训练模型,也可以使用TensorFlow hub模块,通过迁移学习来训练keras或者estimators模型。在这一步中也可以使用tf.function装饰器,将动态图转化成静态图进行计算加速。
Distribution strategy是一个实现分布式策略的API,对于大型的集体学习训练任务,不需要更改模型的定义,就可以通过它轻松的采用分布式策略,进行分布式训练。 TensorFlow支持CPU、GPU和TPU可以将训练负载分配到单机多卡和多机多卡上,这个API支持多种群集化配置,也提供了在本地或者云环境中部署群集训练的模板。
Savedmodel是TensorFlow支持的一种保存模型的格式,模型训练好之后就可以导出并且保存,保存模型之后可以直接加载在程序中执行,也可以将模型部署在服务器、嵌入式设备或者Web浏览器环境中。
TensorFlow serving可以将训练好的模型部署在本机或者云端服务器上。
TensorFlow Lite是针对移动设备和嵌入式设备的轻量级的解决方案,他提供了在嵌入式系统上部署模型的功能,例如安卓IOS或者树莓派, Htpu等设备。
TensorFlow.js是在JavaScript的环境下部署模型,可以将模型部署在web浏览器中,或者通过node.js部署在服务器端。TensorFlow.js还支持指在JavaScript中定义模型,并且直接在Web浏览器中对模型进行训练。
Other language bindings是用于将模型导入其他语言的API,包括c,Java,构等多种语言实现跨语言的应用。
下面我们来总结一下tensor flow所具备的优良特性
这是一个2018年深度学习框架的排行榜,作者从领英职位需求,谷歌搜索热度 medium文章数,arxiv论文数和github活跃度等多个方面进行了综合比较TensorFlow,几乎包揽了所有领域的第1名,因此综合排名也是遥遥领先于其他框架。
这是2019年深度学习框架的排行榜,这个排行榜是从业界影响、资源投入、开发生态、文档体系、模型全面性、工业实践和开源热度等7个方面评估各个框架的发展状况,TensorFlow依然稳居榜首。
在实际中越来越多的公司开始使用TensorFlow来提供解决方案。
得益于深度学习技术的迅速发展和开源软件的生态模式,在短短的几年中出现了多种优秀的深度学习框架,他们各具特色相互竞争,又互相补充,快速迭代,极大的推动了深度学习技术在工业界的落地应用,如果是刚刚开始接触和了解深度学习技术,以学习为目的,那么从TensorFlow开始学习是一个不错的选择。
在网络上有大量关于吞噬辅路的各种教程和丰富的案例,谷歌公司也是请入了大量资源来打造这个平台,从基础的视频课程完善详尽的文档体系,到项目的开发落地提供了大量的服务,他已经不只是一个深度学习的框架了,更是一个人工智能开发的生态系统,在学习好这个框架之后,如果再去学习其他的框架也是非常轻松的。