Dividir o Conjunto de Dados em Mini-Lotes (Mini-Batches)

PythonBeginner
Pratique Agora

Introdução

Neste projeto, você aprenderá como implementar uma função para dividir um conjunto de dados em mini-lotes (mini-batches), uma técnica comummente utilizada no treinamento de aprendizado profundo (deep learning).

🎯 Tarefas

Neste projeto, você aprenderá:

  • Como implementar a função data_pipeline para dividir um conjunto de dados em mini-lotes
  • Como testar a função data_pipeline para garantir que ela funcione como esperado

🏆 Conquistas

Após concluir este projeto, você será capaz de:

  • Dividir um conjunto de dados em mini-lotes usando a função data_pipeline
  • Verificar a funcionalidade da função data_pipeline por meio de testes

Implementar Mini-Lotes (Mini-Batches)

Nesta etapa, você aprenderá como implementar a função data_pipeline para dividir um conjunto de dados em mini-lotes.

Abra o arquivo data_pipeline.py em seu editor de texto.

Implemente a função data_pipeline de acordo com os requisitos:

  • A função deve receber dois parâmetros: data (uma lista de listas contendo inteiros) e batch_size (um inteiro representando o tamanho de cada mini-lote).
  • A função deve retornar um gerador (generator) que produz lotes (batches) dos dados de entrada, onde cada lote contém batch_size listas de inteiros.
  • Se a quantidade restante de dados for menor que batch_size, a função deve produzir todas as amostras restantes.

Aqui está a função data_pipeline completa:

from typing import Generator, List

def data_pipeline(data: List[List[int]], batch_size: int) -> Generator[List[List[int]], None, None]:
    """
    Esta função recebe uma lista de listas contendo inteiros e a divide em 'lotes' menores de um tamanho especificado.
    Ela retorna um gerador que produz esses lotes sequencialmente.

    Parâmetros:
    data (List[List[int]]): O conjunto de dados de entrada, uma lista de listas contendo inteiros.
    batch_size (int): O tamanho de cada lote, ou seja, o número de listas de inteiros a serem incluídas em cada lote.

    Retorna:
    Generator[List[List[int]], None, None]: Um gerador que produz lotes dos dados de entrada, com cada lote contendo 'batch_size' listas de inteiros.
    """
    for i in range(0, len(data), batch_size):
        batch_data = data[i : i + batch_size]
        yield batch_data

Salve o arquivo data_pipeline.py.

Testar os Mini-Lotes (Mini-Batches)

Nesta etapa, você testará a função data_pipeline para garantir que ela funcione como esperado.

Abra o arquivo data_pipeline.py em seu editor de texto.

Adicione o seguinte código ao final do arquivo para testar a função 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=}")

Salve o arquivo data_pipeline.py.

Execute o arquivo data_pipeline.py em seu terminal:

python data_pipeline.py

A saída (output) deve ser:

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

Esta saída confirma que a função data_pipeline está funcionando como esperado, dividindo o conjunto de dados de entrada em mini-lotes de tamanho 2.

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.

✨ Verificar Solução e Praticar✨ Verificar Solução e Praticar