Què són les Xarxes Neuronals Convolucionals (CNN)?
Les Xarxes Neuronals Convolucionals (CNN, per les seves sigles en anglès) són un tipus especial de xarxa neuronal dissenyada específicament per processar dades amb una estructura de graella, com ara imatges. Les CNN han demostrat ser extremadament eficients en tasques de reconeixement d'imatges, detecció d'objectes i classificació d'imatges.
Característiques Clau de les CNN
-
Capes Convolucionals:
- Utilitzen filtres (o kernels) per extreure característiques de les imatges.
- Cada filtre es desplaça per la imatge d'entrada i genera una mapa de característiques.
-
Capes de Pooling:
- Redueixen la dimensió espacial de les mapes de característiques.
- Ajuda a reduir la complexitat computacional i a controlar el sobreajustament.
-
Capes Completament Connectades:
- Al final de la xarxa, les capes completament connectades (fully connected layers) processen les característiques extretes per fer la classificació final.
-
Funcions d'Activació:
- S'apliquen després de cada operació convolucional per introduir no-linearitats en el model.
Arquitectura Bàsica d'una CNN
Una CNN típica està composta per una seqüència de capes convolucionals i de pooling, seguides per una o més capes completament connectades. A continuació es mostra un exemple d'arquitectura bàsica:
-
Capa d'Entrada:
- Imatge d'entrada (per exemple, 32x32x3 per una imatge RGB).
-
Capa Convolucional:
- Aplica diversos filtres per generar mapes de característiques.
-
Capa de Pooling:
- Redueix la dimensió espacial dels mapes de característiques.
-
Repetició de Capes Convolucionals i de Pooling:
- Es poden afegir múltiples capes convolucionals i de pooling per extreure característiques més complexes.
-
Capes Completament Connectades:
- Processen les característiques extretes per fer la classificació final.
-
Capa de Sortida:
- Genera la predicció final (per exemple, una probabilitat per cada classe en un problema de classificació).
Exemple Pràctic
A continuació es mostra un exemple de codi en Python utilitzant la biblioteca Keras per construir una CNN simple per a la classificació d'imatges:
import tensorflow as tf from tensorflow.keras import layers, models # Definim el model model = models.Sequential() # Capa convolucional i de pooling model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) model.add(layers.MaxPooling2D((2, 2))) # Afegim més capes convolucionals i de pooling model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) # Capes completament connectades model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10, activation='softmax')) # Compilació del model model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Resum del model model.summary()
Explicació del Codi
-
Importació de Biblioteques:
tensorflow
ikeras
per construir i entrenar la CNN.
-
Definició del Model:
- Utilitzem
Sequential
per crear un model seqüencial.
- Utilitzem
-
Capas Convolucionals i de Pooling:
Conv2D
: Aplica una operació convolucional amb 32 filtres de mida 3x3 i funció d'activació ReLU.MaxPooling2D
: Aplica una operació de pooling amb una finestra de 2x2.
-
Capes Completament Connectades:
Flatten
: Aplana la sortida de les capes convolucionals per convertir-la en un vector.Dense
: Capa completament connectada amb 64 neurones i funció d'activació ReLU.Dense
: Capa de sortida amb 10 neurones (una per cada classe) i funció d'activació softmax.
-
Compilació del Model:
- Especifica l'optimitzador, la funció de pèrdua i les mètriques per avaluar el model.
-
Resum del Model:
- Mostra un resum de l'arquitectura del model.
Exercici Pràctic
Exercici: Modifica l'exemple anterior per afegir una capa convolucional addicional amb 128 filtres i una capa de pooling després de la tercera capa convolucional.
Solució:
import tensorflow as tf from tensorflow.keras import layers, models # Definim el model model = models.Sequential() # Capa convolucional i de pooling model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3))) model.add(layers.MaxPooling2D((2, 2))) # Afegim més capes convolucionals i de pooling model.add(layers.Conv2D(64, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) model.add(layers.Conv2D(64, (3, 3), activation='relu')) # Nova capa convolucional i de pooling model.add(layers.Conv2D(128, (3, 3), activation='relu')) model.add(layers.MaxPooling2D((2, 2))) # Capes completament connectades model.add(layers.Flatten()) model.add(layers.Dense(64, activation='relu')) model.add(layers.Dense(10, activation='softmax')) # Compilació del model model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy']) # Resum del model model.summary()
Errors Comuns i Consells
-
Sobreajustament:
- Utilitza tècniques de regularització com Dropout per evitar el sobreajustament.
-
Elecció de la Funció d'Activació:
- ReLU és una elecció comuna per capes convolucionals, però altres funcions com Leaky ReLU poden ser útils en alguns casos.
-
Dimensions d'Entrada:
- Assegura't que les dimensions d'entrada de les imatges coincideixin amb les especificades en la primera capa convolucional.
Resum
En aquesta secció, hem introduït les Xarxes Neuronals Convolucionals (CNN), les seves característiques clau i l'arquitectura bàsica. També hem proporcionat un exemple pràctic de com construir una CNN utilitzant Keras i hem discutit alguns errors comuns i consells per evitar-los. En la següent secció, explorarem les capes convolutionals i de pooling en més detall.
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