es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

AttributeError: el módulo ‘tensorflow._api.v2.saved_model’ no tiene el atributo ‘loader’

Estoy intentando usar un modelo para OCR y tengo este bloque de código que resulta en el error: “AttributeError: el módulo ‘tensorflow.api.v2.savedmodel’ no tiene el atributo ‘loader'”, lo cual supongo que se debe a que estoy usando una construcción de TF versión 1 que ya no es válida en V2.

def cargar_grafo(self, archivoModelo):
        grafo = tf.Graph()
        # grafo_def = tf.compat.v1.GraphDef()
        sesion = tf.compat.v1.Session(graph=tf.Graph())
Punto de fallo -> modelo = tf.savedmodel.loader.load(sesion, [tf.savedmodel.tag_constants.SERVING], './modelo')
        grafo_def = modelo.graph_def

    with open(archivoModelo, "rb") as f:
        grafo_def.ParseFromString(f.read())

    with grafo.as_default():
        tf.import_graph_def(grafo_def)

    return grafo

He cambiado la construcción original de tf.Session() a tf.compat.v1.Session(), lo cual nos lleva a este error.
¿Cuál sería el equivalente para TF V2 que puedo usar en este caso?

EDIT: Anteriormente había intentado esta variación que tuvo el mismo error.

def cargar_grafo(self, archivoModelo):

    grafo = tf.Graph()
    grafo_def = tf.GraphDef()

    with open(archivoModelo, "rb") as f:
        grafo_def.ParseFromString(f.read())

    with grafo.as_default():
        tf.import_graph_def(grafo_def)

    return grafo
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    En TensorFlow 2.0, el enfoque recomendado para cargar un modelo guardado es utilizar la función tf.saved_model.load. Aquí tienes un ejemplo de cómo modificar el código que proporcionaste:

    def load_graph(self, modelFile):
        model = tf.saved_model.load(modelFile)
        graph = model.graph
        return graph
    

    Esto cargará el modelo guardado desde la ruta de archivo indicada y devolverá el objeto tf.Graph. Ten en cuenta que es posible que necesites modificar el código que usa este grafo según tu caso de uso específico.

    Además, ten en cuenta que el enfoque tf.compat.v1.Session que intentaste anteriormente aún debería funcionar en TensorFlow 2.0, pero necesitas importar el módulo saved_model de tensorflow en lugar de tensorflow._api.v2.saved_model, de esta forma:

    from tensorflow import saved_model
    
    def load_graph(self, modelFile):
        graph = tf.Graph()
        sess = tf.compat.v1.Session(graph=graph)
        model = saved_model.loader.load(sess, [saved_model.tag_constants.SERVING], modelFile)
        graph_def = model.graph_def
        with graph.as_default():
            tf.import_graph_def(graph_def)
        return graph
    

    Sin embargo, este enfoque no se recomienda para cargar modelos guardados en TensorFlow 2.0, ya que podría dejar de funcionar en futuras actualizaciones. Usar tf.saved_model.load es la forma preferida.

Comments are closed.