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.json
archivo y especifique un nombre de backend diferente, como theano
o 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 Sequential
modelo y la Model
clase utilizada con la API funcional.
Modelos secuenciales de Keras
El Sequential
modelo 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 Sequential
modelo:
importar kerasde 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, Densede 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 Dense
capas. 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 Layer
objeto) 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.datasets
clase. 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.