赞
踩
最近在做一个关于MobileNet的卡片识别任务,最后的目的在于把训练好的模型移植到手机端,关于的移植的步骤,网上已经讲了很多了,我就不多讲述了,这里推荐一个博客我的模型移植就是参考这里的,同时我的模型是直接通过TFhub上的MobileNet迁移学习得到的。迁移之后会生成一个pb文件,然而pb文件又不能直接使用Tensorflow-lite这一个神器,因此就必须把pb模型转化为tflite模型,在转化的时候猜到了一个坑,苦苦搜寻终于在StackOverflow上找到了解决办法,附上链接。也贴上我错误的代码:
- import tensorflow as tf
-
- in_path=r'D:\tmp_mobilenet_v1_100_224_classification_3\output_graph.pb'
- out_path=r'D:\tmp_mobilenet_v1_100_224_classification_3\output_graph.tflite'
-
- input_tensor_name='Placeholder'
- input_tensor_shape={'Placeholder':[1,224,224,3]}
-
- class_tensor_name='final_result'
-
-
- convertr=tf.lite.TFLiteConverter.from_frozen_graph(in_path,input_arrays=input_tensor_name
- ,output_arrays=class_tensor_name
- ,input_shapes=input_tensor_shape)
-
- # convertr=tf.lite.TFLiteConverter.from_saved_model(saved_model_dir=in_path,input_arrays=[input_tensor_name],output_arrays=[class_tensor_name])
- tflite_model=convertr.convert()
-
-
- with open(out_path,'wb') as f:
- f.write(tflite_model)
最后报错信息为
ValueError: Invalid tensors 'P''l''a''c''e''h''o''l''d''e''r' were found."
经过检查可以发现是在
- input_tensor_name='Placeholder'
- class_tensor_name='final_result'
当中少了两个中括号,加上去之后就可以正常生成tflite模型。
正确的代码是:
- import tensorflow as tf
-
- in_path=r'D:\tmp_mobilenet_v1_100_224_classification_3\output_graph.pb'
- out_path=r'D:\tmp_mobilenet_v1_100_224_classification_3\output_graph.tflite'
-
- input_tensor_name=['Placeholder']
- input_tensor_shape={'Placeholder':[1,224,224,3]}
-
- class_tensor_name=['final_result']
-
-
- convertr=tf.lite.TFLiteConverter.from_frozen_graph(in_path,input_arrays=input_tensor_name
- ,output_arrays=class_tensor_name
- ,input_shapes=input_tensor_shape)
-
- # convertr=tf.lite.TFLiteConverter.from_saved_model(saved_model_dir=in_path,input_arrays=[input_tensor_name],output_arrays=[class_tensor_name])
- tflite_model=convertr.convert()
-
-
- with open(out_path,'wb') as f:
- f.write(tflite_model)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。