前言
TensorFlow 在去年就不断的promote v2.0 版,到底它改善的方向有那些呢? 正式版何时release? 整理一些马路新闻与大家分享。
市占率
近来 TensorFlow 面临 Facebook PyTorch 的强力挑战,PyTorch 的市占率不断攀升,依『Deep Learning Framework Power Scores 2018』分析,从工作需求来看,PyTorch 市占率还是有一段差距(图一),但是,从专业期刊(ArXiv)论文引用率(图二),已经产生一些威胁了。
图一. 工作需求比例,图片来源:Deep Learning Framework Power Scores 2018
图二. ArXiv 论文引用率,图片来源:Deep Learning Framework Power Scores 2018
现况比较
PyTorch 攻击 TensorFlow 论点是『TensorFlow 把简单的问题複杂化,而 Keras 把複杂的问题太过简单化』,最明显的例子就是要建立一个『a+b』的运算图,TensorFlow 程式如下:
import tensorflow as tfimport numpy as np# Defining some constant valuesa = tf.constant(5.0, name="a")b = tf.constant(10.0, name="b")# Some basic operationsx = tf.add(a, b, name="add")with tf.Session() as sess: print("x: ", sess.run(x))# Closing the writer.writer.close()sess.close()
计算个a+b要写十几行,虽然,採取静态运算图(static computational graph)效能较好,但是,程式複杂,而且除错困难,只有在sess.run() 后才能追蹤(trace)侦错,反之,PyTorch 可以直接在模型中使用 Python 语法建立动态模型,相较之下简单多了。
重大更新
因此,TensorFlow 2.0 作了重大的变革,连标题『TensorFlow已死,TensorFlow 2.0长存』(TensorFlow is dead, long live TensorFlow!)的文章也出来了,除了强调『建模简单化』,也延长战线,加强整个开发/布署过程的全面支援,包括分散式的处理。
在『建模简单化』主要有两方面:
Eager execution:不需要建立 session,可直接使用 Python 语法建立模型,TensorFlow 会直接将IF等语法转为运算图,也可以在过程中除错。依据 Keras 规格,改写 Keras 套件功能,直接纳入 TensorFlow 家族,它与独立Keras套件的比较,请参看『Standardizing on Keras: Guidance on High-level APIs in TensorFlow 2.0』,主要强调Keras可与其他API整合(混用)及纳入Eager execution功能。使用 Eager execution 实践 a+b 的程式码如下,跟写一般Python没甚么差别:
import tensorflow as tfimport numpy as np# 启动 eager execution 模式tf.enable_eager_execution()a = tf.constant([[1, 2], [3, 4]])b = tf.add(a, 1)print(a+b)
整个开发/布署过程的全面支援的加强,包括:
TensorFlow Serving 模组:可轻易的布署在 HTTP 或 gRPC 协定上,提供线上服务。TensorFlow Lite 模组:加强边缘运算的支援,可布署在手机、Raspberry Pi、Edge TPU 等。TensorFlow.js 模组:提供 Node.js/JavaScript 开发,包括使用类似Keras的API。上市时程
依据 TensorFlow 官网 v2.0 应该在 2019 Q2 发布,显然时程落后了,到目前为止还是 Beta 版,可参考『这里』,其实,很多功能在目前的版本v1.3已经提供了, 只是在 v2.0 可能会更清楚吧。
结语
TensorFlow 的家族庞大,提供高低阶的API,而且,模组替换很快,有些模组未来就不支援了,在学习时要注意,不要在行将就木的功能上钻研,以免白忙一场。
最后作一点工商广告,有兴趣学TensorFlow的同好,可参考『这里』。