作者:LogM
本文原载于 https://segmentfault.com/u/logm/articles ,不允许转载~
1. 前言
Tensorflow Lite 是 Tensorflow 移动端的版本。
有关于 Tensorflow 怎么添加自定义 op,网上有很多博客都讲到了,我就不介绍了。而 Tensorflow Lite 因为相对小众一些,所以网上关于添加自定义 op 的教程很少。
刚好最近因为项目需要,我在 Tensorflow Lite 中添加了几个自定义 op。我把我的思考过程以及修改步骤记录下来,方便有相同需求的同学参考。
我花了大篇幅记录思考过程和源码阅读过程,是希望给其他小伙伴一些启发,以后遇到类似的深度学习框架魔改的问题,可以不依赖网上教程。
不关心思考过程和源码阅读的小伙伴,可以直接跳到文章的最后,我把修改的步骤做了总结。
2. 源码来源
我使用源码是 Tensorflow v1.13.2
Tensorflow Lite 位于 tensorflow/lite
目录下。
3. 官方教程
官网也有关于 Tensorflow Lite 怎么添加自定义 op 的教程,详见官方地址。
官方教程把"怎么写自定义 op 的代码"讲得很清楚,遗憾的是没有详细说明怎么把这些新写的代码放入到工程中编译。
4. 进入正题
第1步,找到目标文件夹位置
首先我们要找到源码中放置自定义 op 的文件夹位置。有多种寻找的方式:
- tensorflow 源码的目录结构非常清楚,有过类似框架阅读经验的同学应该马上能猜出位置;
- 官方教程告诉我们,自定义 op 的代码要实现
Prepare
和Eval
这两个函数,那么我们使用 grep 命令查找有哪些代码文件中带有这两个函数。
最终,我们找到的位置是 tensorflow/lite/kernels
。
找到目标文件夹位置以后,把新增代码放入该文件夹就可以了吗?显然,没有这么简单。有几个方面需要考虑:
- 代码逻辑层面&#x