分享TensorFlow Lite应用案例.doc

分享TensorFlow Lite应用案例.doc

ID:27851224

大小:117.00 KB

页数:11页

时间:2018-12-06

分享TensorFlow Lite应用案例.doc_第1页
分享TensorFlow Lite应用案例.doc_第2页
分享TensorFlow Lite应用案例.doc_第3页
分享TensorFlow Lite应用案例.doc_第4页
分享TensorFlow Lite应用案例.doc_第5页
资源描述:

《分享TensorFlow Lite应用案例.doc》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、分享TensorFlowLite应用案例  从2016年开始,Kika技术团队一直致力于AI技术在移动端落地,尤其是在keyboard输入法引擎做了很多算法与工程上的探索工作。2017年5月,Kika技术团队基于TensorFlowMobile研发了KikaAIEngine,将其应用于Kika的全系输入法产品中。2017年11月,Google发布TensorFlowLite(TFLite)后,Kika技术团队迅速进行了跟进,并于2018年1月成功地开发了基于TFLite全新一代的KikaAIEngine,同时进行了线上产品的更新。    1、移动端深度学习的技术选型  输入法引擎的技术要求

2、包括:快、准、全。需要在客户端环境下,根据用户输入的上文内容以及当前键入的键码,实时进行『预测』。预测的内容包括:单词,词组,emoji等等一切可能通过输入法发送的内容。从算法的原理上来讲,这是一个典型的RNN应用场景。    输入法引擎预测效果图  作为输入法这样的一个重度使用的工具类APP,在移动端做轻量化部署非常重要,具体包括以下四个方面:模型压缩、快速的响应时间、较低的内存占用以及较小的so库(sharedobject,共享库)大小等。  在Kika将TFMobile部署到移动端的过程中,除了CPU占用偏高,还有由于TFMobile内存管理与内存保护设计的问题,导致:  内存保护机

3、制不完善,在实际内存不是很充足的情况(尤其对于部分低端机型以及在内存消耗较大的应用,如大型手游中弹起输入法),容易引发内存非法操作。  内存大小控制机制存在一定的问题,例如模型本身在计算时只有20MB,但加载到内存之后的运行时峰值可能会飙升40到70MB。  TFLite对于CNN类的应用支持较好,目前对于RNN的支持尚存在op支持不足的缺点。但是考虑到内存消耗和性能方面的提升,Kika仍然建议投入一部分的研发力量,在移动端考虑采用TFLite做为基于RNN深度学习模型的inference部署方案。  2.TensorFlowLite对RNN/LSTMbased模型的原生支持情况  相对于

4、CNN而言,TFLite对于RNN/LSTM的支持程度稍显不足。目前的情况是,RNN相关的基本元素的op目前都已经支持,最近也刚刚支持了LSTM,但遗憾的是beamSearch支持暂时还没有完成。  不支持的op主要集中有两大类情况:  包括控制流(controlflow)的op  相对于TFmobile,TFLite的部分op只支持最简单的case  目前的一个好的消息就是TensorFlow项目组一直在持续的推进对RNN系列的支持。  3.如何应对op缺失的情况  对于移动端用TFLite部署最友好的开发姿势是在设计模型之处就了解当前的TFLite版本哪些op是缺失或者功能不完整的,然

5、后在模型设计过程中:  尽量避免使用这些TFLite不支持的op;  对于不得不使用的情况,也需要结合具体的业务逻辑,优化设计,使得在移动端部署的二次开发的工作量尽可能的小。  以下是应对op缺失的一些常见做法。  组合  最为常见的处理方式,例如在早期的TFLite版本中,tf.tile和tf.range都不支持,这个时候建议采用broadcast_add来组合代替实现。  补充  TFmobile的op相当于完整版的TensorFlow,于此相比,TFLite缺失最严重的是包含控制流的部分。例如seq2seq模型中常用的beamsearch。  补充的方式有两种:  直接开发一个全新的

6、op;  在TFLite之外的上层api中实现(此时可能需要拆解模型)。  两种方式各有优劣,具体的需要根据功能的复杂度和业务逻辑决定。  模型拆分  1)原因  需要模型拆分的原因一般有3个:  训练时用流程控制的方式(如batch)一次性跑完多个样本,但在Inference的过程中,需要用到单步运行;  某些op不支持,需要在TFLite的上层『手动』实现,可能需要将原有的模型拆分为若干的子模型(subgraph);  有部分的冗余,但是重新设计graph再训练的时间代价较大。  2)方法与坑  以下通过一个实例来描述如何进行模型的拆分。  将variable共享给不同的op,甚至于不

7、同的subgraph,通用做法是采用`placeholder`的方式将输入输出分开,然后在导出freezegraph的时候用`tf.graph_util.convert_variables_to_constants`只抓取需要的部分。  代码实例:  python  vars=tf.get_variable(。..)  inputs=tf.placeholder(‘inputids’,shape=[BATCH,None]

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。