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.
| Dado | Forma habitual |
|---|---|
| Tabela densa | (batch, features) |
| Imagens PyTorch | (batch, channels, height, width) |
| Texto tokenizado | (batch, sequence_length) |
| Logits multiclasse | (batch, classes) |
import torch
x = torch.randn(32, 3, 224, 224)
print(x.shape, x.dtype, x.device)
assert x.ndim == 4O 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.
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.
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
x = x.to(device=device, dtype=torch.float32)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.
NHWC e NCHW.squeeze().float32 a uma perda que espera índices de classe.Qual é a forma de 64 imagens RGB 32×32 em PyTorch? Qual eixo uma camada densa interpreta como dimensão de entrada?
(64, 3, 32, 32). A camada densa usa o último eixo.
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).
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.