Saltar al contenido

Red neuronal convolucional en Keras

Crearemos una función para entrenar el modelo CNN, que se define como cnn_model a continuación. La primera línea de código de abajo llama al constructor secuencial porque el tipo de modelo que estamos construyendo es de naturaleza secuencial. A partir de la segunda línea de código, empezamos a utilizar la función add() para añadir capas al modelo.

La primera capa es una capa de Conv2D que se ocupará de las imágenes de entrada, representadas como matrices bidimensionales. Hay 32 nodos en esta capa, que tiene un tamaño de núcleo de 5, y la función de activación es relu, o Activación Lineal Rectificada. ReLu es la función de activación más utilizada en las redes neuronales profundas debido a sus ventajas de ser no lineal, así como por tener la capacidad de no activar todas las neuronas al mismo tiempo. En términos sencillos, esto significa que a la vez, sólo se activan unas pocas neuronas, lo que hace que la red sea escasa y muy eficiente.

Red neuronal convolucional en Keras
Red neuronal convolucional en Keras

El siguiente paso es añadir una capa de agrupación, MaxPooling2D, seguida de una capa de regularización llamada Dropout. Entre la capa de abandono y las capas densas, está la capa de aplanamiento, que convierte los datos de la matriz 2D en un vector. Esto a su vez permite que la salida sea procesada por capas estándar, totalmente conectadas.

El siguiente paso es añadir la capa densa totalmente conectada con 128 neuronas y la función de activación del rectificador. A continuación, añadimos la capa de salida, que tiene 10 neuronas para las 10 clases y una función de activación de softmax. Esta función de activación genera predicciones de probabilidad para cada clase.

El paso final es compilar el modelo, que toma tres parámetros: optimizador, pérdida y métrica. El optimizador controla la tasa de aprendizaje, que será el optimizador de Adam en nuestro caso. La principal ventaja del optimizador adam es que no necesitamos especificar la tasa de aprendizaje como en el caso del descenso de gradiente, ahorrándonos así la tarea de optimizar la tasa de aprendizaje para nuestro modelo. Utilizaremos la función de pérdida de categorización_crosentropía, que es la elección común para los problemas de clasificación. En términos simples, cuanto más baja sea la puntuación, mejor será el modelo. La métrica de evaluación que usaremos para validar el rendimiento del modelo en los datos de la prueba es la métrica de precisión. Cuanto más alto sea el puntaje de precisión, mejor será el desempeño del modelo.

La función que sigue crea y compila el modelo de la CNN como se ha explicado anteriormente.

12345678910111213141516defcnn_model():# create model model = Sequential() model.add(Conv2D(32,(5,5), input_shape=(28,28,1), activation=$0027relu$0027)) model.add(MaxPooling2D()) model.add(Dropout(0.2))) model.add(Flatten()). add(Dense(128, activation=$0027relu$0027)) model.add(Dense(num_classes, activation=$0027softmax$0027))# Compilar modelo model.compile(loss=$0027categorical_crossentropy$0027, optimizer=$0027adam$0027, metrics=[$0027accuracy$0027])return modelmodel = cnn_model()

pitón