Introducció

En aquest tema, aprendrem a utilitzar Xarxes Neuronals Convolucionals (CNN) per a la classificació d'imatges. Les CNN són especialment efectives per a tasques de visió per computador gràcies a la seva capacitat per detectar patrons espacials i jeràrquics en les imatges.

Objectius

  1. Comprendre la importància de les CNN en la classificació d'imatges.
  2. Aprendre a construir i entrenar una CNN utilitzant un framework com TensorFlow o PyTorch.
  3. Avaluar el rendiment del model i ajustar-lo per millorar la seva precisió.

Conceptes Clau

Xarxes Neuronals Convolucionals (CNN)

Les CNN són un tipus de xarxa neuronal especialment dissenyada per processar dades amb una estructura de graella, com les imatges. Les capes principals d'una CNN són:

  • Capes Convolucionals: Detecten característiques locals de les imatges.
  • Capes de Pooling: Redueixen la dimensionalitat de les dades, mantenint les característiques més importants.
  • Capes Completament Connectades: Finalitzen la classificació basant-se en les característiques detectades.

Dataset

Per a aquest exemple, utilitzarem el dataset CIFAR-10, que conté 60,000 imatges de 32x32 píxels en 10 classes diferents.

Construcció d'una CNN amb TensorFlow

Instal·lació de TensorFlow

Assegura't de tenir instal·lat TensorFlow. Pots instal·lar-lo utilitzant pip:

pip install tensorflow

Importació de Llibreries

import tensorflow as tf
from tensorflow.keras import datasets, layers, models
import matplotlib.pyplot as plt

Càrrega i Preprocessament del Dataset

# Càrrega del dataset CIFAR-10
(train_images, train_labels), (test_images, test_labels) = datasets.cifar10.load_data()

# Normalització de les imatges
train_images, test_images = train_images / 255.0, test_images / 255.0

Construcció del Model CNN

model = models.Sequential()
model.add(layers.Conv2D(32, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(64, (3, 3), activation='relu'))

model.add(layers.Flatten())
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(10))

Compilació del Model

model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

Entrenament del Model

history = model.fit(train_images, train_labels, epochs=10, 
                    validation_data=(test_images, test_labels))

Avaluació del Model

test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'\nTest accuracy: {test_acc}')

Visualització dels Resultats

plt.plot(history.history['accuracy'], label='accuracy')
plt.plot(history.history['val_accuracy'], label = 'val_accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.ylim([0, 1])
plt.legend(loc='lower right')
plt.show()

Exercici Pràctic

Objectiu

Construeix una CNN per classificar imatges del dataset CIFAR-10 i millora la seva precisió ajustant els hiperparàmetres.

Passos

  1. Construeix la CNN: Segueix els passos anteriors per construir i entrenar la teva CNN.
  2. Ajusta els Hiperparàmetres: Prova diferents valors per als hiperparàmetres com el nombre de capes convolucionals, el nombre de filtres, la mida del kernel, i el tipus de funció d'activació.
  3. Avaluació i Millora: Avaluar el rendiment del model i realitzar ajustos per millorar la precisió.

Solució Proposada

# Construcció del model amb ajustos
model = models.Sequential()
model.add(layers.Conv2D(64, (3, 3), activation='relu', input_shape=(32, 32, 3)))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))
model.add(layers.MaxPooling2D((2, 2)))
model.add(layers.Conv2D(128, (3, 3), activation='relu'))

model.add(layers.Flatten())
model.add(layers.Dense(128, activation='relu'))
model.add(layers.Dense(10))

# Compilació del model
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
              metrics=['accuracy'])

# Entrenament del model
history = model.fit(train_images, train_labels, epochs=15, 
                    validation_data=(test_images, test_labels))

# Avaluació del model
test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
print(f'\nTest accuracy: {test_acc}')

Errors Comuns i Consells

  • Sobreajustament: Si la precisió en el conjunt d'entrenament és molt més alta que en el conjunt de validació, és possible que el model estigui sobreajustant. Prova utilitzar tècniques de regularització com Dropout.
  • Subajustament: Si el model no aconsegueix una bona precisió ni en el conjunt d'entrenament ni en el de validació, prova augmentar la complexitat del model afegint més capes o neurones.
  • Normalització: Assegura't de normalitzar les imatges per millorar la convergència durant l'entrenament.

Resum

En aquesta secció, hem après a construir i entrenar una CNN per a la classificació d'imatges utilitzant TensorFlow. Hem explorat els conceptes clau de les CNN i hem practicat ajustant els hiperparàmetres per millorar el rendiment del model. En la següent secció, explorarem la generació de text amb RNN.

© Copyright 2024. Tots els drets reservats