簡體   English   中英

ValueError:發現無效的張量“輸入”

[英]ValueError: Invalid tensors 'input' were found

我無法將 .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." tensors "ValueError: Invalid tensors 'input' were found." was "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

我只是按照這個谷歌代碼演示。

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 版本做了一個更改。

我在使用 tflite 轉換器 python api 時遇到了與您相同的錯誤。

這是由我們在 input_arrays 中傳遞的參數引起的。

input_arrays需要tensor_name tf.placeholder(name="input")定義的build_signature_def(inputs={"input": tensor_info_proto},outputs...)而不是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"],
                                                     ...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM