正文
而实现上述这一切所有的基础框架就是 TensorFlow.
我们在 2015 年末开源了 TensorFlow ,希望把它做成能够服务所有人的机器学习平台。我们想要将它做成一个快速灵活的、生产环境就绪的框架。它可以很方便可以做研究,也可以很快部署到生产环境当中。TensorFlow 本质上是一个大规模的运算框架,它的运算被抽象成一张运算矢量图。就像在这边看到一张运算图一样,上面的节点代表运算或者状态。当我们完成了一些运算或者结束了一些状态的时候,我们的数据就从一个节点流到另外一个节点。这个图可以用任何语言来构建,当这张图构建完之后,我们把它传到 TensorFlow 核心当中进行编译,进行优化然后来执行。
TensorFlow 也支持很多硬件平台,从最初的 CPU、GPU ,到即将发布 CLOUD CPU ,还有对安卓、 iOS 的支持,甚至对嵌入式设备的支持。
我们将 TensorFlow 开源到 Github 上面后,过去两年兴起了许多围绕 TensorFlow 活跃的开源社区,现在我们有 67,000 多个 star ,有 17,000 多个 Github 项目名字当中包括 TensorFlow. TensorFlow 不断出现在各种大学课程和在线课程里面,很多大学也正在开发基于 TensorFlow 的课程,除此之外我们也发布了 TensorFlow 中文网站,大家把它可以当做入门 TensorFlow 的初级教程,叫做 https://tensorflow.google.cn.
New Feature of TensorFlow
现在我们看一下 TensorFlow 的最新特性。首先是 Eager Execution ,Eager Execution 是一种新的编程模式,我在之前一张幻灯片中展示了一个基于 TensorFlow 的静态图。
Eager Execution 解决了静态图中一些问题,解决了什么问题呢?首先它可以少写很多代码,就像上图一样。其次,通过 Eager Execution 写代码可以立刻发现它的错误,相对之前来说可以大大提高编写代码查错的效率。第三是可以用 Tensor 来编写控制流,就不需要用 TF 来做循环甚至做判断。最重要一点是如果用其他语言编写这张图的话,再把这图传到 TensorFlow 核心中相当于编写了另外一种代码。看到这个幻灯片就是简单的例子,充分说了 Eager Execution 的简单之处。
今年的 Google I/O 大会宣布了第二代 TPU,我们第二代 TPU 既可以做推理也可以作训练。一个 TPU 可以实现很高的词典运算。我们甚至可以把很多代 TPU 联合起来成为一个就像超级计算机一样的计算核心。在第二代 TPU 的帮助下,我们可以在 20 小时内全部训练出 RESNET-50 的模型,以前如果只做一个 TPU 的训练,可能要花一周的时间来训练这个模型。今天第二代 TPU 即将发布到 Google Cloud,并且推出供大家使用。
下面讲一下 TensorFlow 上层 API,除了神经网络训练速度,大家还关注如何更加方便实现用 TensorFlow 上层 API 来创建神经网络。Keras 是其中一个 API ,它支持很多的后端。相信很多观众都用过 Keras ,从本质上来讲 Keras 更加像一种 API 开发规范。TensorFlow 有一个 TF 就是 Keras ,但是它只是 API 规范实现的一种方式,使用的是一个自定义 TensorFlow 后端,有了这个后端,我们可以让 Keras 与 Estimators 或者 Secving 整合起来,这样会对分布式提供更好的支持。
还有一个在 TensorFlow 里面介绍的概念,叫做 Estimators ,这是一个比较轻量化,并且在谷歌内部生产环境中广泛使用的 API ,其中 Estimators 提供了很多模型供大家使用,叫做 Canned Estimator ,他们的关系是这样的:Estimators 和 tf.keras 上层封装了一个 Canned Estimator ,可以用其来封装成各种模型。
如果你们习惯于 Keras 的接口的话,我们提供了一个上层 API 转换的工具 ,叫做 model_to_estimator ,一旦你有一个编译好的 Keras 模型就可以调用这个 model_to_estimator 来获取一个 Estimator,从而将 Keras 转换成了 Estimator。