paddlets.models.model_loader 源代码

# !/usr/bin/env python3
# -*- coding:utf-8 -*-

import os
import json

from paddlets.models.base import BaseModel
from paddlets.logger import raise_if, raise_if_not, raise_log


[文档]def load(path: str) -> BaseModel: """ Loads a saved model from a file path. Args: path(str): A path string containing a model file name. Returns: BaseModel: Loaded model. """ abs_model_path = os.path.abspath(path) raise_if_not(os.path.exists(abs_model_path), "path not exists: %s" % abs_model_path) raise_if(os.path.isdir(abs_model_path), "path must be a file path, not a directory: %s" % abs_model_path) abs_root_path = os.path.dirname(abs_model_path) abs_model_path = os.path.join(abs_root_path, os.path.basename(abs_model_path)) modelname = os.path.basename(abs_model_path) abs_modelmeta_path = os.path.join(abs_root_path, "%s_%s" % (modelname, "model_meta")) try: with open(abs_modelmeta_path, "r") as f: model_meta_map = json.load(f) except Exception as e: raise_log(ValueError("failed to open file: %s, err: %s" % (abs_modelmeta_path, str(e)))) modelmeta_key_ancestor_classname_set = "ancestor_classname_set" modelmeta_key_modulename = "modulename" missed_keys = {modelmeta_key_ancestor_classname_set, modelmeta_key_modulename} - model_meta_map.keys() raise_if( len(missed_keys) > 0, "unable to get meta info %s, file path: %s, content: %s" % (missed_keys, abs_modelmeta_path, model_meta_map) ) # (currently deprecated) if PaddleBaseModel.__name__ in model_meta_map["ancestor_classname_set"] if "PaddleBaseModel" in model_meta_map[modelmeta_key_ancestor_classname_set]: # lazy import from paddlets.models.dl.paddlepaddle.paddle_base import PaddleBaseModel return PaddleBaseModel.load(abs_model_path) raise_log(ValueError( "The given model class is not supported: %s.%s" % ( model_meta_map[modelmeta_key_modulename], # model_meta_map["ancestor_classname_set"] = [child, parent, grandparent, ancestor] model_meta_map[modelmeta_key_ancestor_classname_set][0] ) ))