购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.1 新的架构、新的运行、新的开始

TensorFlow 2.0破天荒地抛弃了原有的架构,从新开始,整合了曾经为TensorFlow添加的多种组件,在2.0版本中,这些组件被打包成一个综合平台,可支持机器学习的工作流程(从训练到部署),即用一个新的架构从根本上代替了已有的内容,如图2.1所示。

图2.1 TensorFlow 2.0架构

可以看到新架构中的训练部分主要关注Python API,即训练的可用性、整洁性以及易用性。通过使用“存档”的方式连接起训练与部署之间的桥梁。

模型的部署方式是多种多样的,可以方便地运行在不同的平台上。语言绑定(Language Binding)也有不同程度的支持,包括Swift、R和Julia等。

TensorFlow 2.0在1.x的基础上进行了重新设计,重点放在提升开发人员的工作效率上,确保2.0版本更加简单易用。TensorFlow 2.0为了提升易用性做了很多改进,例如对API做了精简、删除了冗余的API、使得API更加一致(例如统一了TensorFlow和tf.keras的循环神经网络和优化器等),以及由静态计算图转变为动态计算图等(使得代码的编写和调试变得更加容易)。本节接下来讲解TensorFlow 2.0的一些主要变化。

2.1.1 API精简

很多TensorFlow 1.x的API在2.0中被去掉或者改变了位置,还有一些被新的API替换掉了。官方提供了一个转换工具,可以用来将1.x版本的代码升级到2.0,主要工作其实就是修改这些有变更的API。不过使用该工具不一定能够转换成功,转换成功后的代码也并不一定能够正常运行,很多时候还是需要人工修改。

2.1.2 Eager Execution

Eager Execution(动态图机制)是TensorFlow 从1.8版本开始正式加入的,但只是作为一种可选操作,在TensorFlow 2.0之前,TensorFlow默认的模式都是Graph Execution(静态图机制),TensorFlow 2.0将Eager Execution作为默认模式。在该模式下用户能够更轻松地编写和调试代码,可以使用原生的Python控制语句,大大降低了学习和使用TensorFlow的门槛。

在TensorFlow 2.0中,图(Graph)和会话(Session)都变成底层实现,而不需要用户关心。

2.1.3 取消全局变量

TensorFlow 1.x非常依赖隐式全局命名空间。当调用“tf.Variable”创建变量时,该变量就会被放进默认的图中,即使忘记了指向它的Python变量,也会留在那里。而当程序编写者想恢复这些变量时,则必须知道该变量的名称。如果无法控制这些变量的创建,也就无法做到这一点。

TensorFlow 1.x中有各种机制,旨在帮助用户再次找到程序设计者所创建的变量,而在2.0中则取消了所有这些机制,支持默认的机制:跟踪变量。当TensorFlow不再用到创建的某个变量时,该变量就会被自动回收。

2.1.4 使用函数而不是会话

在TensorFlow 1.x中,最常规的是使用“session.run()”方法执行计算图,“session.run()”方法的调用类似于函数调用:指定输入数据和调用的方法,最后返回输出结果。为了保留静态图的一些优势,例如性能优化以及重用模块化的TensorFlow函数等。

在TensorFlow 2.0中,可以使用“tf.function”来修饰Python函数,以将其标记为即时(Just-In-Time)编译,从而TensorFlow可以将其作为单个图来执行。

2.1.5 弃用collection

在TensorFlow 1.x中可以通过集合(collection)来管理不同类别的资源。例如,使用tf.add_to_collection函数可以将资源加入一个或多个集合,使用tf.get_collection获取一个集合里面的所有资源。这些资源可以是张量、变量或者运行TensorFlow程序所需要的资源。这样的方法在TensorFlow框架的运行时是非常有用的,例如在训练神经网络时会大量使用集合管理技术(通过tf.add_n(tf.get_collection("losses")获得总损失等)。

由于collection控制变量很不友好,因此在TensorFlow 2.0中弃用了collection,使代码更加清晰。例如,新的总损失可以简写为: 8z7paUyb4Z9tTWlElD0nCZC/R8Hseqy/RP4Jtg59BrBPkJykjHRyra6nwk7gWBcY

    Total_loss = loss_1 + loss_2
点击中间区域
呼出菜单
上一章
目录
下一章
×