PyTorch torch.expand-Funktion
Pytorch torch ReferenzhandbuchPytorch torch Referenzhandbuch
torch.expandist eine Funktion in PyTorch, die verwendet wird, um Tensor-Dimensionen zu erweitern. Sie erweitert den Tensor, indem sie die Ansicht dupliziert, ohne die Daten tatsächlich zu kopieren.
Der erweiterte Tensor teilt die ursprünglichen Daten als Ansicht im Speicher, was dies zu einer speichereffizienten Operation macht.
Funktionsdefinition
torch.expand(*sizes) torch.expand(input, *sizes)
Parameters:
input(Tensor): Der Eingabe-Tensor.*sizes(torch.Size oder int): Die Zielgröße. Eine einzelne Dimension in der Größe kann -1 sein, was bedeutet, dass diese Dimension unverändert bleibt. Dimensionen mit dem Wert 1 können auf größere Größen erweitert werden.
Rückgabewert:
torch.Tensor: Gibt die erweiterte Ansicht des Tensors zurück.
Anwendungsbeispiele
Beispiel
import torch
# Erstelle einen Tensor mit Dimension 1
x = torch.tensor([[1], [2], [3]])
print("Original-Tensor:")
print(x)
print("Form:", x.shape)
# Erweitere auf eine größere Größe
y = x.expand(3, 4)
print("nNach der Erweiterung:")
print(y)
print("Form:", y.shape)
# Erstelle einen Tensor mit Dimension 1
x = torch.tensor([[1], [2], [3]])
print("Original-Tensor:")
print(x)
print("Form:", x.shape)
# Erweitere auf eine größere Größe
y = x.expand(3, 4)
print("nNach der Erweiterung:")
print(y)
print("Form:", y.shape)
Die Ausgabe ist:
原始张量:
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])
Beispiel
import torch
# Verwende -1, um die Dimension unverändert zu lassen
x = torch.tensor([1, 2, 3, 4])
# Erweitere auf einen 2x4-Tensor
y = x.expand(2, -1)
print("Original:", x.shape)
print("Nach der Erweiterung:", y.shape)
print(y)
# Verwende -1, um die Dimension unverändert zu lassen
x = torch.tensor([1, 2, 3, 4])
# Erweitere auf einen 2x4-Tensor
y = x.expand(2, -1)
print("Original:", x.shape)
print("Nach der Erweiterung:", y.shape)
print(y)
Die Ausgabe ist:
原始: torch.Size([4])
扩展后: torch.Size([2, 4])
tensor([[1, 2, 3, 4],
[1, 2, 3, 4]])
Beispiel
import torch
# Anwendungsfall des Broadcasting-Mechanismus
# Einen Spaltenvektor zu einer Matrix erweitern
column = torch.randn(5, 1)
# Erweitern, um mit einer Matrix zu addieren
matrix = torch.randn(5, 10)
# Broadcasting: Der Spaltenvektor wird automatisch erweitert
result = matrix + column
print("Form des Spaltenvektors:", column.shape)
print("Form der Matrix:", matrix.shape)
print("Form des Ergebnisses:", result.shape)
# Anwendungsfall des Broadcasting-Mechanismus
# Einen Spaltenvektor zu einer Matrix erweitern
column = torch.randn(5, 1)
# Erweitern, um mit einer Matrix zu addieren
matrix = torch.randn(5, 10)
# Broadcasting: Der Spaltenvektor wird automatisch erweitert
result = matrix + column
print("Form des Spaltenvektors:", column.shape)
print("Form der Matrix:", matrix.shape)
print("Form des Ergebnisses:", result.shape)
Die Ausgabe ist:
列向量形状: torch.Size([5, 1]) 矩阵形状: torch.Size([5, 10]) 结果形状: torch.Size([5, 10])
Beispiel
import torch
# Von einem 2D-Tensor zu 3D erweitern
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Die dritte Dimension erweitern
y = x.expand(2, 2, 3)
print("Ursprüngliche Form:", x.shape)
print("Erweiterte Form:", y.shape)
print("nErweiterter Tensor:")
print(y)
# Überprüfen, dass die Daten geteilt werden
print("nModifizierter ursprünglicher Tensor:")
x[0, 0] = 100
print("x[0,0]:", x[0, 0])
print("y[0,0,0]:", y[0, 0, 0])
# Von einem 2D-Tensor zu 3D erweitern
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# Die dritte Dimension erweitern
y = x.expand(2, 2, 3)
print("Ursprüngliche Form:", x.shape)
print("Erweiterte Form:", y.shape)
print("nErweiterter Tensor:")
print(y)
# Überprüfen, dass die Daten geteilt werden
print("nModifizierter ursprünglicher Tensor:")
x[0, 0] = 100
print("x[0,0]:", x[0, 0])
print("y[0,0,0]:", y[0, 0, 0])
Die Ausgabe ist:
原始形状: 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.