TensorFlow

TensorFlow

Tutorial TensorFlow: Redes recurrentes RNN

Aprende a implementar redes recurrentes (RNN), LSTM y GRU en Keras para procesar secuencias y datos temporales. Descubre sus aplicaciones en series temporales, NLP y generación de texto.

Aprende TensorFlow GRATIS y certifícate

Fundamentos de las redes recurrentes RNN

Las redes recurrentes (RNN, por sus siglas en inglés) son un tipo de red neuronal diseñada para procesar datos secuenciales. Lo que las distingue de las redes neuronales tradicionales es su memoria interna, que les permite conservar información de entradas previas. Esto las hace especialmente útiles en tareas donde el contexto y el orden son esenciales, como el procesamiento del lenguaje natural, la traducción automática y el análisis de series temporales.

Cómo funcionan las RNN

En una RNN típica, cada neurona no solo recibe información de la capa anterior, sino también una retroalimentación de sí misma basada en el estado anterior. Esta estructura permite capturar dependencias temporales en los datos. Por ejemplo, en el análisis de texto, el significado de una palabra puede depender de las palabras que la preceden en una oración.

El modelo básico de una RNN se puede implementar en Keras utilizando la API secuencial:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense

model = Sequential([
    SimpleRNN(units=50, input_shape=(timesteps, features)),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo:

  • SimpleRNN procesa una secuencia de longitud timesteps con un número determinado de características (features).
  • La unidad RNN mantiene un estado interno que evoluciona a lo largo de la secuencia, permitiendo al modelo aprender patrones temporales.

Limitaciones de las RNN estándar

Aunque las RNN son efectivas para modelar datos secuenciales, tienen dificultades para capturar dependencias a largo plazo. Esto ocurre debido a problemas como el desvanecimiento del gradiente y la explosión del gradiente durante el entrenamiento. Estas limitaciones pueden dificultar el aprendizaje de relaciones que abarcan muchos pasos de tiempo.

Mejoras con LSTM y GRU

Para superar estas limitaciones, se desarrollaron variantes de las RNN:

  • LSTM (Long Short-Term Memory): Introduce celdas de memoria y mecanismos de puertas que controlan qué información se mantiene, actualiza o descarta. Esto les permite recordar información relevante durante períodos prolongados.
  • GRU (Gated Recurrent Unit): Similar a las LSTM pero con una estructura más simplificada, ofreciendo un balance entre capacidad y eficiencia computacional.

Estas variantes son más efectivas para tareas que requieren modelar dependencias a largo plazo, como la predicción de tendencias en series temporales.

Estructura bidireccional

Una mejora adicional en las RNN es la estructura bidireccional, donde las secuencias se procesan en ambas direcciones: del pasado al futuro y del futuro al pasado. Esto permite al modelo aprovechar tanto el contexto previo como el posterior para realizar predicciones más precisas. Este enfoque es útil en tareas como la clasificación de texto y el etiquetado de secuencias, donde el contexto completo de una oración o secuencia mejora el rendimiento.

Aplicaciones clave de las RNN

Las redes recurrentes son esenciales en una amplia variedad de aplicaciones, incluyendo:

  • Procesamiento del lenguaje natural (NLP): Generación de texto, análisis de sentimientos, traducción automática.
  • Reconocimiento de voz: Conversión de audio a texto.
  • Predicción de series temporales: Pronóstico de ventas, precios de acciones y métricas de sensores en tiempo real.
  • Clasificación de secuencias: Etiquetado de palabras, identificación de entidades nombradas en texto.

Redes recurrentes LSTM

Las redes LSTM (Long Short-Term Memory) son una variante avanzada de las redes recurrentes (RNN) diseñadas para superar las limitaciones de las RNN tradicionales, particularmente el problema del desvanecimiento del gradiente. Esta característica facilita el aprendizaje de dependencias a largo plazo en secuencias de datos, lo que es esencial en tareas como el procesamiento del lenguaje natural y la predicción de series temporales.

La arquitectura de una LSTM se compone de unidades llamadas celdas LSTM, cada una de las cuales mantiene un estado de celda que se actualiza a lo largo de la secuencia. Cada célula LSTM incluye tres puertas principales: la puerta de entrada, la puerta de olvido y la puerta de salida. Estas puertas regulan el flujo de información, permitiendo que la red decida qué información mantener y qué información descartar en cada paso de tiempo.

  • Puerta de entrada: Controla la cantidad de información nueva que se añade al estado de la celda. Utiliza una función sigmoide para determinar qué valores actualizar y una función tanh para crear un vector de nuevos valores candidatos.
  • Puerta de olvido: Decide qué información del estado de la celda anterior se debe eliminar. También utiliza una función sigmoide que genera valores entre 0 y 1 para cada elemento del estado de la celda.
  • Puerta de salida: Determina qué partes del estado de la celda se utilizarán para la salida. Aplica una función sigmoide y una función tanh para producir la salida final de la celda LSTM.

Esta arquitectura permite que las LSTM mantengan información relevante a lo largo de secuencias extensas, mitigando el problema del desvanecimiento del gradiente que afecta a las RNN tradicionales.

Un ejemplo de implementación de una red LSTM utilizando la API secuencial de Keras es el siguiente:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

model = Sequential([
    LSTM(units=100, input_shape=(timesteps, features), return_sequences=True),
    LSTM(units=50),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo, la primera capa LSTM retorna secuencias completas (return_sequences=True), lo que permite apilar otra capa LSTM encima. La segunda capa LSTM procesa estas secuencias para capturar patrones más complejos antes de pasar la información a la capa densa final para la clasificación.

Las LSTM bidireccionales son una extensión de las LSTM que procesan la secuencia en ambas direcciones, es decir, desde el inicio hasta el final y viceversa. Esto permite que la red capture información contextual tanto del pasado como del futuro, mejorando el rendimiento en tareas donde el contexto completo de la secuencia es relevante.

from tensorflow.keras.layers import Bidirectional

model = Sequential([
    Bidirectional(LSTM(units=100, return_sequences=True), input_shape=(timesteps, features)),
    Bidirectional(LSTM(units=50)),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo, se utiliza la capa Bidirectional para envolver las capas LSTM, permitiendo que cada LSTM procese la secuencia en ambas direcciones.

Las LSTM son particularmente efectivas en aplicaciones como la generación de texto, donde el contexto y la coherencia a lo largo de largas secuencias son críticos. También se utilizan en tareas de reconocimiento de voz, donde mantener información a lo largo de la duración de una palabra o frase es esencial para una correcta interpretación.

Además, las LSTM pueden ser combinadas con otras arquitecturas de redes neuronales para crear modelos más robustos. Por ejemplo, pueden integrarse con capas convolucionales para procesar datos de imagen secuenciales, o con capas de atención para enfocar el procesamiento en partes específicas de la entrada.

El uso de Regularización en LSTM, como el Dropout, ayuda a prevenir el sobreajuste, especialmente en redes profundas. Aplicar dropout en las conexiones recurrentes y en las conexiones de entrada/salida de las celdas LSTM puede mejorar la generalización del modelo.

model = Sequential([
    LSTM(units=100, dropout=0.2, recurrent_dropout=0.2, input_shape=(timesteps, features)),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo, se aplican tasas de dropout del 20% tanto en las conexiones de entrada como en las recurrentes de la capa LSTM, ayudando a reducir el sobreajuste durante el entrenamiento.

En resumen, las redes LSTM representan una evolución significativa en el diseño de redes recurrentes, proporcionando mecanismos eficaces para el manejo de dependencias a largo plazo y mejorando el rendimiento en una variedad de tareas de procesamiento secuencial.

Redes recurrentes GRU

Las redes GRU (Gated Recurrent Unit) son una variante de las redes recurrentes (RNN) que, al igual que las LSTM, están diseñadas para manejar dependencias a largo plazo en secuencias de datos. Introducidas por Cho et al. en 2014, las GRU simplifican la arquitectura de las LSTM al combinar algunas de sus puertas, lo que resulta en modelos más eficientes y fáciles de entrenar sin sacrificar significativamente el rendimiento.

La arquitectura de una GRU consta de dos puertas principales: la puerta de actualización y la puerta de reinicio. Estas puertas regulan el flujo de información dentro de la unidad recurrente, permitiendo a la red decidir cuándo y cómo actualizar su estado interno.

  • Puerta de actualización: Controla el grado en que el estado anterior se mantiene o se actualiza con nueva información. Utiliza una función sigmoide para determinar cuánto del estado previo debe conservarse y cuánto debe actualizarse con la nueva entrada.
  • Puerta de reinicio: Determina cuánta de la información pasada debe olvidarse, permitiendo que la red ignore partes irrelevantes del estado anterior cuando sea necesario.

Esta simplificación de las puertas en las GRU reduce el número de parámetros comparado con las LSTM, lo que puede resultar en una mejor eficiencia computacional y tiempos de entrenamiento más cortos, especialmente en arquitecturas profundas.

Un ejemplo de implementación de una red GRU utilizando la API secuencial de Keras es el siguiente:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import GRU, Dense

model = Sequential([
    GRU(units=100, input_shape=(timesteps, features), return_sequences=True),
    GRU(units=50),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo, la primera capa GRU retorna secuencias completas (return_sequences=True), permitiendo apilar una segunda capa GRU que procesa estas secuencias para capturar patrones más complejos antes de pasar la información a la capa densa final para la clasificación.

Las GRU bidireccionales son una extensión de las GRU que procesan la secuencia en ambas direcciones, es decir, desde el inicio hasta el final y viceversa. Esto permite que la red capture información contextual tanto del pasado como del futuro, mejorando el rendimiento en tareas donde el contexto completo de la secuencia es relevante.

from tensorflow.keras.layers import Bidirectional

model = Sequential([
    Bidirectional(GRU(units=100, return_sequences=True), input_shape=(timesteps, features)),
    Bidirectional(GRU(units=50)),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo, se utiliza la capa Bidirectional para envolver las capas GRU, permitiendo que cada GRU procese la secuencia en ambas direcciones.

Las GRU son efectivas en aplicaciones similares a las LSTM, como la generación de texto, la traducción automática y el reconocimiento de voz. Su arquitectura más sencilla las hace una opción atractiva cuando se requiere un entrenamiento más rápido o cuando se dispone de recursos computacionales limitados, manteniendo un rendimiento competitivo en la captura de dependencias temporales.

Además, las GRU pueden ser combinadas con técnicas de regularización para mejorar la generalización del modelo. Aplicar dropout en las conexiones de entrada y recurrentes ayuda a prevenir el sobreajuste, especialmente en redes profundas.

model = Sequential([
    GRU(units=100, dropout=0.2, recurrent_dropout=0.2, input_shape=(timesteps, features)),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo, se aplican tasas de dropout del 20% tanto en las conexiones de entrada como en las recurrentes de la capa GRU, contribuyendo a la reducción del sobreajuste durante el entrenamiento.

En comparación con las LSTM, las GRU suelen requerir menos memoria y tiempos de cómputo más cortos debido a su menor cantidad de parámetros. Sin embargo, la elección entre una GRU y una LSTM puede depender del problema específico y de la naturaleza de los datos, ya que en algunos casos las LSTM pueden capturar dependencias más complejas de manera más efectiva.

En resumen, las redes GRU ofrecen una alternativa eficiente y efectiva a las LSTM para el procesamiento de secuencias, proporcionando un equilibrio entre complejidad y rendimiento que las hace adecuadas para una amplia gama de aplicaciones en el ámbito del aprendizaje profundo y la procesamiento de datos secuenciales.

Uso de redes recurrentes en series temporales

El análisis de series temporales se centra en el estudio de datos secuenciales registrados en intervalos de tiempo específicos. Las redes recurrentes (RNN) son especialmente útiles para este tipo de problemas, ya que tienen la capacidad de capturar dependencias temporales y patrones históricos en los datos. Esto las convierte en herramientas clave para aplicaciones como la predicción financiera, la estimación de demanda y el monitoreo de sistemas.

Estructuración de los datos

Antes de entrenar una RNN, es necesario estructurar los datos de manera que cada muestra represente una secuencia temporal. Esto implica:

  • Definir el número de pasos de tiempo (timesteps): la longitud de la secuencia histórica que se usará para realizar una predicción.
  • Determinar las características (features): los valores específicos observados en cada paso de tiempo.

En Keras, las RNN pueden implementarse utilizando la API secuencial:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, Dense

# Definición de parámetros
timesteps = 10
features = 1

model = Sequential([
    SimpleRNN(units=50, input_shape=(timesteps, features)),
    Dense(units=1)
])

model.compile(optimizer='adam', loss='mse')

En este ejemplo:

  • SimpleRNN procesa secuencias de 10 pasos de tiempo con una única característica en cada paso.
  • La capa densa realiza la predicción basándose en los patrones aprendidos por la RNN.

Preprocesamiento de datos

Para obtener un modelo robusto, es fundamental preprocesar adecuadamente los datos:

  1. Normalización: Escalar los datos para que se encuentren dentro de un rango similar, lo que facilita el entrenamiento del modelo.
  2. División en ventanas: Usar una ventana deslizante para crear secuencias de entrada y sus correspondientes valores de salida. Esto permite al modelo aprender patrones temporales de manera efectiva.

RNN avanzadas: LSTM y Dropout

Aunque las RNN estándar pueden capturar patrones temporales, tienen limitaciones para manejar dependencias a largo plazo. Esto se resuelve utilizando variantes como LSTM (Long Short-Term Memory), que introducen mecanismos de memoria para retener información relevante durante períodos más largos.

Ejemplo de modelo con capas LSTM apiladas:

from tensorflow.keras.layers import LSTM

model = Sequential([
    LSTM(units=100, input_shape=(timesteps, features), return_sequences=True),
    LSTM(units=50),
    Dense(units=1)
])

model.compile(optimizer='adam', loss='mse')

Aquí:

  • return_sequences=True permite que la primera capa LSTM devuelva una secuencia completa, que es procesada por la segunda capa.
  • La capa final realiza la predicción basada en las salidas de las LSTM.

Para prevenir el sobreajuste, es útil incluir Dropout en el modelo. Dropout ayuda a mejorar la generalización reduciendo la dependencia excesiva en neuronas específicas:

from tensorflow.keras.layers import Dropout

model = Sequential([
    LSTM(units=100, input_shape=(timesteps, features), return_sequences=True),
    Dropout(rate=0.2),
    LSTM(units=50),
    Dropout(rate=0.2),
    Dense(units=1)
])

model.compile(optimizer='adam', loss='mse')

En este ejemplo, se aplican tasas de dropout del 20% después de cada capa LSTM, lo que contribuye a reducir el riesgo de sobreajuste durante el entrenamiento.

Hiperparámetros importantes

  1. Ventana de tiempo (timesteps): Una ventana pequeña puede no capturar suficientes patrones históricos, mientras que una ventana grande aumenta la complejidad computacional.
  2. Tamaño de lote (batch size): Ajustar este parámetro impacta el rendimiento del modelo y el tiempo de entrenamiento.
  3. Tasas de aprendizaje: Es importante experimentar con diferentes valores para garantizar una convergencia óptima.

Incorporación de patrones estacionales

En series temporales con tendencias o estacionalidades (por ejemplo, variaciones diarias o anuales), las RNN pueden aprender estas regularidades automáticamente. Sin embargo, para mejorar el rendimiento, es útil incluir características adicionales que representen explícitamente estas estacionalidades, como indicadores de días de la semana o estaciones del año.

Evaluación y ajuste del modelo

Durante el entrenamiento, se recomienda dividir los datos en conjuntos de entrenamiento, validación y prueba. Esto asegura que el modelo sea evaluado de manera objetiva. Además, el uso de callbacks como EarlyStopping puede mejorar el proceso de entrenamiento al detenerlo automáticamente cuando la pérdida de validación deja de mejorar:

from tensorflow.keras.callbacks import EarlyStopping

early_stop = EarlyStopping(monitor='val_loss', patience=10)

history = model.fit(X_train, y_train, epochs=100, batch_size=32, 
                    validation_data=(X_val, y_val), callbacks=[early_stop])

Métricas de evaluación

Para medir el rendimiento del modelo en series temporales, se utilizan métricas como:

  • Error Cuadrático Medio (MSE): Evalúa la magnitud del error de las predicciones.
  • Error Absoluto Medio (MAE): Mide la desviación promedio entre los valores reales y las predicciones.

Avances y aplicaciones prácticas

Las RNN, en combinación con técnicas avanzadas como capas de atención o arquitecturas híbridas (que combinan redes convolucionales y recurrentes), pueden modelar de manera más precisa las dinámicas complejas de los datos temporales. Estas capacidades son esenciales en aplicaciones como:

  • Predicción de precios en mercados financieros.
  • Monitorización de sistemas en tiempo real.
  • Pronósticos meteorológicos.

Uso de redes recurrentes en NLP

El procesamiento del lenguaje natural (NLP, por sus siglas en inglés) es un campo del aprendizaje profundo que se enfoca en la interacción entre las computadoras y el lenguaje humano. Las redes recurrentes (RNN) juegan un papel fundamental en diversas tareas de NLP debido a su capacidad para manejar secuencias de datos y captar dependencias contextuales dentro de los textos. Entre las aplicaciones más comunes de las RNN en NLP se encuentran la clasificación de texto, la traducción automática, la generación de texto y el análisis de sentimientos.

En tareas de clasificación de texto, como la detección de spam o la categorización de noticias, las RNN pueden interpretar la secuencia de palabras para determinar la categoría correspondiente. Al procesar cada palabra en el contexto de las anteriores, la red puede capturar patrones semánticos y sintácticos que son esenciales para una clasificación precisa. Un ejemplo básico de una RNN para clasificación de texto utilizando Keras es el siguiente:

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense

# Definición de parámetros
vocab_size = 10000
embedding_dim = 128
max_length = 100

model = Sequential([
    Embedding(input_dim=vocab_size, output_dim=embedding_dim),
    LSTM(units=64),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

En este ejemplo, la capa Embedding transforma las palabras en vectores de densidad fija, facilitando que la RNN aprenda representaciones semánticas de las palabras. La capa LSTM captura las dependencias secuenciales en el texto, y la capa Dense produce una salida binaria para la clasificación.

La traducción automática es otra área donde las RNN, especialmente las arquitecturas encoder-decoder, han demostrado ser altamente efectivas. En este enfoque, una RNN encoder procesa la oración de origen y captura su representación contextual, mientras que una RNN decoder genera la oración traducida palabra por palabra. Este mecanismo permite que el modelo mantenga el contexto completo de la oración original al generar la traducción.

from tensorflow.keras.layers import Input, LSTM, Dense
from tensorflow.keras.models import Model

# Parámetros de la traducción
latent_dim = 256
num_encoder_tokens = 10000
num_decoder_tokens = 10000

# Definición del encoder
encoder_inputs = Input(shape=(None,))
encoder_embedding = Embedding(input_dim=num_encoder_tokens, output_dim=128)(encoder_inputs)
encoder_lstm = LSTM(latent_dim, return_state=True)
encoder_outputs, state_h, state_c = encoder_lstm(encoder_embedding)
encoder_states = [state_h, state_c]

# Definición del decoder
decoder_inputs = Input(shape=(None,))
decoder_embedding = Embedding(input_dim=num_decoder_tokens, output_dim=128)(decoder_inputs)
decoder_lstm = LSTM(latent_dim, return_sequences=True, return_state=True)
decoder_outputs, _, _ = decoder_lstm(decoder_embedding, initial_state=encoder_states)
decoder_dense = Dense(num_decoder_tokens, activation='softmax')
decoder_outputs = decoder_dense(decoder_outputs)

# Modelo completo
model = Model([encoder_inputs, decoder_inputs], decoder_outputs)
model.compile(optimizer='adam', loss='categorical_crossentropy')

En este caso, las capas Embedding convierten las palabras en vectores densos, y las capas LSTM del encoder y del decoder trabajan conjuntamente para generar traducciones precisas. La categorical_crossentropy se utiliza como función de pérdida para entrenar el modelo en la tarea de traducción.

La generación de texto es otra aplicación prominente de las RNN en NLP. Mediante el entrenamiento en grandes corpus de texto, las RNN pueden aprender a predecir la siguiente palabra en una secuencia, lo que posibilita la generación de textos coherentes y contextualmente relevantes. Este enfoque es utilizado en la creación de chatbots, asistentes virtuales y herramientas de escritura automática.

from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences

# Preparación de los datos
tokenizer = Tokenizer(num_words=vocab_size)
tokenizer.fit_on_texts(texts)
sequences = tokenizer.texts_to_sequences(texts)
padded_sequences = pad_sequences(sequences, maxlen=max_length, padding='post')

# Definición del modelo generativo
model = Sequential([
    Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=max_length),
    LSTM(units=128, return_sequences=True),
    Dense(vocab_size, activation='softmax')
])

model.compile(optimizer='adam', loss='sparse_categorical_crossentropy')

En este ejemplo, el modelo está diseñado para predecir la siguiente palabra en una secuencia dada, utilizando una capa LSTM que mantiene el contexto de las palabras anteriores. La función de pérdida sparse_categorical_crossentropy es adecuada para problemas de clasificación con múltiples clases, como la predicción de palabras.

Por último, en el análisis de sentimientos, las RNN son capaces de discernir el tono emocional de un texto, ya sea positivo, negativo o neutral. Al evaluar la secuencia completa de palabras, la red puede identificar patrones que indican la polaridad del sentimiento expresado.

model = Sequential([
    Embedding(input_dim=vocab_size, output_dim=embedding_dim, input_length=max_length),
    Bidirectional(LSTM(units=64)),
    Dense(units=1, activation='sigmoid')
])

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

Aquí, se utiliza una RNN bidireccional para capturar tanto el contexto anterior como el posterior de cada palabra, mejorando la capacidad del modelo para interpretar el sentimiento global del texto.

En resumen, las redes recurrentes ofrecen una infraestructura robusta para abordar múltiples desafíos en el procesamiento del lenguaje natural, permitiendo a los modelos comprender y generar lenguaje humano de manera efectiva mediante la captura de dependencias secuenciales y contextuales inherentes a los datos textuales.

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

  • Entender la estructura básica de una red recurrente y cómo maneja dependencias temporales.
  • Implementar RNN básicas, LSTM y GRU en Keras para procesar datos secuenciales.
  • Resolver problemas de NLP, como análisis de sentimientos y traducción automática, utilizando RNN.
  • Usar técnicas como RNN bidireccionales y regularización para mejorar el rendimiento del modelo.
  • Evaluar y ajustar modelos para optimizar el análisis de series temporales y datos secuenciales complejos.