参与:思源、戴一鸣
来源:机器之心
TensorFlow 2.0 Beta 已来,RC 还会远吗?
TensorFlow 发布以来,已经成为全世界最广泛使用的深度学习库。但 Tensorflow 1.x 时代最广受诟病的问题是:学习门槛较高、API 重复且复杂、模型部署和使用不够方便。之后,谷歌下定决心改变这一问题,在今年早些时候,发布了 Tensorflow 2.0 的 Alpha 版本。Alpha 版本一经问世,便受到深度学习研究者、开发者和在校学生的好评,其简洁的 API 和快速易上手的特性吸引了更多用户的加入。今天,Tensorflow 官方发布了 2.0 时代的 Beta 版本,标志着 Tensorflow 这一经典的代码库进一步成熟。
Tensorflow 今天发布 Tensorflow 2.0 Beta 版本。Tensorflow 官方表示,在 Tensorflow2.0 Alpha 版本发布后,已有超过 130000 名学生加入了 deeplearing.ai 和 Udacity 的相关课程。Github 上则已经收到 128000 颗星和超过 7500 次 fork。
在本次 beta 版本更新后,TensorFlow 团队已经完成了对 2.0 API 的对象重命名和移除工作。现有的 API 已经是最终版本,并且会作为 Tensorflow1.14 版本中的 v2 可兼容模块。同时 Tensorflow2.0 也增加了对 Keras 特性的支持,如简化定制化训练循环 API、增加对大部分硬件的分布式策略的支持等。
Tensorflow 产品生态中的核心组件,如 TensorBoard、TensorHub、TensorFlow Lite、和 TensorFlow.js 可以和 Beta 版本一起使用。但是对 TensorFlow Extended (TFX) 组件和端到端管道的支持工作仍在继续。
在 Alpha 版本发布后,TensorFlow 团队已经解决了超过 100 个 Github 的 issue,并仍对剩余的 issue 进行解决,他们希望开发者能够继续在提供相关的建议和反馈。在 release candidate(RC)版本发布前,TensorFlow 团队会完成云 TPU 和 TPU 对 Keras 模型的支持,继续对 Tensorflow 的表现进行优化,并解决更多用户提出的问题。
TensorFlow 2.0 Beta 到底有什么
如果读者们想体验一番 TF 2.0 Beta,那么直接使用如下的命令安装就行了:
> pip install tensorflow==2.0.0-beta0
但在使用前,我们需要先了解它的一些重要特性。其实,Tensorflow 2.0 版本和核心观点即致力于简单便捷的使用体验。围绕这个核心观点,TF 2.0 Beta 其更新了如下一些特性。
为了更具体地感受新版特性,以下给出了一些参考资料:
新版本亮点
API 变更表示例。
重大更改
2.0 Beta 实战 Demo
那么 TF 2.0 Beta 版用起来什么感觉呢?TensorFlow 官方提供了一个 Demo 以展示如何用 Beta 版快速处理分类问题。因为整个过程已经通过 API 高度封装了起来,即使我们不懂底层细节,也能快速实现分类模型。
首先当然是安装 TF 2.0 Beta,并导入库了。注意 tf.contrib 已经正式删除了,且很多 API 都已经并入 Keras 中,所以整个代码有一种浓厚的 Keras 风格。
!pip install tensorflow==2.0.0-beta0
from __future__ import absolute_import, division, print_function, unicode_literals
# TensorFlow and tf.keras
import tensorflow as tf
from tensorflow import keras
# Helper libraries
import numpy as np
import matplotlib.pyplot as plt
利用 API 导入 Fashion-MNIST 数据集也是很简单了,目前 tf.keras.datasets 可以导入 MNIST、Cifar-10/100 等视觉数据集,也可以导入 imdb 和 reuters 等 NLP 数据集。
fashion_mnist = keras.datasets.fashion_mnist
(train_images, train_labels), (test_images, test_labels) = fashion_mnist.load_data()
class_names = ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat',
'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']
train_images = train_images / 255.0
test_images = test_images / 255.0
因为使用 Keras 高级 API,搭建和编译模型也非常简单,基本就是调用已有的成熟方法就行了。其中搭建模型架构可以像堆积木那样完成,编译只需要给定最优化器、损失函数和度量方法三个关键要素就行了。
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(128, activation='relu'),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
下面,我们可以看看模型训练与评估的风格。没有 tf.Session()、没有 sess.run()、没有各种占位符的 feed_dict,一切都只要简单的一行代码。
model.fit(train_images, train_labels, epochs=10)
test_loss, test_acc = model.evaluate(test_images, test_labels)
print('\nTest accuracy:', test_acc)
训练完模型后,最后就是做推断了:
predictions = model.predict(test_images)
以上是模型最主要的过程,当然 Demo 中间还会有一些展示,例如如何可视化数据或打印训练信息等,感兴趣的读者可查阅原始 Demo。总体而言,如同 TF 2.0 的一贯风格,新版 TensorFlow 力求最简洁、最直观地构建模型。