Aprendizaje profundo con Keras: entrenamiento de redes neuronales con Keras [con código]
Publicado: 2020-12-24Keras es una biblioteca de Python que proporciona una API para trabajar con redes neuronales y marcos de aprendizaje profundo. Keras proporciona funciones y módulos que son extremadamente útiles cuando se trata de varias aplicaciones de aprendizaje profundo en Python.
Al final de este tutorial, tendrá el conocimiento de lo siguiente:
- ¿Qué es Keras?
- API de Keras
- Entrenamiento de una red neuronal en Keras
Tabla de contenido
¿Qué es Keras?
Para hacer Deep Learning, la biblioteca más utilizada antes era Tensorflow 1.x, que era difícil de manejar para los principiantes. Se requirió mucha codificación para hacer una red básica de 1 capa. Sin embargo, con Keras, el proceso completo de crear la estructura de una red neuronal y luego entrenarla y rastrearla se volvió extremadamente fácil.
Keras es una API de alto nivel que puede ejecutarse en el backend de Tensorflow, Theano y CNTK. Nos brinda la capacidad de ejecutar experimentos utilizando redes neuronales utilizando una API fácil de usar y de alto nivel. También es capaz de ejecutarse en CPU y GPU.
API de Keras
Keras tiene 10 módulos API diferentes destinados a manejar el modelado y el entrenamiento de las redes neuronales. Repasemos cada uno de ellos para comprender lo que Keras tiene para ofrecer.
Modelos
La API de modelos proporciona la funcionalidad para construir redes neuronales complejas agregando o eliminando capas. El modelo puede ser Secuencial, lo que significa que las capas se apilarán secuencialmente con una sola entrada y salida. El modelo también puede ser funcional, es decir, con modelos totalmente personalizables. Esto es lo que se usa mayoritariamente en la industria.

La API también tiene el módulo de entrenamiento que proporciona métodos para compilar el modelo junto con el optimizador y la función de pérdida, un método para ajustar el modelo, un método para evaluar y también para predecir nuevos datos. Además, también tiene métodos para entrenar, probar y predecir datos por lotes. La API de modelos también permite guardar y serializar los modelos.
Capas
Las capas son los componentes básicos de cualquier red neuronal. La API de capas ofrece un conjunto completo de métodos para construir la arquitectura de la red neuronal. La API Layers tiene la clase Base Layer que contiene los métodos necesarios para crear capas personalizadas con pesos e inicializadores personalizados.
Contiene la clase Layer Activations que consta de varias funciones de activación como ReLU, Sigmoid, Tanh, Softmax, etc. La clase Layer Weight Initializers ofrece métodos para inicializar pesos de diferentes maneras.
También consta de la clase Core Layers, que consta de las clases necesarias para agregar capas centrales como la capa densa, la capa de activación, la capa de incrustación, etc. La clase Capa de convolución ofrece varios métodos para agregar diferentes tipos de capas de convolución. La clase Pooling Layers contiene los métodos necesarios para diferentes tipos de pooling, como Max Pooling, Average Pooling, Global Max Pooling y Global Average Pooling.
devoluciones de llamada
Las devoluciones de llamada son una forma de rastrear el proceso de entrenamiento del modelo. Con la devolución de llamada habilitada, se pueden realizar varias acciones antes o después del final de una época o un lote. Con las devoluciones de llamada puedes:
- Supervise las métricas de capacitación registrando las métricas en TensorFlow Board
- Guardar el modelo en el disco periódicamente
- Detención anticipada en caso de que la pérdida no disminuya significativamente después de ciertas épocas
- Ver estados internos y estadísticas de un modelo durante el entrenamiento
Preprocesamiento de conjuntos de datos
Los datos generalmente están en formato sin procesar y se encuentran en directorios organizados y deben procesarse previamente antes de alimentar al modelo para su ajuste. La clase Preprocesamiento de datos de imagen tiene muchas de estas funciones dedicadas. Por ejemplo, los datos de la imagen deben estar en la matriz numérica para la que podemos usar la función img_to_array. O si las imágenes están presentes dentro de un directorio y subcarpetas, podemos usar la función image_dataset_from_directory.
La API de preprocesamiento de datos también tiene clases para datos de series temporales y datos de texto.
Optimizadores
Los optimizadores son la columna vertebral de cualquier red neuronal. Cada red neuronal trabaja en la optimización de una función de pérdida para encontrar los mejores pesos para la predicción. Hay múltiples tipos de optimizadores que siguen técnicas ligeramente diferentes para encontrar los pesos óptimos. Todos estos optimizadores están disponibles en la API de Optimizers: SGD, RMSProp, Adam, Adadelta, Adagrad, Adamax, Nadal, FTRL.
Pérdidas
Es necesario especificar las funciones de pérdida al compilar un modelo. Esta función de pérdida sería optimizada por el optimizador que también se pasó como parámetro en el método de compilación. Las tres clases de pérdidas principales son: Pérdidas probabilísticas, Pérdidas de regresión, Pérdidas bisagra.
Métrica
Las métricas se utilizan en cada modelo de ML para cuantificar su rendimiento en los datos de prueba. Las métricas son similares a las funciones de pérdida, excepto que se utilizan en datos de prueba. Hay muchas métricas de precisión disponibles, como precisión, precisión binaria, precisión categórica, etc. También contiene métricas probabilísticas como entropía cruzada binaria, entropía cruzada categórica, etc. Hay métricas para verificar falsos positivos/negativos, así como AUC, Precisión, Recall, etc.
Aparte de estas métricas de clasificación, también tiene métricas de regresión como Error cuadrático medio, Error cuadrático medio, Error absoluto medio, etc.

Lea también: El qué es qué de Keras y TensorFlow
Aplicaciones Keras
La clase de aplicaciones de Keras consta de algunos modelos preconstruidos junto con pesos preentrenados. Estos modelos pre-entrenados se utilizan para el proceso de Transfer Learning. Estos modelos preentrenados son diferentes según la arquitectura, número de capas, pesos entrenables, etc. Algunos de ellos son Xception, VGG16, Resnet50, MobileNet, etc.
Entrenamiento de una red neuronal con Keras
Consideremos un conjunto de datos simple como MNIST que está disponible en la clase de conjuntos de datos de Keras. Haremos una Red Neuronal Convolucional secuencial simple para clasificar las imágenes manuscritas de los dígitos 0-9.
#Cargando el conjunto de datos desde keras.datasets import mnist (x_tren, y_tren), (x_prueba, y_prueba) = mnist.load_data() |
Normalizando el conjunto de datos dividiendo cada píxel por 255. Además, es necesario transformar las imágenes en 4 dimensiones antes de enviarlas a un modelo CNN.
tren_x = tren_x.astype( 'float32' ) x_prueba = x_prueba.astype( 'float32' ) tren_x /= 255 prueba_x /= 255 tren_x = tren_X.reforma(tren_X.forma[ 0 ], 28 , 28 , 1 ) prueba_x = prueba_X.reforma(prueba_X.forma[ 0 ], 28 , 28 , 1 ) |
Necesitamos etiquetar codificar las clases antes de alimentarlo al modelo. Lo haremos usando la clase Utils de Keras.
de keras.utils importar a_categorical
|
Ahora, podemos comenzar a crear el modelo utilizando la API secuencial.
de keras.models import Secuencial from keras.layers import Conv2D, MaxPool2D, Dense, Flatten, Dropout model = Sequential() model.add(Conv2D(filters= 32 , kernel_size=( 5 , 5 ), activación= 'relu' , input_shape=x_train.shape[ 1 :])) modelo.add(MaxPool2D(pool_size=( 2 , 2 ))) modelo.add(Abandono(tasa= 0.25 )) modelo.add(Conv2D(filtros= 64 , kernel_size=( 3 , 3 ), activación= 'relu' )) modelo.add(MaxPool2D(pool_size=( 2 , 2 ))) modelo.add(Abandono(tasa= 0.25 )) modelo.add(Aplanar()) modelo.add(Dense( 256 , activación= 'relu' )) modelo.add(Abandono(tasa= 0.5 )) modelo.add(Dense( 10 , activación= 'softmax' )) |
En el código anterior, declaramos un modelo secuencial y luego le agregamos varias capas. La capa convolucional, seguida de una capa Max Pooling y luego una capa de abandono para la regularización. Luego aplanamos la salida usando la capa plana y la última capa es una capa densa completamente conectada con 10 nodos.
A continuación, debemos compilarlo pasando la función de pérdida, el optimizador y la métrica.
modelo.compilar( loss= 'categorical_crossentropy' , optimizador= 'adam' , métricas=[ 'precisión' ] ) |
Ahora necesitaríamos agregar imágenes aumentadas de las imágenes originales para aumentar el conjunto de entrenamiento y la precisión del modelo. Lo haremos usando la función ImageDataGenerator.
de keras.preprocessing.image importar ImageDataGenerator datagen = ImageDataGenerator( rango_de_rotación= 10 , zoom_rango= 0.1 , ancho_cambio_rango= 0.1 , rango_desplazamiento_altura= 0.1 ) |
Ahora que el modelo está compilado y las imágenes aumentadas, podemos comenzar el proceso de entrenamiento. Como hemos usado un generador de datos de imagen arriba, usaremos el método fit_generator en lugar de solo encajar.

épocas = 3 tamaño_lote = 32 history = model.fit_generator( datagen.flow(x_train, y_train, batch_size=batch_size), epochs=epochs, validación_datos=(x_prueba, y_prueba), pasos_por_época=x_tren.forma[ 0 ]//tamaño_lote ) |
El resultado del proceso de entrenamiento es el siguiente:
3Ahora el modelo está entrenado y puede evaluarse ejecutándolo en datos de prueba no vistos.
Lectura relacionada: Aprendizaje profundo y redes neuronales con Keras
Antes de que te vayas
En este tutorial, vimos lo bien que está estructurado Keras y facilita la construcción de una red neuronal compleja. Keras ahora está incluido en Tensorflow 2.x, lo que le brinda aún más funciones. Pruebe más ejemplos de este tipo y explore las funciones y características de Keras.
Si está interesado en obtener más información sobre el aprendizaje automático, consulte el Diploma PG en aprendizaje automático e IA de IIIT-B y upGrad, que está diseñado para profesionales que trabajan y ofrece más de 450 horas de capacitación rigurosa, más de 30 estudios de casos y asignaciones, IIIT- B Estado de exalumno, más de 5 proyectos prácticos finales prácticos y asistencia laboral con las mejores empresas.