1

我尝试使用以下代码 (tf_lite_converter.py) 转换保存在 .pb 文件中的现有冻结图:

#!/usr/bin/env python
import sys
import tensorflow as tf

from tf.contrib.lite import convert_savedmodel

convert_savedmodel.convert(
    saved_model_dir="/frozen_inference_graph.pb",
    output_tflite="/TF_Lite_Model")

运行代码时

python tf_lite_converter.py 

在我的 anaconda 环境中,它给了我错误:

ImportError: No module named tf.contrib.lite

我的目标是从我的 .pb-graph 中获得一个 tensorflowlite 模型,以便在 Android 应用程序中使用它。我已经尝试通过 bazel 使用 toco 构建 tflite,但可能(或很可能)我做错了什么,或者这不是解决问题的正确方法。

参考来自 Tensorflow-Developers 的视频: https ://youtu.be/FAMfy7izB6A?t=11m49s

4

2 回答 2

1

该视频中的代码可能来自内部开发版本。

convert_savedmodel 已在https://github.com/tensorflow/tensorflow/commit/db076ca01f12368c9476fa4db9d87756f22f9670中重命名为 convert_saved_model

以下似乎适用于 tensorflow 1.8:

from  tensorflow.contrib.lite.python import convert_saved_model

convert_saved_model.convert(saved_model_dir="/frozen_inference_graph.pb",output_tflite="/TF_Lite_Model")

以下是从当前 master 构建的 tensorflow(方法和参数已重命名):

from  tensorflow.contrib.lite.python import convert_saved_model

convert_saved_model.tflite_from_saved_model(saved_model_dir="/frozen_inference_graph.pb",output_file="/TF_Lite_Model")
于 2018-05-15T13:36:13.267 回答
1

以上这些都不适合我。

我降级到 Tensorflow 1.7 并使用 toco 将 .pb 模型转换为 .tflite 模型。

$ pip install --upgrade "tensorflow==1.7.*"

$ toco \
  --input_file=tf_files/retrained_graph.pb \
  --output_file=tf_files/optimized_graph.lite \
  --input_format=TENSORFLOW_GRAPHDEF \
  --output_format=TFLITE \
  --input_shape=1,${IMAGE_SIZE},${IMAGE_SIZE},3 \
  --input_array=input \
  --output_array=final_result \
  --inference_type=FLOAT \
  --input_data_type=FLOAT

参考: https ://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2-tflite/#2 https://github.com/googlecodelabs/tensorflow-for-poets-2/issues/52 https ://medium.com/@rdeep/tensorflow-lite-tutorial-easy-implementation-in-android-145443ec3775

于 2018-05-20T16:50:55.967 回答