Capas de pooling en una red neuronal convolucional

| Última modificación: 18 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Las capas de pooling en una red neuronal convolucional son una de las vertientes de capas de una posible arquitectura de las redes neuronales convolucionales dentro del aprendizaje profundo (Deep Learning) del manejo de los macrodatos.

Saber cómo se desenvuelven estos factores es de suma importancia para este tipo de estudios, puesto que según el tipo de imágenes que se aborden has de seleccionar cuál es la mejor solución para el procesamiento de los macrodatos.

Por este motivo, en el desarrollo de este post te exponemos cómo funcionan las capas de pooling en una red neuronal convolucional, de manera que puedas tenerlas en cuenta cuando una de ellas se ajuste a las medidas necesarias en tu análisis del Big Data.

Redes neuronales convolucionales

Antes de conocer las capas de pooling en una red neuronal convolucional, resulta necesario recordar que las redes convolucionales funcionan de forma opuesta al procesamiento de imágenes clásico de un algoritmo definido por humanos.

Las redes neuronales convolucionales se caracterizan por ser una serie de redes que fueron creadas pensando en cómo funciona el cerebro, de manera que estas sean capaces de aprender cómo funcionan los diferentes niveles de abstracción por medio de capas.

Así:

  • En la primera capa se diferencian las formas simples, los colores o bordes.
  • En segundo lugar, en la otra capa, se pueden distinguir las diferentes combinaciones de bordes y de colores.
  • En la última capa, la red neuronal convolucional se fija en la forma hasta averiguar qué es exactamente. 

Por otra parte, las redes neuronales convolucionales extraen automáticamente las características que, posteriormente, se emplearán para la clasificación de objetos. En consecuencia, las redes neuronales profundas imitan la arquitectura de la corteza visual de los mamíferos, extrayendo campos receptivos locales y conectándose a filtros.

Capas de pooling en una red neuronal convolucional

Las capas de pooling en una red neuronal convolucional se utilizan para ir reduciendo el tamaño de los mapas de activaciones que se estén trabajando, puesto que, de otra forma, no sería posible ejecutarlos en las GPUs (Unidades de procesamiento gráfico). Además, también ayuda a reducir el overfitting, es decir, el hecho de crear un algoritmo que funciona muy bien en nuestro conjunto de datos, pero al que se le da tremendamente mal generalizar.

Los dos tipos más comunes de capas de pooling en una red neuronal convolucional son:

max-pooling

El maxpolling es la más común dentro de las capas de pooling en una red neuronal convolucional y se encarga de calcula el máximo de los elementos. Por otra parte, hay que tener en cuenta que el maxpoling se realiza para cada mapa de activaciones de nuestro volumen, es decir, no interviene para nada la dimensión depth en los cálculos.

Average pooling

La capa de average pooling es la segunda capa más conocida y empleada dentro de las capas de pooling en una red neuronal convolucional, puesto que se encarga de calcular la media de los elementos que se están estudiando en determinada imagen.

Como puede que ya sepas, la operación flatten nos permite pasar de un volumen de características a un vector sobre el que hacer la tarea de clasificación. Sin embargo, mediante esta operación el número de parámetros se eleva considerablemente.

Así que, para hacer pooling de redes neuronales, como alternativa a esta capa, se suelen utilizar otras como GlobalMaxPooling y GlobalAveragePooling, que permiten reducir el número de parámetros.

Por ejemplo

from tensorflow.keras.layers import GlobalMaxPooling2D,GlobalAveragePooling2D
# Inizializamos el modelo
model = Sequential()

# Definimos una capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))

# Definimos una segunda capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Definimos una tercera capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Añadimos nuestro clasificador
model.add(GlobalAveragePooling2D())
model.add(Dense(10, activation='softmax'))

# Compilamos el modelo
model.compile(loss='categorical_crossentropy',
              optimizer=Adam(lr=0.001, decay=1e-6),
              metrics=['accuracy'])

# Entrenamos el modelo
model.fit(X_train_norm, to_categorical(Y_train),
          batch_size=128,
          shuffle=True,
          epochs=10,
          validation_data=(X_test_norm, to_categorical(Y_test))) # aquí deberíamos usar un conjunto distinto al de test!!!

# Evaluamos el modelo
scores = model.evaluate(X_test_norm, to_categorical(Y_test))

#Observamos el número de parámetros
model.summary()

print('Loss: %.3f' % scores[0])
print('Accuracy: %.3f' % scores[1])

En el transcurso de este post, te has familiarizado con las principales capas de pooling en una red neuronal convolucional, de manera que ya puedes considerarlas en tu análisis de los macrodatos. Para continuar aprendiendo, te animamos a echar un vistazo al Bootcamp Full Stack Big Data, Inteligencia Artificial & Machine Learning.

De la mano de profesionales y en menos de nueve meses, con esta formación intensiva te convertirás en todo un experto y serás capaz de conocer e identificar las alternativas de gestión de datos más apropiadas para los estudios de los macrodatos. ¡No dudes en solicitar más información e inscríbete!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado