TensorFlow

TensorFlow

Tutorial TensorFlow: Preprocesados de escalado, normalización y estandarización

TensorFlow: Aprende a escalar, normalizar y estandarizar datos en Deep Learning. Mejora el rendimiento del modelo asegurando una convergencia óptima.

Aprende TensorFlow GRATIS y certifícate

Importancia del preprocesamiento

En el campo del Deep Learning, el preprocesamiento de datos es un paso crucial que influye significativamente en el rendimiento de los modelos. Los datos en su forma original suelen contener inconsistencias, distribuciones no uniformes y escalas dispares, lo que puede perjudicar el proceso de entrenamiento y la calidad de las predicciones.

El objetivo principal del preprocesamiento es transformar los datos para que sean adecuados para las redes neuronales, eliminando ruido, anomalías y escalas no homogéneas. Este paso asegura que el modelo pueda aprender patrones relevantes y generalizar de manera efectiva a nuevos datos.

Mejora de la convergencia

Uno de los beneficios clave del preprocesamiento es facilitar la convergencia del modelo durante el entrenamiento. Cuando los datos no están bien escalados o normalizados, los algoritmos de optimización pueden:

  • Oscilar entre valores, sin llegar a una solución estable.
  • Converger lentamente, aumentando el tiempo necesario para entrenar el modelo.

Técnicas como la normalización (ajustar los valores a un rango fijo, como [0, 1]) o la estandarización (ajustar a una media de 0 y desviación estándar de 1) aseguran que las características tengan una base uniforme, lo que optimiza el proceso de aprendizaje.

Reducción del sobreajuste

El preprocesamiento también desempeña un papel importante en la reducción del sobreajuste. Al destacar las características más relevantes y eliminar redundancias, se disminuye la complejidad del modelo. Esto mejora la capacidad de generalización, haciendo que el modelo sea más robusto en datos no vistos.

Sensibilidad de los modelos a la escala

Muchas funciones de activación, como la sigmoide, son sensibles a la escala de los datos. Si las entradas tienen magnitudes grandes, estas funciones pueden saturarse, reduciendo la capacidad del modelo para aprender eficientemente. Escalar los datos a un rango adecuado mejora la respuesta de estas funciones y, en consecuencia, el rendimiento del modelo.

Manejo de calores atípicos

El preprocesamiento también ayuda a manejar valores atípicos (outliers), que pueden distorsionar el entrenamiento. Al aplicar técnicas como el recorte de valores extremos, el escalado robusto o la imputación de datos, se minimiza el impacto negativo de estas anomalías. Esto aumenta la resiliencia del modelo frente a irregularidades en los datos.

En resumen, el preprocesamiento de datos no es solo una etapa preparatoria; es un componente esencial en el flujo de trabajo del Deep Learning. A través de prácticas como la normalización, la estandarización y el manejo de outliers, el preprocesamiento asegura que el modelo:

  1. Aprenda de manera eficiente, aprovechando al máximo los datos disponibles.
  2. Sea más robusto, reduciendo la influencia de anomalías y ruido.
  3. Generalice mejor, adaptándose a datos no vistos en aplicaciones reales.

Qué es escalado y cómo hacerlo con capas de Keras

El escalado es una técnica de preprocesamiento que ajusta las características numéricas de los datos a un rango específico. Esto es esencial cuando las variables tienen diferentes escalas, lo cual puede afectar negativamente al rendimiento de los modelos de aprendizaje automático.

En muchos casos, las funciones de activación y los algoritmos de optimización son sensibles a la magnitud de los datos de entrada. Por ejemplo, si una característica varía entre 1 y 1000 y otra entre 0 y 1, el modelo puede otorgar mayor importancia a la primera simplemente por su escala más grande. El escalado ayuda a mitigar este problema, proporcionando una base uniforme para todas las características.

En Keras, se pueden utilizar capas de preprocesamiento para realizar el escalado de manera eficiente e integrada dentro del modelo. La clase tf.keras.layers.Rescaling permite escalar las entradas multiplicándolas por un factor determinado y sumando un desplazamiento opcional, ajustando así el rango de los datos según sea necesario.

Por ejemplo, para escalar los valores de entrada al rango [0, 1], se puede utilizar la siguiente capa:

import tensorflow as tf

# Capa de escalado
escalado = tf.keras.layers.Rescaling(scale=1./255)

En este caso, si los datos de entrada son imágenes con valores de píxeles entre 0 y 255, al aplicar una escala de 1./255, los valores se ajustan al rango [0, 1], lo cual es adecuado para muchas arquitecturas de redes neuronales.

La capa Rescaling se puede incorporar directamente en la definición del modelo secuencial o funcional de Keras, garantizando que el preprocesamiento se aplique consistentemente durante el entrenamiento y la inferencia:

modelo = tf.keras.Sequential([
    tf.keras.layers.Rescaling(scale=1./255, input_shape=(altura, anchura, canales)),
    # Otras capas del modelo...
])

Al integrar la capa de escalado en el modelo, no es necesario preprocesar los datos externamente. Además, al especificar el input_shape en la capa de escalado, se establece la forma de entrada que el modelo espera recibir.

Si se requiere un escalado diferente, como ajustar los datos al rango [-1, 1], se puede modificar el factor de escala y el desplazamiento (offset) en la capa Rescaling. La fórmula aplicada es salida = entrada * escala + desplazamiento.

Por ejemplo:

# Escalar al rango [-1, 1]
escalado_personalizado = tf.keras.layers.Rescaling(scale=1./127.5, offset=-1)

Aquí, los valores originales entre 0 y 255 se transforman al rango [-1, 1], lo cual es útil en ciertos modelos y funciones de activación que operan mejor en este rango específico.

El uso de capas de preprocesamiento dentro del modelo ofrece varias ventajas. Garantiza que cualquier nueva entrada pase por el mismo procesamiento que los datos de entrenamiento, manteniendo la coherencia y reduciendo el riesgo de errores. Además, estas capas son compatibles con la serialización y exportación del modelo de Keras, lo que facilita su despliegue en diferentes entornos sin necesidad de preprocesamiento adicional.

Qué es la normalización y cómo hacerla con capas de Keras

La normalización es una técnica de preprocesamiento que ajusta las características de los datos para mejorar la eficiencia y el rendimiento de los modelos de aprendizaje profundo. A diferencia del escalado, que ajusta las características a un rango específico, la normalización transforma los datos para que cada muestra tenga propiedades consistentes, como una norma unitaria.

Una forma común de normalización es convertir cada vector de datos en uno cuya longitud sea uno, es decir, normalizar los vectores para que tengan una norma L2 igual a uno. Esto se logra dividiendo cada componente del vector entre la norma L2 del vector. Esta técnica es útil en casos donde la dirección de los datos es más relevante que su magnitud, como en algoritmos basados en similitud de cosenos o en tareas de clasificación.

En Keras, se puede utilizar la capa tf.keras.layers.UnitNormalization para normalizar las entradas. Esta capa transforma cada vector de características dividiéndolo por su norma L2, asegurando que todos los vectores tengan la misma longitud.

Para utilizar la capa de normalización unitaria en Keras:

import tensorflow as tf

# Crear la capa de normalización unitaria
normalizacion_unidad = tf.keras.layers.UnitNormalization(axis=-1)

Al añadir esta capa al modelo, se garantiza que cada muestra de entrada esté normalizada a una norma unitaria:

modelo = tf.keras.Sequential([
    normalizacion_unidad,
    # Otras capas del modelo...
])

En este ejemplo, la capa UnitNormalization normaliza las muestras en el eje especificado (por defecto axis=-1, que es el último eje). Esto es especialmente útil cuando las características de los datos tienen diferentes escalas y se desea que cada muestra contribuya de manera uniforme al entrenamiento del modelo.

Es importante destacar que la normalización afecta a cómo el modelo aprende de los datos. Al normalizar las entradas, se evita que características con magnitudes mayores dominen el proceso de aprendizaje, permitiendo que el modelo preste atención a todas las características por igual.

La capa UnitNormalization es fácil de integrar y no requiere adaptar parámetros adicionales, a diferencia de otras capas de preprocesamiento. Sin embargo, es fundamental asegurarse de que la normalización aplicada es adecuada para el problema en cuestión. En algunos casos, otras formas de normalización o preprocesamiento pueden ser más apropiadas.

Al utilizar la normalización en Keras, se mejora la estabilidad numérica y se facilita la convergencia durante el entrenamiento. Esto se traduce en modelos más eficientes y con mejor capacidad de generalización, lo cual es esencial en aplicaciones de aprendizaje profundo.

Qué es la estandarización y cómo hacerla con capas de Keras

La estandarización es una técnica de preprocesamiento que transforma las características numéricas de los datos para que tengan una media cero y una desviación estándar uno. Esto se logra restando la media y dividiendo entre la desviación estándar de cada característica. La estandarización es esencial cuando las variables tienen diferentes escalas o unidades, lo que podría afectar negativamente al rendimiento del modelo.

Al aplicar la estandarización, se asegura que todas las características contribuyan de manera equitativa al proceso de aprendizaje, evitando que aquellas con magnitudes mayores dominen. Esto mejora la convergencia de los algoritmos de optimización y la estabilidad numérica durante el entrenamiento.

En Keras, se puede utilizar la capa tf.keras.layers.Normalization para realizar la estandarización de manera eficiente. Esta capa se adapta a los datos calculando la media y la desviación estándar, y luego transforma las entradas restando la media y dividiendo por la desviación estándar.

Para utilizar la capa de normalización en Keras, se sigue el siguiente proceso:

  • Crear una instancia de la capa Normalization:
import tensorflow as tf

# Crear la capa de normalización
estandarizacion = tf.keras.layers.Normalization(axis=-1)
  • Adaptar la capa a los datos de entrenamiento para calcular las estadísticas:
# Suponiendo que 'datos_entrenamiento' es un arreglo NumPy o un tensor
estandarizacion.adapt(datos_entrenamiento)
  • Incorporar la capa en el modelo:
modelo = tf.keras.Sequential([
    estandarizacion,
    # Otras capas del modelo...
])

La función adapt permite a la capa calcular la media y la desviación estándar de los datos de entrenamiento. De esta manera, al pasar nuevas muestras a través de la capa, se aplicará la misma transformación basada en las estadísticas aprendidas.

Es importante destacar que el método adapt solo debe aplicarse a los datos de entrenamiento, nunca a los datos de validación o prueba, para evitar fugas de información y preservar la integridad del modelo.

Si se trabaja con la API Funcional de Keras, la capa de estandarización se integra de manera similar:

entradas = tf.keras.Input(shape=(num_caracteristicas,))
x = estandarizacion(entradas)
# Continuar construyendo el modelo

La capa Normalization es especialmente útil cuando se trabaja con conjuntos de datos grandes o complejos, ya que realiza el preprocesamiento de manera eficiente y está optimizada para funcionar con tensores.

Además, al incluir la estandarización dentro del modelo, se garantiza que cualquier dato nuevo procesado por el modelo será transformado utilizando las mismas estadísticas, lo que mejora la consistencia y evita errores asociados al preprocesamiento externo.

Para verificar que la capa ha calculado correctamente las estadísticas, se pueden acceder a los atributos mean y variance de la capa:

print("Media calculada:", estandarizacion.mean.numpy())
print("Varianza calculada:", estandarizacion.variance.numpy())

De esta forma, es posible inspeccionar y confirmar que la estandarización se ha configurado adecuadamente según los datos proporcionados.

Al utilizar la estandarización con la capa Normalization, se mejora la capacidad del modelo para aprender patrones significativos en los datos, especialmente cuando las características tienen distribuciones diferentes. Esta práctica es común en problemas de regresión y clasificación, y es una de las técnicas fundamentales en el preprocesamiento de datos para Deep Learning.

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 importancia del preprocesamiento en Deep Learning.
  • Aprender a escalar datos con tf.keras.layers.Rescaling.
  • Aplicar normalización con tf.keras.layers.UnitNormalization.
  • Implementar estandarización usando tf.keras.layers.Normalization.
  • Reconocer cómo cada técnica mejora la convergencia y robustez del modelo.