Función torch.reshape de PyTorch


Pytorch torch 参考手册Manual de referencia de Pytorch torch

torch.reshapeEs una función de PyTorch utilizada para cambiar la forma de un tensor. Devuelve un nuevo tensor con el mismo número de elementos que el tensor original, pero con una forma diferente.

Esta es una operación muy común en el aprendizaje profundo, utilizada para ajustar la forma de los datos según los requisitos de entrada de las diferentes capas.

Definición de la función

torch.reshape(input, shape)

Parámetros:

  • input(Tensor): el tensor de entrada.
  • shape(tuple o int): la forma objetivo. El número de elementos en la forma debe ser igual al número de elementos del tensor de entrada. Se puede usar-1para que PyTorch infiera la dimensión automáticamente.

Valor de retorno:

  • torch.Tensor: devuelve una vista del tensor con la forma cambiada.

Ejemplos de uso

Ejemplo 1: remodelar (reshape) un tensor unidimensional a bidimensional

Ejemplo

import torch

# Crear un tensor unidimensional
x = torch.arange(12)

print("Forma original:", x.shape)
print(x)

# Cambiar a un tensor bidimensional de 3x4
y = torch.reshape(x, (3, 4))

print("Nueva forma:", y.shape)
print(y)

La salida es:

原始形状: torch.Size([12])
tensor([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
新形状: torch.Size([3, 4])
tensor([[ 0,  1,  2,  3],
        [ 4,  5,  6,  7],
        [ 8,  9, 10, 11]])

Ejemplo 2: usar -1 para inferir dimensiones automáticamente

Ejemplo

import torch

# Crear un tensor tridimensional
x = torch.randn(2, 3, 4)

print("Forma original:", x.shape)

# Usar -1 para inferir automáticamente la última dimensión
y = torch.reshape(x, (2, -1))

print("Nueva forma:", y.shape)

La salida es:

原始形状: torch.Size([2, 3, 4])
新形状: torch.Size([2, 12])

Ejemplo 3: aplanar a bidimensional

Ejemplo

import torch

# Crear un tensor de cuatro dimensiones (datos típicos de imágenes por lotes)
x = torch.randn(32, 3, 224, 224)  # Tamaño de lote 32, canales 3, alto y ancho 224

print("Forma original:", x.shape)

# Aplanar a (tamaño de lote, otros)
y = torch.reshape(x, (32, -1))

print("Forma después del aplanado:", y.shape)

La salida es:

原始形状: torch.Size([32, 3, 224, 224])
展平后形状: torch.Size([32, 150528])

Esto se usa a menudo antes de introducir los datos de imagen en una capa totalmente conectada.

Ejemplo 4: diferencia entre reshape y view

Ejemplo

import torch

# Crear un tensor contiguo
x = torch.arange(12).reshape(3, 4)

# reshape puede devolver una vista o una copia
y = torch.reshape(x, (4, 3))

print("y es una vista de x:", y.is_contiguous() or y.data_ptr() == x.data_ptr())

torch.reshapepuede manejar tensores no contiguos, mientras quetensor.view()requiere que el tensor sea contiguo.


Notas

  • torch.reshapeEl tensor devuelto puede ser una vista (view) de los datos originales o una copia (copy), dependiendo del diseño de memoria.
  • Si se necesita garantizar que se devuelva una vista, se puede usartensor.view(), pero hay que asegurarse de que el tensor sea contiguo.
  • El número total de elementos de la forma debe ser el mismo que el número de elementos del tensor original.

Pytorch torch 参考手册Manual de referencia de Pytorch torch

Otras extensiones