En aquest tema, explorarem algunes de les arquitectures més avançades de xarxes neuronals convolucionals (CNNs) que han demostrat ser molt efectives en diverses tasques de visió per computador. Aquestes arquitectures han estat desenvolupades per abordar diferents problemes com la profunditat de la xarxa, la capacitat de generalització i l'eficiència computacional.
Contingut
- Introducció a les arquitectures avançades de CNN
- VGGNet
- Inception (GoogLeNet)
- ResNet
- DenseNet
- Exercicis pràctics
- Conclusió
- Introducció a les arquitectures avançades de CNN
Les arquitectures avançades de CNN han estat dissenyades per millorar el rendiment en tasques de classificació d'imatges, detecció d'objectes i segmentació d'imatges. Aquestes arquitectures sovint inclouen innovacions en la manera com es construeixen les capes convolucionals i com es connecten entre elles.
- VGGNet
Descripció
VGGNet, proposada per Simonyan i Zisserman en 2014, és coneguda per la seva simplicitat i profunditat. Utilitza capes convolucionals de 3x3 píxels amb un pas de 1 i padding de 1 píxel, seguides de capes de max-pooling de 2x2 amb un pas de 2.
Arquitectura
Capa | Tipus | Dimensions |
---|---|---|
1 | Conv 3x3 | 64 filtres |
2 | Conv 3x3 | 64 filtres |
3 | Max-Pooling | 2x2 |
4 | Conv 3x3 | 128 filtres |
5 | Conv 3x3 | 128 filtres |
6 | Max-Pooling | 2x2 |
... | ... | ... |
16 | FC | 4096 neurones |
17 | FC | 4096 neurones |
18 | FC | 1000 neurones (sortida) |
Implementació en TensorFlow
import tensorflow as tf from tensorflow.keras import layers, models def VGGNet(input_shape=(224, 224, 3), num_classes=1000): model = models.Sequential() model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=input_shape)) model.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same')) model.add(layers.MaxPooling2D((2, 2), strides=(2, 2))) model.add(layers.Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(layers.Conv2D(128, (3, 3), activation='relu', padding='same')) model.add(layers.MaxPooling2D((2, 2), strides=(2, 2))) # Add more layers as needed... model.add(layers.Flatten()) model.add(layers.Dense(4096, activation='relu')) model.add(layers.Dense(4096, activation='relu')) model.add(layers.Dense(num_classes, activation='softmax')) return model model = VGGNet() model.summary()
- Inception (GoogLeNet)
Descripció
Inception, també coneguda com GoogLeNet, va ser proposada per Szegedy et al. en 2014. La seva innovació principal és l'ús de mòduls Inception, que permeten a la xarxa decidir quines convolucions (1x1, 3x3, 5x5) són més adequades per a cada part de l'entrada.
Arquitectura
Capa | Tipus | Dimensions |
---|---|---|
1 | Conv 7x7 | 64 filtres |
2 | Max-Pooling | 3x3 |
3 | Conv 1x1 | 64 filtres |
4 | Conv 3x3 | 192 filtres |
5 | Max-Pooling | 3x3 |
6 | Inception | 256 filtres |
... | ... | ... |
22 | FC | 1000 neurones (sortida) |
Implementació en TensorFlow
def inception_module(x, filters): f1, f3_r, f3, f5_r, f5, proj = filters conv1 = layers.Conv2D(f1, (1, 1), padding='same', activation='relu')(x) conv3 = layers.Conv2D(f3_r, (1, 1), padding='same', activation='relu')(x) conv3 = layers.Conv2D(f3, (3, 3), padding='same', activation='relu')(conv3) conv5 = layers.Conv2D(f5_r, (1, 1), padding='same', activation='relu')(x) conv5 = layers.Conv2D(f5, (5, 5), padding='same', activation='relu')(conv5) pool_proj = layers.MaxPooling2D((3, 3), strides=(1, 1), padding='same')(x) pool_proj = layers.Conv2D(proj, (1, 1), padding='same', activation='relu')(pool_proj) output = layers.concatenate([conv1, conv3, conv5, pool_proj], axis=-1) return output input_layer = layers.Input(shape=(224, 224, 3)) x = inception_module(input_layer, [64, 96, 128, 16, 32, 32]) # Add more inception modules as needed... model = models.Model(input_layer, x) model.summary()
- ResNet
Descripció
ResNet, proposada per He et al. en 2015, introdueix el concepte de "residual learning" per permetre la construcció de xarxes molt profundes. Utilitza connexions residuals per evitar el problema de la degradació en xarxes profundes.
Arquitectura
Capa | Tipus | Dimensions |
---|---|---|
1 | Conv 7x7 | 64 filtres |
2 | Max-Pooling | 3x3 |
3 | Residual Block | 64 filtres |
4 | Residual Block | 128 filtres |
... | ... | ... |
50 | FC | 1000 neurones (sortida) |
Implementació en TensorFlow
def residual_block(x, filters, kernel_size=3, stride=1): shortcut = x x = layers.Conv2D(filters, kernel_size, strides=stride, padding='same', activation='relu')(x) x = layers.Conv2D(filters, kernel_size, strides=1, padding='same')(x) x = layers.add([x, shortcut]) x = layers.Activation('relu')(x) return x input_layer = layers.Input(shape=(224, 224, 3)) x = layers.Conv2D(64, (7, 7), strides=(2, 2), padding='same', activation='relu')(input_layer) x = layers.MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x) x = residual_block(x, 64) # Add more residual blocks as needed... model = models.Model(input_layer, x) model.summary()
- DenseNet
Descripció
DenseNet, proposada per Huang et al. en 2017, connecta cada capa amb totes les capes anteriors. Això millora la propagació de la informació i els gradients a través de la xarxa.
Arquitectura
Capa | Tipus | Dimensions |
---|---|---|
1 | Conv 7x7 | 64 filtres |
2 | Max-Pooling | 3x3 |
3 | Dense Block | 32 filtres |
4 | Transition Layer | 128 filtres |
... | ... | ... |
121 | FC | 1000 neurones (sortida) |
Implementació en TensorFlow
def dense_block(x, num_layers, growth_rate): for _ in range(num_layers): cb = layers.BatchNormalization()(x) cb = layers.Activation('relu')(cb) cb = layers.Conv2D(growth_rate, (3, 3), padding='same')(cb) x = layers.concatenate([x, cb]) return x input_layer = layers.Input(shape=(224, 224, 3)) x = layers.Conv2D(64, (7, 7), strides=(2, 2), padding='same', activation='relu')(input_layer) x = layers.MaxPooling2D((3, 3), strides=(2, 2), padding='same')(x) x = dense_block(x, 6, 32) # Add more dense blocks and transition layers as needed... model = models.Model(input_layer, x) model.summary()
- Exercicis pràctics
Exercici 1: Implementar una VGGNet
Implementa una VGGNet amb les especificacions donades i entrena-la amb el dataset CIFAR-10.
Exercici 2: Construir un mòdul Inception
Construeix un mòdul Inception i afegeix-lo a una xarxa existent. Entrena la xarxa amb el dataset MNIST.
Exercici 3: Crear una ResNet
Implementa una ResNet amb 20 capes i entrena-la amb el dataset CIFAR-100.
Exercici 4: Desenvolupar una DenseNet
Implementa una DenseNet amb 3 blocs densos i entrena-la amb el dataset Fashion MNIST.
- Conclusió
En aquest tema, hem explorat algunes de les arquitectures avançades de CNN més influents i efectives. Hem vist com aquestes arquitectures aborden diferents problemes i milloren el rendiment en tasques de visió per computador. Amb els exercicis pràctics, tindràs l'oportunitat d'implementar i entrenar aquestes xarxes per comprendre millor el seu funcionament i aplicació.
En el següent mòdul, ens endinsarem en les xarxes neuronals recurrents (RNNs) i veurem com es poden utilitzar per a tasques seqüencials com el processament de llenguatge natural i la predicció de sèries temporals.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres