Fonction torch.expand de PyTorch


Pytorch torch 参考手册Manuel de référence Pytorch torchManuel de référence Pytorch torch

torch.expandest une fonction de PyTorch utilisée pour étendre les dimensions d'un tenseur. Elle étend le tenseur en dupliquant la vue sans réellement copier les données.

Le tenseur étendu partage les données d'origine en tant que vue en mémoire, ce qui en fait une opération économe en mémoire.

Définition de fonction

torch.expand(*sizes)
torch.expand(input, *sizes)

Parameters:

  • input(Tensor) : Le tenseur d'entrée.
  • *sizes(torch.Size ou int) : La taille cible. Une dimension individuelle dans la taille peut valoir -1, ce qui signifie que cette dimension est conservée inchangée. Les dimensions ayant une valeur de 1 peuvent être étendues à des tailles plus grandes.

Valeur de retour:

  • torch.Tensor: Renvoie la vue étendue du tenseur.

Exemples d'utilisation

Exemple

import torch

# Créer un tenseur de dimension 1
x = torch.tensor([[1], [2], [3]])

print("Tenseur d'origine :")
print(x)
print("Forme :", x.shape)

# Étendre à une taille plus grande
y = x.expand(3, 4)

print("nAprès expansion :")
print(y)
print("Forme :", y.shape)

La sortie est :

原始张量:
tensor([[1],
        [2],
        [3]])
形状: torch.Size([3, 1])

扩展后:
tensor([[1, 1, 1, 1],
        [2, 2, 2, 2],
        [3, 3, 3, 3]])
形状: torch.Size([3, 4])

Exemple

import torch

# Utiliser -1 pour conserver la dimension inchangée
x = torch.tensor([1, 2, 3, 4])

# Étendre à un tenseur 2x4
y = x.expand(2, -1)

print("Original :", x.shape)
print("Après expansion :", y.shape)
print(y)

La sortie est :

原始: torch.Size([4])
扩展后: torch.Size([2, 4])
tensor([[1, 2, 3, 4],
        [1, 2, 3, 4]])

Exemple

import torch

# Cas d'utilisation du mécanisme de broadcasting
# Étendre un vecteur colonne en une matrice
column = torch.randn(5, 1)

# Étendre pour additionner avec une matrice
matrix = torch.randn(5, 10)

# Broadcasting : le vecteur colonne s'étendra automatiquement
result = matrix + column

print("Forme du vecteur colonne :", column.shape)
print("Forme de la matrice :", matrix.shape)
print("Forme du résultat :", result.shape)

La sortie est :

列向量形状: torch.Size([5, 1])
矩阵形状: torch.Size([5, 10])
结果形状: torch.Size([5, 10])

Exemple

import torch

# Étendre d'un tenseur 2D à 3D
x = torch.tensor([[1, 2, 3],
                  [4, 5, 6]])

# Étendre la troisième dimension
y = x.expand(2, 2, 3)

print("Forme d'origine :", x.shape)
print("Forme étendue :", y.shape)
print("nTenseur étendu :")
print(y)

# Vérifier que les données sont partagées
print("nTenseur original modifié :")
x[0, 0] = 100
print("x[0,0]:", x[0, 0])
print("y[0,0,0]:", y[0, 0, 0])

La sortie est :

原始形状: torch.Size([2, 3])
扩展后形状: torch.Size([2, 2, 3])

扩展后的张量:
tensor([[[1, 2, 3],
         [4, 5, 6]],

        [[1, 2, 3],
         [4, 5, 6]]])

修改原始张量:
x[0,0]: tensor(100)
y[0,0,0]: tensor(100)



Note:torch.expandOnly dimensions with a size of 1 can be expanded to larger sizes. Dimensions larger than 1 cannot be shrunk or expanded to different sizes. A view is returned, not a copy.


Pytorch torch 参考手册Pytorch torch Reference Manual