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 ^^