Python 如何获得TOCO tf_转换的冻结张量流模型的输入_形状
我正在尝试使用将从中获得的冻结模型转换为Ubuntu 18.04.1 LTS(VirtualBox)上的.tflite。 当我尝试运行该命令时:Python 如何获得TOCO tf_转换的冻结张量流模型的输入_形状,python,ubuntu,tensorflow,tensorflow-lite,Python,Ubuntu,Tensorflow,Tensorflow Lite,我正在尝试使用将从中获得的冻结模型转换为Ubuntu 18.04.1 LTS(VirtualBox)上的.tflite。 当我尝试运行该命令时: /home/nils/.local/bin/tflite_convert --output_file=/home/nils/Documents/frozen.tflite --graph_def_file=/home/nils/Documents/20180402-114759/20180402-114759.pb --input_arrays=
/home/nils/.local/bin/tflite_convert
--output_file=/home/nils/Documents/frozen.tflite
--graph_def_file=/home/nils/Documents/20180402-114759/20180402-114759.pb
--input_arrays=input --output_array=embeddings
我得到以下错误:
2018-11-29 16:36:21.774098: I
tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports
instructions that this TensorFlow binary was not compiled to use: AVX2
Traceback (most recent call last):
File "/home/nils/.local/bin/tflite_convert", line 11, in <module>
sys.exit(main())
File
"/home/nils/.local/lib/python3.6/site-packages/tensorflow/contrib /lite/python/tflite_convert.py",
line 412, in main
app.run(main=run_main, argv=sys.argv[:1])
File
"/home/nils/.local/lib/python3.6/site-packages/tensorflow/python/platform/app.py",
line 125, in run
_sys.exit(main(argv))
File
"/home/nils/.local/lib/python3.6/site-packages/tensorflow/contrib/lite/python/tflite_convert.py",
line 408, in run_main
_convert_model(tflite_flags)
File
"/home/nils/.local/lib/python3.6/site-packages/tensorflow/contrib/lite/python/tflite_convert.py",
line 162, in _convert_model
output_data = converter.convert()
File
"/home/nils/.local/lib/python3.6/site-packages/tensorflow/contrib/lite/python/lite.py",
line 404, in convert
"'{0}'.".format(_tensor_name(tensor)))
ValueError: Provide an input shape for input array 'input'.
如果您再次启动Tensorboard,回到您看到的图形,应该有一个搜索图标(我想在左上角),您可以在其中键入“input”并找到输入张量。它会给你想要的形状。我猜它的形式是“[1,图像大小,图像大小,3]” 或者,您可以检查代码
feed_dict = { images_placeholder:images, phase_train_placeholder:False }
请注意,我们正在将“images”对象输入images\u占位符,该占位符映射到“input:0”张量。然后基本上需要图像对象的形状
图像来自对facenet.load_data()的调用。如果您进入facenet.py并检查load_data函数,您可以观察到形状与我上面建议的类似。如果您打印图像大小值,它应该与您在Tensorboard中看到的匹配。谢谢您的帮助,我按照Alan Chiao所说的做了,然后将load_data()加载到facenet.py,在那里我最终找到了形状[1160,160,3]。此外,还向我展示了我必须注意的事项: --输入图形。类型:逗号分隔列表的冒号分隔列表 整数的数目。每个以逗号分隔的整数列表给出 TensorFlow约定中指定的输入数组之一 示例:--input_shapes=1,60,80,3对于典型的视觉模型,表示批量大小为1,输入图像高度为60,输入图像宽度为80,输入图像深度为3(表示RGB通道)
我浏览了tflite转换器的代码。我发现您需要以
{“input\u tensor\u name:[input shape]}
的格式将输入形状作为字典提供
下面是一个解决此问题的示例:
`graph_def_file = "20180402-114759/20180402-114759.pb"
input_arrays = ["input"]
output_arrays = ["embeddings"]
converter = tf.lite.TFLiteConverter.from_frozen_graph(
graph_def_file, input_arrays, output_arrays,input_shapes={"input":[1,160,160,3]})
tflite_model = converter.convert()
open("model.tflite", "wb").write(tflite_model)
`
对于遇到相同问题的其他人,Nils似乎在该问题中找到了答案:。所需的输入_形状为[1,160,160,3]
`graph_def_file = "20180402-114759/20180402-114759.pb"
input_arrays = ["input"]
output_arrays = ["embeddings"]
converter = tf.lite.TFLiteConverter.from_frozen_graph(
graph_def_file, input_arrays, output_arrays,input_shapes={"input":[1,160,160,3]})
tflite_model = converter.convert()
open("model.tflite", "wb").write(tflite_model)
`