[2019] TF Dev Summit Ext

这是 2019 TensorFlow Dev Summit Extended 的活动记录。

本文同步发布于 厦门GDG 微信公众号、TFUG厦门 微信公众号。

0x0 前言

3 月 31 日下午,厦门 GDG 在海韵园举办了面向 TensorFlow 开发者及爱好者的技术交流会议:TensorFlow Dev Summit Extended.

0x1 TFUG 成立

会议活动在下午两点的时候准时开始,首先依旧是简要地介绍了厦门 GDG,并宣布了由厦门 GDG 的核心成员及爱好者们组建的厦门 TensorFlow User Group (TFUG) 的成立。这是一个全新的组织,旨在分享 TensorFlow 开发前沿的最新技术、建立一个让 TF 的开发者、爱好者交流实践的社区。TensorFlow Dev Summit Extended 则是 TFUG 举办的第一次活动。

tfug

未来 TFUG 还将与 GDG 联动举办更多有关 TensorFlow 的活动。GDG 主要举办入门级和推广层次的活动,而 TFUG 日后的活动则会侧重于面向专业开发者和爱好者。

0x2 TF Dev Summit Ext

在介绍完 GDG 和 TFUG 之后,会议的主体部分开始了。本次的讲师仍然是我们熟悉的 GDG 核心成员、谷歌认证的机器学习专家——郑炜老师。

tf dev summit ext 1

这次的会议活动主要分成三个部分,第一部分首先介绍了 TensorFlow 的技术背景、应用场景,以及 TensorFlow 2.0 更新带来的变革;第二部分是观看了 TensorFlow Dev Summit 2019 的 Keynote 视频,从官方角度总结了 TF 2.0 版本的几个核心的亮点;第三部分依然是从未缺席、令人期待的 CodeLabs.

0x21 TF 技术、背景介绍

这部分主要回答了几个问题。首先,什么是 TensorFlow? Google 开发的 TensorFlow 是当下被广泛使用的实现机器学习、涉及大量数学运算的算法库之一。在 GitHub 上的 star 数量远远超过其它同类的机器学习框架 (PyTorch, MXNET, Caffe 等)。

从本质上说,TensorFlow 是一个采用数据流图、用于数值计算的开源框架。顾名思义,Tensor(张量)、Flow(流),张量类似一个 n 维数组,而 Flow 正对应着基于“数据流”的计算。TensorFlow 的运行过程,其实就是张量从图的一端流动到另一端的过程。所谓的“数据流图”,跟普通的图结构定义类似,含有结点 (nodes) 和有向边 (edges), 用点与边组成的有向图关系来描述数学计算。

tensorflow flowing

TensorFlow 主要运用在哪些领域?Google 几乎在所有的应用程序中都使用 TensorFlow 来实现机器学习,如 Google 照片和语音搜索;许多知名企业也在将 TensorFlow 应用于不同的场景中,例如联想将机器学习技术运用于检测主板芯片的可用性、网易有道词典使用 TensorFlow 框架优化其拍照翻译功能,闲鱼的图像元素识别,等等。在日常生活的角度中,深度学习和 TF 的应用也十分广泛,例如大家常用的手机摄影中的人像模式,会将人物以外的背景虚化,这样的功能正是基于深度学习训练出来的视觉模型:利用模型分离出前景像素和后景像素,分别处理后合成出新的虚化背景的相片。拍照翻译也是基于 OCR 神经网络和翻译神经网络实现的……可以说,从 Google 自家的产品,到科研领域,到产品生产线,甚至是日常生活,TensorFlow 的应用几乎无处不在。

tensorflow application

这一部分还介绍了一些面向初学者的入门学习资源,包括:

0x22 From TensorFlow 1.x to 2.0

随着 TensorFlow 2.0 预览版的发布,机器学习的开发者和爱好者再一次将目光聚焦在了这一框架上。从 TensorFlow 1.x 到 2.0 一个大版本的迭代跨越,自然少不了许多新的特性和改进。这一部分主要聚焦于 TF 2.0 之于 1.x 的代码风格的改变,以及 2.0 的一些新特性。

TF 1.x 让人诟病的一个地方在于 API 十分复杂繁琐,同一种功能能有 n 多种实现的方式。比如说,你可以用 tf.layers, tf.keras, tf.contrib… 等方式来定义网络的架构;构建一个损失函数模型,有 tf.losses, tf.nn, tf.keras.losses 等多个接口。这样的设计,会令开发者在代码的管理和复用上产生一些困扰。1.x 中你需要用 tf.session() 来启动计算会话,用 tf.saver 来保存模型…

而 TF 2.0 的到来,改变了这一现状。TF 2.0 最大的改变就是其高度整合了 Keras 及 High-level 的 API. 现在使用 Keras API, 你可以创建一个 Sequential 或者 Non-Sequential 的模型。相比起 1.x 来说,代码更加简洁、更易维护:

keras sequential

在这种全新的写法中,不需要创建 tf.session 而只需要调用 module.fit 就可以训练模型;并使用 module.predict 来预测;保存一个训练好的模型也不再需要使用 tf.saver,而使用 model.save_model,这会保存一个 .h5 文件,分别包含一个记录网络架构和一个记录权重的文件……总之,TF 2.0 对 Keras 的整合和 API 的集成,极大地减少了开发成本:

除了高度整合 Keras 之外,2.0 还简化了很多的 legacy API,包括 tf.layer, tf.contrib 等等,在 2.0 中已经消失了。

TF 2.0 还新增了 @tf.function 装饰符,允许将 Python 代码放到 TensorFlow 的图中计算,从而优化执行性能;2.0 引入了 AutoGraph,可以自动完成静态计算图与动态计算图的转换,保持编程的简易性,同时还提升了计算图执行的性能。值得一提的是,在 TensorFlow 2.0 中,Eager Mode 是默认开启的,在 Eager Mode 下,所有的计算不再需要都在 session 中执行,同时极大地方便了调试的过程。

0x3 KeyNote Viewing

keynote

会议接下来播放了两段幻灯片。首先是 Google 官方的 TensorFlow Dev Summit 2019 Keynotebilibili 链接), 从官方的角度对上文提到的几个 1.x -> 2.0 的变化进行了总结。接下来是 TensorFlow 2.0 Changesbilibili 链接),通过纵向对比 1.x 版本和 2.0 版本的不同,以及同另一个热门的深度学习框架 PyTorch 的横向对比,简要地说明了 TensorFlow 2.0 版本的新特性。虽然 PyTorch 在 API 简洁性、架构等方面优于 TensorFlow 1.x, 但新版本将会改变这一现状,重新让 TensorFlow 回到深度学习框架的第一位。

0x4 CodeLab(s)

在 10 分钟的中场休息过后,就来到了 CodeLab 环节。

本次的 CodeLab 活动有两部分,第一部分是 MNIST Digit Classification, 训练一个可以识别手写数字的图像模型。第二部分是 *Don’t Call me Turkey!*,训练一个可以探测视频中火鸡叫声的声音模型。

codelab

这两个 CodeLab 活动的 Jupyter Notebook 文件可以在 Google Colab 上运行,数据集在 Google Drive 中可以下载到,地址如下:

screenshot

0x5 Summary

TF Dev Summit Ext 作为厦门 GDG 和 TFUG 在 2019 年办的第一次会议活动,可以说算是比较圆满地落幕了,本次会议活动,让无论是机器学习方面的专业人员、或是对 TF 有兴趣的新人与会者,都进一步地了解了 TensorFlow;展望了 TensorFlow 2.0 的全新特性。相信在未来,TensorFlow 将会在更多领域、被更多的 TFer 广泛应用,这个世界也会因为新技术的突破和广泛应用而变得更美好。