首页 文章

Tensorflow Lite:关于tflite文件中的输入形状

提问于
浏览
2

当我使用下面的命令生成tflite文件时:

./bazel-bin/tensorflow/contrib/lite/toco/toco  \
  --input_file=./model1.pb \
  --input_format=TENSORFLOW_GRAPHDEF  --output_format=TFLITE \
  --output_file=./model_none.tflite --inference_type=FLOAT \
  --input_type=FLOAT --input_arrays=x \
  --output_arrays=output --input_shapes=1,none,none,1

错误:F tensorflow / contrib / lite / toco / model_cmdline_flags.cc:337]检查失败:absl :: SimpleAtoi(dim_str,&size)无法解析input_shape:1,none,none,1

问题:精简版不支持任何形状吗?为什么谷歌不支持精简版中没有形状?有困难吗?或者只是精简版没有完成?非常感谢您的回复 .

2 回答

  • 2

    您需要在转换时指定特定形状 . 在推理时间(在interpeter API中)可以调整输入的大小并且可以改变计算大小 . 对于固定的已知尺寸,计算效率更高 . 这就是必需的原因 .

  • 0

    我的pb文件中的输入形状是(None,None,None,3) . 现在我使用命令转换为tflite文件:

    ./bazel-bin/tensorflow/contrib/lite/toco/toco \ --input_file=/home/hwh/pnet.pb \ --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE \ --output_file=/home/hwh/pnet.tflite --inference_type=FLOAT \ --input_type=FLOAT --input_arrays=pnet/input \ --output_arrays=pnet/prob1 --input_shapes=1,299,299,3
    

    tflite文件没问题 . 但它看起来输入位图应该只有299 * 299 . 我希望我的模型的输入位图的大小可以调整大小,例如可以是299 * 299,150 * 150 ....现在输入位图的输入大小如果与转换为tflite的命令中的大小不同 . 在java demo上运行时,错误如下:

    E/AndroidRuntime(32697): FATAL EXCEPTION: CameraBackground
    E/AndroidRuntime(32697): Process: android.example.com.tflitecamerademo, PID: 32697
    E/AndroidRuntime(32697): java.lang.IllegalArgumentException: Input error: Failed to get input dimensions. 0-th input should have 1072812 bytes, but found 270000 bytes.
    E/AndroidRuntime(32697):    at org.tensorflow.lite.NativeInterpreterWrapper.getInputDims(Native Method)
    E/AndroidRuntime(32697):    at org.tensorflow.lite.NativeInterpreterWrapper.run(NativeInterpreterWrapper.java:109)
    E/AndroidRuntime(32697):    at org.tensorflow.lite.Interpreter.runForMultipleInputsOutputs(Interpreter.java:166)
    E/AndroidRuntime(32697):    at org.tensorflow.lite.Interpreter.run(Interpreter.java:144)
    E/AndroidRuntime(32697):    at com.example.android.tflitecamerademo.ImageClassifierFloatInception.runInference(ImageClassifierFloatInception.java:108)
    

相关问题