如何使用相同的测试数据测试 .tflite 模型以证明它的行为与原始模型相同?

Posted

技术标签:

【中文标题】如何使用相同的测试数据测试 .tflite 模型以证明它的行为与原始模型相同?【英文标题】:How can I test a .tflite model to prove that it behaves as the original model using the same Test Data? 【发布时间】:2018-11-18 17:55:25 【问题描述】:

我已经根据经过训练的模型生成了一个 .tflite 模型,我想测试一下 tfilte 模型是否给出与原始模型相同的结果。

给出相同的测试数据并获得相同的结果。

【问题讨论】:

【参考方案1】:

您可以使用 TensorFlow Lite Python 解释器 来测试您的 tflite 模型。

它允许您在 python shell 中提供输入数据并直接读取输出,就像您只是使用普通的 tensorflow 模型一样。

我已经回答了这个问题here。

您可以阅读此TensorFlow lite official guide 了解详细信息。

您还可以使用Netron 来可视化您的模型。它允许您直接加载您的 .tflite 文件并检查您的模型架构和模型权重。

【讨论】:

这对我有用,谢谢。顺便说一句,tensorflow lite 模型没有给出与 python 模型相同的结果,差异非常大,例如 python 准确度 79% 和 tflite 准确度 50% 你知道如何改进吗?也许是一个参数或更好的导出函数,我目前在冻结图中使用 toco convert ***.com/questions/52057552/… 我对 tflite 不熟悉,抱歉帮不了你。给定相同的输入数组,我建议比较这两个模型的输出数组。实际上我在将模型转换为tflite时也遇到了这个问题,最后我发现我使用了不同的检查点文件,这导致了这个问题。【参考方案2】:

TensorFlow 代码库中有一个tflite_diff_example_test。它生成随机数据并将相同的数据输入 TensorFlow 和 TensorFlow lite,然后比较差异是否在一个小阈值内。

您可以从 Github 签出 TensorFlow 代码,并使用 bazel 运行它:

bazel run //tensorflow/contrib/lite/testing:tflite_diff_example_test

然后你会看到你需要传递哪些参数。

【讨论】:

感谢您的回答。为此,我必须从 Source 编译 TensorFlow 对吗?还有另一种使用方法吗? (我曾尝试用 bazel 编译 Tensorflow,但总是出现错误。) 您能告诉我如何测试您的答案吗?听起来这可能是我需要的,但是如何在不从源代码编译所有 tensorflow 的情况下对其进行测试?它不断给出错误【参考方案3】:

除了@miaout17给出的答案,调试/理解你的tflite模型(这是问题的精神),你可以

使用--dump_graphviz 可视化图表,如此处https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/toco/g3doc/cmdline_examples.md#using---dump_graphviz 所述 使用flatc生成python api,然后通过该api解析模型 https://google.github.io/flatbuffers/flatbuffers_guide_use_python.html 使用flatctflite文件生成json并打印出来 使用 tflite 可视化工具: https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/tools/visualize.py(目前有一个bug)

【讨论】:

感谢您的回答。使用 flatc,我已经从 tflite 模型创建了一个 json 文件。有了这个,我如何测试模型的行为或给出与原始模型相同的结果? 不确定是否可以像这样直接使用 json 进行测试。您可以使用 flatc 从 flatbuffer 生成 python API,然后使用 python API 将相同的数据提供给 TF 和 TFLite 模型并检查答案。 我试图将不同的分类器导出为 tflite 格式,而不仅仅是 DNN。你能帮我吗,如何知道如何选择输入或输出张量。你怎么知道你应该选择:dnn/input_from_feature_columns/input_layer/concat:0 作为输入张量?还是 dnn/logits/BiasAdd:0 作为输出?我已经在线性分类器中打印了所有可能的张量,但我不知道该选择什么让它工作你能看看这个:***.com/questions/51267129/… ***.com/questions/52057552/…

以上是关于如何使用相同的测试数据测试 .tflite 模型以证明它的行为与原始模型相同?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 Python 在 GPU (Jetson Nano) 上运行 tflite 模型

如何在图像分类上快速运行 tflite 模型

Swift:处理 UIImage 数据以用于 Firebase 自定义 TFLite 模型

Tf Lite 模型图像分类打印标签

如何在 tflite 模型中组合数据预处理代码(在 tflite 中集成数据预处理代码)

如何将 TensorFlow 模型转换为 TFLite 模型