机器学习:聊一聊tf2.0的设计理念(附个人评价)
作者头像
  • robotinside
  • 2019-10-20 11:08:18 10

最近,TensorFlow 2.0正式发布,各大公众号和网站纷纷推出了一系列文章,仿佛机器学习领域即将迎来翻天覆地的变化。然而,从我个人的角度来看,当前阶段TensorFlow 2.0对工业界开发者的影响并不是那么显著。

首先,我们回顾一下TensorFlow 2.0的发展历程:

  • 2019年1月,发布了预览版(nightly版本);
  • 2019年3月,发布了alpha版本;
  • 2019年6月,发布了beta版本;
  • 2019年10月,正式发布了TensorFlow 2.0。

整个发布过程历时近一年,期间经历了大量的版本更新和技术改进。主要原因包括版本功能变化较大、生态系统复杂(例如,tf-lite至今仍有许多算子不被支持)、以及代码迁移工作量巨大等。但更为重要的原因是,TensorFlow的设计理念发生了根本性的变化。

接下来,我将分享一下我对TensorFlow 1.x和2.x设计理念的理解。

TensorFlow 1.x和2.x的设计理念

学习TensorFlow 1.x版本时,接触最多的是张量图的概念。实际上,TensorFlow之所以被称为TensorFlow,是因为张量在图中的流动和转换。各种神经网络模型最终都可以抽象成一张具有输入和输出的张量图,然后通过定义损失函数和优化器进行训练。这种设计理念与神经网络建模高度契合。

在学习过程中,张量图的设计理念显得尤为重要。很多人认为TensorFlow 1.x难学且使用不便,如placeholder和session等概念。但我认为,这些对程序员而言并不是问题。至于使用不便的说法,我觉得并非完全如此。对于简单的模型,Keras确实能更快地进行建模和训练;但对于复杂的模型,如多个输入和多个嵌入特征的情况,TensorFlow则更加方便。总体而言,TensorFlow牺牲了一定的易用性,但保证了其通用性。

同时,TensorFlow设计之初便旨在成为一种功能强大的工具,拥有丰富的功能,如循环、条件语句甚至字符串处理等。

TensorFlow 2.0

TensorFlow 2.0特别推崇Keras接口和Estimator的使用。对于经典和简单的模型,使用Keras接口可以快速实现模型的构建和训练,只需几行代码即可完成。这是因为框架本身已经做了大量工作,减轻了开发者的负担。但对于稍微复杂一些的模型,如果需要在官网示例基础上进行修改,则可能会遇到各种问题。

Keras接口和Estimator形式将是TensorFlow未来发展的重点,但目前看来还不够稳定。

我个人认为,TensorFlow 2.0的设计理念可以概括为“Layer Flow”,即层与层之间的流动。面向开发者时,模型被抽象为一层一层的神经网络,这在一定程度上隐去了张量的概念,使得开发者难以理解神经网络的本质。然而,从本质上讲,框架外部仍然是张量图,其目的是使框架更易用,减少开发者的负担。但这样做可能在某种程度上“误导”了开发者。

我们遇到的问题

在Alpha版发布后,我们尝试将TensorFlow 1.x下的实体识别模型训练代码迁移到TensorFlow 2.0,并进行了初步调研。在此过程中,遇到了两个主要问题:

  1. CRF算子不支持:目前TensorFlow 2.0还不支持CRF算子。
  2. tf.function 存在bug:该问题在GitHub上有相关Issue。在大数据量的情况下,模型的初始化会非常耗时,甚至可能需要数小时。

因此,我们当时放弃了迁移工作。目前,第一个问题尚未解决。我们仍然将继续使用TensorFlow 1.x版本,但从长远来看,Google可能会逐渐减少对1.x版本的支持,届时我们将转向PyTorch的学习和使用。

    本文来源:图灵汇
责任编辑: : robotinside
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
设计理念机器评价学习个人2.0tf
    下一篇