1
resposta

Tensores Pytorch - Uso de squeeze e unsqueeze

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

1 resposta

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.

Alt text: Representação de como funcionam os métodos de compressão e descompressão de tensores. Na esquerda temos um tensor 2D, representado por um quadrado cinza repartido em 4 com a numeração de 1 a 4 dentro. No meio da imagem existem 6 flechas, a primeira fica mais acima na imagem e vem da direita para a esquerda com 30° de inclinação, com a palavra squeeze() escrita logo acima, e a seta logo abaixo dela  tem a cor azul e inclinação de 30° é da esquerda para a direita e tem escrito unsqueeze(0) abaixo. A terceira flecha fica no centro da imagem e vem da direita para a esquerda com uns 0° de inclinação, com a palavra squeeze() escrita logo acima, e a seta logo abaixo dela  tem a cor amarelo e inclinação de 0° é da esquerda para a direita e tem escrito unsqueeze(1) abaixo. A quinta seta fica mais abaixo na imagem e vem da direita para a esquerda com uns 30° de inclinação para baixo, com a palavra squeeze() escrita logo acima, e a seta logo abaixo dela  tem a cor azul e inclinação de 30° para baixo é da esquerda para a direita e tem escrito unsqueeze(2) abaixo dela. Na direita da imagem estão representados os tensores 3D, que é o mesmo tensor 2D da esquerda da imagem, com a modificação de mais uma dimensão. O primeiro tensor tem uma dimensão para baixo, o segundo tensor tem a dimensão para trás e o terceiro tensor tem a dimensão para o lado, representando as possíveis mudanças de onde a dimensão pode ficar com o método unsqueeze.

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

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!