tensorflow - 如何使用 tensorflow .pb 文件?
问题描述
我有一个 Tensorflow 文件AlexNet.pb
,我正在尝试加载它,然后对我拥有的图像进行分类。我已经搜索了几个小时,但我仍然找不到加载它然后对图像进行分类的方法。是否如此明显,我只是如此愚蠢,因为似乎没有人有加载和运行 .pb 文件的简单示例。
解决方案
这取决于如何创建 protobuf 文件。
如果 .pb 文件是以下结果:
# Create a builder to export the model
builder = tf.saved_model.builder.SavedModelBuilder("export")
# Tag the model in order to be capable of restoring it specifying the tag set
builder.add_meta_graph_and_variables(sess, ["tag"])
builder.save()
您必须知道该模型是如何被标记的,并使用该tf.saved_model.loader.load
方法将保存的图形加载到当前的空图形中。
如果模型已被冻结,则必须手动将二进制文件加载到内存中:
with tf.gfile.GFile(frozen_graph_filename, "rb") as f:
graph_def = tf.GraphDef()
graph_def.ParseFromString(f.read())
graph = tf.get_default_graph()
tf.import_graph_def(graph_def, name="prefix")
在这两种情况下,您都必须知道输入张量的名称和要执行的节点的名称:
例如,如果您的输入张量是一个名为的占位符batch_
,而您要执行的节点是dense/BiasAdd:0
您必须执行的节点
batch = graph.get_tensor_by_name('batch:0')
prediction = restored_graph.get_tensor_by_name('dense/BiasAdd:0')
values = sess.run(prediction, feed_dict={
batch: your_input_batch,
})
推荐阅读
- angular - 如何连接两种形式(一种是另一个内的数组)
- powershell - 在 Active Directory 中按真实姓名查找用户
- c++ - c ++,将任何类型(模板T)的数据打印到控制台
- c - 即使我将输出重定向到 /dev/null,printf 仍然会产生成本吗?
- sql-server - 公用表表达式中的 UNION & ORDER 两个表
- c# - Entity Framework Core - 两个实体之间的多个一对多关系
- android - Android 和 Kotlin 可变参数:格式化字符串返回垃圾
- makefile - Makefile 使用 patsubst 或通配符引用依赖项?
- python-3.x - keras中的model.predict使用通用句子编码器给出形状错误
- sql - oracle sql结果不一致