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
- Comprendre la importància de les CNN en la classificació d'imatges.
- Aprendre a construir i entrenar una CNN utilitzant un framework com TensorFlow o PyTorch.
- 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:
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
- Construeix la CNN: Segueix els passos anteriors per construir i entrenar la teva CNN.
- 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ó.
- 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.
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