本文转自公众号 新智元,原文地址

作为全球最受欢迎的机器学习开源框架,在TensorFlow 发展的3年里,见证了机器学习和人工智能领域的快速发展和变化;与人类的孩子一样,不断学习,遭到批评,遇到对手,走向更大、更广阔的环境。

而TensorFlow 2.0作为一个重要的里程碑,将更加关注其“易用性”,更注重使用的低门槛,旨在让每个人都能应用机器学习技术。

那么在架构方面,又会有何不同呢?话不多说,来看下新架构图:

在过去的几年中,开发团队为TensorFlow添加了许多组件,而在2.0版本中,这些组件将被打包成一个综合平台,可支持机器学习的工作流程(从训练到部署)。正如上图所示。

尽管新架构中的训练部分主要关注Python API,但是TensorFlow.js还支持训练模型。其他语言绑定(language binding)也有不同程度的支持,包括Swift、R和Julia等。

最近,官方宣布Keras作为一个用户友好的机器学习API标准,将成为用于构建和训练模型的高级API。 Keras API让用户可以轻松开始使用TensorFlow。尤其重要的是,Keras提供了几个模型构建API(顺序,功能和子类),因此您可以为项目选择正确的抽象级别。 

Keras API使得上手TensorFlow非常容易。重要的是,Keras提供了几个模型构建API(Sequential、Functional以及Subclassing),因此用户可以选择正确的抽象化(abstraction)级别,TensorFlow的实现包含增强功能,包括eager execution、立即迭代(immediate iteration)和直观调试(intuitive debugging),以及tf.data,用于构建可扩展的输入pipeline。

TensorFlow的实现包含增强功能,包括急切执行,立即迭代和直观调试,以及tf.data,用于构建可扩展的输入管道。

以下是一个工作流程示例:

1、使用tf.data加载数据。使用输入管道读取训练数据,输入管道使用tf.data创建。利用tf.feature_column描述特征,如分段和特征交叉。此外还支持内存数据的便捷输入(如NumPy)。

2、使用tf.keras构建、训练并验证模型,或者使用Premade Estimators。Keras与TensorFlow的其余部分紧密集成,因此用户可以随时访问TensorFlow的函数。如线性或逻辑回归、梯度上升树、随机森林等也可以直接使用(使用tf.estimatorAPI实现)。如果不想从头开始训练模型,用户也可以很快利用迁移学习来训练使用TensorFlow Hub模块的Keras或Estimator模型。

3、快速执行运行和调试过程,然后使用tf.function充分利用图形的优势。在默认情况下,TensorFlow 2.0按快速执行方式运行,以便于顺利调试。此外,tf.function注释可以方便地将Python程序转换为TensorFlow图形。此过程保留了1.x TensorFlow基于图形的执行的所有优点:性能优化,远程执行以及方便序列化、导出和部署的能力,同时实现了在Python中表达程序的灵活性和易用性。

4、使用分布式策略进行分布式训练。对于大型机器学习训练任务,分布式策略API可以轻松地在不同硬件配置上分配和训练模型,无需更改模型的定义。由于TensorFlow支持各种硬件加速器,如CPU,GPUTPU,因此用户可以将训练负载分配到单节点/多加速器以及多节点/多加速器配置上(包括TPU Pod)。这个API支持多种群集化配置,也提供了在本地或云环境中部署Kubernetes群集训练的模板。

5、导出到Saved Model。 TensorFlow将对Saved Model进行标准化,作为TensorFlow服务的一部分,他将成为TensorFlow Lite、TensorFlow.js、TensorFlow Hub等格式的可互换格式。

构建模型,如此简单!

TensorFlow始终为生产提供了直接部署方式。无论是部署在服务器、边缘设备还是Web上,TensorFlow都可以让用户对模型实现轻松训练和部署。无论用户使用何种语言或平台。在TensorFlow 2.0中,我们通过标准化互换格式和API对齐来提高跨平台和组件的兼容性。

训练并保存模型后,可以直接在应用程序中执行,也可以使用其中一个部署库为其提供服务:

TensorFlow服务:TensorFlow库,允许通过HTTP / REST或gRPC /协议缓冲区提供模型。

TensorFlow Lite:TensorFlow针对移动和嵌入式设备的轻量级解决方案提供了在Android,iOS和嵌入式系统(如Raspberry Pi和Edge TPU)上部署模型的功能。

TensorFlow.js:允许在JavaScript环境下部署模型,如在Web浏览器或服务器端通过Node.js实现部署。TensorFlow.js还支持使用类似Keras的API在JavaScript中定义模型并直接在Web浏览器中进行训练。

TensorFlow还支持其他语言,包括C,Java,Go,C#,Rust,Julia,R等。

功能强大的面向研究的实验环境

TensorFlow 2.0集成了许多功能,可以在不损失速度和性能的情况下定义和训练最先进的模型:

Keras Functional API和Model Subclassing API:可以创建复杂的拓扑,包括使用残差层,自定义多输入/输出模型以及强制写入的前向传递。

自定义训练逻辑:使用tf.GradientTape和tf.custom_gradient对梯度计算进行细粒度控制。

为了获得更大的灵活性和可控性,低级的TensorFlowAPI是始终可用的,并可与更高级的抽象概念工具结合使用,以实现完全可定制的逻辑。

TensorFlow 2.0带来了一些新增功能,允许研究人员和高级用户进行实验,使用丰富的扩展,如Ragged Tensors,TensorFlow Probability,Tensor2Tensor等。

除了这些功能外,TensorFlow还提供了易于执行的简单原型设计和调试,分布式策略API和AutoGraph,可以进行大规模训练,并支持TPU,这些都使TensorFlow 2.0成为一个易于使用、可定制且高度可扩展的平台,可用于实现最先进的技术,进行机器学习研究,并将研究转化为生产流程。

TensorFlow 1.x和2.0之间的差异

自从首次开源TensorFlow以来,我们已经发布了多个版本的API迭代。随着机器学习的快速发展,现在TensorFlow已经发展壮大,支持多样化的用户组合,可以满足各种需求。使用TensorFlow 2.0,用户有机会根据语义版本控制来实现平台的清理和模块化。

以下是一些较大的变化:

移除了队列运行器以支持tf.data。

移除了图表集合。

变量处理方式的变化。

可对API符号进行移动和重命名

更高的兼容性和连续性

为了让用户向TensorFlow 2.0的迁移更加容易,我们将发布一个转换工具,它可以对TensorFlow 1.x Python代码进行更新,以使用TensorFlow2.0兼容的API,或者对无法自动转换的代码予以标记。

当然,并非所有的更改都可以完全自动完成。比如,某些已被弃用的API没有直接的可替代对象。所以我们引入了tensorflow.compat.v1兼容性模块,该模块保留了对完整TensorFlow 1.x API(不包括tf.contrib)的支持。该模块将在整个TensorFlow 2.x的生命周期内保持维护,并允许使用TensorFlow 1.x编写的代码维护功能。

此外,Saved Model或保存的GraphDefs将向后兼容。使用1.x版本保存的SavedModels将继续能够在2.x中加载和执行。但是,2.0中的原始检查点中的变量名称可能会发生更改,因此,使用已转换为2.0版本代码中的2.0之前版本的检查点可能无法正常工作。

我们相信,TensorFlow 2.0将为开发者社区带来巨大利益,为了让这次版本转换变得尽量简单方便,我们投入了大量精力。

但是,我们也认识到,版本迁移需要时间,我们非常关心社区成员目前对学习和使用TensorFlow的投入。我们将在最后的1.x版本中提供12个月的安全补丁,以便为现有用户提供充足的时间进行过渡,并顺利获得TensorFlow2.0的所有优势。

参考链接:

https://medium.com/tensorflow/whats-coming-in-tensorflow-2-0-d3663832e9b8?linkId=62351082