Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
2
respostas

[Projeto] Sessão 2 - Célula Recorrente Básica

Ao executar torch.stack(dados_tns), recebi o seguinte erro:

RuntimeError: stack expects each tensor to be equal size, but got [4, 55] at entry 0 and [6, 55] at entry 2

O erro ocorre porque os nomes têm comprimentos diferentes — por exemplo, "Mota" tem 4 letras e gera um tensor de shape (4, 55), enquanto "Suarez" tem 6 letras e gera um tensor (6, 55). A função torch.stack exige que todos os tensores tenham exatamente o mesmo shape, pois tensores são estruturas homogêneas e regulares — uma generalização das matrizes que não admite dimensões variáveis.

Isso reflete uma característica fundamental dos tensores: sua regularidade é justamente o que permite operações matemáticas eficientes (especialmente em GPU), mas essa mesma característica impede que armazenemos sequências de tamanhos diferentes em uma única estrutura tensorial sem algum tipo de tratamento prévio.

Por isso, a alternativa escolhida neste momento é passar um nome de cada vez para a rede neural (batch size = 1), evitando o problema de dimensionalidade variável. Mais adiante no curso, aprenderemos a usar técnicas como padding e packing (via torch.nn.utils.rnn.packpaddedsequence) para lidar de forma eficiente com sequências de tamanhos variáveis em formato tensorial.

2 respostas
solução!

Olá, Leandro! Tudo bem?

A sua postagem sobre Sessão 2 - Célula Recorrente Básica trouxe uma explicação muito boa para o erro ao usar torch.stack(dados_tns) no contexto de Redes Neurais Recorrentes com PyTorch.

Você explicou corretamente que o erro acontece porque cada nome gera um tensor com uma quantidade diferente de linhas, já que o comprimento das palavras varia, e o torch.stack() exige tensores com o mesmo shape. Neste ponto do curso, trabalhar com batch size = 1 faz sentido para evitar esse conflito de dimensionalidade. Uma dica interessante para o futuro é revisar depois os conceitos de padding, packing e pack_padded_sequence, pois eles permitem agrupar sequências de tamanhos diferentes de forma mais adequada para modelos recorrentes.

Quando chegar na parte de padding e packing, você pretende comparar essa abordagem com o envio de uma sequência por vez?

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Sim, pretendo fazer essa comparação. Por enquanto usei uma sequência por vez para evitar o erro de dimensionalidade, mas com padding e packing será possível agrupar sequências de tamanhos diferentes no mesmo batch. A ideia é comparar essa abordagem com o batch_size = 1, observando desempenho, organização do treino e eficiência computacional.