Não entendi direito o que fazem os comandos squeeze e unsqueeze em tensores pytorch. Também gostaria de saber quando é obrigatório (ou recomendável) utilizá-los (para compatibilizar as dimensões??).
Muito obrigado
Não entendi direito o que fazem os comandos squeeze e unsqueeze em tensores pytorch. Também gostaria de saber quando é obrigatório (ou recomendável) utilizá-los (para compatibilizar as dimensões??).
Muito obrigado
Oii Geraldo, tudo bem?? Espero que sim!
Desculpa a demora em te dar um retorno por aqui.
As funções squeeze e unsqueeze são bem complicadas mesmo, mas segundo a documentação do Pytorch, o método squeeze retorna um tensor com todas as dimensões de input com o tamanho de 1 removido e o método unsqueeze retorna um novo tensor com uma dimensão inserida na posição especificada, mas isso ainda não esclarece o que é realmente cada método.
De forma mais simples, o método unsqueeze adiciona uma dimensão superficial ao tensor (na dimensão que for especificada) enquanto o método squeeze remove uma dimensão do tensor, ou seja, se ele for 3D antes do squeeze, depois de aplicado vira 2D.
Na imagem podemos ver uma representação de squeeze e unsqueeze para esse exemplo da matriz 2D.

A interpretação que podemos tirar é que independente do tensor 3D, se você aplicar o squeeze, terá o mesmo resultado, sem precisar especificar a dimensão. No método unsqueeze é um pouco diferente, já que é necessário passar o parâmetro da dimensão que ele vai criar, como o exemplo da imagem para o lado ou para trás (linha ou coluna).
Esses métodos são utilizados para comprimir e descomprimir tensores e depende da necessidade do seu problema, já que esses tensores vão ter a mesma informação, apenas índices diferentes para serem acessados. Então digamos que você esteja trabalhando com diversos tensores de tamanhos diferentes e queira deixar eles com o mesmo tamanho, é necessário aplicar estas técnicas.
Espero ter ajudado, mas qualquer dúvida pode entrar em contato comigo, ok?
Bons estudos e um ótimo ano novo ^^