Les capes de pooling són una part fonamental de les xarxes neuronals convolucionals (CNNs). Aquestes capes s'utilitzen per reduir les dimensions espacials (amplada i alçada) de les representacions intermedies, mantenint la informació més rellevant. Això ajuda a reduir la complexitat computacional i a controlar el sobreajustament.
Objectius d'aquest tema
- Entendre què són les capes de pooling i per què s'utilitzen.
- Aprendre sobre els diferents tipus de pooling.
- Implementar capes de pooling en TensorFlow.
Què són les capes de pooling?
Les capes de pooling redueixen les dimensions espacials de les dades d'entrada, agregant informació en regions locals. Això es fa per:
- Reduir la quantitat de paràmetres i càlculs en la xarxa.
- Controlar el sobreajustament.
- Fer la xarxa més robusta a les translacions i distorsions de les imatges d'entrada.
Tipus de pooling
- Max Pooling
El max pooling selecciona el valor màxim d'una regió de la imatge d'entrada. Això ajuda a conservar les característiques més prominents.
- Average Pooling
L'average pooling calcula la mitjana dels valors en una regió de la imatge d'entrada. Això proporciona una representació més suau de les característiques.
- Global Pooling
El global pooling redueix cada mapa de característiques a un únic valor, ja sigui mitjançant max pooling o average pooling. Això és útil per a la classificació d'imatges.
Implementació de capes de pooling en TensorFlow
A continuació, implementarem exemples de max pooling i average pooling utilitzant TensorFlow.
Max Pooling
import tensorflow as tf # Creem una entrada de mostra input_data = tf.constant([ [[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0], [7.0, 8.0]] ], dtype=tf.float32) # Afegim una dimensió per representar el batch size i els canals input_data = tf.reshape(input_data, [1, 2, 2, 1]) # Definim una capa de max pooling max_pooling_layer = tf.keras.layers.MaxPooling2D(pool_size=(2, 2), strides=2) # Apliquem la capa de max pooling output_data = max_pooling_layer(input_data) print("Input Data:\n", input_data.numpy()) print("Output Data after Max Pooling:\n", output_data.numpy())
Average Pooling
import tensorflow as tf # Creem una entrada de mostra input_data = tf.constant([ [[1.0, 2.0], [3.0, 4.0]], [[5.0, 6.0], [7.0, 8.0]] ], dtype=tf.float32) # Afegim una dimensió per representar el batch size i els canals input_data = tf.reshape(input_data, [1, 2, 2, 1]) # Definim una capa de average pooling average_pooling_layer = tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=2) # Apliquem la capa de average pooling output_data = average_pooling_layer(input_data) print("Input Data:\n", input_data.numpy()) print("Output Data after Average Pooling:\n", output_data.numpy())
Exercicis pràctics
Exercici 1: Implementar Max Pooling
Implementa una capa de max pooling amb una mida de finestra de 3x3 i un pas de 2 en una imatge d'entrada de 6x6.
Solució
import tensorflow as tf # Creem una entrada de mostra input_data = tf.constant([ [1.0, 2.0, 3.0, 4.0, 5.0, 6.0], [7.0, 8.0, 9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0, 17.0, 18.0], [19.0, 20.0, 21.0, 22.0, 23.0, 24.0], [25.0, 26.0, 27.0, 28.0, 29.0, 30.0], [31.0, 32.0, 33.0, 34.0, 35.0, 36.0] ], dtype=tf.float32) # Afegim una dimensió per representar el batch size i els canals input_data = tf.reshape(input_data, [1, 6, 6, 1]) # Definim una capa de max pooling max_pooling_layer = tf.keras.layers.MaxPooling2D(pool_size=(3, 3), strides=2) # Apliquem la capa de max pooling output_data = max_pooling_layer(input_data) print("Input Data:\n", input_data.numpy()) print("Output Data after Max Pooling:\n", output_data.numpy())
Exercici 2: Implementar Average Pooling
Implementa una capa de average pooling amb una mida de finestra de 2x2 i un pas de 2 en una imatge d'entrada de 4x4.
Solució
import tensorflow as tf # Creem una entrada de mostra input_data = tf.constant([ [1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0] ], dtype=tf.float32) # Afegim una dimensió per representar el batch size i els canals input_data = tf.reshape(input_data, [1, 4, 4, 1]) # Definim una capa de average pooling average_pooling_layer = tf.keras.layers.AveragePooling2D(pool_size=(2, 2), strides=2) # Apliquem la capa de average pooling output_data = average_pooling_layer(input_data) print("Input Data:\n", input_data.numpy()) print("Output Data after Average Pooling:\n", output_data.numpy())
Resum
En aquest tema, hem après sobre les capes de pooling, incloent-hi els tipus més comuns com el max pooling i l'average pooling. Hem vist com aquestes capes ajuden a reduir les dimensions espacials de les dades d'entrada, mantenint la informació més rellevant. També hem implementat exemples pràctics de capes de pooling en TensorFlow.
En el següent tema, explorarem les arquitectures avançades de CNN, on veurem com es poden combinar diferents tipus de capes per construir models més potents i eficients.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres