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ícateDefinició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.
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
Introducción Y Entorno
Introducción A Tensorflow
Introducción Y Entorno
Introducción A Keras
Introducción Y Entorno
Redes Neuronales De Múltiples Capas
Introducción Y Entorno
Algoritmo De Backpropagation
Introducción Y Entorno
Implementación De Una Red Neuronal Con Numpy
Introducción Y Entorno
Modelo Con Api Secuencial
Construcción De Modelos Con Keras
Modelo Con Api Funcional
Construcción De Modelos Con Keras
Subclases De Modelos
Construcción De Modelos Con Keras
Capas En Keras
Construcción De Modelos Con Keras
Funciones De Activación
Construcción De Modelos Con Keras
Redes Neuronales Densas De Regresión
Construcción De Modelos Con Keras
Redes Neuronales Densas De Clasificación Binaria
Construcción De Modelos Con Keras
Redes Neuronales Densas De Clasificación Multiclase
Construcción De Modelos Con Keras
Redes Convolucionales Cnn
Construcción De Modelos Con Keras
Redes Recurrentes Rnn
Construcción De Modelos Con Keras
Redes Neuronales Mixtas
Construcción De Modelos Con Keras
Api Dataset
Procesamiento De Datos
Manejo De Valores Faltantes
Procesamiento De Datos
Encoding De Valores Categóricos En Continuos
Procesamiento De Datos
Preprocesados De Escalado, Normalización Y Estandarización
Procesamiento De Datos
Generación De Nuevas Características
Procesamiento De Datos
Algoritmos De Optimización
Entrenamiento Y Evaluación De Modelos
Técnicas De Validación
Entrenamiento Y Evaluación De Modelos
Monitorización De Entrenamiento
Entrenamiento Y Evaluación De Modelos
Redes Generativas Adversariales Gans
Técnicas Avanzadas
Transformers
Técnicas Avanzadas
Autoencoders
Técnicas Avanzadas
Carga De Capas Ya Hechas
Técnicas Avanzadas
Regularización De Modelos
Herramientas Y Optimización
Hiperparámetros Con Keras Tuner
Herramientas Y Optimización
Tensorboard
Herramientas Y Optimización
Uso De Tensorflow Keras En Gpu
Herramientas Y Optimización
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()
ysummary()
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.