在TensorFlow中使用 *.pb文件有什么用,它是如何工作的?

jvidinwx  于 8个月前  发布在  其他
关注(0)|答案(3)|浏览(64)

我正在使用一些实现来创建一个使用this file的人脸识别:
“facenet.load_model(“20170512-110547/20170512-110547.pb”)”
这个文件有什么用?我不知道它是如何工作的。
控制台日志:

Model filename: 20170512-110547/20170512-110547.pb
distance = 0.72212267

代码https://github.com/arunmandal53/facematch的实际所有者的Github链接

bweufnob

bweufnob1#

pb代表protobuf。在TensorFlow中,protbuf文件包含图形定义以及模型的权重。因此,pb文件是运行给定训练模型所需的全部文件。
给定一个pb文件,可以按如下方式加载它。

def load_pb(path_to_pb):
    with tf.gfile.GFile(path_to_pb, "rb") as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
    with tf.Graph().as_default() as graph:
        tf.import_graph_def(graph_def, name='')
        return graph

一旦你加载了图表,你基本上可以做任何事情。例如,您可以使用

input = graph.get_tensor_by_name('input:0')
output = graph.get_tensor_by_name('output:0')

并使用常规的TensorFlow例程,如:

sess.run(output, feed_dict={input: some_data})
ovfsdjhp

ovfsdjhp2#

说明

.pbprotocol buffer(protobuf)格式,在Tensorflow中,该格式用于保存模型。Protobufs是Google存储数据的一种通用方法,它更易于传输,因为它可以更有效地压缩数据并强制数据结构。在TensorFlow中使用时,它被称为SavedModel协议缓冲区,这是保存Keras/ Tensorflow 2.0模型时的默认格式。有关此格式的更多信息可以在这里和here找到。
例如,下面的代码(特别是m.save)将创建一个名为my_new_model的文件夹,并在其中保存saved_model.pbassets/文件夹和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中,用于在移动的和物联网设备上运行模型的库,而不是协议缓冲区,使用flatbuffer。这是TensorFlow Lite Converter转换成的格式(.tflite)。这是另一种Google格式,也非常有效:它允许访问消息的任何部分,而不需要特殊化(不像JSON,XML)。对于内存(RAM)较少的设备,从模型文件中加载所需的内容更有意义,而不是将整个内容加载到内存中以将其存储。

在TensorFlow 2中加载SavedModels

我注意到BiBi的显示加载模型的答案很受欢迎,在TF 2中有一种更短的方法来做到这一点:

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.pbsaved_model.pbtxt,否则代码将崩溃。不能指定.pb路径,请指定 * 目录 *。
  • 你可能会得到TypeError: 'AutoTrackable' object is not callable为旧型号,fix here.

如果你加载一个TF 1模型,我发现我没有得到任何错误,但是加载的文件并不像预期的那样工作。(例如,它没有任何功能,如预测)

ufj5ltwl

ufj5ltwl3#

您可以使用protoc检查.pb文件的文本:
protoc --decode_raw < input.pb > output.txt

相关问题