Feature extractor y classifier de red neuronal convolucional

| Última modificación: 11 de julio de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Los aspectos como el feature extractor y classifier de red neuronal convolucional deben tenerse en cuenta a la hora de enfrentarse a este tipo de análisis en el procesamiento del Big Data dentro del Deep Learning, puesto que estas etapas son una parte fundamental de su desarrollo.


Ahora, en este post, te explicamos cada una de estas capas: feature extractor y classifier de red neuronal convolucional.

Feature extractor y classifier de red neuronal convolucional

Ya debes haber notado que la CNN tiene dos etapas: feature extractor y classifier de red neuronal convolucional. De manera que primero extrae unos determinados patrones haciendo uso de la primera etapa (base model), que son los que mejor le vienen a la etapa posterior de clasificador (top model) para llevar a cabo su trabajo con la mayor precisión posible.

Feature extractor 

La etapa de feature extraction va de menos a más, es decir, las primeras capas convolucionales detectan líneas en diferentes orientaciones, las siguientes detectan ya formas y colores, las siguientes patrones más complejos, etc.

Classifier

La segunda etapa del clasificador está compuesta por capas densas, que son las capas que se usan en las redes neuronales tradicionales. Por lo que, finalmente, podría entenderse a una CNN como un conjunto de etapas convolucionales acopladas a una red neuronal tradicional, que es la que clasifica los patrones extraídos por las convoluciones y devuelve unas probabilidades para cada clase.

¿Y cómo va aprendiendo? De la misma forma que una red neuronal tradicional.

Así, al final, lo que tenemos es una red que aprende por sí misma y que elige las características ella sola, de manera que no hace falta que nos preocupemos de qué características escogemos para clasificar.

Ejemplo práctico

Vamos a implementar una red que permita diferenciar entre 10 tipos de objetos. Para ello, emplearemos el dataset CIFAR-10, que consta de 60.000 imágenes en color, de 32×32 píxeles, repartidas en las 10 clases que puedes apreciar a continuación.

El dataset está dividido en 50.000 imágenes para entrenamiento y 10.000 para test.

Para esta implementación no vamos a utilizar TensorFlow, sino Keras. A partir de ahora, utilizaremos la versión de TensorFlow que viene por defecto en Google Colab.

# Vamos a implementar una red que permita diferenciar entre 10 tipos de objetos
# Dataset original e info: https://www.cs.toronto.edu/~kriz/cifar.html

# Imports necesarios
import numpy as np
from tensorflow.keras.datasets import cifar10
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten, Conv2D, MaxPooling2D
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.utils import to_categorical

# Para hacerlo reproducible
np.random.seed(42)

# Cargamos el dataset
(X_train, Y_train), (X_test, Y_test) = cifar10.load_data()
# Vamos a ver algunas imágenes de cada clase
import matplotlib.pyplot as plt
class_names = ['airplane','automobile','bird','cat','deer',
               'dog','frog','horse','ship','truck']
fig = plt.figure(figsize=(8,3))
for i in range(len(class_names)):
  ax = fig.add_subplot(2, 5, 1 + i, xticks=[], yticks=[])
  idx = np.where(Y_train[:]==i)[0]
  features_idx = X_train[idx,::]
  img_num = np.random.randint(features_idx.shape[0])
  im = features_idx[img_num,::]
  ax.set_title(class_names[i])
  #im = np.transpose(features_idx[img_num,::], (1, 2, 0))
  plt.imshow(im)
plt.show()
# Inicializamos el modelo
model = Sequential()

# Definimos una capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu', input_shape=(32, 32, 3)))

# Definimos una segunda capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Definimos una tercera capa convolucional
model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))

# Añadimos nuestro clasificador
model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dense(10, activation='softmax'))

# Compilamos el modelo
model.compile(loss='categorical_crossentropy',
              optimizer=Adam(lr=0.0001, decay=1e-6),
              metrics=['accuracy'])

# Entrenamos el modelo
model.fit(X_train, to_categorical(Y_train),
          batch_size=128,
          shuffle=True,
          epochs=10,
          validation_data=(X_test, to_categorical(Y_test)))

# Evaluamos el modelo
scores = model.evaluate(X_test, to_categorical(Y_test))

print('Loss: %.3f' % scores[0])
print('Accuracy: %.3f' % scores[1])

En este post, te hemos expuesto cómo funcionan el feature extractor y classifier de red neuronal convolucional dentro del análisis de redes neuronales convolucionales para el desarrollo del Deep Learning dentro del manejo del procesamiento de los macrodatos. Ahora, esperamos que te haya servido de ayuda y puedas comprender más cómo se instauran estos factores en tu estudio de Big Data.

Por otra parte, desde KeepCoding te ofrecemos la mejor opción para seguir instruyéndote: nuestro Bootcamp Data Science. En su desarrollo, podrás profundizar en el análisis de los datos mediante el reporting por medio del uso de una herramienta llamada Tableau, muy conocida en el mundo del Business Intelligence del Big Data. 

Por otra parte, comprenderás que el análisis visual es el objetivo final de un procesamiento de los macrodatos, puesto que, a través de este, podrás proporcionar información muy útil para una empresa como respuesta a los problemas de negocio. Todo ello, con un aspecto personalizado, ágil e inmediato. ¡Inscríbete y empieza ahora!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado