En aquest tema, explorarem les capes convolutionals i de pooling, que són components fonamentals de les Xarxes Neuronals Convolucionals (CNN). Aquestes capes permeten a les CNN extreure característiques rellevants de les imatges, reduir la dimensionalitat i millorar l'eficiència del model.
- Capa Convolutional
1.1. Què és una Capa Convolutional?
Una capa convolutional aplica un conjunt de filtres (o kernels) a una entrada per produir mapes de característiques. Cada filtre es desplaça sobre la imatge d'entrada i calcula el producte puntual entre el filtre i una regió de la imatge.
1.2. Paràmetres Clau
- Filtres (Kernels): Matrius petites que s'apliquen a la imatge d'entrada per detectar característiques com vores, textures, etc.
- Stride: El pas amb el qual el filtre es desplaça sobre la imatge. Un stride més gran redueix la mida del mapa de característiques resultant.
- Padding: Afegeix píxels addicionals a les vores de la imatge per controlar la mida del mapa de característiques. Pot ser 'valid' (sense padding) o 'same' (padding per mantenir la mida).
1.3. Exemple Pràctic
import tensorflow as tf from tensorflow.keras.layers import Conv2D # Definim una capa convolutional amb 32 filtres, mida de filtre 3x3, stride de 1 i padding 'same' conv_layer = Conv2D(filters=32, kernel_size=(3, 3), strides=(1, 1), padding='same', activation='relu') # Suposem una entrada de mida 28x28x1 (imatge en escala de grisos) input_shape = (28, 28, 1) model = tf.keras.Sequential([tf.keras.Input(shape=input_shape), conv_layer]) # Mostrem el resum del model model.summary()
Explicació del codi:
- Utilitzem
Conv2D
de Keras per crear una capa convolutional. filters=32
indica que utilitzarem 32 filtres.kernel_size=(3, 3)
defineix la mida dels filtres.strides=(1, 1)
especifica que el filtre es desplaçarà un píxel a la vegada.padding='same'
afegeix padding per mantenir la mida de la sortida igual a la de l'entrada.activation='relu'
aplica la funció d'activació ReLU després de la convolució.
- Capa de Pooling
2.1. Què és una Capa de Pooling?
Una capa de pooling redueix la dimensionalitat del mapa de característiques agregant valors en regions petites. Això ajuda a reduir el nombre de paràmetres i la complexitat computacional, i també fa que el model sigui més robust a les translacions.
2.2. Tipus de Pooling
- Max Pooling: Selecciona el valor màxim en cada regió.
- Average Pooling: Calcula la mitjana dels valors en cada regió.
2.3. Paràmetres Clau
- Pool Size: La mida de la finestra sobre la qual es realitza el pooling.
- Stride: El pas amb el qual la finestra de pooling es desplaça sobre el mapa de característiques.
2.4. Exemple Pràctic
import tensorflow as tf from tensorflow.keras.layers import MaxPooling2D # Definim una capa de max pooling amb mida de finestra 2x2 i stride de 2 pooling_layer = MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid') # Suposem una entrada de mida 28x28x1 (imatge en escala de grisos) input_shape = (28, 28, 1) model = tf.keras.Sequential([tf.keras.Input(shape=input_shape), pooling_layer]) # Mostrem el resum del model model.summary()
Explicació del codi:
- Utilitzem
MaxPooling2D
de Keras per crear una capa de max pooling. pool_size=(2, 2)
defineix la mida de la finestra de pooling.strides=(2, 2)
especifica que la finestra es desplaçarà dos píxels a la vegada.padding='valid'
indica que no s'afegirà padding.
- Combinació de Capa Convolutional i de Pooling
3.1. Exemple Complet
import tensorflow as tf from tensorflow.keras.layers import Conv2D, MaxPooling2D # Definim una seqüència de capes convolutionals i de pooling model = tf.keras.Sequential([ tf.keras.Input(shape=(28, 28, 1)), Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same'), MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'), Conv2D(filters=64, kernel_size=(3, 3), activation='relu', padding='same'), MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid') ]) # Mostrem el resum del model model.summary()
Explicació del codi:
- Primer, afegim una capa convolutional amb 32 filtres i una capa de max pooling.
- Després, afegim una segona capa convolutional amb 64 filtres i una altra capa de max pooling.
- Aquestes capes es combinen per extreure característiques de diferents nivells de la imatge.
- Exercici Pràctic
Exercici
Crea una xarxa neuronal convolucional amb les següents especificacions:
- Entrada de mida 64x64x3 (imatge en color).
- Primera capa convolutional amb 16 filtres, mida de filtre 3x3, stride de 1 i padding 'same'.
- Capa de max pooling amb mida de finestra 2x2 i stride de 2.
- Segona capa convolutional amb 32 filtres, mida de filtre 3x3, stride de 1 i padding 'same'.
- Capa de max pooling amb mida de finestra 2x2 i stride de 2.
Solució
import tensorflow as tf from tensorflow.keras.layers import Conv2D, MaxPooling2D # Definim la xarxa neuronal convolucional model = tf.keras.Sequential([ tf.keras.Input(shape=(64, 64, 3)), Conv2D(filters=16, kernel_size=(3, 3), activation='relu', padding='same'), MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid'), Conv2D(filters=32, kernel_size=(3, 3), activation='relu', padding='same'), MaxPooling2D(pool_size=(2, 2), strides=(2, 2), padding='valid') ]) # Mostrem el resum del model model.summary()
- Resum
En aquesta secció, hem après sobre les capes convolutionals i de pooling, incloent-hi els seus paràmetres clau i com es combinen per construir xarxes neuronals convolucionals. Hem vist exemples pràctics de com implementar aquestes capes utilitzant TensorFlow i Keras, i hem realitzat un exercici pràctic per reforçar els conceptes apresos.
En el següent tema, explorarem les arquitectures populars de CNN i com s'utilitzen en aplicacions reals.
Curs de Deep Learning
Mòdul 1: Introducció a Deep Learning
- Què és Deep Learning?
- Història i evolució del Deep Learning
- Aplicacions de Deep Learning
- Conceptes bàsics de xarxes neuronals
Mòdul 2: Fonaments de Xarxes Neuronals
- Perceptró i Perceptró Multicapa
- Funció d'activació
- Propagació cap endavant i cap enrere
- Optimització i funció de pèrdua
Mòdul 3: Xarxes Neuronals Convolucionals (CNN)
- Introducció a les CNN
- Capes convolutionals i de pooling
- Arquitectures populars de CNN
- Aplicacions de CNN en reconeixement d'imatges
Mòdul 4: Xarxes Neuronals Recurrentes (RNN)
- Introducció a les RNN
- LSTM i GRU
- Aplicacions de RNN en processament del llenguatge natural
- Seqüències i sèries temporals
Mòdul 5: Tècniques Avançades en Deep Learning
- Xarxes Generatives Adversarials (GAN)
- Autoencoders
- Transfer Learning
- Regularització i tècniques de millora
Mòdul 6: Eines i Frameworks
- Introducció a TensorFlow
- Introducció a PyTorch
- Comparació de frameworks
- Entorns de desenvolupament i recursos addicionals
Mòdul 7: Projectes Pràctics
- Classificació d'imatges amb CNN
- Generació de text amb RNN
- Detecció d'anomalies amb Autoencoders
- Creació d'una GAN per generació d'imatges