Dividir el conjunto de datos en mini-lotes

PythonBeginner
Practicar Ahora

Introducción

En este proyecto, aprenderás cómo implementar una función para dividir un conjunto de datos en mini-lotes, que es una técnica común utilizada en el entrenamiento de aprendizaje profundo.

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo implementar la función data_pipeline para dividir un conjunto de datos en mini-lotes
  • Cómo probar la función data_pipeline para asegurarse de que funcione como se espera

🏆 Logros

Después de completar este proyecto, podrás:

  • Dividir un conjunto de datos en mini-lotes utilizando la función data_pipeline
  • Verificar la funcionalidad de la función data_pipeline a través de las pruebas

Implementar Mini-Lotes

En este paso, aprenderás cómo implementar la función data_pipeline para dividir un conjunto de datos en mini-lotes.

Abra el archivo data_pipeline.py en su editor de texto.

Implemente la función data_pipeline de acuerdo con los requisitos:

  • La función debe tomar dos parámetros: data (una lista de listas que contiene enteros) y batch_size (un entero que representa el tamaño de cada mini-lote).
  • La función debe devolver un generador que produzca lotes de los datos de entrada, donde cada lote contiene batch_size listas de enteros.
  • Si la cantidad restante de datos es menor que batch_size, la función debe emitir todas las muestras restantes.

A continuación, se muestra la función data_pipeline completada:

from typing import Generator, List

def data_pipeline(data: List[List[int]], batch_size: int) -> Generator[List[List[int]], None, None]:
    """
    Esta función toma una lista de listas que contiene enteros y la divide en 'lotes' más pequeños de un tamaño especificado.
    Devuelve un generador que produce secuencialmente estos lotes.

    Parámetros:
    data (List[List[int]]): El conjunto de datos de entrada, una lista de listas que contiene enteros.
    batch_size (int): El tamaño de cada lote, es decir, el número de listas de enteros que se deben incluir en cada lote.

    Devuelve:
    Generator[List[List[int]], None, None]: Un generador que produce lotes de los datos de entrada, donde cada lote contiene 'batch_size' listas de enteros.
    """
    for i in range(0, len(data), batch_size):
        batch_data = data[i : i + batch_size]
        yield batch_data

Guarde el archivo data_pipeline.py.

Probar los Mini-Lotes

En este paso, probarás la función data_pipeline para asegurarte de que funcione como se espera.

Abre el archivo data_pipeline.py en tu editor de texto.

Agrega el siguiente código al final del archivo para probar la función data_pipeline:

if __name__ == "__main__":
    data = [[1, 2], [1, 3], [3, 5], [2, 1], [3, 3]]
    batch_size = 2
    batch_data = data_pipeline(data, batch_size)
    for batch in batch_data:
        print(f"{batch=}")

Guarda el archivo data_pipeline.py.

Ejecuta el archivo data_pipeline.py en tu terminal:

python data_pipeline.py

La salida debe ser:

batch=[[1, 2], [1, 3]]
batch=[[3, 5], [2, 1]]
batch=[[3, 3]]

Esta salida confirma que la función data_pipeline está funcionando como se espera, dividiendo el conjunto de datos de entrada en mini-lotes de tamaño 2.

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.

✨ Revisar Solución y Practicar✨ Revisar Solución y Practicar