说明
.pb 格式是protocol buffer (protobuf) 格式,在 Tensorflow 中,这种格式用于保存模型。 Protobufs 是 Google 存储数据的一种通用方式,它更易于传输,因为它更有效地压缩数据并强制数据结构。在 TensorFlow 中使用时,它被称为 SavedModel 协议缓冲区,这是保存 Keras/Tensorflow 2.0 模型时的默认格式。有关此格式的更多信息,请访问 here 和 here。
例如,以下代码(特别是m.save)将创建一个名为my_new_model 的文件夹,并在其中保存saved_model.pb、assets/ 文件夹和variables/ 文件夹。
# first download a SavedModel from TFHub.dev, a website with models
m = tf.keras.Sequential([
hub.KerasLayer("https://tfhub.dev/google/imagenet/mobilenet_v2_130_224/classification/4")
])
m.build([None, 224, 224, 3]) # Batch input shape.
m.save("my_new_model") # defaults to save as SavedModel in tensorflow 2
在某些地方,您可能还会看到 .h5 模型,这是 TF 1.X 的默认格式。 source
额外信息:在 TensorFlow Lite 中,用于在移动和物联网设备上运行模型的库,而不是协议缓冲区,使用平面缓冲区。这是 TensorFlow Lite 转换器转换成的内容(.tflite 格式)。这是另一种非常有效的 Google 格式:它允许访问消息的任何部分而无需反序列化(与 json、xml 不同)。对于内存 (RAM) 较少的设备,从模型文件中加载您需要的内容更有意义,而不是将整个内容加载到内存中进行反序列化。
在 TensorFlow 2 中加载 SavedModels
我注意到 BiBi 显示加载模型的答案很受欢迎,并且在 TF2 中有更短的方法可以做到这一点:
import tensorflow as tf
model_path = "/path/to/directory/inception_v1_224_quant_20181026"
model = tf.saved_model.load(model_path)
注意,
- 目录(即
inception_v1_224_quant_20181026)必须有saved_model.pb或saved_model.pbtxt,否则代码会崩溃。您不能指定.pb 路径,请指定目录。
- 对于旧型号,您可能会收到
TypeError: 'AutoTrackable' object is not callable,fix here。
如果您加载 TF1 模型,我发现我没有收到任何错误,但加载的文件没有按预期运行。 (例如它没有任何功能,如预测)