本教程由深度学习中文社区(Studydl.com)持续发布与更新.

今天我们为大家带来 TensorFlow Lite 的概述和模型转化简介,以及使用过程中会接触到的一些概念、术语和资源类型等.在后面的时间里我们还会推出一系列的PyTorch的入门教程, 希望大家多多转发与关注。

TensorFlow Lite 介绍

首先我们要明确,TensorFlow Lite 的目标是移动和嵌入式设备,它赋予了这些设备在终端本地运行机器学习模型的能力,从而不再需要向云端服务器发送数据。这样一来,不但节省了网络流量、减少了时间开销,而且还充分帮助用户保护自己的隐私和敏感信息。

TensorFlow进阶教程(二):短小精悍的TF Lite 介绍和模型转化教程-深度学习中文社区

Android 和 iOS 设备上,TensorFlow Lite 都提供了 C++ API 的支持,并且在 Android 平台还额外提供了 Java API 的支持。这样一来,开发者就能非常方便得使用这些 TensorFlow Lite API 进行设计和开发。不过,默认情况下 TensorFlow Lite 使用的是 CPU 来进行解算,如果你需要使用 Android 8.1 推出的硬件加速 API,则需要确保它运行在受支持的设备上。

模型相关的文件

正是由于 TensorFlow Lite 运行在客户端本地,开发者必须要在桌面设备上提前训练好一个模型。并且为了实现模型的导入,还需要认识一些其他类型的文件,比如:Graph Definition, Checkpoints 以及 Frozen Graph。各种类型的数据都需要使用 Protocol Buffers(简称 ProtoBuff)来定义数据结构,有了这些 ProtoBuff 代码,你就可以使用工具来生成对应的 C 和 Python 或者其它语言的代码,方便装载、保存和使用数据。

Graph Def

关于 Graph Def(Graph Definition)文件,有两种格式。拓展名为 .pb 的是二进制 binary 文件;而 .pbtxt 格式的则是更具可读性的文本文件。但是,实际使用中,二进制文件有着相当高的执行效率和内存优势。

Graph Def 是你训练的模型的核心,它定义了 node 的关系结构,方便由其他的进程来读取。比如下面这个 Graph Def 就定义了“矩阵 A 与矩阵 B 相乘得到矩阵 C”的描述。

TensorFlow进阶教程(二):短小精悍的TF Lite 介绍和模型转化教程-深度学习中文社区

Checkpoint

Checkpoint 文件是来自 TensorFlow 图的序列化变量。这个文件当中没有图的结构,所以不会被解释。在训练学习的过程中,Checkpoint 文件记录了不同的 Iteration 中变量的取值。

Frozen Graph

用 Graph Def 和 Checkpoint 生成 Frozen Graph 的过程叫做“冷冻”。为什么称之为冷冻呢?我们知道,生成 Frozen Graph 所需要的量都是从 Checkpoint 当中得到的,那么这个变量转为常量的过程就被形象地称之为“冷冻”了。

TensorFlow Lite 模型

TensorFlow Lite 所用的模型是使用 TOCO 工具从 TensorFlow 模型转化而来的,来源就是经过冷冻生成的 Frozen Graph。假如你已经得到了一个“够用”的模型了,而且你也没有源代码或者数据来重新进行训练,那么就使用当前的模型吧,没有任何问题。但如果你有源代码和数据,直接使用 TOCO 工具进行模型转化将会是最好的选择。示例代码如下:

TensorFlow进阶教程(二):短小精悍的TF Lite 介绍和模型转化教程-深度学习中文社区