No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Creación de red convolucional para clasificación

14/25
Recursos

Aportes 5

Preguntas 2

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

¿Por qué se utiliza una función de activación (en este caso ReLU) en la capa de extracción de características / feature maps?


Como se vió en el curso pasado, en una red neuronal artificial la función de activación es usada debido a que la salida de las neuronas artificiales da como resultado una función lineal y por lo tanto la suma de funciones lineales da como resultado otra función lineal.

En el caso de las redes neuronales convolucionales, la función de activación también es usada en la extracción de características/ feature maps debido a que ésta misma consta de 3 operaciones básicas:

  • Filtrar una imagen para una característica en particular (convolución)
  • Detectar esa característica dentro de la imagen filtrada (ReLU)
  • Condensar la imagen para realzar las características (pooling)


Aquí una imagen para ilustrar lo mencionado anteriormente:

El código:

model = Sequential()
## conv 1
model.add(Conv2D(base_filtros, (3,3), padding="same", 
                 kernel_regularizer=regularizers.l2(w_regularizer),
                 input_shape=x_train.shape[1:]))

model.add(Activation('relu'))

## conv 2
model.add(Conv2D(base_filtros, (3,3), padding="same", 
                 kernel_regularizer=regularizers.l2(w_regularizer)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.2))

## conv 3
model.add(Conv2D(2*base_filtros, (3,3), padding="same", 
                 kernel_regularizer=regularizers.l2(w_regularizer)))
model.add(Activation('relu'))

## conv 4
model.add(Conv2D(2*base_filtros, (3,3), padding="same", 
                 kernel_regularizer=regularizers.l2(w_regularizer)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.3))

## conv 5
model.add(Conv2D(4*base_filtros, (3,3), padding="same", 
                 kernel_regularizer=regularizers.l2(w_regularizer)))
model.add(Activation('relu'))

## conv 6
model.add(Conv2D(4*base_filtros, (3,3), padding="same", 
                 kernel_regularizer=regularizers.l2(w_regularizer)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.4))

## Clasificación-Flatten
model.add(Flatten())
model.add(Dense(num_class, activation='softmax'))

model.summary()

Al ver este taller, me queda claro que las redes neuronales cuando no se hacen con transfer learning, son una obra de arte o un tiro al aire para ver si le o no debido a la cantidad de hiperparametros de estos modelos de redes neuronales. Todas se van a adaptar al problema en cuestion y cuando llegue información nueva a la red neuronal esta se va a eloquecer nuevamente. Luego para entender que esta pasando en la red neuronal es un complique porque son modelos de caja negra y unicamente con shapley o alguna libreria de ese estilo sabra que esta pasando.

En CNNs, `base_filters` (p. ej., 32) ajusta la complejidad inicial. `w_regularizer` (p. ej., 1e-4) controla la penalización de pesos para prevenir sobreajuste. Ajustar estos valores impacta en la capacidad de aprendizaje y generalización del modelo

En resumen, el modelo, tiene varias capas convolucionales con activaciones ReLU, capas de pooling para reducir la dimensión espacial, capas de dropout para reducir el sobreajuste, una capa densa para la clasificación y una capa Flatten para convertir los datos. El modelo tiene un total de 307,498 parámetros entrenables, lo que es genial. Esta clase se me hizo muy larga pero fue muy buena