Función PyTorch torch.movedim
Manual de referencia de Pytorch torch
torch.movedimEs una función de PyTorch utilizada para mover las dimensiones de un tensor. Mueve las dimensiones especificadas a nuevas posiciones y devuelve una nueva vista del tensor.
Esta función es muy útil al ajustar la forma de un tensor para realizar operaciones específicas, por ejemplo, al procesar datos de imagen o preparar entradas para redes neuronales.
Definición de la función
torch.movedim(input, source, destination)
Parámetros:
input(Tensor): El tensor de entrada.source(int o tupla de int): Los índices de las dimensiones originales a mover. Puede ser un entero o una tupla de índices de dimensiones.destination(int o tupla de int): Índices de las posiciones de destino. Puede ser un entero o una tupla de índices de dimensiones, cuya longitud debe ser igual a la de source.
Valor de retorno:
torch.Tensor: Devuelve una vista del tensor después de mover las dimensiones.
Ejemplos de uso
Ejemplo
import torch
# Crear un tensor con forma (batch, channel, height, width)
x = torch.randn(32, 3, 224, 224)
# Mover la dimensión del canal a la última dimensión
# Mover de la posición 1 a la posición 3
y = torch.movedim(x, 1, 3)
print("Forma original:", x.shape)
print("Forma después de mover:", y.shape)
# Crear un tensor con forma (batch, channel, height, width)
x = torch.randn(32, 3, 224, 224)
# Mover la dimensión del canal a la última dimensión
# Mover de la posición 1 a la posición 3
y = torch.movedim(x, 1, 3)
print("Forma original:", x.shape)
print("Forma después de mover:", y.shape)
El resultado de salida es:
原始形状: torch.Size([32, 3, 224, 224]) 移动后形状: torch.Size([32, 224, 224, 3])
Ejemplo
import torch
# Crear un tensor con forma (D0, D1, D2, D3)
x = torch.randn(2, 3, 4, 5)
# Mover múltiples dimensiones a la vez
# Mover las dimensiones 0 y 1 a las posiciones de las dimensiones 2 y 3
y = torch.movedim(x, source=(0, 1), destination=(2, 3))
print("Forma original:", x.shape)
print("Forma después de mover:", y.shape)
# Crear un tensor con forma (D0, D1, D2, D3)
x = torch.randn(2, 3, 4, 5)
# Mover múltiples dimensiones a la vez
# Mover las dimensiones 0 y 1 a las posiciones de las dimensiones 2 y 3
y = torch.movedim(x, source=(0, 1), destination=(2, 3))
print("Forma original:", x.shape)
print("Forma después de mover:", y.shape)
El resultado de salida es:
原始形状: torch.Size([2, 3, 4, 5]) 移动后形状: torch.Size([4, 5, 2, 3])
Ejemplo
import torch
# Convertir un tensor de imagen de (N, C, H, W) a (N, H, W, C)
# Esto es útil al enviar datos a algunas API que requieren que el canal esté en la última posición
images = torch.randn(16, 3, 64, 64)
images_permuted = torch.movedim(images, 1, 3)
print("Forma original (N, C, H, W):", images.shape)
print("Forma convertida (N, H, W, C):", images_permuted.shape)
# Convertir un tensor de imagen de (N, C, H, W) a (N, H, W, C)
# Esto es útil al enviar datos a algunas API que requieren que el canal esté en la última posición
images = torch.randn(16, 3, 64, 64)
images_permuted = torch.movedim(images, 1, 3)
print("Forma original (N, C, H, W):", images.shape)
print("Forma convertida (N, H, W, C):", images_permuted.shape)
Nota:torch.movedimSe devuelve una vista, no una copia, por lo que la operación es eficiente. También hay funciones similarestorch.moveaxis, que estorch.movedimfuncionalmente igual, pero con nombres de parámetros diferentes.
Otras extensiones