Una guía para OMLT: un conjunto de herramientas de optimización y aprendizaje automático

Estás leyendo la publicación: Una guía para OMLT: un conjunto de herramientas de optimización y aprendizaje automático

El kit de herramientas de optimización y aprendizaje automático (OMLT) es un programa de software de código abierto que incorpora redes neuronales entrenadas en aprendizaje automático y modelos sustitutos de árboles potenciados por gradientes en problemas de optimización más grandes. Hablaremos sobre esta biblioteca, sus diversas funciones y su diseño en este artículo. Finalmente, veremos una demostración práctica de cómo cargar nuestro modelo Keras convencional estándar en este marco, que luego se utilizará para la optimización. Los puntos principales que se discutirán en este artículo se enumeran a continuación.

Tabla de contenido

  1. ¿Qué es OMLT?
  2. diseño de biblioteca
  3. Implementación de OMLT

Primero entendamos este conjunto de herramientas.

¿Qué es OMLT?

El kit de herramientas de optimización y aprendizaje automático es un programa de software de código abierto para optimizar la red neuronal (NN) y las representaciones de alto nivel (GBT) de árbol impulsadas por gradientes. Los NN o GBT se pueden integrar en problemas de toma de decisiones más importantes mediante la optimización de modelos sustitutos sobreentrenados.

La optimización de una función de adquisición neuronal o la verificación de redes neuronales son dos ejemplos de aplicaciones informáticas. La optimización de caja gris en ingeniería combina la optimización mecanicista basada en modelos con modelos sustitutos aprendidos de los datos.

Los GBT son compatibles con una interfaz ONNX (ONNX es un marco de aprendizaje automático intermedio que se utiliza para convertir entre múltiples marcos de aprendizaje automático) y los NN son compatibles con las interfaces ONNX y Keras en OMLT.

Para codificar las formulaciones de optimización, OMLT traduce estos modelos de aprendizaje automático previamente entrenados al lenguaje de modelado algebraico Pyomo (Pyomo permite a los usuarios definir problemas de optimización en Python en un estilo que se acerca a la notación que se usa con frecuencia en la optimización matemática).

Se requiere una formulación que contenga las variables de decisión, los objetivos, las restricciones y cualquier parámetro como entrada para el software de resolución de optimización matemática. OMLT agiliza el procedimiento que normalmente lleva mucho tiempo y es propenso a errores de convertir modelos NN y GBT entrenados previamente en fórmulas de optimización apropiadas para el software de resolución. OMLT usa ONNX como interfaz de entrada porque las capacidades de interoperabilidad de ONNX permiten que OMLT admita paquetes como Keras, PyTorch y TensorFlow.

🔥 Recomendado:  Meta presenta Segment Anything, su nuevo modelo de IA para la segmentación de imágenes

OMLT es una herramienta mucho más genérica que incorpora tanto NN como GBT, una gran cantidad de modelos de entrada a través de la interoperabilidad de ONNX, capas completamente densas y convolucionales, muchas funciones de activación y una variedad de formulaciones de optimización.

diseño de biblioteca

modelo de subrogación

Para la optimización, OMLT usa Pyomo, un lenguaje de modelado algebraico basado en Python. Debido a que la mayoría de los marcos de aprendizaje automático utilizan Python como su interfaz principal, Python es un punto de partida adecuado para OMLT. Pyomo proporciona una interfaz de modelado flexible para los solucionadores habilitados para Pyomo: cambiar los solucionadores permite a los usuarios de OMLT elegir la solución de optimización adecuada para una aplicación sin tratar directamente con cada solucionador. Pyomo es utilizado con frecuencia por OMLT.

Para comenzar, la diferenciación automática eficiente de funciones no lineales de Pyomo que utiliza la biblioteca de resolución AMPL permite funciones de activación no lineales de NN. En segundo lugar, las numerosas expansiones de Pyomo, como la descomposición para problemas a gran escala, permiten que OMLT interactúe con metodologías de optimización de vanguardia.

El aspecto más crucial es que OMLT emplea bloques Pyomo. Los bloques Pyomo en OMLT se utilizan para encapsular los componentes GBT o NN de una formulación de optimización más grande. Al vincular las entradas y salidas de un bloque Pyomo, los usuarios solo necesitan comprender la estructura de entrada/salida de NN o GBT.

Formulación de optimización

OmltBlock es un bloque de Pyomo que delega la generación de la formulación de optimización del modelo sustituto al objeto PyomoFormulation. Los usuarios de OMLT construyen los objetos de entrada/salida, como las restricciones, que conectan el modelo sustituto con el problema de optimización más amplio y las variables definidas por el usuario.

🔥 Recomendado:  ¿Cómo restaurar la imagen borrosa usando Real-ESRGAN?

La formulación de optimización del sustituto se deriva automáticamente de su representación de nivel superior (ONNX o Keras). Los usuarios de OMLT también pueden definir un objeto de escala para las variables, así como un diccionario de límites de variables. Algunas formulaciones de optimización exigen escalado e información de límites variables, que pueden no estar presentes en las representaciones de ONNX o Keras.

Definición de red

Para GBT, OMLT crea automáticamente la formulación de optimización a partir de la representación de nivel superior, como ONNX. Debido a que las redes neuronales son sustancialmente más difíciles de optimizar, OMLT genera una representación intermedia (NetworkDefinition) de la red neuronal que sirve como puerta de entrada a otras formulaciones matemáticas de optimización de redes neuronales.

Implementación de OMLT

En esta sección, repasaremos cómo importar sus redes neuronales a OMLT. OMLT incluye un importador para redes neuronales guardadas en ONNX. Este cuaderno demuestra cómo importar redes neuronales desde una variedad de marcos de aprendizaje automático populares a ONNX. Finalmente, demostramos cómo abrir un archivo ONNX con OMLT.

Usaremos el conjunto de datos de diabetes de los indios Pima para entrenar una red neuronal que pueda predecir si un paciente tiene diabetes en función de un conjunto de datos médicos a lo largo de este cuaderno.

La siguiente implementación es parte de las implementaciones oficiales.

Primero, instale los paquetes.

! pip instalar omlt! pip instalar onnx! pip instalar tf2onnx

Primero carguemos y preparemos los datos.

importar pandas como pd importar numpy como np data = pd.read_csv(‘/content/diabetes.csv’) X = data.drop([‘Outcome’]eje=1).valores Y = datos[‘Outcome’].valor

Al desarrollar modelos de optimización, es crucial establecer límites variables. Para obtener una formulación MIP más estricta de las activaciones de ReLU, OMLT exige que todas las variables de entrada estén limitadas si la red neuronal incorpora funciones de activación de ReLU.

El programa OMLT ofrece una función para escribir los límites de entrada en un formato que el modelo ONNX puede leer más tarde. Comenzamos calculando los límites para las ocho variables de entrada en nuestras redes neuronales rudimentarias. Usaremos límites de entrada para preservar el modelo ONNX.

🔥 Recomendado:  Tencent prueba NFT como PFP, listo para lanzar la colección NFT y la sala de música virtual

# calcular los límites lb = np.min(X, eje=0) ub = np.max(X, eje=0) input_bounds = [(l, u) for l, u in zip(lb, ub)]
límites_de_entrada

Ahora construiremos y entrenaremos un modelo basado en Keras que este último cargará en OMLT.

importar tensorflow como tf de tensorflow.keras.models importar secuencial de tensorflow.keras.layers importar Dense # modelo modelo = Sequential() modelo.add(Dense(15, input_dim=8, activación=’relu’)) modelo.add( Dense(8, activación=’relu’)) model.add(Dense(1, activación=’linear’)) # compile model.compile(loss=”binary_crossentropy”, Optimizer=”adam”, metrics=[‘accuracy’]) # tren model.fit(X, Y, epochs=20, batch_size=10)

Ahora importaremos la red a OMLT para eso importamos la función utilizada para escribir el modelo ONNX junto con sus límites. Después de esto, ahora podemos simplemente exportar el modelo de Keras a ONNX.

importar archivo temporal desde omlt.io importar write_onnx_model_with_bounds importar tf2onnx onnx_model, _ = tf2onnx.convert.from_keras(modelo) con tempfile.NamedTemporaryFile(suffix=’.onnx’, delete=False) como f: write_onnx_model_with_bounds(f.name, onnx_model, input_bounds ) print(f”Escribió el modelo ONNX con límites en {f.name}”)

Así hemos importado nuestro modelo a OMLT.

Ultimas palabras

Tenemos funciones OMLT disponibles como resultado de la demostración en este artículo. Las representaciones de alto nivel, como las proporcionadas por Keras y PyTorch, son invaluables para modelar redes neuronales y árboles potenciados por gradientes. OMLT extiende la aplicabilidad de estas representaciones a situaciones de toma de decisiones más grandes mediante la automatización de la conversión de estos modelos previamente entrenados en variables y restricciones adecuadas para los solucionadores de optimización.

Referencia