def convert_to_saved_model(model: BaseModel, model_path: str, version: str = None, inputs: Optional[Dict] = None, outputs: Optional[Dict] = None): """ Export model for tensorflow serving Args: model: Target model model_path: The path to which the SavedModel will be stored. version: The model version code, default timestamp inputs: dict mapping string input names to tensors. These are added to the SignatureDef as the inputs. outputs: dict mapping string output names to tensors. These are added to the SignatureDef as the outputs. """ pathlib.Path(model_path).mkdir(exist_ok=True, parents=True) if version is None: version = round(time.time()) export_path = os.path.join(model_path, str(version)) if inputs is None: inputs = {i.name: i for i in model.tf_model.inputs} if outputs is None: outputs = {o.name: o for o in model.tf_model.outputs} sess = keras.backend.get_session() saved_model.simple_save(session=sess, export_dir=export_path, inputs=inputs, outputs=outputs) with open(os.path.join(export_path, 'model_info.json'), 'w') as f: f.write(json.dumps(model.info(), indent=2, ensure_ascii=True)) f.close()
def _createSimpleSavedModel(self, shape): """Create a simple savedmodel on the fly.""" saved_model_dir = os.path.join(self.get_temp_dir(), "simple_savedmodel") with session.Session() as sess: in_tensor = array_ops.placeholder(shape=shape, dtype=dtypes.float32) out_tensor = in_tensor + in_tensor inputs = {"x": in_tensor} outputs = {"y": out_tensor} saved_model.simple_save(sess, saved_model_dir, inputs, outputs) return saved_model_dir
def _createSimpleSavedModel(self, shape): """Create a simple savedmodel on the fly.""" saved_model_dir = os.path.join(self.get_temp_dir(), "simple_savedmodel") with session.Session() as sess: in_tensor = array_ops.placeholder(shape=shape, dtype=dtypes.float32) out_tensor = in_tensor + in_tensor inputs = {"x": in_tensor} outputs = {"y": out_tensor} saved_model.simple_save(sess, saved_model_dir, inputs, outputs) return saved_model_dir
def model_export(model_name): export_path = "pb_models/{}/1".format(model_name) graph = tf.Graph() saver = tf.train.import_meta_graph("./ckpt_models/{}/{}.ckpt.meta".format( model_name, model_name), graph=graph) with tf.Session(graph=graph) as sess: saver.restore( sess, tf.train.latest_checkpoint("./ckpt_models/{}".format(model_name))) saved_model.simple_save( session=sess, export_dir=export_path, inputs={"t": graph.get_operation_by_name('t').outputs[0]}, outputs={"z": graph.get_operation_by_name('z').outputs[0]})
# -*- coding: utf-8 -*- import tensorflow as tf from tensorflow.python import saved_model export_path = "pb_models/lr/1" graph = tf.Graph() saver = tf.train.import_meta_graph("./model/lr.ckpt.meta", graph=graph) with tf.Session(graph=graph) as sess: saver.restore(sess, tf.train.latest_checkpoint("./model")) saved_model.simple_save( session=sess, export_dir=export_path, inputs={"x": graph.get_operation_by_name('x').outputs[0]}, outputs={ "y_pred": graph.get_operation_by_name('inference/y_pred').outputs[0] }) ''' > saved_model_cli show --dir 1 --all MetaGraphDef with tag-set: 'serve' contains the following SignatureDefs: signature_def['serving_default']: The given SavedModel SignatureDef contains the following input(s): inputs['x'] tensor_info: dtype: DT_FLOAT shape: (-1, 3) name: x:0 The given SavedModel SignatureDef contains the following output(s): outputs['y_pred'] tensor_info:
# -*- coding: utf-8 -*- # @Time : 2020/11/5 23:10 # @Author : Jclian91 # @File : single_ckpt_2_pb.py # @Place : Yangpu, Shanghai import tensorflow as tf from tensorflow.python import saved_model export_path = "pb_models/add/1" graph = tf.Graph() saver = tf.train.import_meta_graph("./ckpt_models/add/add.ckpt.meta", graph=graph) with tf.Session(graph=graph) as sess: saver.restore(sess, tf.train.latest_checkpoint("./ckpt_models/add")) saved_model.simple_save( session=sess, export_dir=export_path, inputs={"t": graph.get_operation_by_name('t').outputs[0]}, outputs={"z": graph.get_operation_by_name('z').outputs[0]})