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
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: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ódulosaved_model
detensorflow
en lugar detensorflow._api.v2.saved_model
, de esta forma: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.