¿Cómo generar la arquitectura de modelo en Deep Learning?

| Última modificación: 11 de octubre de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Cómo generar la arquitectura de modelo en Deep Learning es uno de los conocimientos base para un análisis de redes neuronales profundas. Por ello, en este post, te compartimos cómo funcionan las dos formas de generar la arquitectura de modelo en Deep Learning a partir de la biblioteca Keras.

¿Cómo generar la arquitectura de modelo en Deep Learning?

Existen dos formas de generar la arquitectura de un modelo en Deep Learning en la biblioteca Keras:

  • Modo (o API) secuencial: se instancia un objeto del tipo Model y a este se le van añadiendo las capas que conforman la arquitectura una detrás de otra.
  • Modo (o API) funcional: se define una entrada y, a partir de ella, se va definiendo la arquitectura indicando cuál es la entrada a cada capa. Una vez definida la arquitectura, se crea el objeto modelo pasándole las entradas y las salidas (última capa definida).

Ejemplo de Modo secuencial

Ahora vamos a implementar una red profunda (con dos capas ocultas de 256 y 60 neuronas) empleando Keras. Para ello, vamos a clasificar el dataset de dígitos manuscritos denominado MNIST:

## Imports necesarios
import numpy as np
from sklearn.metrics import classification_report
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Flatten
from tensorflow.keras.optimizers import SGD
import matplotlib.pyplot as plt
from tensorflow.keras.utils import to_categorical

# Importamos el dataset MNIST y cargamos los datos
from tensorflow.keras.datasets import mnist
(X_train, Y_train), (X_test, Y_test) = mnist.load_data()

##Pasamos a one-hot-encoding
Y_train=to_categorical(Y_train,num_classes=10)
Y_test=to_categorical(Y_test,num_classes=10)


# Implementamos la red empleando Keras (modelo secuencial)
model = Sequential()
model.add(Flatten(input_shape=(28,28)))
model.add(Dense(256, input_shape=(784,), activation="relu"))
model.add(Dense(60, activation="relu"))
model.add(Dense(10, activation="softmax"))

# Compilamos y entrenamos el modelo SGD
print("[INFO]: Entrenando red neuronal...")
model.compile(loss="categorical_crossentropy", optimizer=SGD(0.001), metrics=["accuracy"])
H = model.fit(X_train, Y_train, validation_data=(X_test, Y_test), epochs=30, batch_size=64)

# Evaluando el modelo de predicción con las imágenes de test
print("[INFO]: Evaluando red neuronal...")
predictions = model.predict(X_test, batch_size=128)
print(classification_report(Y_test.argmax(axis=1), predictions.argmax(axis=1)))

# Muestro gráfica de accuracy y losses
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, 30), H.history["loss"], label="train_loss")
plt.plot(np.arange(0, 30), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, 30), H.history["accuracy"], label="train_acc")
plt.plot(np.arange(0, 30), H.history["val_accuracy"], label="val_acc")
plt.title("Training Loss and Accuracy")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend()

Ejemplo de Modo funcional

En el último ejemplo, hemos diseñado una arquitectura en modo secuencial. Veamos los cambios necesarios para generar la arquitectura de modelo en Deep Learning en modo funcional:

## Imports necesarios
import numpy as np
from sklearn.metrics import classification_report
from tensorflow.keras.layers import Dense, Input,Flatten
from tensorflow.keras.optimizers import SGD
import matplotlib.pyplot as plt

# Importamos el dataset MNIST y cargamos los datos
# Importamos el dataset MNIST y cargamos los datos
from tensorflow.keras.datasets import mnist
(X_train, Y_train), (X_test, Y_test)= mnist.load_data() 

#Pasamos a one-hot-encoding
Y_train=to_categorical(Y_train,num_classes=10)
Y_test=to_categorical(Y_test,num_classes=10)

# Implementamos la red empleando Keras (modelo funcional)
inputs= Input(shape=(28,28))
x=Flatten(input_shape=(784,))(inputs)
x=Dense(256, activation="relu") (x)
x=Dense(60, activation="relu") (x)
x=Dense(10, activation="softmax")(x)

# Compilamos y entrenamos el modelo SGD
print("[INFO]: Entrenando red neuronal...")
model.compile(loss="categorical_crossentropy", optimizer=SGD(0.001), metrics=["accuracy"])
H = model.fit(X_train,Y_train, validation_data=(X_test, Y_test), epochs=30, batch_size=128)

# Evaluando el modelo de predicción con las imágenes de test
print("[INFO]: Evaluando red neuronal...")
predictions = model.predict(X_test, batch_size=128)
print(classification_report(Y_test.argmax(axis=1), predictions.argmax(axis=1)))

# Muestro gráfica de accuracy y losses
plt.style.use("ggplot")
plt.figure()
plt.plot(np.arange(0, 30), H.history["loss"], label="train_loss")
plt.plot(np.arange(0, 30), H.history["val_loss"], label="val_loss")
plt.plot(np.arange(0, 30), H.history["accuracy"], label="train_acc")
plt.plot(np.arange(0, 30), H.history["val_accuracy"], label="val_acc")
plt.title("Training Loss and Accuracy")
plt.xlabel("Epoch #")
plt.ylabel("Loss/Accuracy")
plt.legend()

Como se puede observar en la anterior ejecución, el perceptrón multicapa utilizado permite resolver con satisfacción la tarea de clasificación propuesta. Sin embargo, en la mayoría de problemas de clasificación de imagen, no es suficiente con crear un modelo de predicción basado en un perceptron multicapa.

Para problemas de cierta dificultad, este tipo de arquitectura no ofrece una solución precisa. Por este motivo se propusieron las redes neuronales convolucionales. Dichas formas de generar la arquitectura de modelo en Deep Learning de red extraen la información relevante automáticamente de la imagen por medio de la operación convolución de manera local (en la práctica dicha operación es la correlación cruzada).

¿Cómo continuar aprendiendo sobre el Big Data?

En este post, te explicamos cómo generar la arquitectura de modelo en Deep Learning en el desarrollo de un procesamiento de los macrodatos en este amplio mundo del aprendizaje profundo. Si quieres continuar aprendiendo sobre Deep Learning, arquitecturas y mucho más, como puede ser la arquitectura VGG16 y VGG19 en Deep Learning, con el Bootcamp Big Data de KeepCoding podrás aprender esto y mucho más para convertirte en un data scientist profesional en solo unos pocos meses. ¡No esperes más para inscribirte!

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