tensorflow lite 源码阅读(1)

        通过观看视频,记下此次笔记,笔记内容来自lite深度解析视频。视频来源:https://www.bilibili.com/video/av24219725/

        tensorflow lite 定位于设备端智能应用。我们在台式机上使用tensorflow开发出模型,训练出权重,然后使用转换工具,将模型转换为tensorflow lite的格式。在设备端,tensorflow的解析器会加载这个模型并且进行计算。lite内置NEON指令集,并且支持硬件加速接口。

1、模型文件格式

        模型文件的主结构为model结构体,如下图所示:

         

结构体中的operator_codes:[OperatorCode];定义了该模型所用的算子。

结构体中的subgraph定义了各个子图,其中第一个子图是主图。

buffers是数据存储区域。主要用来存放模型权重。

1.1 subgraphs里面的具体内容

subgraphs定义了图的具体结构。

其中的tensor,定义了子图中的各个tensor。

其中的inputs和outputs,通过索引值的形式,定义了哪些tensor负责输入输出。

operators定义了子图的各个算子。

1.2 tensor具体结构

包含了维度信息、数据类型以及数据位置。

其中的buffer,通过索引值的形式,指出了此tensor使用了哪个buffer。

1.3 operator具体内容

其中的opcode_index通过索引值的形式,指明了改operator使用的具体算子。

inputs和outputs,指明了该operator的输入输出。

2 、解析器细节

数据流图可以用边和结点来表达。边就是tensor在结点对应的op进行操作输出进入另一个tensor。

首先模型文件通过mmap加载进内存,内存里有了tensor、operator以及buffer等内容。

其中,为了表示那些数值可变的tensor,增加了可写的buffer区域。

解析器,还包含了具体执行计算的代码,称之为kernal。

模型中的各个tensor,被加载为tflitetensor格式,集中存放于TfLiteContext中。

每个tensor的指针指向内存映射的只读数据区域,或新分配的可写数据区域。

模型中的operator被加载为TfLiteNode。包含了输入输出的tensor索引值。

Node对应的操作符存储于TfLiteRegistration,包含了指向kernal的指针。

OpResolver负责维护函数指针映射关系。

更多细节,在这几个代码文件。

 

 

转载于:https://my.oschina.net/u/4031275/blog/2879060

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值