ValueError:找到了无效的张量“输入”
Posted
技术标签:
【中文标题】ValueError:找到了无效的张量“输入”【英文标题】:ValueError: Invalid tensors 'input' were found 【发布时间】: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 是的,我尝试了不同的方式,它工作正常。我会尽快发布答案。
【参考方案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 版本。
【讨论】:
以上是关于ValueError:找到了无效的张量“输入”的主要内容,如果未能解决你的问题,请参考以下文章
ValueError:Layer Discriminator 需要 1 个输入,但它接收到 2 个输入张量
带有 Shap ValueError 的 DeepExplainer:使用不是符号张量的输入调用了 Layersequential_1