¿Qué es Keras? Explicación de la API de red neuronal profunda

Si bien las redes neuronales profundas están de moda, la complejidad de los principales marcos ha sido una barrera para su uso por parte de los desarrolladores nuevos en el aprendizaje automático. Ha habido varias propuestas para API de alto nivel mejoradas y simplificadas para construir modelos de redes neuronales, todas las cuales tienden a parecer similares desde la distancia pero muestran diferencias en un examen más detenido.

Keras es una de las API de redes neuronales de alto nivel líderes. Está escrito en Python y es compatible con varios motores de cálculo de redes neuronales de back-end.

Keras y TensorFlow

Dado que el proyecto TensorFlow ha adoptado a Keras como la API de alto nivel para la próxima versión de TensorFlow 2.0, Keras parece ser un ganador, si no necesariamente el ganador. En este artículo, exploraremos los principios y la implementación de Keras, con miras a comprender por qué es una mejora con respecto a las API de aprendizaje profundo de bajo nivel.

Incluso en TensorFlow 1.12, el tutorial oficial de Introducción a TensorFlow utiliza la API de Keras de alto nivel integrada en TensorFlow, tf.keras . Por el contrario, la API de TensorFlow Core requiere trabajar con grafos computacionales, tensores, operaciones y sesiones de TensorFlow, algunos de los cuales pueden ser difíciles de entender cuando recién está comenzando a trabajar con TensorFlow. El uso de la API de TensorFlow Core de bajo nivel tiene algunas ventajas, principalmente durante la depuración, pero afortunadamente puede combinar las API de TensorFlow de alto y bajo nivel según sea necesario.

Principios de Keras

Keras fue creado para ser fácil de usar, modular, fácil de extender y para trabajar con Python. La API fue "diseñada para seres humanos, no para máquinas" y "sigue las mejores prácticas para reducir la carga cognitiva".

Las capas neuronales, las funciones de costo, los optimizadores, los esquemas de inicialización, las funciones de activación y los esquemas de regularización son todos módulos independientes que puede combinar para crear nuevos modelos. Los nuevos módulos son fáciles de agregar, como nuevas clases y funciones. Los modelos se definen en código Python, no en archivos de configuración de modelos separados.

¿Por qué Keras?

Las principales razones para usar Keras provienen de sus principios rectores, principalmente el de ser amigable para el usuario. Más allá de la facilidad de aprendizaje y la facilidad de creación de modelos, Keras ofrece las ventajas de una amplia adopción, soporte para una amplia gama de opciones de implementación de producción, integración con al menos cinco motores de back-end (TensorFlow, CNTK, Theano, MXNet y PlaidML), y un sólido soporte para múltiples GPU y capacitación distribuida. Además, Keras cuenta con el respaldo de Google, Microsoft, Amazon, Apple, Nvidia, Uber y otros.

Keras back termina

Keras propiamente dicho no realiza sus propias operaciones de bajo nivel, como productos tensoriales y convoluciones; se basa en un motor de fondo para eso. Aunque Keras admite varios motores de back-end, su back-end principal (y predeterminado) es TensorFlow, y su principal patrocinador es Google. La API de Keras viene empaquetada en TensorFlow como tf.keras, que como se mencionó anteriormente se convertirá en la API de TensorFlow principal a partir de TensorFlow 2.0.

Para cambiar backends, simplemente edite su $HOME/.keras/keras.jsonarchivo y especifique un nombre de backend diferente, como theanoo CNTK. Alternativamente, puede anular el back-end configurado definiendo la variable de entorno KERAS_BACKEND, ya sea en su shell o en su código Python usando la os.environ["KERAS_BACKEND"]propiedad.

Modelos Keras

El modelo es la estructura de datos central de Keras. Hay dos tipos principales de modelos disponibles en Keras: el Sequentialmodelo y la Modelclase utilizada con la API funcional.

Modelos secuenciales de Keras

El Sequentialmodelo es una pila lineal de capas y las capas se pueden describir de manera muy simple. Aquí hay un ejemplo de la documentación de Keras que se usa model.add()para definir dos capas densas en un Sequentialmodelo:

importar keras

de keras.models import Sequential

de keras.layers import Dense

#Crear modelo secuencial con capas densas, usando el método de adición

#Dense implementa la operación:

# salida = activación (punto (entrada, núcleo) + sesgo)

#Units son la dimensionalidad del espacio de salida para la capa,

# que es igual al número de unidades ocultas

# Las funciones de activación y pérdida pueden especificarse mediante cadenas o clases

model.add (Denso (unidades = 10, activación = "softmax"))

# El método de compilación configura el proceso de aprendizaje del modelo

              optimizer = "sgd",

              métricas = ['precisión'])

# El método de ajuste hace el entrenamiento por lotes

# x_train y y_train son matrices Numpy, como en la API de Scikit-Learn.

# El método de evaluación calcula las pérdidas y las métricas

# para el modelo entrenado

# El método de predicción aplica el modelo entrenado a las entradas

# para generar salidas

classes = model.predict (x_test, batch_size = 128)

Vale la pena leer los comentarios en el código anterior. También vale la pena señalar lo poco cruft que hay en el código real en comparación con, digamos, las API de TensorFlow de bajo nivel. Cada definición de capa requiere una línea de código, la compilación (definición del proceso de aprendizaje) toma una línea de código, y el ajuste (entrenamiento), la evaluación (cálculo de pérdidas y métricas) y la predicción de resultados del modelo entrenado toman cada uno una línea de código .

API funcional de Keras

El modelo secuencial de Keras es simple pero limitado en la topología del modelo. La API funcional de Keras es útil para crear modelos complejos, como modelos de múltiples entradas / múltiples salidas, gráficos acíclicos dirigidos (DAG) y modelos con capas compartidas.

La API funcional utiliza las mismas capas que el modelo secuencial, pero proporciona más flexibilidad para unirlas. En la API funcional, primero define las capas y luego crea el modelo, lo compila y lo ajusta (entrena). La evaluación y la predicción son esencialmente las mismas que en un modelo secuencial, por lo que se han omitido en el código de muestra siguiente.

de keras.layers import Input, Dense

de keras.models modelo de importación

# Esto devuelve un tensor

# una instancia de capa es invocable en un tensor y devuelve un tensor

x = Denso (64, activación = "relu") (x)

predicciones = Denso (10, activación = "softmax") (x)

# Esto crea un modelo que incluye

# la capa de entrada y tres capas densas

model.compile (optimizador = 'rmsprop',

              loss = "categorical_crossentropy",

              métricas = ['precisión'])

model.fit (datos, etiquetas)  # comienza a entrenar

Capas Keras

En los ejemplos anteriores solo usamos Densecapas. Keras tiene una amplia selección de tipos de capas predefinidos y también admite la escritura de sus propias capas.

Las capas centrales incluyen Dense(producto escalar más sesgo), Activation(función de transferencia o forma de neurona), Dropout(establecer aleatoriamente una fracción de las unidades de entrada en 0 en cada actualización de entrenamiento para evitar el sobreajuste), Lambda(envolver una expresión arbitraria como un Layerobjeto) y varios otros . Las capas de convolución (el uso de un filtro para crear un mapa de características) van de 1D a 3D e incluyen las variantes más comunes, como capas de convolución de recorte y transposición para cada dimensionalidad. La convolución 2D, que se inspiró en la funcionalidad de la corteza visual, se usa comúnmente para el reconocimiento de imágenes.

Las capas de agrupación (reducción de escala) van de 1D a 3D e incluyen las variantes más comunes, como la agrupación máxima y media. Las capas conectadas localmente actúan como capas de convolución, excepto que los pesos no se comparten. Las capas recurrentes incluyen simple (recurrencia completamente conectada), cerrada, LSTM y otras; estos son útiles para el procesamiento de idiomas, entre otras aplicaciones. Las capas de ruido ayudan a evitar el sobreajuste.

Conjuntos de datos de Keras

Keras proporciona siete de los conjuntos de datos de muestra de aprendizaje profundo comunes a través de la keras.datasetsclase. Eso incluye imágenes en color pequeñas cifar10 y cifar100, reseñas de películas de IMDB, temas de noticias de Reuters, dígitos manuscritos de MNIST, imágenes de moda de MNIST y precios de viviendas en Boston.

Aplicaciones y ejemplos de Keras

Keras también ofrece diez modelos conocidos, llamados Keras Applications, previamente entrenados contra ImageNet: Xception, VGG16, VGG19, ResNet50, InceptionV3, InceptionResNetV2, MobileNet, DenseNet, NASNet, MobileNetV2TK. Puede utilizarlos para predecir la clasificación de imágenes, extraer características de ellas y ajustar los modelos en un conjunto diferente de clases.

Por cierto, ajustar los modelos existentes es una buena forma de acelerar el entrenamiento. Por ejemplo, puede agregar capas como desee, congelar las capas base para entrenar las nuevas capas, luego descongelar algunas de las capas base para ajustar el entrenamiento. Puede congelar una capa con configurando layer.trainable = False.

El repositorio de ejemplos de Keras contiene más de 40 modelos de muestra. Cubren modelos de visión, texto y secuencias, y modelos generativos.

Implementación de Keras

Los modelos de Keras se pueden implementar en una amplia gama de plataformas, quizás más que cualquier otro marco de aprendizaje profundo. Eso incluye iOS, a través de CoreML (compatible con Apple); Android, a través del tiempo de ejecución de TensorFlow Android; en un navegador, a través de Keras.js y WebDNN; en Google Cloud, a través de TensorFlow-Serving; en el back-end de una aplicación web de Python; en la JVM, mediante la importación del modelo DL4J; y en Raspberry Pi.

Para comenzar con Keras, lea la documentación, consulte el repositorio de código, instale TensorFlow (u otro motor de backend) y Keras, y pruebe el tutorial de introducción para el modelo secuencial de Keras. Desde allí, puede avanzar a otros tutoriales y, finalmente, explorar los ejemplos de Keras.