PyTorch torch.reshape Funktion
PyTorch torch Referenzhandbuch
torch.reshapeEs ist eine Funktion in PyTorch, mit der die Form eines Tensors geändert wird. Sie gibt einen neuen Tensor mit derselben Anzahl von Elementen wie der ursprüngliche Tensor zurück, aber mit einer anderen Form.
Dies ist eine sehr häufige Operation im Deep Learning, mit der die Datenform an die Eingabeanforderungen verschiedener Schichten angepasst wird.
Funktionsdefinition
torch.reshape(input, shape)
Parameters:
input(Tensor): Der Eingabe-Tensor.shape(tuple oder int): Die Zielform. Die Anzahl der Elemente in der Form muss der Anzahl der Elemente im Eingabetensor entsprechen. Sie können-1PyTorch die Dimension automatisch ableiten lassen.
Rückgabewert:
torch.Tensor: Gibt eine Tensoransicht mit der geänderten Form zurück.
Anwendungsbeispiele
Beispiel 1: Umformen eines 1D-Tensors in 2D
Beispiel
import torch
# Erstelle einen 1D-Tensor
x = torch.arange(12)
print("Ursprüngliche Form:", x.shape)
print(x)
# In einen 3x4-2D-Tensor ändern
y = torch.reshape(x, (3, 4))
print("Neue Form:", y.shape)
print(y)
# Erstelle einen 1D-Tensor
x = torch.arange(12)
print("Ursprüngliche Form:", x.shape)
print(x)
# In einen 3x4-2D-Tensor ändern
y = torch.reshape(x, (3, 4))
print("Neue Form:", y.shape)
print(y)
Die Ausgabe ist:
原始形状: 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]])
Beispiel 2: Verwendung von -1 zur automatischen Ableitung von Dimensionen
Beispiel
import torch
# Erstelle einen 3D-Tensor
x = torch.randn(2, 3, 4)
print("Ursprüngliche Form:", x.shape)
# -1 verwenden, um die letzte Dimension automatisch abzuleiten
y = torch.reshape(x, (2, -1))
print("Neue Form:", y.shape)
# Erstelle einen 3D-Tensor
x = torch.randn(2, 3, 4)
print("Ursprüngliche Form:", x.shape)
# -1 verwenden, um die letzte Dimension automatisch abzuleiten
y = torch.reshape(x, (2, -1))
print("Neue Form:", y.shape)
Die Ausgabe ist:
原始形状: torch.Size([2, 3, 4]) 新形状: torch.Size([2, 12])
Beispiel 3: Auf 2D abflachen
Beispiel
import torch
# Einen 4D-Tensor erstellen (typische gebatchte Bilddaten)
x = torch.randn(32, 3, 224, 224) # Batch-Größe 32, Kanäle 3, Höhe und Breite 224
print("Ursprüngliche Form:", x.shape)
# Zu (Batch-Größe, andere) abflachen
y = torch.reshape(x, (32, -1))
print("Form nach dem Abflachen:", y.shape)
# Einen 4D-Tensor erstellen (typische gebatchte Bilddaten)
x = torch.randn(32, 3, 224, 224) # Batch-Größe 32, Kanäle 3, Höhe und Breite 224
print("Ursprüngliche Form:", x.shape)
# Zu (Batch-Größe, andere) abflachen
y = torch.reshape(x, (32, -1))
print("Form nach dem Abflachen:", y.shape)
Die Ausgabe ist:
原始形状: torch.Size([32, 3, 224, 224]) 展平后形状: torch.Size([32, 150528])
Dies wird oft verwendet, bevor Bilddaten in vollständig verbundene Schichten eingespeist werden.
Beispiel 4: Unterschied zwischen reshape und view
Beispiel
import torch
# Einen zusammenhängenden Tensor erstellen
x = torch.arange(12).reshape(3, 4)
# reshape kann eine View oder eine Kopie zurückgeben
y = torch.reshape(x, (4, 3))
print("y ist eine View von x:", y.is_contiguous() or y.data_ptr() == x.data_ptr())
# Einen zusammenhängenden Tensor erstellen
x = torch.arange(12).reshape(3, 4)
# reshape kann eine View oder eine Kopie zurückgeben
y = torch.reshape(x, (4, 3))
print("y ist eine View von x:", y.is_contiguous() or y.data_ptr() == x.data_ptr())
torch.reshapekann nicht zusammenhängende Tensoren verarbeiten, währendtensor.view()erfordert, dass der Tensor zusammenhängend (contiguous) sein muss.
Hinweise
torch.reshapeDer zurückgegebene Tensor kann abhängig vom Speicherlayout eine Ansicht der Originaldaten oder eine Kopie sein.- Wenn Sie garantieren müssen, dass eine Ansicht zurückgegeben wird, können Sie
tensor.view(), aber stellen Sie sicher, dass der Tensor zusammenhängend ist. - Die Gesamtzahl der Elemente in der Form muss mit der Anzahl der Elemente im ursprünglichen Tensor übereinstimmen.
Andere Erweiterungen