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