TensorFlow2.0新特性

An end-to-end open sorce machine learning platform

  • end-to-end:端到端
  • open source:开放源代码,开放设计和实现框架
  • machine learning:机器学习生态系统

TensorFlow的发展历程

  • 2011:DistBelief
  • 2015.11:TensorFlow 0.5.0
  • 2017.2:TensorFlow 1.0
    • 高层APi,将Keras库整合进其中
    • Eager Execution、TensorFlow Lite、TensorFlow.js
  • 2019:TensorFlow 2.0
    在这张图中,展示了各种机器学习和深度学习框架在github上的活跃度。
    TensorFlow2.0新特性_第1张图片
    可以看出,自从2015年TensorFlow诞生以来,就一路绝尘,遥遥领先。随着时间的推移,TensorFlow的组件日益增加,应用更加广泛,使用者群体也越来越庞大,不再局限于计算机和人工智能领域的专业人员。原先的TensorFlow1.0版本对于初学者而言不太容易学习和掌握,开发和调试也比较困难。

2019年TensorFlow2.0正式问世,2.0版本是对之前版本的彻底的革命性的改造,他非常的简单,清晰好用并且容易扩展,极大的降低了深度学习编程的门槛,他的目标是让普通人也能够使用人工智能技术解决问题,因此对于刚刚开始接触人工智能领域的小白来说,现在正是开始学习的最佳时机。

下面我们就来看一下,和之前的版本相比,TensorFlow2.0有哪些新的特点?

TensorFlow1.x–延迟执行机制

程序包含两个阶段,构建阶段和执行阶段,在构建阶段创建计算图来描述任务流程,例如要完成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会把大量的资源浪费在多次接收和返回数据上,远不如一次性接收和返回数据效率更高。
TensorFlow2.0新特性_第2张图片

TensorFlow2.0–动态图机制

动态图机制作为默认的执行机制,在这种模式下,使用tensor flow编程,就像使用Python、numpy一样的简单完成这个加法运算,只需要一行代码就可以了,执行这行代码可以立刻得到运算结果。

  • 这种动态图机制无需首先创建静态图可以立刻执行计算并返回结果。这样就能够快速的建立和调试模型。
  • 但是每次运行时都要重复的建立动态图,无法重载也不利于优化,因此执行效率不高。
a = tf.constant(2, name="input_a")
b = tf.constant(3, name="input_b")
print(a+b)

而在TensorFlow1默认的静态图机制中,静态图只需要创建一次,然后就可以不断的重复使用它还可以在运行之前对计算图做优化效率更高,在部署中很实用。

为了兼顾应用性和执行效率,TensorFlow2.0仍然保留了静态图机制,我们可以在程序的调试阶段使用动态图,快速建立模型调试程序,在程序的部署阶段,采用静态图机制,从而提高模型的性能和部署能力。

TensorFlow1.x–重复,冗余的API

在实现同样的功能时,可以有很多种不同的方法。例如

  • 在构建神经网络模型时:tf.slim、tf.layers、tf.coutrib.layers、tf.keras的很多不同的方法,这样不仅容易造成困惑,到底应该采用哪一种方法,而且也不利于代码的共享,程序维护的成本也会比较高。

TensorFlow2.0–清理/整合API。

  • 清理、整合了重复的API
  • 将tf.keras作为构建和训练模型的标准高级API
    更加易于上手,并且能够更加高效的开发程序。

TensorFlow2.0架构

自从2015年诞生之后,tensor flow的开发团队不断的推出新的组件,在参差flow2.0的版本中,这些组件被打包成一个能够支持机器学习的综合平台,可以看到它包括训练模型,保存模型和工作模型,这样一个完整的工作流程。
TensorFlow2.0新特性_第3张图片
在训练阶段,首先使用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,构等多种语言实现跨语言的应用。

TensorFlow框架特性

下面我们来总结一下tensor flow所具备的优良特性

  • 多环境支持
    • TensorFlow灵活的架构支持,多种平台。它可以运行于移动设备,个人计算机、服务器、集群等。可以单独使用其中的一个设备,也可以同时使用多个设备展开运算
    • 可以在云端,本地浏览器中,或者移动设备嵌入式设备上轻松的训练和部署模型,随时随地的实现可靠的机器学习应用
  • 支持分布式执行
    • 它会自动检测GPU和CPU,并且充分利用它们并行分布的执行程序。TensorFlow的并行计算能力,不仅能够加速他们的执行,而且在时限上也进行了有效的改进
  • 简洁高效
    • 在构建模型阶段可以采用动态图机制和keras高阶API构建训练和迭代模型,快速的将idea转化为代码
    • 在部署阶段,可以将模型转化为静态图,充分发挥性能优势,提高执行效率
  • 庞大的社区支持
    • 与其他机器学习和深度学习的框架相比,TensorFlow在github上的项目总数和关注度都是最高的,在github上可以找到很多tensorflow的开源项目,在图像分类音频处理推荐系统和自然语言处理等场景下都有丰富的应用

TensorFlow2.0新特性_第4张图片
这是一个2018年深度学习框架的排行榜,作者从领英职位需求,谷歌搜索热度 medium文章数,arxiv论文数和github活跃度等多个方面进行了综合比较TensorFlow,几乎包揽了所有领域的第1名,因此综合排名也是遥遥领先于其他框架。

TensorFlow2.0新特性_第5张图片
这是2019年深度学习框架的排行榜,这个排行榜是从业界影响、资源投入、开发生态、文档体系、模型全面性、工业实践和开源热度等7个方面评估各个框架的发展状况,TensorFlow依然稳居榜首。

在实际中越来越多的公司开始使用TensorFlow来提供解决方案。
TensorFlow2.0新特性_第6张图片

得益于深度学习技术的迅速发展和开源软件的生态模式,在短短的几年中出现了多种优秀的深度学习框架,他们各具特色相互竞争,又互相补充,快速迭代,极大的推动了深度学习技术在工业界的落地应用,如果是刚刚开始接触和了解深度学习技术,以学习为目的,那么从TensorFlow开始学习是一个不错的选择。

在网络上有大量关于吞噬辅路的各种教程和丰富的案例,谷歌公司也是请入了大量资源来打造这个平台,从基础的视频课程完善详尽的文档体系,到项目的开发落地提供了大量的服务,他已经不只是一个深度学习的框架了,更是一个人工智能开发的生态系统,在学习好这个框架之后,如果再去学习其他的框架也是非常轻松的。

你可能感兴趣的:(深度学习,人工智能,python)