Por que os erros de shape no TensorFlow aparecem quando você menos espera

Por que os erros de shape no TensorFlow aparecem quando você menos espera

Mai 18, 2026 machine-learning tensor-programming type-systems compiler-design notation-and-semantics code-quality debugging

Por que os erros de shape de tensores passam despercebidos

Você já passou por isso. O loop de treinamento roda, a loss cai, as métricas parecem boas. Depois de três semanas em produção, alguém percebe que as saídas do modelo estão erradas de um jeito que ninguém consegue explicar.

O problema? Um eixo que, na sua cabeça, significava uma coisa, mas que o código tratou de forma completamente diferente.

Não é erro de compilação. Não é crash em tempo de execução. É algo pior: um erro silencioso de corretude que afeta todas as predições do modelo.

O problema da notação

A verdade incômoda é essa: o que você não consegue nomear, você não consegue verificar.

A maioria dos frameworks de tensor ignora o significado dos eixos. Um shape como (32, 768, 12, 64) pode representar:

  • (batch, sequence, heads, dim_per_head) em um contexto
  • (batch, features, height, width) em outro
  • (batch, tokens, layers, channels) em outro ainda

O compilador não se importa. O shape é apenas uma tupla de números. Desde que as dimensões multipliquem corretamente, a operação é válida. O framework executa tudo e, com isso, o significado semântico fica gravado nos pesos.

Esse é o bug invisível. Não está errado do ponto de vista matemático, só está errado quanto à intenção.

O que uma notação melhor poderia fazer

Imagine se as operações com tensores carregassem seu significado junto com o sistema de tipos. Não apenas shapes — dimensões rotuladas.

Em vez de ficar debugando qual eixo é qual, você declararia isso logo de início:

tensor: [batch=32, sequence=128, heads=12, dim_per_head=64]

Aí o compilador poderia verificar se:

  • O broadcast só acontece em dimensões que realmente podem ser broadcastadas
  • As operações de redução colapsam apenas os eixos que você queria
  • As heads de atenção permanecem separadas das dimensões de features
  • O LayerNorm normaliza exatamente os eixos corretos

O compilador viraria seu copiloto. Ele detectaria o swap de eixos antes de você treinar por três semanas.

O custo real dos bugs silenciosos

Considerando o que esses bugs de dimensão realmente representam:

Em pesquisa: Horas de testes para entender porque os números não replicam. É um hyperparameter? Um seed diferente? Ou será que a ordenação dos eixos é wrong? Agora multiplique isso pelas experimentos falhos.

Em produção: Um modelo deployado que é sutilmente miscalibrado. A precision pode ser 94% em vez de 96%. O bug é pequeno para se escond<|eos|>

Read in other languages:

RU BG EL CS UZ TR SV FI RO PL NB NL HU IT FR ES DE DA ZH-HANS EN