转换TensorFlow模型到TFLite报错,咨询.pb格式及解决方法
问题解答
什么是.pb格式?
.pb是Protocol Buffer的缩写,是TensorFlow SavedModel格式的核心文件之一:
- 它以二进制格式存储了模型的完整计算图结构,包括层的定义、运算节点连接关系、输入输出张量信息等。
- SavedModel是TensorFlow的标准模型保存格式,除了.pb文件,通常还会搭配
variables目录(存储模型权重数据)一起存在。
报错原因及解决方法
报错原因
你使用的tf.lite.TFLiteConverter.from_saved_model()方法,要求传入的路径是SavedModel格式的目录(该目录必须包含saved_model.pb/saved_model.pbtxt文件),但你传入的是h5模型文件或单独权重文件的路径,不符合方法的要求,因此触发报错。
针对你的文件情况,分两种解决方式:
方式1:直接使用已有的.h5模型转换
如果你的model.h5是完整的Keras模型(包含结构+权重),可以直接加载后转换:
import tensorflow as tf # 加载h5格式的完整模型 model = tf.keras.models.load_model('model.h5') # 初始化TFLite转换器 converter = tf.lite.TFLiteConverter.from_keras_model(model) # 执行转换 tflite_model = converter.convert() # 保存转换后的TFLite模型 with open('converted_model.tflite', 'wb') as f: f.write(tflite_model)
方式2:使用单独的权重文件转换
如果model.h5不是完整模型,只有model.data-00000-of-00001和model.index权重文件,需要先重构模型结构,再加载权重后转换:
import tensorflow as tf # 第一步:重构你的模型结构(必须和训练时的结构完全一致) # 示例(根据你的实际模型修改): # model = tf.keras.Sequential([ # tf.keras.layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)), # tf.keras.layers.MaxPooling2D((2,2)), # tf.keras.layers.Flatten(), # tf.keras.layers.Dense(10, activation='softmax') # ]) # 第二步:加载权重文件(路径为权重文件所在的目录) model.load_weights('./') # 第三步:转换为TFLite格式 converter = tf.lite.TFLiteConverter.from_keras_model(model) tflite_model = converter.convert() # 保存结果 with open('converted_model.tflite', 'wb') as f: f.write(tflite_model)
内容的提问来源于stack exchange,提问作者user20035360
相关产品推荐
相关产品推荐

