En este artículo, entenderemos cómo comprimir y descomprimir un tensor PyTorch.
Para apretar un tensor podemos aplicar el método torch.squeeze() y para descomprimir un tensor usamos el método torch.unsqueeze() . Comprendamos estos métodos en detalle.
Apretar un tensor:
Cuando apretamos un tensor, se eliminan las dimensiones de tamaño 1. Los elementos del tensor original se ordenan con las dimensiones restantes. Por ejemplo, si el tensor de entrada tiene la forma: (m×1×n×1), entonces el tensor de salida después de la compresión tendrá la forma: (m×n). La siguiente es la sintaxis del método torch.squeeze().
Sintaxis: torch.squeeze(input, dim=Ninguno, *, out=Ninguno)
Parámetros:
- entrada: el tensor de entrada.
- dim: un valor entero opcional, si se proporciona, la entrada se comprime en esta dimensión.
- out: el tensor de salida, un argumento clave opcional.
Retorno: Devuelve un tensor con todas las dimensiones del tensor de entrada de tamaño 1 eliminadas.
Tenga en cuenta que podemos comprimir el tensor de entrada en una dimensión particular dim . En este caso, las demás dimensiones del tamaño 1 permanecerán sin cambios. Hemos discutido el Ejemplo 2 con más detalle.
Ejemplo 1:
En el siguiente ejemplo, apretamos un tensor 5D usando el método torch.squeeze(). El tensor de entrada tiene dos dimensiones de tamaño 1.
Python3
# Python program to squeeze the tensor # importing torch import torch # creating the input tensor input = torch.randn(3,1,2,1,4) # print the input tensor print("Input tensor Size:\n",input.size()) # squeeze the tensor output = torch.squeeze(input) # print the squeezed tensor print("Size after squeeze:\n",output.size())
Producción:
Input tensor Size: torch.Size([3, 1, 2, 1, 4]) Size after squeeze: torch.Size([3, 2, 4])
Observe que ambas dimensiones de tamaño 1 se eliminan en el tensor comprimido.
Ejemplo 2:
En este ejemplo, apretamos el tensor en diferentes dimensiones.
Python3
# Python program to squeeze the tensor in # different dimensions # importing torch import torch # creating the input tensor input = torch.randn(3,1,2,1,4) print("Dimension of input tensor:", input.dim()) print("Input tensor Size:\n",input.size()) # squeeze the tensor in dimension 0 output = torch.squeeze(input,dim=0) print("Size after squeeze with dim=0:\n", output.size()) # squeeze the tensor in dimension 0 output = torch.squeeze(input,dim=1) print("Size after squeeze with dim=1:\n", output.size()) # squeeze the tensor in dimension 0 output = torch.squeeze(input,dim=2) print("Size after squeeze with dim=2:\n", output.size()) # squeeze the tensor in dimension 0 output = torch.squeeze(input,dim=3) print("Size after squeeze with dim=3:\n", output.size()) # squeeze the tensor in dimension 0 output = torch.squeeze(input,dim=4) print("Size after squeeze with dim=4:\n", output.size()) # output = torch.squeeze(input,dim=5) # Error
Producción:
Dimension of input tensor: 5 Input tensor Size: torch.Size([3, 1, 2, 1, 4]) Size after squeeze with dim=0: torch.Size([3, 1, 2, 1, 4]) Size after squeeze with dim=1: torch.Size([3, 2, 1, 4]) Size after squeeze with dim=2: torch.Size([3, 1, 2, 1, 4]) Size after squeeze with dim=3: torch.Size([3, 1, 2, 4]) Size after squeeze with dim=4: torch.Size([3, 1, 2, 1, 4])
Note que cuando apretamos el tensor en la dimensión 0, no hay cambio en la forma del tensor de salida. Cuando presionamos en la dimensión 1 o en la dimensión 3 (ambas son de tamaño 1), solo esta dimensión se elimina en el tensor de salida. Cuando comprimimos la dimensión 2 o la dimensión 4, no hay cambio en la forma del tensor de salida.
Descomprimir un tensor:
Cuando soltamos un tensor, se inserta una nueva dimensión de tamaño 1 en la posición especificada. Siempre una operación de descompresión aumenta la dimensión del tensor de salida. Por ejemplo, si el tensor de entrada tiene la forma: (m×n) y queremos insertar una nueva dimensión en la posición 1, entonces el tensor de salida después de descomprimir tendrá la forma: (m×1×n). La siguiente es la sintaxis del método torch.unsqueeze()-
Sintaxis: torch.unsqueeze(input, dim)
Parámetros:
- entrada: el tensor de entrada.
- dim: un valor entero, el índice en el que se inserta la dimensión singleton.
Retorno: Devuelve un nuevo tensor con una dimensión de tamaño uno insertado en la posición especificada dim .
Tenga en cuenta que podemos elegir el valor de atenuación del rango [-input.dim() – 1, input.dim() + 1). El dim negativo corresponderá a dim = dim + input.dim() + 1.
Ejemplo 3:
En el siguiente ejemplo, convertimos un tensor 1-D en un tensor 2D.
Python3
# Python program to unsqueeze the input tensor # importing torch import torch # define the input tensor input = torch.arange(8, dtype=torch.float) print("Input tensor:\n", input) print("Size of input Tensor before unsqueeze:\n", input.size()) output = torch.unsqueeze(input, dim=0) print("Tensor after unsqueeze with dim=0:\n", output) print("Size after unsqueeze with dim=0:\n", output.size()) output = torch.unsqueeze(input, dim=1) print("Tensor after unsqueeze with dim=1:\n", output) print("Size after unsqueeze with dim=1:\n", output.size())
Producción:
Input tensor: tensor([0., 1., 2., 3., 4., 5., 6., 7.]) Size of input Tensor before unsqueeze: torch.Size([8]) Tensor after unsqueeze with dim=0: tensor([[0., 1., 2., 3., 4., 5., 6., 7.]]) Size after unsqueeze with dim=0: torch.Size([1, 8]) Tensor after unsqueeze with dim=1: tensor([[0.], [1.], [2.], [3.], [4.], [5.], [6.], [7.]]) Size after unsqueeze with dim=1: torch.Size([8, 1])
Publicación traducida automáticamente
Artículo escrito por shahidedu7 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA