【问题标题】:ValueError: Invalid tensors 'input' were foundValueError:找到了无效的张量“输入”
【发布时间】:2019-08-30 07:09:39
【问题描述】:

我无法将 .pb 转换为 tflite

这是我正在执行的生成 .pb 的命令,我成功生成了它。

IMAGE_SIZE=224
ARCHITECTURE="mobilenet_1_1.0_${IMAGE_SIZE}"

python retrain.py  
 --bottleneck_dir=tf_files/bottlenecks   
 --how_many_training_steps=500   
 --model_dir=tf_files/models/   
 --summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}"  
  --output_graph=tf_files/retrained_graph.pb   
  --output_labels=tf_files/retrained_labels.txt   
  --architecture="${ARCHITECTURE}"  
  --image_dir=tf_files/flower_photos

一旦我尝试将 .pb 创建为 .tflite 会失败并出现相同的错误 "ValueError: Invalid tensors 'input' were found."

tflite_convert \
  --output_file=foo.tflite \
  --graph_def_file=retrained_graph.pb \
  --input_arrays=input \
  --output_arrays=MobilenetV1/Predictions/Reshape_1

【问题讨论】:

  • input 张量是什么?你能发布定义它的代码吗?
  • 我没有它的代码。我正在使用终端基地转换器。 tensorflow.org/lite/convert/cmdline_examples
  • @AmitPrajapati 找到解决方案了吗?
  • @AkshayNevrekar 是的,我尝试了不同的方式,它工作正常。我会尽快发布答案。

标签: android python tensorflow tensorboard tensorflow-datasets


【解决方案1】:

我在使用 tflite 转换器 python api 时遇到了与您相同的错误。

这是由我们在 input_arrays 中传递的参数引起的。

input_arrays 需要在tf.placeholder(name="input") 中定义tensor_name build_signature_def(inputs={"input": tensor_info_proto},outputs...) 中定义proto map key string

这是一个简单的例子。

x = tf.placeholder(tf.float32, [None], name="input_x")
...

builder = tf.saved_model.builder.SavedModelBuilder(saved_model_path)
input_tensor_info = {"input": tf.saved_model.build_tensor_info(x)}
output_tensor_info = ...
signature_def = tf.saved_model.build_signature_def(inputs=input_tensor_info,
                                                   outputs=...,
                                                   method_name=...)
builder.add_meta_graph_and_variables(...)
builder.save()

# convert saved_model to tflite format.
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_path,
                                                     input_arrays=["input"],
                                                     ...)
...
...

一旦你运行这样的代码会引发错误"ValueError: Invalid tensors 'input' were found."

如果我们像下面这样做一个小改动,它就会成功。

# a small change when convert
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_path,
                                                     input_arrays=["input_x"],
                                                     ...)

【讨论】:

    【解决方案2】:

    我只是按照这个谷歌代码演示。

    https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0

    工作正常

    IMAGE_SIZE=224
    ARCHITECTURE="mobilenet_1.0_${IMAGE_SIZE}"
    
    python -m scripts.retrain \
    --bottleneck_dir=tf_files/bottlenecks \
    --how_many_training_steps=500 \
    --model_dir=tf_files/models/ \
    --summaries_dir=tf_files/training_summaries/"${ARCHITECTURE}" \
    --output_graph=tf_files/retrained_graph.pb \
    --output_labels=tf_files/retrained_labels.txt \
    --architecture="${ARCHITECTURE}" \
    --image_dir=tf_files/flower_photos
    
    tflite_convert   --graph_def_file=tf_files/retrained_graph.pb   --output_file=tf_files/optimized_graph.tflite   --input_format=TENSORFLOW_GRAPHDEF   --output_format=TFLITE   --input_shape=1,224,224,3   --input_array=input   --output_array=final_result   --inference_type=FLOAT   --input_data_type=FLOAT
    

    我为它做了一个更改,即更改 mobilenet 版本。

    【讨论】:

      猜你喜欢
      • 2018-06-21
      • 2017-12-16
      • 2021-02-17
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      相关资源
      最近更新 更多