TensorFlow 简介
本节将从五个方面对 TensorFlow 进行一个简单的介绍。包括 TensorFlow 是什么、能做什么?为什么选择 TensorFlow、TensorFlow 的发展以及 TensorFlow 的核心理念。
1. 什么是 TenosrFlow
“TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。” ——Wiki百科
这种过于官方化的定义可能比较难于理解,于是我们给出一个比较容易理解的解释:TensorFlow 就是一个开源的用于机器学习的框架,我们可以使用 TensorFlow 来快速地构建神经网络,同时快捷地进行网络的训练、评估与保存。
也正是因为 TensorFlow 是一个开源的软件库,因此只要我们安装了 TensorFlow,我们就可以使用import 的方式来引入。
import tensorflow as tf
那么具体说来 TensorFlow 可以干什么呢?简单的回答是:TensorFlow 主要负责机器学习的每一个步骤,具体包括:
- 模型的构建;
- 模型的训练;
- 模型的保存与加载;
- 模型的评估;
- 使用加速器提升性能;
- 在生产环境中部署网络;
- 对模型的数据进行可视化(TensorBoard);
- 其他功能。
通过这样的梳理我们可以发现,TensorFlow 可以满足我们在机器学习中的从模型构建到模型的部署的绝大部分的工作需求。
2. TensoFlow的发展历史
TensorFlow 是由谷歌公司开发的一款机器学习的框架,最初在谷歌大脑团队内部使用(那时还叫作DistBelief),主要用于构建一些常用的神经网络,并于 2015 年宣布开源。
DistBelief 最初用于构建各尺度下的神经网络分布式学习和交互系统(初学者可能不容易理解,暂时可以认为是用于构建分布式的神经网络),这被称作第一代机器学习系统。
DistBelief 框架在谷歌旗下的产品中被广泛使用。后来在一步步的发展过程之中不断增添新的功能,并进行了重构,最终形成了 TensorFlow,被称作第二代机器学习系统,目前 TensorFlow 框架已经广泛应用于各个机器学习领域。
得益于 TensorFlow 的出现与不断地完善,机器学习开发者们可以更加迅速地、快捷地来构建自己的神经网络,同时可以以一种更加高阶、简洁的语法方式来进行模型的训练与保存。从工业的角度来说,TensorFlow 有着较快的训练速度;而在人工智能行业的竞争中,更快的训练速度意味着更强的行业竞争力,再加之以分布式训练的优势,TensorFlow 得以在工业生产之中大规模使用。
我们总览整个 TensorFlow 的发展历程,从最开始非正式版本诞生时受到广泛关注,到 1.x 版本的迅速发展,再到 2019 年 2.0 版本发布,TenosrFlow 正在生产的角度上逐渐趋于完备。
作为一个机器学习的框架,TensorFlow 的工业设计比较完整,而且它的更新也在顺应时代潮流向前发展(比如 2.x 版本的 Eager 模式的发布)。依托于 Google 的强大研发与号召力,我们有理由相信TensorFlow 的未来的发展前景会非常广阔。
3. TensorFlow的特点
既然 TensorFlow 如此受欢迎,那么它一定有很多的特点在吸引着我们的开发者和企业,那就让我们来简单了解一下TensorFlow的一些特点:
- 高度的可移植性:也就是说,相同的代码和模型可以同时在服务器、PC 和移动设备上运行。除此以外,TensorFlow 可以选择在 CPU 或者在 GPU 上面运行,做到了真正的可移植。
- 丰富且友好的文档:在 TensorFlow 的官方文档之中,几乎为所有的函数与所有的参数都进行了详细的阐述。并且很大一部分的官方教程支持中文,对于初学者来说是很大的福音。
- 内置算法非常完善:在 TensorFLow 之中内嵌了我们在机器学习中能用到的绝大部分的算法。
- 非常适合用于工业生产:TensorFlow 内置的 Service、分布式等结构能够帮助个人和企业很轻松地完成模型的训练与部署。
- 高阶、简洁又简单的 API:这是 TensorFlow 的一大优点,同时也是一个缺点,它在让初学者更快地入门的同时,也会让自定义网络结构变得不是很灵活。
总结:TensorFlow 是一个当下流行的机器学习框架,我们可以使用该框架快速地进行模型的构建、训练与部署;同时 TensorFlow 也是一个在工业化生产中非常常用的机器学习框架。
4. TensorFlow 的版本与选择
在十年的发展历程之中,TensorFlow 经历了很多的版本的变化,每个大的版本更迭都有着很多特点。我们知道 TensorFlow 是从 1.x 版本发展到 2.x 版本的,但是网络上很多教程还都是 1.x 版本的教程。在这里,大家可以大概了解一下TensorFlow的版本发展历程:
- 2010 年-2015 年,谷歌大脑团队在其内部使用 DistBelief 框架进行机器学习的相关工作,后来经过不断地简化与重构逐渐形成了初步的 TesnorFlow,此时的 TensorFlow 还不是很完善。
- 2015 年-2017 年,年轻的 TensorFlow 正式开源(0.1版本),此时的 TensorFlow 依然处在 0.x 的非正式版本,并且开始支持 IOS、Windows 等平台。
- 2017 年-2019 年 10 月,TensorFlow进入了 1.x 阶段,也正是在这个时期,TensorFlow 的用户大量增长,收获了非常多的支持。同时,TesnorFlow 也在此过程中加入了多 CPU 与多 GPU 运行的支持,并且可运行在 64 位设备上。
- 2019 年 10 月-现在,TensorFlow 进入了 2.0 时代,其内部嵌入了 Keras,同时引入了 Eager Execution 模式,初学者的学习门槛更低了。
截至到 2020 年 7 月,最新的 TensorFlow 版本是 2.2 版本,因此本教程采用的是 TensorFlow2.2 版本。使用新的版本一方面可以避免一些老版本的遗留问题,另一方面也可以体验到一些新的功能。
5. TensorFlow 与其他同类型机器学习框架的对比
谈到机器学习框架的选择,目前使用最多的就是 TensorFlow 与 PyTorch,因此我们这里以 Pytorch 为例来比较 TensorFlow 与其他框架的不同。
5.1 TensorFlow
说到这里我们不得不说一下 TensorFlow 的优点,相比于其他的机器学习框架,Tensorflow 框架是最适用于工业部署的一个机器学习框架,换句话说,TensorFlow 非常适用于在生产环境中进行应用。下面我们来细数一下 TensorFlow 的优点。
- 整个项目开源;
- 文档非常全面而且包含中文教程,学习成本比较低;
- 其内部含有很多高阶神经网络 API,我们可以用一个语句来生产一个网络;
- 使用其内部的 TensorFlow Service 可以实现快速上线部署;
- 得益于高阶 API,使用 TensorFlow 进行神经网络开发非常迅速;
- 内部内置 TesnorBoard 工具,可以很好地进行可视化工作;
- 对移动设备的支持非常友好;
- TensorFlow 内部内置分布式训练工具,开源很方便地进行分布式训练。
我们讨论了这么多优点,TensorFlow就没有缺点吗?当然有,TensorFlow 也有一些显而易见的缺点:
- TensorFlow程序的调试较为困难,我们不能深入其内部进行调试;
- TensorFlow 的许多高阶 API 导致我们修改我们自己的模型比较困难(相对而言);
- TensorFlow1.x 与 TensorFlow2.x 的差别比较大,以前的代码迁移比较困难。
5.2 Pytorch
那我们反过来看 PyTorch,相比于 TensorFlow 来说,Pytorch 是一个新兴的工具,但是它的发展非常迅速,而且拥有良好的社区环境。Pytorch 相比于 TensorFlow 的优点有以下几点:
- 以类 Python 的方式运行,调试非常容易,我们可以很快的定位到问题所在;
- 可以在内部构建动态图,而 TensorFLow 构建的是静态图。
当然,与 TensorFLow 相比,它的缺点也很明显:
- 运行速度等非功能需求不如 TensorFLow;
- 不适用于工业生产,部署等工业生产操作较为复杂;
- 可视化需要借助第三方工具。
总结来说,如果你想进行神经网络的快速构建、训练与部署,那么 TensorFlow 是你非常好的选择,但是如果你只是想从事一些科研的方面的工作,那么 TensorFlow 可能并没有 Pytorch 那么容易驾驭。
6. 为什么要学习 TensorFlow
在当下,人工智能已经遍地开花。无论是我们手机上的应用还是交通监管,都离不开人工智能的身影。毫无疑问,在过去几十年里,人工智能是已经深入的改变了我们的生活方式与就业情景。在这个瞬息万变的竞争格局中,任何没有利用人工智能的机构都将被远远地甩在后面。
无论是各个国家,还是各个公司组织,都在积极地向机器学习方向发展。也正是在这个人工智能的大潮之中,我们的机器学习行业才会如火如荼地发展。目前阶段,各个企业和组织对于我们机器学习领域的人才需求量都非常大,人工智能行业的发展前景非常广阔。在未来几年甚至十几年,机器学习领域的就业可以说是“最赚钱的行业”之一。作为 IT 工作者,我们应该抓住时代的潮流,用人工智能的技能来武装自己,学习如何进行机器学习的开发工作。
在目前,最受欢迎的机器学习框架就是 TensorFLow 与 Pytorch,这两者都有着很广阔的前景。相比而来 TensorFlow 更加适用于工业生产,而 Pytorch 更加适用于科学研究。
TensorFlow 无可厚非地能被认定为神经网络中最好用的库之一。它在训练深度神经网络方面有着得天独厚的优势。通过使用TensorFlow我们就可以快速地入门神经网络,大大降低了深度学习的开发成本和开发难度。
7. 本门课程的设计思路
本门课程会从机器学习初学者的角度来逐渐切入,从简单的模型开始,以实例为驱动,让诸位在实践之中学习。
总体来说,本课程为从零开始的 TensorFlow 教程,分为以下几个大的章节:
- 如何安装自己的 TensorFlow;并从快速入门开始,让各位了解 TensorFlow 构建模型的一般流程;
- 帮助各位使用 Keras 来构建自己的模型,以此来让各位了解 Keras 编程;
- 引导诸位了解 TenosrFLow 中各种数据格式的使用方法;
- 帮助各位了解 TensorFlow 的 Estimator 编程;
- TensorFlow 中的一些高级技巧;
- TesnorFlow 的可视化工具——TensorBoard。
具体到每一个章节,我们会采用案例驱动的方式来进行讲解与学习,我们会将具体的细节与机器学习的知识融入到每一个案例之中,让诸位在实践中学习。诸位应该在学习的时候最大程度地动手实践一下,一方面可以提升自己的实践能力,另一方面也可以加深自己对 TensorFlow 的认知程度。
8. 你需要掌握的基础
因为机器学习属于计算机科学中一个较为高级的层次,因此你在学习之前需要一些知识储备。具体来说,你需要以下基础知识:
- Python 编程的基本知识;
- 面向对象编程的基本知识;
- 熟悉一种或多种 PythonIDE,比如 Pycharm 等工具;
- 善于使用搜索引擎、社区和官方文档查找自己的问题。
总而言之,TensorFlow 是一个生态完整的框架;无论你是初学者,还是机器学习开发者,抑或是想在机器学习领域有所建树,那么 TensorFlow 将会是你的不二之选。