Uso de unsqueeze() :
input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3 print(input.unsqueeze(0).size()) # prints - torch.size([1, 2, 4, 3]) Uso de view() :
input = torch.Tensor(2, 4, 3) # input: 2 x 4 x 3 print(input.view(1, -1, -1, -1).size()) # prints - torch.size([1, 2, 4, 3]) De acuerdo con la documentación, unsqueeze() inserta singleton dim en la posición dada como parámetro y view() crea una vista con diferentes dimensiones del almacenamiento asociado con tensor .
Lo que hace view() es claro para mí, pero no puedo distinguirlo de unsqueeze() . Además, no entiendo cuándo usar view() y cuándo usar unsqueeze() .
¡Cualquier ayuda con una buena explicación sería apreciada!
view() solo puede tomar un único argumento -1 .
Por lo tanto, si desea agregar una dimensión singleton, deberá proporcionar todas las dimensiones como argumentos. Por ejemplo, si A es un tensor de 2x3x4, para agregar una dimensión singleton, necesitaría hacer A:view(2, 1, 3, 4) .
Sin embargo, a veces, la dimensionalidad de la entrada se desconoce cuando se utiliza la operación. Por lo tanto, no sabemos que A es 2x3x4, pero aun así nos gustaría insertar una dimensión singleton. Esto sucede mucho cuando se utilizan minilotes de tensores, donde la última dimensión suele ser desconocida. En estos casos, el nn.Unsqueeze es útil y nos permite insertar la dimensión sin tener en cuenta explícitamente las otras dimensiones al escribir el código.
unsqueeze() es un caso especial de view()Para mayor comodidad, muchas bibliotecas de Python tienen alias abreviados para usos comunes de funciones más generales.
view() cambia la forma de un tensor a la forma especificadaunsqueeze() remodela un tensor agregando una nueva dimensión de profundidad 1unsqueeze() ?Algunos ejemplos de casos de uso:
CxHxW ), pero sus datos son imágenes en escala de grises 2d ( HxW )batch_size x dim1 x dim2 x ... ), y desea alimentarlo con una sola muestra (es decir, un lote de tamaño 1).