知识屋:更实用的电脑技术知识网站
所在位置:首页 > 科技  > 软件

如何高效地学习 TensorFlow 代码?

发表时间:2022-03-26来源:网络

-------------------------- 2020年06月更新-------------------------

@谷歌开发者 谢邀

相信大部分同学已经知悉 TensorFlow 2.2 正式版发布了。值此时机,我为大家整理了高效学习 TensorFlow 2.2 的十个理由以及一些相关学习链接,希望帮助AI新玩家们可以快速入门,TF 老师傅们能够获得一个更加全面的视角来认知 TensorFlow 及其生态。

最近我还做客了TensorFlow公众号“码上作答”栏目,欢迎大家就AI技术落地和TensorFlow 快速入门方面的问题向我提问!点击下方进入TensorFlow公众号文章,在文末留言提问即可(提问截止至6月14日周日下午17:00点前)。我对提问的回复,将于6月18日下周四在 TensorFlow 公众号推出。

以下是我整理的学好 TensorFlow 2.2 的十个理由以及一些相应的学习链接整理。

理由1:快速上手只需十分钟

TensorFlow 2.2 在易用性和简化 API 方面做了大量优化。对于新手,可以使用高层封装的 API 实现面向模型编程 (Model Oriented Programming, MOP)。我们以一个典型的 MNIST CNN 模型为例,展示 TensorFlow 2.2 的实现:

实例化一个 CNN 模型


统计模型基础信息


一行代码训练模型

通过这个简单示例,我们得以管中窥豹。tf.keras 提供了一套面向模型的编程方法:实例化 (Se 和 Functional API) 、统计 (Summary)、定义优化器和损失函数 (Compile)、模型训练 (Fit)、评估 (Evaluate)、预测 (Predict)、保存 (Save) 和加载 (Load) 等。这使得 TensorFlow 用户可以更加专注于模型开发和测试。

请参考
https://github.com/DjangoPeng/tensorflow-101/blob/master/experts/code_sample/chapter-2/tf_keras.ipynb

理由2:快速迁移现成 Keras 项目

TensorFlow 2.2 实现了 Keras 所有接口的完全兼容,并且解决了原生 Keras 不支持分布式训练的问题。

因此,如果你已经在使用 Keras 实现的模型,可以尝试使用import tensorflow.keras as keras来进行快速迁移。如果你想要尝试扩展 Keras 分布式训练,也可以使用 tf.distribute 模块赋能你之前的训练代码。

参考
https://tensorflow.google.cn/beta/tutorials/keras

理由3:快速部署生产环境

很多老用户都对 TF Serving 这款生产级的 AI 服务框架赞不绝口。TensorFlow 2.2 不仅发扬了前辈的优良传统,同时将 tf.keras 训练的 HDF5 模型格式和 SavedModel 格式打通。你可以在使用 model.save ("saved_model") 保存模型时选择 TF Serving 可加载的 SavedModel 目录。接着,你只需要使用 TensorFlow Serving 官方镜像 tensorflow/serving 便可以快速将 AI 模型部署到生产环境。

参考
https://tensorflow.google.cn/tutorials/keras/save_and_load

理由4:快速实现模型分布式训练

TensorFlow 早在 v0.8 就已实现基于 PS-Worker 的分布式模型训练。

经过3年多的迭代和更新,TensorFlow 2.2 不仅提升了分布式训练的性能,而且通过内置的6种分布式训练策略,帮助不熟悉分布式计算的新同学用一行代码实现分布式训练,效率提升十分明显。

部分内置的分布式训练策略参考
https://tensorflow.google.cn/guide/distributed_training

理由5:原生支持多元化的数据处理

tf.data 是 TensorFlow 2.2 推荐使用的数据处理 API ,其强大的功能体现在对于多种数据来源、数据格式和数据处理方法的支持。对于个人开发者和小团队,可以使用本地文件和对象存储系统作为数据来源,对于拥有海量数据的大厂,则可以从分布式文件系统中分批次读取数据或搭建数据处理流水线。

从数据格式和内置数据处理方法的丰富度上,我们可以洞察到 TensorFlow 2.2 已不仅是一个处理计算机视觉或深度学习的框架,而是能够实现 NLP 和 GAN 等多种细分 AI 领域的通用 AI 框架。

tf.data 模块介绍参考
https://tensorflow.google.cn/guide/data

理由6:原生支持经典分类模型

TensorFlow 2.2 原生支持了多种经典分类模型,包括重量级的 EfficientNet(最新 nightly 已支持)、DenseNet、 ResNet、VGGNet 和轻量级的 MobileNet、Xception 等。你可以通过 tf.keras.applications 模块快速体验和使用这些经典模型。不论是在基于 ImageNet 上预训练的模型做迁移学习,亦或是从零到一的训练全新模型。

TensorFlow 2.2 内置分类模型参考
https://tensorflow.google.cn/api_docs/python/tf/keras/applications

理由7:原生支持移动和物联网设备

在 TensorFlow 1.x 时代,SavedModel 转 tflite 格式部署到移动和物联网设备是可行的,但易用性不算很好。

TensorFlow 2.2 将 TF Lite 生态进一步整合到了原生框架中,并正式推出了 tf.lite 模块。现在,你可以直接调用 tf.lite.TFLiteConverter 实现SavedModel、HDF5和ConcreteFunctions 等多种模型格式转 tflite 格式。

同时,你还可以通过 tf.lite.Interpreter 定义模型在物联网设备上运行时的预测接口。这使得 TensorFlow 2.2 真正实现框架原生支持 AIoT。

参考
https://tensorflow.google.cn/api_docs/python/tf/lite

理由8:原生支持可视化数据、模型和训练

在深度学习模型训练和评估过程中,海量数据、高维模型、多种指标的变化对于算法工程师来说是十分重要的信息。并且,如果能够有高效的手段获取其中的数据洞察,将会非常有助于提升模型训练效率和经验积累。

TensorBoard 可视化工具包自推出后一直广受好评,它的出现使得开发者能够更加直观的了解数据和模型的质量,以及关键指标分布和变化。在今年的 TensorFlow Dev Summit 上,官方团队发布了TensorBoard 在线版 (https://tensorboard.dev/)。这使得 TensorFlow 用户不再需要独立安装 TensorBoard,而能够直接体验到 TensorFlow 生态中这一重要特性。

参考
https://tensorflow.google.cn/tensorboard

理由9:前沿探索量子机器学习

量子机器学习 (QML) 是量子信息 ( Information) 领域内新兴的子领域,其将量子计算的速度与机器学习所提供的学习和适应能力结合到了一起。量子机器学习可以分为两个部分:

将从量子计算机和传统计算机获得的数据作为训练数据训练模型的机器学习算法。过量子力学的思想和模型来改进机器学习算法也属于量子机器学习的一部分。

量子机器学习自1988年首次提出细胞自动机的量子推广后,逐步发展出量子增强学习 (2008) 、HHL 量子算法 (2009) 、量子主成分分析 (2014) 、量子 SVM 和贝叶斯网络上的量子推断 (2014) 、量子推荐系统 (2016) 等经典算法的拓展。

虽然现阶段量子计算机和量子比特数量限制还无法大规模使用 QML,但作为最前沿的交叉学科,TensorFlow 2.2 也实现了对这一前沿领域的支持—— TensorFlow (TFQ) 。

基于 TFQ 实现的混合量子机器学习模型参考
https://tensorflow.google.cn/quantum

理由10:企业版助力数字化转型

许多企业用户对于 TensorFlow 快速发展带来的 API 版本变化想必是心有余悸。一个好消息是此类用户将由官方团队“兜底”。 TensorFlow 企业版将提供长期的技术支持

针对某些版本,谷歌将提供长达三年的补丁程序,所有补丁和错误修复将在 TensorFlow 主线代码存储库中提供。另外,谷歌还将向正在构建 AI 模型的公司提供来自 Google Cloud 和 TensorFlow 团队的工程协助。

TensorFlow 企业版优势参考
https://cloud.google.com/tensorflow-enterprise

One More Thing

我希望不论是从业者,亦或是有志于投身 AI 的新同学,都能够勇敢踏出学习 AI 的第一步:快速上手一个 AI 框架—— TensorFlow 2.2 。同时,在 AI 理论积累和动手实战的基础上,持之以恒地学习,逐渐成长为一个玩转 AI 技术的 TFBoys / TFGirls 。

欢迎大家就就AI技术落地和TensorFlow 快速入门方面的问题向我提问。点击下方进入TensorFlow公众号文章,在文末留言提问即可(提问截止至6月14日周日下午17:00点前)。我对提问的回复将于6月18日下周四在TensorFlow公众号推出,欢迎大家继续关注!


-------------------------- 2019年01月更新-------------------------

很多朋友问到 TensorFlow 版本更新了,书会不会更新。我和另外两位作者有讨论过此问题,准备等19年 TensorFlow 2.0 正式发布后,会基于 2.0 再版此书,并根据大家的反馈修改全书的架构和内容。

同时,还有朋友提到能不能做一个偏实战和应用的入门课程。最近,我在极客时间上做了个面向 TensorFlow Beginner 的课程,如下所示:

《TensorFlow 快速入门与实战》

我在 Github 上也发布了课程课件和样例代码,欢迎提问和反馈:

DjangoPeng/tensorflow-101

-------------------------- 2018年06月更新-------------------------

为了回应很多亲友与 TensorFlow 爱好者的需求,我和高性能计算领域专家林健博士,以及华为深度学习技术负责人 白小龙博士合作,花了1年多时间写了一本深入解析的TensorFlow 书籍——《深入理解 TensorFlow:架构设计与实现原理》 。欢迎各位朋友阅读和拍砖!

该书的样章和示例代码托管项目:DjangoPeng/tensorflow-in-depth

-------------------------- 原答案分界线 ----------------------------

作为TensorFlow社区的contributor (41/415),我来说说我的TensorFlow学习过程。


目前TensorFlow代码已超过40w行,从代码量上来看,绝不是一个能够迅速上手的小项目。所以,想要精通TensorFlow的同学需要做好心理准备。

http://cloc.sourceforge.net v 1.64 T=45.33 s (68.5 files/s, 14956.6 lines/s) -------------------------------------------------------------------------------- Language files blank comment code -------------------------------------------------------------------------------- C++ 1084 33620 28397 185395 Python 988 43498 72410 160669 C/C++ Header 605 13609 23891 45446 HTML 100 1803 1572 24929 TypeScript 75 1836 4795 11681 Bourne Shell 60 1174 2147 4346 NAnt script 15 172 0 3328 CMake 28 298 495 1778 Protocol Buffers 43 555 1928 1337 Objective C++ 9 217 168 1186 Java 9 239 408 943 JSON 46 0 0 626 Go 9 93 244 544 make 3 96 112 542 Bourne Again Shell 4 52 91 310 Javascript 7 50 109 191 XML 18 97 205 149 Groovy 1 13 7 52 Objective C 1 10 13 21 CSS 1 4 11 6 -------------------------------------------------------------------------------- SUM: 3106 97436 137003 443479 --------------------------------------------------------------------------------


对于想要学习TensorFlow(以下简称TF)的人,根据目的不同,可以简单分为以下2类:
1. 研究学者,仅仅需要TF这个平台实现深度学习算法,无需了解太多底层原理
2. 好学的行业内人员(比如我⊙﹏⊙),不仅需要了解算法模型,同时还要熟悉TF平台的原理。在算子、通信、模型优化等方面进行平台的二次开发的人。

研究学者:
你们可以考虑使用Keras,python写的深度神经网络库,已经实现了绝大部分神经网络,如:RNN、GRU、LSTM,CNN,Pooling,Full-Connected,以及sigmoid、tanh、Relu、PRelu、SRelu等各种激活函数。并且采用TF/Theano作为后端计算引擎,自己本身拥有一套更高层的API,可以同时跑在TF/Theano平台上。
相对于TF来说,这个学习压力小了很多,我们公司负责算法的同事也是用Keras来写模型,然后我再用TF的API来实现分布式部署。
附:
Keras中文文档
GitHub - fchollet/keras: Deep Learning library for Python. Convnets, recurrent neural networks, and more. Runs on Theano or TensorFlow.

开发人员:
对于我们这类人来说,首先需要弄清平台的很多名称、概念、定义, @贾扬清 曾说过TF有太多的Abstraction需要学习。诚然,这加大了我们的学习难度。但是,这也说明Google是想要把这个平台做大做强的,所以才会花时间去设计这一套框架和统一的结构。特别是读了部分源码后,更有这种感触。
那么,具体要怎么开始呢?
极客学院有翻译部分TF的官方文档,对于初步了解Tensor、DAG、Operator、Variable、Device、Optimizer等是帮助的。在看完这些概念后,有一个MNIST的例子程序作为TF的入门。这个样例用一个简单的Softmax实现了手写体数字识别的神经网络,只有一层参数。同时还介绍了Session、tf.placeholder、图的计算等重要概念。
在看完这个样例后,如果理解了DAG和Session,可以继续看用卷积神经网络实现的MNIST,准确率上升到了99%,相对于单层Softmax的92%左右,已经接近目前最高的准确率了。
附:
MNIST机器学习入门
深入MNIST - TensorFlow 官方文档中文版

TF v0.8发布了分布式模型,我也研究了将近1个月,才把Seq2seq机器翻译改造成了分布式,但是现在公司不让发布出来ORZ。好消息是,我改写了社区的MNIST分布式程序,并且已经合并到master分支了。所以,如果想要继续学习分布式的话,我建议可以看一下那份代码。比较遗憾的是,极客学院目前没有翻译分布式的教程,所以大家得移步TF官网(貌似被墙了)。
由于分布式的资料较少,我这里简单梳理下概念,大家在官网会看到他们的定义:
TF采用了PS/Worker的结构来定义集群,其中
PS(parameter server):存储variable(模型参数),主要负责参数更新和发放;
Worker:存储operator,主要负责图计算和梯度计算(TF使用Optimizer实现了自动化的梯度计算);
job:由于工作类型不同,用job_name来区分ps和worker
task:对于每个worker来说,具体做什么任务(算什么图)也有可能不同,用task_index区分
device:指具体的CPU/GPU,通常PS绑定到CPU上,Worker绑定到GPU上,各取所长。
syncReplicaOptimizer:同步优化器,其本质仍然是用普通优化器进行梯度计算,但是通过Queue机制和Coordinator多线程协同实现了所有worker的梯度汇总和平均,最终将梯度传回PS进行参数更新。
以上几个概念对于分布式的理解非常重要。当然,想要完全弄懂,还得不断的看文档和源码。
源码我推荐几个python目录下非常值得看的基础类定义:
framework/Ops.py:定义了Tensor、Graph、Opreator类等
Ops/Variables.py:定义了Variable类
附:
分布式官网教程
分布式MNIST
tensorflow/ops.py at master · tensorflow/tensorflow · GitHub
tensorflow/variables.py at master · tensorflow/tensorflow · GitHub

最后,欢迎大家Follow我的Github账号:

DjangoPeng (Jingtian Peng) · GitHub

收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜