繁体   English   中英

如何从 tf.Session 保存到 saved_model.pb?

[英]How to save to saved_model.pb from tf.Session?

我正在使用ssd_mobil.net_v2_coco_2018_03_29预训练 Tensorflow model。我想将输入更改为固定大小,并将其保存在 saved_model.pb 下(我正在使用需要这种格式的 Neuron 编译器)

以下是我如何将输入张量更改为固定大小:

graph = tf.Graph()
with graph.as_default():
    fixed_image_tensor = tf.placeholder(tf.uint8, shape=(None, 300, 300, 3), name='image_tensor')
    graph_def = tf.GraphDef()
    with tf.io.gfile.GFile(frozen_pb_file, 'rb') as f:
        serialized_graph = f.read()
        graph_def.ParseFromString(serialized_graph)
        tf.import_graph_def(graph_def, name='', input_map={"image_tensor:0": fixed_image_tensor})

现在我使用tf.saved_model.simple_save将修改后的图形保存为saved_model.pb格式:

image_tensor = graph.get_tensor_by_name('image_tensor:0')
boxes_tensor = graph.get_tensor_by_name('detection_boxes:0')
scores_tensor = graph.get_tensor_by_name('detection_scores:0')
classes_tensor = graph.get_tensor_by_name('detection_classes:0')
num_detections_tensor = graph.get_tensor_by_name('num_detections:0')

sess = tf.Session(graph=graph)

tf.saved_model.simple_save(
    session=sess,
    export_dir='model/',
    inputs={image_tensor.name: image_tensor},
    outputs={
        boxes_tensor.name: boxes_tensor,
        scores_tensor.name: scores_tensor,
        classes_tensor.name: classes_tensor,
        num_detections_tensor.name: num_detections_tensor
    }
)

代码创建以下目录(变量为空)

|-model/
|---variables/
|---saved_model.pb

saved_model.pb只有 370 字节,并且必须不包含任何实际信息。 我也像这样这样尝试tf.saved_model.Builder ,但仍然得到完全相同的结果。

我仍然可以像往常一样毫无问题地使用sess进行推理。 我做错了什么? 还有其他方法吗? 我正在使用 Tensorflow 1.15.0。

稍微重新排列的代码,TF1.13,得到 67MBytes *.pb 文件。 重新加载生成的 saved_file,输入具有您的尺寸和所有列出的输出:

import tensorflow as tf

frozen_pb_file = "./ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb"

graph = tf.Graph()
    with graph.as_default():
    fixed_image_tensor = tf.placeholder(tf.uint8, shape=(None, 300, 300, 3), name='image_tensor')
    graph_def = tf.GraphDef()
    with tf.io.gfile.GFile(frozen_pb_file, 'rb') as f:
        serialized_graph = f.read()
        graph_def.ParseFromString(serialized_graph)
        tf.import_graph_def(graph_def, name='', input_map={"image_tensor:0": fixed_image_tensor})
    
    image_tensor = graph.get_tensor_by_name('image_tensor:0')
    boxes_tensor = graph.get_tensor_by_name('detection_boxes:0')
    scores_tensor = graph.get_tensor_by_name('detection_scores:0')
    classes_tensor = graph.get_tensor_by_name('detection_classes:0')
    num_detections_tensor = graph.get_tensor_by_name('num_detections:0')

    sess = tf.Session(graph=graph)

    file_writer = tf.summary.FileWriter(logdir='log', graph=graph)

    tf.saved_model.simple_save(
        session=sess,
        export_dir='model/',
        inputs={image_tensor.name: fixed_image_tensor},
        outputs={
            boxes_tensor.name: boxes_tensor,
            scores_tensor.name: scores_tensor,
            classes_tensor.name: classes_tensor,
            num_detections_tensor.name: num_detections_tensor
        }
    )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM