Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从tf.Session保存到saved_model.pb?_Python_Tensorflow - Fatal编程技术网

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

Python 如何从tf.Session保存到saved_model.pb?,python,tensorflow,Python,Tensorflow,我正在使用ssd\u mobilenet\u v2\u coco\u 2018\u 03\u 29pretrained Tensorflow模型。我想将输入更改为固定大小,并将其保存在saved_model.pb下(我正在使用需要此格式的Neuron编译器) 以下是我如何将输入张量更改为固定大小: graph = tf.Graph() with graph.as_default(): fixed_image_tensor = tf.placeholder(tf.uint8, shape=

我正在使用
ssd\u mobilenet\u v2\u coco\u 2018\u 03\u 29
pretrained Tensorflow模型。我想将输入更改为固定大小,并将其保存在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\u model.simple\u save
将修改后的图形保存到
saved\u 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
    }
)
代码将创建以下目录(变量为空):

保存的\u model.pb
只有370字节,不能包含任何实际信息。我还尝试了
tf.saved\u model.Builder
和,但仍然得到了完全相同的结果


我仍然可以像往常一样使用
sess
进行推理,没有任何问题。我做错了什么?还有其他方法吗?我使用的是Tensorflow 1.15.0。

一个经过位重排的代码TF1.13,得到了67MBytes*.pb文件。重新加载生成的保存的_文件,输入具有您的维度和所有列出的输出:

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
        }
    )

我仍然从FileWriter获得了370字节pb的文件和140MB的日志文件。我用两台机器测试了TF1.15和TF1.13。如果您可以得到实际的pb文件,那么我的环境设置肯定有问题。你能告诉我你的机器和环境的细节吗?我已经用Anaconda、Python3.7、TF1.13创建了环境。你用张力板看过你的原木了吗?创建的图表是否符合您的期望?
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
        }
    )