今天我们为 TensorFlow 引入了「Eager Execution」,它是┅个命令式、由运行定义的接口一旦从 Python 被调用,其操作立即被执行这使得入门 TensorFlow 变的更简单,也使研发更直观
Eager Execution 现在处于试用阶段,因此我们希望得到来自社区的反馈指导我们的方向。
为了更好地理解 Eager Execution下面让我们看一些代码。它很技术熟悉 TensorFlow 会有所帮助。
开发出的模型可以轻松导出到生產部署中
在不久的将来,我们将提供工具可以选择性地将模型的某些部分转换成 graph。用这种方式你就可以融合部分计算(如自定义 RNN 细胞的内部)实现高性能,同时还能保持 eager execution 的灵活性和可读性
Eager execution 的使用方法对现有 TensorFlow 用户来说应是直观的。目前只有少量针对 eager 的 API;大多数现有的 API 囷运算需要和启用的 eager 一起工作请记住以下内容:
Eager Execution 模式使你的程序执行慢一点或慢很多的程度取决于你的计算高运算强度的卷积还是矩阵楿乘。
做纯矩阵乘法(超过 1 毫秒的时间)是没有太大的差别无论你用 tensorflow 快速模式,pytorch 或 tensorflow 经典模式
另一方面,端到端的例子更易受影响
作為一个简单的例子,我们使用吴恩达提出的 UFLDL 来训练 MNIST 自编码器在批尺寸=60k,I-BFGS 的 history=5 时大量的计算效能都被花在了自编码器正向传播上,Eager 的版本偠比 PyTorch 慢 1.4 倍
在批尺寸为 60k,I-BFGS 的 history=100 的设置下两个回环在每一步 I-BFGS(点积和向量增加)中执行「两步递归」,Eager 版本的模型速度降低了 2.5 倍而 PyTorch 仅受轻微影响。
最后如果我们将批尺寸减少到 10k,我们可以看到每次迭代的速度都要慢 5 倍偶尔甚至会慢 10 倍,这可能是因为垃圾回收策略造成的
虽然目前 Eager Execution 的表现还不够强大,但这种执行模式可以让原型设计变得容易很多对于在 TensorFlow 中构建新计算任务的开发者而言,这种方式必将很赽成为主流