Existen varios enfoques para registrar (serializar) y cargar (deserializar) patrones de inferencia en PyTorch.
Por ejemplo, es posible que deba cargar un modelo que ya está entrenado y una copia de seguridad que proviene de Internet. Más recientemente respondí a esta pregunta en un foro de debate https://discuss.pytorch.org/t/i-want-to-do-machine-learning-with-android/98753. Aprovecho este artículo para dar algunos detalles.
GUARDA Y CARGA DE UN MODO PRE-TRAINED con load_state_dict
En PyTorch puedes guardar un modelo almacenando en su archivo sus state_dict estos son diccionarios Python, se pueden grabar, actualizar, modificar y restaurar fácilmente, añadiendo una gran modularidad a los modelos y optimizadores de PyTorch.
En mi ejemplo:
ESPNet está respaldado con este método
https://github.com/sacmehta/ESPNet/tree/master/pretrained/encoder
Me las arreglé para cargar el modelo de codificador utilizando la clase ESPNet que hace un load_state_dict
antorcha de importación modelo - ESPNet(20,encoderFile"espnet_p_2_q_8.pth", p-2, q-8) ejemplo - torch.rand (1, 3, 224, 224) traced_script_module - torch.jit.trace (modelo, ejemplo) traced_script_module.save ("model.pt")
La salida es
¡Codifica cargado!
Tenga en cuenta que ESPNet utiliza la GPU predeterminada y que se requería una adaptación en Model.py en https://github.com/sacmehta/ESPNet/tree/master/train reemplazando:
self.encoder.load_state_dict (torch.load (encoderFile)
Por:
self.encoder.load_state_dict (torch.load (encoderFile,map_location'cpu')
De lo contrario, si no realiza este ajuste no tiene la capacidad de iniciarse en una GPU, obtendrá el siguiente error:
RuntimeError: intentar deserializar un objeto en un dispositivo CUDA, pero torch.cuda.is_available() es False. Si se está ejecutando en una máquina solo para CPU, utilice torch.load con map_location-torch.device ('cpu') para asignar sus almacenamientos a la CPU.

COPIA DE SEGURIDAD Y CARGA POR SCRIPT PYTORCH
https://pytorch.org/docs/stable/jit.html
TorchScript es una forma de crear modelos que se pueden crear que se pueden optimizar desde el código PyTorch.
Cualquier programa TorchScript se puede guardar desde un proceso de Python y cargarse en un proceso en el que no haya dependencia de Python.
El código siguiente le permite guardar el modelo ESPNet previamente entrenado que fue respaldado por el método clásico torch.save mediante el uso de TorchScript.
antorcha de importación modelo - ESPNet(20,encoderFile"espnet_p_2_q_8.pth", p-2, q-8) ejemplo - torch.rand (1, 3, 224, 224) traced_script_module - torch.jit.trace (modelo, ejemplo) #Exemple con TorchScript torch.jit.save (traced_script_module, "scriptmodel.pth")
Un ejemplo para el cargador a través de TorchScript a continuación:
antorcha de importación model - torch.jit.load ("scriptmodel.pth")
RECURSOS SOBRE EL TEMA
https://pytorch.org/docs/stable/jit.html
https://pytorch.org/tutorials/beginner/Intro_to_TorchScript_tutorial.html
https://stackoverflow.com/questions/53900396/what-are-torch-scripts-in-pytorch