PyTorch ¿Cómo cargar un modelo previamente entrenado?

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.
PYTORCH TORCHSCRIPT

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

BCEWithLogitsLoss en PyTorch ¿cómo encontrar la implementación?

Me han preguntado recientemente sobre cómo encontrar el código BCEWithLogitsLoss (https://discuss.pytorch.org/t/implementation-of-binary-cross-entropy/98715/2) para una función llamada en PYTORCH con la función handle_torch_function me lleva algún tiempo entenderlo, y lo compartiré con usted si ayuda:

La pregunta era acerca de BCEWithLogitsLoss – BCELoss + sigmoid() ? Mi respuesta puede ser aplicable si desea analizar el código de todas las funciones que figura en el diccionario ret de https://github.com/pytorch/pytorch/blob/master/torch/overrides.py

BCEWithLogitsLoss es una combinación de BCELOSS + una capa sigmoid i. Esto es más estable numéricamente que el uso de un sigmoid simple seguido de un BCELoss ya que, al combinar las operaciones en una capa, aprovecha el truco log-sum-exp para la estabilidad numérica ver: https://en.wikipedia.org/wiki/LogSumExp

  1. El código de la clase BCEWithLogitsLoss se puede encontrar en https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/loss.py
    def forward(self, input: Tensor, target: Tensor) -> Tensor:
        retorno F.binary_cross_entropy_with_logits (entrada, objetivo,
                                                  self.peso,
                                                  pos_weight-self.pos_weight,
                                                  reducción-auto.reducción)
BCEWithLogitLoss PYTORCH

El Oject F se importa de functionnal.py aquí : https://github.com/pytorch/pytorch/blob/master/torch/nn/functional.py

Encontrará la función llamada

def binary_cross_entropy_with_logits(entrada, destino, peso-Ninguno, size_average-Ninguno,
                                     reducir-Ninguno, reducción 'media', pos_weight-Ninguno):

Llama a la handle_torch_function en https://github.com/pytorch/pytorch/blob/master/torch/overrides.pyYou en
contrará una entrada de la función binary_cross_entropy_with_logits en el ret dictionnary que contiene todas las funciones que se pueden invalidar en pytorch. Esta
es la implementación de Python de torch_functionMore
información en https://github.com/pytorch/pytorch/issues/24015

A continuación, el código al que se llama está
en el Filehttps://github.com/pytorch/pytorch/blob/master/aten/src/ATen/native/Loss.cpp de C++

Tensor binary_cross_entropy_with_logits (const Tensor> entrada, const Tensor&, const Tensor&weight, const Tensor&pos_weight, int64_t 
...
BCEWithLogitLoss PYTORCH

LIENS DE RESSOURCES :

https://pytorch.org/docs/stable/generated/torch.nn.BCEWithLogitsLoss.html

https://discuss.pytorch.org/t/bceloss-vs-bcewithlogitsloss/33586

https://stackoverflow.com/questions/59246416/the-output-of-numerical-calculation-of-bcewithlogitsloss-for-pytorch-example

https://www.semicolonworld.com/question/61244/implementing-bcewithlogitsloss-from-pytorch-in-keras

Masterización de IBM COBOL Language – Parte 1 – ENTRENAMIENTO GRATUITO

Este artículo sigue mi introducción al lenguaje COBOL. Le aconsejo que vuelva a leer la primera parte que trata de los principios generales de COBOL. Aquí: https://128mots.com/index.php/2020/10/07/ibm-cobol/ e inglés http://128mots.com/index.php/en/2020/10/07/ibm-cobol-3/ (IBM COBOL FREE TRAINING)

Aquí discutimos los conceptos generales de la estructura de un programa COBOL.

DIVISIÓN DE DATOS

Todos los datos que utilizará el programa se encuentran en la División de Datos. Aquí es donde se cuidan todas las asignaciones de memoria requeridas por el programa. Esta división es opcional.

GESTIÓN DE ARCHIVOS:

ENTRENAMIENTO IBM COBOL GRATIS

FILE SECTION describe los datos enviados o desde el sistema, especialmente los archivos.

El SYNtax en COBOL es el siguiente

DIVISION DE DATOS.
SECCIÓN DE ARCHIVO.
 FD/SD NameOfFile[RECORD CONTAINS intgr CHARACTERS] 
	[BLOCK CONTAINS intgr RECORDS] 
[DATA RECORD IS NameOfRecord].
	[RECORDING MODE IS {F/V/U/S}]

FD describe los archivos y SD los archivos de clasificación.

ARCHIVO EN ENTRADA

En FILE-CONTROL la sentencia será:

           SELECCIONE FMASTER ASSIGN FMASTER
                  ESTADO DEL ARCHIVO W-STATUS-FMASTER.

Si el archivo de entrada está indexado:
           SELECCIONE FMASTER ASSIGN FMASTER
                  ORGANIZACIÓN ESTÁ INDEXADA
                  LA CLAVE DE REGISTRO ES FMASTER-KEY
                  ESTADO DEL ARCHIVO W-STATUS-FMASTER.

En este caso a nivel de archivo-SECTION tendremos:

      FMAITRE como aperitivo  
       FD FMAITRE.
       01 ENR-FMAITRE.
      Declaraciones de las áreas de registro

En el nivel JCL, la declaración tendrá el siguiente formato:
ENTREE DD DSN-SAMPLE. INPUTF,DISP-SHR
ENTRENAMIENTO IBM COBOL GRATIS

ARCHIVO FUERA

La instrucción JCL será:

OUTFILE DD DSN-SAMPLE. OUTPUTF,DISP(,CATLG,DELETE),
LRECL-150,RECFM-FB

RECFM especifica las características de los registros con longitud fija (F), longitud variable (V), longitud variable ASCII (D) o longitud indefinida (U). Los registros que se dice que están bloqueados se describen como FB, VB o DB.

APERTURA Y CIERRE DE ARCHIVO EN LA DIVISIÓN DE PROCEDIMIENTOS

COBOL utiliza mecanismos PROCEDURE DIVISION para realizar aperturas de escritura, cierre y archivo.

Apertura del archivo de entrada:

FICENT DE ENTRADA ABIERTA

Abrir el archivo de salida:

SALIDA ABIERTA FICSOR

Cierre de archivo:

CLOSE FICENT
CLOSE FICSOR

Reproducción de archivos:

LEER ACTENR
AL FINAL MUEVA 'O' AL ÚLTIMO REGISTRO
FIN DE LECTURA

Escritura de archivos

ESCRIBIR SOR-ENR
ENTRENAMIENTO IBM COBOL GRATIS

ENLACES EXTERNOS A RECURSOS (IBM COBOL FREE TRAINING)

A continuación se muestran algunos enlaces que me pareció interesante que también se ocupan de la gestión de archivos con COBOL.

Ejemplo de gestión de archivos de IBM: https://www.ibm.com/support/knowledgecenter/en/SS6SGM_5.1.0/com.ibm.cobol51.aix.doc/PGandLR/ref/rpfio13e.html

Formato REFM: https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/com.ibm.zos.v2r2.idad400/d4037.htm

Tutorialespunto un artículo sobre administración de https://www.tutorialspoint.com/cobol/cobol_file_handling.htm

COURSERA COBOL con VSCODE: https://www.coursera.org/lecture/cobol-programming-vscode/file-handling-YVlcf

MEDIUM un interesante artículo para principiantes de COBOL: https://medium.com/@yvanscher/7-cobol-examples-with-explanations-ae1784b4d576

También en su blog: http://yvanscher.com/2018-08-01_7-cobol-examples-with-explanations–ae1784b4d576.html

Muchos ejemplos de tutoriales gratuitos de COBOL y código de ejemplo: http://www.csis.ul.ie/cobol/examples/default.htm

GITHUB Awesome-cobol te https://github.com/mickaelandrieu/awesome-cobol

FORMACIÓN GRATUITA DE IBM COBOL

¿Cómo hago una carrera en COBOL?

COBOL (COmmon Business Oriented Language) es un lenguaje orientado al negocio que es muy adecuado para el procesamiento de datos con alto rendimiento y precisión, es ofrecido por IBM.

Puede estar seguro de que cualquier compra o retiro que realice con su tarjeta de crédito inicie un programa COBOL. Cada día COBOL procesa millones de transacciones. Desde mi punto de vista aprender COBOL es un conjunto de conocimientos muy interesante.

He trabajado con este lenguaje durante más de 10 años y comparto aquí algunas notas que probablemente le permitirán poner sus manos en él.

El mainframe se está modernizando con la capacidad de programar con las últimas herramientas como el editor de código libre VsCode y extensión zowe, así como el editor Z Open, se ejecutan en la nube en entornos como Open Shift e integran principios devops con herramientas como Github, Jenkins, Wazi.

Sintaxis COBOL

El SYNtax de COBOL es bastante simple y es similar al lenguaje natural en inglés.

El código se estandariza según las columnas que pueden describir 5 áreas clave.

Secuencia de área: especifica un número de secuencia de la línea de código a veces, a veces en blanco

Zona del indicador: Puede contener un indicador, por ejemplo – para indicar que la línea es un comentario, D para indicar que la línea se ejecuta sólo en modo de depuración.

UNA ZONA: Contiene divisiones, secciones, párrafos y Lift

B AREA: Sentencias y declaraciones del programa cobol por ejemplo COMPUTE algo…

Identificación de área: espacio para ignorar y dejar en blanco.

También hay palabras reservadas en COBOL que encontrará en el enlace la lista de palabras reservadas en COBOL. https://www.ibm.com/support/knowledgecenter/SSZJPZ_9.1.0/com.ibm.swg.im.iis.ds.mfjob.dev.doc/topics/r_dmnjbref_COBOL_Reserved_Words.html

Divisiones:

El código está estructurado por divisiones que contienen las propias Secciones compuestas por párrafos compuestas por Sentencias y Declaraciones.

Ejemplo de oraciones:

AÑADIR 45 AL PRECIO.

Tenga en cuenta que el punto corresponde a un terminador de ámbito implícito.

Hay 4 divisiones en un programa COBOL:

– DIVISION DE DATOS: permite configurar la gestión de datos que será procesada por el programa.

– IDENTIFICACION DIVISION: Nombre del programa y programador, fecha del programa, propósito del programa.

– QUARTER ENVIRONEMENT: Tipo de uso del ordenador y mapeo entre archivos utilizados en el programa y dataset en el sistema (enlace entre el programa y el sistema)

– DIVISION DE PROCEDIMIENTO: Aquí es donde se encuentra el código de negocio compuesto por los diferentes párrafos a ejecutar.

Las variables en Cobol:

Al igual que en otros idiomas, las letras se pueden utilizar para representar valores almacenados en la memoria.

El nombre de una variable es un máximo de 30 caracteres.

Una cláusula Picture permite determinar el tipo de variable.

PIC 9: La longitud digital está entre corchetes.

PIC 9(5): variable digital de 5 dígitos la longitud máxima para un digital es 18.

PIC A para un personaje

PIC X(11): un alfanumérico con una longitud máxima de 255

Es posible tener tipos editados usando símbolos:

PIC 9(6)V99 para 6 dígitos y 2 decimales separados por comas.

PIC $9,999V99 para representar una cantidad

Tenga en cuenta que COBOL proporciona litros constantes como CEROS, ESPACIO, ESPACIOS, BAJO VALOR …

Más información en este enlace:

https://www.ibm.com/support/knowledgecenter/SS6SG3_4.2.0/com.ibm.entcobol.doc_4.2/PGandLR/ref/rllancon.htm

Si eres nuevo en IBM COBOL y quieres hacer un aprendizaje serio y no demasiado caro, te recomiendo que leas este libro:

Este libro cubre una gran cantidad de temas relacionados con el lenguaje de la máquina, formación de IBM Cobol, OPEN Cobol IDE, DB2 para convertirse en un verdadero programador de Cobol.

Vea también mis artículos:

¿Cómo preparé la certificación PRINCE2® Practitioner?

Acabo de obtener la certificación PRINCE2® Practitionner. 

PRINCE2® es una metodología de gestión de proyectos utilizada en todo el mundo que puede adaptarse a todo tipo de proyectos.

Con un salario promedio de $84,450 para un gerente de proyecto certificado, (aquí), tengo que decir que PRINCE2® es desde mi punto de vista un conjunto de habilidades muy interesante para conseguir.

Aprender PRINCE2® es un poco como decir "Quiero trabajar con el mejor método para gestionar y controlar proyectos con un alcance internacional.»

Comparto aquí algunas notas y mis comentarios, así como recursos, que podrían estar interesados en si está considerando certificar PRINCE2®.

El primer paso en la certificación es el examen PRINCE2® Fundamental (PRINCE2® Foundation, que valida que tienes el conocimiento para participar en un proyecto que utiliza el examen PRINCE2®El examen PRIN
CE2® Practitioner (PRINCE2® Practitioner) tiene como objetivo un perfecto dominio del método de gestión y gestión de un proyecto, el examen fundamental es un requisito previo.

Le aconsejo que lea el libro oficial Gestión de proyectos exitosos con PRINCE2®

Disponible aquí:

y usted tiene derecho a ello durante el examen PRINCE2® Practitioner.
Puede optar por aprobar la certificación en francés o inglés. Te aconsejo que lo pases en inglés porque en mi opinión le da un carácter más internacional a la certificación. También tendrá 30 minutos adicionales para tomar el examen si no lo toma en su idioma nativo.

Aquí hay una lista de recursos interesante que encontré en línea:

https://prince2.wiki: Medios gratuitos para ayudarle a aprobar certificaciones PRINCE2®.

Simulador de examen en línea gratuito para PRINCE2® Foundation https://mplaza.training/exam-simulators/prince2-foundation/

Simulador de examen en línea gratuito para PRINCE2® Practitioner https://mplaza.training/exam-simulators/prince2-practitioner/

El sitio web oficial PRINCE2®de Axelos: https://www.axelos.com/best-practice-solutions/prince2

Si estás buscando un libro en francés te recomiendo este:

Propiedad Intelectual
:PRINCE2® y PRINCE2 Agile® son marcas registradas de AXELOS Limited, utilizadas bajo el permiso de AXELOS Limited. Todos los derechos reservados.