TensorFlow

TensorFlow

Tutorial TensorFlow: Modelo con API Secuencial

Aprende a crear modelos simples y efectivos con la API Secuencial de Keras. Descubre su uso, ventajas, y ejemplos prácticos en aprendizaje profundo.

Aprende TensorFlow GRATIS y certifícate

Definición de la API Secuencial

La API Secuencial de Keras es una herramienta que permite construir modelos de aprendizaje profundo de manera lineal y ordenada. Se basa en la idea de apilar capas de forma secuencial, donde la salida de una capa es la entrada de la siguiente. Esta estructura es ideal para modelos simples y directos, como redes neuronales feedforward.

Utilizar la API Secuencial facilita el proceso de desarrollo, ya que ofrece una sintaxis clara y concisa. Los modelos se construyen agregando capas una tras otra, lo que permite una rápida prototipación y un fácil mantenimiento del código. Esto es especialmente útil para aquellos que se inician en el mundo del aprendizaje profundo o para proyectos que no requieren arquitecturas complejas.

Sin embargo, la API Secuencial tiene limitaciones cuando se trata de modelos más sofisticados. No es adecuada para crear redes con múltiples entradas o salidas, conexiones no lineales o capas compartidas. En esos casos, es preferible utilizar la API Funcional de Keras, que ofrece mayor flexibilidad y control sobre la arquitectura del modelo.

A pesar de sus limitaciones, la API Secuencial sigue siendo una opción popular debido a su simplicidad y eficiencia. Es una excelente elección para desarrollar modelos como clasificadores básicos, regresiones y otras aplicaciones donde una estructura lineal es suficiente para capturar las relaciones en los datos.

Creación de un modelo secuencial

Para comenzar a construir un modelo secuencial en Keras, es necesario importar las bibliotecas adecuadas y crear una instancia de la clase Sequential. Esta clase es fundamental en la API Secuencial y permite agregar capas de manera ordenada para definir la arquitectura de la red neuronal.

Primero, es importante importar Sequential desde el módulo keras.models y cualquier otra capa que se vaya a utilizar. A continuación, se puede crear un objeto modelo que represente nuestra red neuronal.

from tensorflow.keras.models import Sequential

modelo = Sequential()

Con estas líneas, hemos creado un modelo secuencial vacío al que se le podrán añadir capas posteriormente. Este modelo servirá como contenedor para las capas que definirán las operaciones de aprendizaje.

Alternativamente, es posible inicializar el modelo y agregar las capas al mismo tiempo utilizando una lista de capas. Este enfoque es útil cuando se tiene claridad sobre la estructura completa del modelo desde el inicio.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Input

# Capa de entrada explícita
modelo.add(Input(shape=(100,)))

modelo = Sequential([
    Dense(64),
    Activation('relu'),
    Dense(10),
    Activation('softmax')
])

En este ejemplo, hemos creado un modelo secuencial que incluye dos capas densas y dos funciones de activación. La primera capa Dense tiene 64 neuronas y espera una entrada de dimensión 100. La función de activación ReLU se aplica después de la primera capa. La segunda capa Dense tiene 10 neuronas, y se utiliza una función de activación softmax para producir probabilidades en problemas de clasificación multiclase.

Es importante destacar que el parámetro input_shape define la forma de los datos de entrada al modelo. Establecer correctamente este parámetro es crucial para asegurar que el modelo pueda procesar los datos adecuadamente.

Otra forma de crear un modelo secuencial es usando el método add para agregar capas una a una. Este método ofrece mayor flexibilidad para construir el modelo de manera incremental.

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

modelo = Sequential()
modelo.add(Dense(64, activation='relu'))
modelo.add(Dense(10, activation='softmax'))

Aquí, hemos utilizado el método add para añadir cada capa al modelo secuencial. La primera capa tiene una función de activación ReLU, y la segunda utiliza softmax. Este enfoque es útil cuando se desea añadir capas condicionalmente o iterar sobre ellas en bucles.

Se pueden combinar estos métodos según sea necesario, adaptando la construcción del modelo secuencial a las necesidades específicas del proyecto. Esta flexibilidad es una de las ventajas de utilizar la API Secuencial de Keras para desarrollar modelos de aprendizaje profundo.

Añadir capas al modelo

Una vez que se ha creado un modelo secuencial, es necesario añadir capas para definir la arquitectura de la red neuronal. Las capas son los bloques fundamentales que permiten a la red aprender y procesar información. En Keras, es posible agregar capas al modelo de forma incremental utilizando el método add.

Por ejemplo, para agregar una capa densa al modelo:

from tensorflow.keras.layers import Dense

modelo.add(Dense(units=64, activation='relu'))

En este ejemplo, hemos añadido una capa Dense con 64 neuronas y función de activación ReLU. El método add permite incorporar capas de diferentes tipos, lo que proporciona flexibilidad en la construcción del modelo.

Es importante prestar atención al input_shape al agregar la primera capa. Si no se especificó la forma de entrada al crear el modelo, es necesario definirla en la primera capa:

modelo.add(Dense(units=64, activation='relu'))

Además de las capas densas, es posible añadir otros tipos de capas como capas convolucionales, recurrentes, de pooling y más. Por ejemplo, para añadir una capa convolucional:

from tensorflow.keras.layers import Conv2D

modelo.add(Conv2D(filters=32, kernel_size=(3, 3), activation='relu'))

Aquí hemos incorporado una capa Conv2D con 32 filtros y un tamaño de kernel de 3x3. Al agregar capas de este tipo, es esencial ajustar los parámetros según el tipo de datos que se esté procesando.

También es posible utilizar bucles para añadir capas de forma programática. Esto es útil cuando se desea construir modelos con estructuras repetitivas:

for _ in range(3):
    modelo.add(Dense(units=64, activation='relu'))

Este código añade tres capas Dense idénticas al modelo. La capacidad de automatizar la adición de capas simplifica la creación de modelos más complejos.

Es relevante considerar que el orden en el que se añaden las capas afecta al flujo de datos a través del modelo. Cada capa toma como entrada la salida de la capa anterior, lo que constituye el principio de la arquitectura secuencial.

Para visualizar la estructura actual del modelo y asegurarse de que las capas se han añadido correctamente, se puede utilizar el método summary():

modelo.summary()

Este método proporciona un resumen detallado del modelo, incluyendo los tipos de capas, las dimensiones de salida y el número de parámetros entrenables.

En casos en los que sea necesario quitar la última capa añadida, se puede utilizar el método pop():

modelo.pop()

El uso de pop() es útil durante la fase de diseño y experimentación, permitiendo ajustar la arquitectura sin necesidad de recrear el modelo desde cero.

Es importante asegurarse de que las capas añadidas son compatibles entre sí en cuanto a las dimensiones de salida y entrada. Por ejemplo, al añadir una capa Flatten antes de una capa densa cuando se trabaja con datos multidimensionales:

from tensorflow.keras.layers import Flatten

modelo.add(Flatten())
modelo.add(Dense(units=128, activation='relu'))

La capa Flatten transforma una entrada multidimensional en un vector unidimensional, facilitando su procesamiento por capas densas. Tener en cuenta la coherencia dimensional entre capas es esencial para construir modelos funcionales.

Finalmente, se pueden agregar capas de regularización y dropout para mejorar la generalización del modelo:

from tensorflow.keras.layers import Dropout

modelo.add(Dropout(rate=0.5))

La capa Dropout desactiva aleatoriamente un porcentaje de neuronas durante el entrenamiento, lo que ayuda a prevenir el sobreajuste. Añadir estas capas en puntos estratégicos del modelo puede mejorar su rendimiento en datos no vistos.

En resumen, la adición de capas al modelo secuencial es un proceso flexible y modular. Aprovechando las diversas capas disponibles en Keras y utilizando prácticas adecuadas, es posible diseñar arquitecturas que se adapten a las necesidades específicas de cada problema.

Compilación del modelo

Después de definir la arquitectura de nuestra red neuronal añadiendo las capas necesarias, es imprescindible compilar el modelo antes de proceder al entrenamiento. La compilación del modelo en Keras configura los parámetros clave que determinarán cómo el modelo aprenderá de los datos.

Durante la compilación, se especifica la función de pérdida (loss function) que el modelo utilizará para cuantificar la discrepancia entre las predicciones y los valores reales. Esta función es esencial para guiar el proceso de optimización y ajustar los pesos de la red neuronal.

Además, es necesario definir el optimizador que actualizará los pesos del modelo basándose en la función de pérdida. Keras ofrece diversos optimizadores, como SGD, Adam y RMSprop, que implementan diferentes algoritmos de actualización de pesos.

También se pueden especificar las métricas que se emplearán para evaluar el rendimiento del modelo durante el entrenamiento y la validación. Las métricas proporcionan información adicional sobre el comportamiento del modelo más allá de la función de pérdida.

La compilación del modelo se realiza mediante el método compile() del objeto Sequential. A continuación se muestra un ejemplo de cómo compilar un modelo con una función de pérdida específica, un optimizador y métricas:

modelo.compile(optimizer='adam',
               loss='categorical_crossentropy',
               metrics=['accuracy'])

En este ejemplo, hemos elegido el optimizador Adam, que es ampliamente utilizado debido a su eficacia y adaptabilidad. La función de pérdida categorical_crossentropy es adecuada para problemas de clasificación multiclase, y la métrica accuracy nos permite monitorizar la precisión del modelo.

Es posible personalizar aún más los parámetros del optimizador proporcionando un objeto de optimizador con configuraciones específicas. Por ejemplo:

from tensorflow.keras.optimizers import Adam

optimizador = Adam(learning_rate=0.001)
modelo.compile(optimizer=optimizador,
               loss='binary_crossentropy',
               metrics=['accuracy'])

Aquí hemos creado una instancia del optimizador Adam con una tasa de aprendizaje (learning rate) de 0.001. La función de pérdida binary_crossentropy es apropiada para problemas de clasificación binaria.

Si el modelo aborda un problema de regresión, es necesario seleccionar una función de pérdida y métricas adecuadas. Por ejemplo:

modelo.compile(optimizer='adam',
               loss='mean_squared_error',
               metrics=['mean_absolute_error'])

En este caso, utilizamos la función de pérdida mean_squared_error para minimizar el error cuadrático medio, y la métrica mean_absolute_error para evaluar el error medio absoluto.

Es importante seleccionar la combinación correcta de función de pérdida, optimizador y métricas según la naturaleza del problema. Una configuración adecuada facilita un entrenamiento eficiente y mejora el rendimiento del modelo.

Además de las funciones predefinidas, Keras permite utilizar funciones de pérdida y métricas personalizadas. Para ello, se pueden definir funciones propias que sigan la interfaz requerida. Por ejemplo:

def mi_funcion_perdida(y_real, y_pred):
    return some_tensorflow_operation(y_real, y_pred)

modelo.compile(optimizer='adam',
               loss=mi_funcion_perdida,
               metrics=['accuracy'])

La posibilidad de utilizar funciones personalizadas ofrece flexibilidad para abordar problemas específicos y experimentar con distintas estrategias de aprendizaje.

Entrenamiento y evaluación del modelo

Una vez que el modelo ha sido compilado, es momento de proceder con el entrenamiento utilizando datos adecuados. El entrenamiento implica ajustar los pesos del modelo para minimizar la función de pérdida, basándose en los datos de entrada y sus etiquetas correspondientes.

Para entrenar el modelo, se utiliza el método fit(), que recibe como argumentos principales los datos de entrada, las etiquetas, el número de épocas y el tamaño del lote. A continuación se muestra un ejemplo:

historial = modelo.fit(x_entrenamiento, y_entrenamiento, epochs=10, batch_size=32)

En este caso, x_entrenamiento es el conjunto de datos de entrada y y_entrenamiento son las etiquetas asociadas. El parámetro epochs indica el número de veces que el algoritmo verá todo el conjunto de datos, mientras que batch_size define el número de muestras que se procesarán antes de actualizar los parámetros internos del modelo.

Es recomendable monitorizar el proceso de entrenamiento para detectar posibles sobreajustes. Para ello, se puede proporcionar un conjunto de validación utilizando el argumento validation_data o validation_split:

historial = modelo.fit(x_entrenamiento, y_entrenamiento, 
                       validation_split=0.2, epochs=10, batch_size=32)

Al establecer validation_split=0.2, el 20% de los datos de entrenamiento se utilizarán para validación, lo que permite evaluar el rendimiento del modelo en datos no vistos durante el entrenamiento.

El objeto historial devuelto por fit() contiene información valiosa sobre la evolución de la función de pérdida y las métricas a lo largo de las épocas. Esta información se puede utilizar para visualizar el progreso del entrenamiento:

import matplotlib.pyplot as plt

plt.plot(historial.history['loss'], label='Pérdida de entrenamiento')
plt.plot(historial.history['val_loss'], label='Pérdida de validación')
plt.xlabel('Épocas')
plt.ylabel('Pérdida')
plt.legend()
plt.show()

Tras el entrenamiento, es fundamental evaluar el modelo para determinar su rendimiento en datos nuevos. Para ello, se utiliza el método evaluate(), que devuelve el valor de la función de pérdida y las métricas definidas:

resultado = modelo.evaluate(x_prueba, y_prueba, batch_size=32)
print(f'Pérdida en el conjunto de prueba: {resultado[0]}')
print(f'Métrica en el conjunto de prueba: {resultado[1]}')

Aquí, x_prueba y y_prueba corresponden al conjunto de datos de prueba. Evaluar el modelo en este conjunto permite obtener una estimación objetiva de su capacidad de generalización.

Además de la evaluación, el modelo se puede utilizar para realizar predicciones sobre nuevos datos mediante el método predict():

predicciones = modelo.predict(x_nuevos)

Las predicciones obtenidas pueden transformarse según el problema. Por ejemplo, en una clasificación multiclase, se puede obtener la clase con mayor probabilidad:

import numpy as np

clases_predichas = np.argmax(predicciones, axis=1)

Es importante considerar técnicas de regularización y utilizar callbacks para mejorar el entrenamiento. Por ejemplo, el uso de EarlyStopping permite detener el entrenamiento cuando la mejora en la pérdida de validación se estanca:

from tensorflow.keras.callbacks import EarlyStopping

early_stopping = EarlyStopping(monitor='val_loss', patience=3, restore_best_weights=True)

historial = modelo.fit(x_entrenamiento, y_entrenamiento, 
                       validation_split=0.2, epochs=100, batch_size=32,
                       callbacks=[early_stopping])

El callback EarlyStopping supervisa la pérdida de validación y detiene el entrenamiento si no mejora después de 3 épocas, evitando así el sobreentrenamiento.

Finalmente, es aconsejable guardar el modelo entrenado para su posterior uso o despliegue:

modelo.save('modelo_entrenado.h5')

Esto permite cargar el modelo en otro momento sin necesidad de volver a entrenarlo:

from tensorflow.keras.models import load_model

modelo_cargado = load_model('modelo_entrenado.h5')

Al seguir estos pasos y considerar aspectos como la monitorización y la evaluación adecuada, se garantiza un proceso de entrenamiento eficaz que conduce a un modelo rentable y listo para ser utilizado en aplicaciones reales.

Aprende TensorFlow GRATIS online

Todas las lecciones de TensorFlow

Accede a todas las lecciones de TensorFlow y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Introducción Al Deep Learning Y Redes Neuronales

TensorFlow

Introducción Y Entorno

Introducción A Tensorflow

TensorFlow

Introducción Y Entorno

Introducción A Keras

TensorFlow

Introducción Y Entorno

Redes Neuronales De Múltiples Capas

TensorFlow

Introducción Y Entorno

Algoritmo De Backpropagation

TensorFlow

Introducción Y Entorno

Implementación De Una Red Neuronal Con Numpy

TensorFlow

Introducción Y Entorno

Modelo Con Api Secuencial

TensorFlow

Construcción De Modelos Con Keras

Modelo Con Api Funcional

TensorFlow

Construcción De Modelos Con Keras

Subclases De Modelos

TensorFlow

Construcción De Modelos Con Keras

Capas En Keras

TensorFlow

Construcción De Modelos Con Keras

Funciones De Activación

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Regresión

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Clasificación Binaria

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Densas De Clasificación Multiclase

TensorFlow

Construcción De Modelos Con Keras

Redes Convolucionales Cnn

TensorFlow

Construcción De Modelos Con Keras

Redes Recurrentes Rnn

TensorFlow

Construcción De Modelos Con Keras

Redes Neuronales Mixtas

TensorFlow

Construcción De Modelos Con Keras

Api Dataset

TensorFlow

Procesamiento De Datos

Manejo De Valores Faltantes

TensorFlow

Procesamiento De Datos

Encoding De Valores Categóricos En Continuos

TensorFlow

Procesamiento De Datos

Preprocesados De Escalado, Normalización Y Estandarización

TensorFlow

Procesamiento De Datos

Generación De Nuevas Características

TensorFlow

Procesamiento De Datos

Algoritmos De Optimización

TensorFlow

Entrenamiento Y Evaluación De Modelos

Técnicas De Validación

TensorFlow

Entrenamiento Y Evaluación De Modelos

Monitorización De Entrenamiento

TensorFlow

Entrenamiento Y Evaluación De Modelos

Redes Generativas Adversariales Gans

TensorFlow

Técnicas Avanzadas

Transformers

TensorFlow

Técnicas Avanzadas

Autoencoders

TensorFlow

Técnicas Avanzadas

Carga De Capas Ya Hechas

TensorFlow

Técnicas Avanzadas

Regularización De Modelos

TensorFlow

Herramientas Y Optimización

Hiperparámetros Con Keras Tuner

TensorFlow

Herramientas Y Optimización

Tensorboard

TensorFlow

Herramientas Y Optimización

Uso De Tensorflow Keras En Gpu

TensorFlow

Herramientas Y Optimización

Accede GRATIS a TensorFlow y certifícate

Objetivos de aprendizaje de esta lección

  • Comprender la estructura lineal de la API Secuencial.
  • Construir modelos secuenciales en Keras mediante capas agregadas.
  • Explorar las funciones add() y summary() para definir y revisar modelos.
  • Aprender a compilar y entrenar modelos secuenciales con datos etiquetados.
  • Implementar técnicas de regularización y guardar modelos entrenados.