Tensores, formas e lotes de dados

2 min

Objetivo: ler as dimensões de um tensor e prevenir a maioria dos erros de forma. Pré-requisito: NumPy elementar.

Um tensor é um array multidimensional homogêneo. Um escalar tem zero eixos, um vetor tem um eixo, uma matriz tem dois eixos. O posto não é o número de elementos: é o número de eixos.

DadoForma habitual
Tabela densa(batch, features)
Imagens PyTorch(batch, channels, height, width)
Texto tokenizado(batch, sequence_length)
Logits multiclasse(batch, classes)
python
import torch

x = torch.randn(32, 3, 224, 224)
print(x.shape, x.dtype, x.device)
assert x.ndim == 4

Batch e mini-batch

O batch agrupa vários exemplos processados em paralelo. Um mini-batch de 32 imagens produz uma estimativa do gradiente menos exata que o conjunto completo, mas muito menos custosa. Essa pequena quantidade de ruído pode até ajudar a generalização.

Tipo e dispositivo

Os pesos geralmente estão em float32. Os rótulos esperados por CrossEntropyLoss são inteiros torch.long. Todos os dados de uma operação devem estar no mesmo dispositivo: CPU, CUDA ou outro acelerador.

python
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = x.to(device=device, dtype=torch.float32)

Disciplina das formas

Em cada camada, escreva a forma esperada antes do código. Para uma camada densa Linear(128, 10), o último eixo de entrada deve medir 128. Use reshape com prudência e prefira flatten(start_dim=1) para preservar o eixo do batch.

Armadilhas

  • Confundir NHWC e NCHW.
  • Remover acidentalmente o eixo do batch com squeeze().
  • Enviar o modelo para a GPU mas deixar os dados na CPU.
  • Fornecer rótulos float32 a uma perda que espera índices de classe.

Verificação rápida

Qual é a forma de 64 imagens RGB 32×32 em PyTorch? Qual eixo uma camada densa interpreta como dimensão de entrada?

Respostas

(64, 3, 32, 32). A camada densa usa o último eixo.

Atividade de domínio — Auditoria de formas

Parta de X.shape = (32, 3, 64, 64). Faça o tensor atravessar uma convolução que produz 16 canais, uma redução espacial pela metade, um pooling global e uma cabeça com 7 classes. Escreva cada forma e três asserções Python. Sucesso: o eixo do lote permanece 32 e a saída vale (32, 7).

Contrato de formas de um lote de imagens

Leitura: o eixo B atravessa toda a rede; apenas as dimensões de representação são transformadas. Antes do treinamento, verifique explicitamente X.ndim, a ordem dos canais e a concordância entre logits.shape[0] e y.shape[0]. A principal armadilha é uma permutação silenciosa dos eixos: o código pode executar enquanto aprende uma estrutura que não tem nenhum sentido.