
更深入:了解
TensorFlow Lite
|
155
let results = [Float32](unsafeData: outputTensor.data) ?? []
如你所见,虽然这是一个更复杂的示例,但同样的设计模式仍然适用。你必须了解模型
的架构,以及原始输入和输出格式。然后,你必须按照模型预期的方式输入数据
—
这
通常意味着将原始字节写入缓冲区,或者至少使用数组进行模拟。然后,你必须读取来
自模型的原始字节流并创建一个数据结构来保存它们。从输出的角度来看,这几乎总是
像我们在本章中看到的那样
—
一个浮点数组。使用你已实现的辅助代码,你就大功告
成了!
我们将在第 11 章中更详细地研究这个例子。
8.5
探索模型优化
TensorFlow Lite 包含了使用代表性数据以及量化等过程来优化模型的工具。我们将在本
节中探讨这些。
8.5.1
量化
量化的想法来自理解模型中的神经元默认使用 float32 作为表示,但它们的值通常落在比
float32 范围小得多的范围内,以图 8-19 为例。
图
8-19
:量化值
在这种情况下,图表底部是特定神经元可能具有的可能值的直方图。它们被归一化,
所以分布在 0 附近,但最小值远大于 float32 的最小值,最大值远小于 float32 的最大
值。如果不是拥有所有这些“空白空间”,而是可以将直方图转换为更小的范围,比
如 –127 ~ 127,并相应地映射值,那会怎样?请注意,这样做,你将显著减少可以表示
的可能值的数量,因此你将面临精度损失的风险。对这种方法的研究表明,虽然可能会 ...