============================================================
EXEMPLO: somando dois tensores com dimensões diferentes
Objetivo:
- Criar tns1 com shape (7, 7, 3)
- Criar tns2 com shape (147, 1)
- Modificar apenas tns1 para tornar a soma possível
============================================================
1) Importa a biblioteca PyTorch
import torch
2) Cria o primeiro tensor aleatório com 3 dimensões:
7 linhas, 7 colunas, 3 canais
tns1 = torch.randn(7, 7, 3)
3) Cria o segundo tensor aleatório com 147 linhas e 1 coluna
tns2 = torch.randn(147, 1)
4) Mostra os shapes originais para conferência
print("Shape original de tns1:", tns1.shape) # esperado: torch.Size([7, 7, 3])
print("Shape original de tns2:", tns2.shape) # esperado: torch.Size([147, 1])
------------------------------------------------------------
5) Entendendo o problema:
tns1 tem shape (7, 7, 3)
tns2 tem shape (147, 1)
Não dá para somar diretamente porque os shapes não batem.
Mas tns1 possui 7 * 7 * 3 = 147 elementos no total.
Então podemos "achatar" tns1 e reorganizá-lo em (147, 1),
ficando compatível com tns2.
------------------------------------------------------------
6) Reorganiza tns1 usando view(-1, 1)
-1 diz ao PyTorch: "calcule automaticamente essa dimensão"
Como o total de elementos é 147, o resultado será (147, 1)
tns1 = tns1.view(-1, 1)
7) Mostra o novo shape de tns1
print("Novo shape de tns1:", tns1.shape) # esperado: torch.Size([147, 1])
8) Agora a soma é possível, porque ambos têm shape (147, 1)
soma = tns1 + tns2
9) Mostra o shape do resultado
print("Shape da soma:", soma.shape) # esperado: torch.Size([147, 1])
10) Exibe os primeiros elementos para visualizar o resultado
print("\nPrimeiros 5 valores de tns1:")
print(tns1[:5])
print("\nPrimeiros 5 valores de tns2:")
print(tns2[:5])
print("\nPrimeiros 5 valores da soma:")
print(soma[:5])