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

  1. 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.
  2. Capes de Pooling:

    • Redueixen la dimensió espacial de les mapes de característiques.
    • Ajuda a reduir la complexitat computacional i a controlar el sobreajustament.
  3. 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.
  4. 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:

  1. Capa d'Entrada:

    • Imatge d'entrada (per exemple, 32x32x3 per una imatge RGB).
  2. Capa Convolucional:

    • Aplica diversos filtres per generar mapes de característiques.
  3. Capa de Pooling:

    • Redueix la dimensió espacial dels mapes de característiques.
  4. Repetició de Capes Convolucionals i de Pooling:

    • Es poden afegir múltiples capes convolucionals i de pooling per extreure característiques més complexes.
  5. Capes Completament Connectades:

    • Processen les característiques extretes per fer la classificació final.
  6. 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

  1. Importació de Biblioteques:

    • tensorflow i keras per construir i entrenar la CNN.
  2. Definició del Model:

    • Utilitzem Sequential per crear un model seqüencial.
  3. 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.
  4. 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.
  5. Compilació del Model:

    • Especifica l'optimitzador, la funció de pèrdua i les mètriques per avaluar el model.
  6. 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

  1. Sobreajustament:

    • Utilitza tècniques de regularització com Dropout per evitar el sobreajustament.
  2. 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.
  3. 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.

© Copyright 2024. Tots els drets reservats