TensorFlow 简述
目前深度学习的网络和结构越发复杂和庞大,而TensorFlow的出现让我们可以更方便快捷的处理这些复杂的模型。它非常的灵活且支持众多的终端,能够兼容多种语言,包括Java、C++、GO、C# 等等。作为一个整套工具,TensorFlow能够很直观的查看计算的结果,提供了便捷的调试机制。目前 TensorFlow正在借助开源社区的力量进一步壮大。
TensorFlow APIS
Tf.estimator
目前TensorFlow推出了众多高阶 API 来帮助开发者更有效率的工作。以前通过TensorFlow写线性回归,需要定义众多的参数,在使用新的高级API tf.estimator后只需要使用简单的几行代码,就能将模型搭建出来。而且仅改动一行代码,原来的线性回归模型就会被转化成相对复杂的DNN模型。同时 estimator也支持分布式训练,包括模型类分布和数据类分布,当图比较大时可以将操作并行的分别在不同机器上,或者模型不切分但还是跑在不同机器上同时进行快速的更新。
Tf.layers
Estimator虽然是一个很好的切入点,但是无法满足一些用户的自定义需求。这要通过偏底层的tf.layers API解决问题,下图是个简单的例子,每个 tf.layers强制对应一行代码并将它们一层层的连在一起。
Tf.keras
keras之前在社区一直都是非常火的工具,现在keras的作者来到了google并帮助在TensorFlow中搭建了tf.Keras,方便之前习惯使用keras的用户。它的大部分特性和之前并无区别,还能和tf.layers共存。
Eager Execution
TensorFlow是以静态图的方式进行计算,将众多操作整合在一起减少资源,并且它的资源定义能够减少大量错误。虽然这种方式很不错,但是对于刚开始接触的用户来说使用并不是太方便,他们想要的是能够像编写Python一样一步步的看到结果。针对这一需求TensorFlow提供了Eager Execution模式,让用户每一步都能看到结果。
Eager Execution更多的帮助初学者理解TensorFlow的处理机制以及交互性,能够随时发现错误,并且与大部分的高阶API兼容的。
Input Pipeline:tf.data
目前大部分的应用面临的瓶颈并不是计算,现有的GPU、CPU已经能够很好的应付庞大的计算量。最主要的问题还是在IO上,于是Datasets API出现了。它使用起来非常简单,只需要事先构建TFRecordDataset,之后就可以和正常操作一样,使用repeat、shuffle、filter等。
TensorFlow Lite
出于对手机内存容量限制以及耗电量的考虑,TensorFlow推出了TensorFlow Lite,让模型变的更轻巧以便在移动端运行。
上图是TensorFlow Lite的创建过程,要明确的是使用的依旧是TensorFlow训练好的模型,然后通过Converter转换成TensorFlow Lite模式,之后就能将它部署到手机端。手机端使用TensorFlow Lite Interpreter解释器进行相应的优化,比如合并一些不必要的操作。
TensorFlow Lite的dependencies相比之前更小。它使用TOCO工具进行图的转换,将TensorFlow的图转换为TF Lite。借助到quantization可以将32位或者64位的模型转化成8位以获得更小的体量。
TensorFlow Applications in Google
早期的翻译软件是基于统计的,在没有足够语言对的情况下正确率无法保障,短语翻译效果也不太好显得生硬。借助神经网络上述问题会得到有效改善。
不光是在翻译领域,google内部的各种应用都用到了TensorFlow ,比如 YouTube和 PlayStore推荐、安卓的个性化。
AutoML
人为的搭建模型挑选网络的结构是非常麻烦的事,要耗费大量的人力物力以及机器计算力。于是我们就想到用机器学习去完成机器学习,这个想法已经得到了验证,它就是 AutoML。
Data Center Optimization
Google内部有很多的机器在运行,如何合理的控制机器开关,以及包括制冷之类的其他事项是相当有难度的问题。在引入机器学习后整个成本大幅的降低。
TensorFlow Roadmap
TensorFlow从各个层次考虑,做出优化,所想达到的唯一目标就是让用户能够更方便快捷的搭建数据模型。为此我们还会在各方面做出改进。
今后对非Python语言的会有更好的支持。同时为了让TensorFlow更加易用,我们将会提供更多的高阶API,另一方面让用户能够使用维护良好的模型直接部署应用。接下来TensorFlow还会提供对OpenCL的支持。