PyTorch torch.nn.Flatten-Funktion
PyTorch torch.nn Referenzhandbuch
torch.nn.FlattenEs ist ein Tensor-Flattening-Modul in PyTorch.
Es flacht mehrdimensionale Tensoren zu einer Dimension ab und wird üblicherweise zwischen Faltungsschichten und vollständig verbundenen Schichten verwendet.
Funktionsdefinition
torch.nn.Flatten(start_dim=1, end_dim=-1)
Parameterbeschreibung:
start_dim(int): Die Dimension, ab der mit dem Flatten begonnen wird. Standard ist 1 (Batch-Dimension bleibt erhalten).end_dim(int): Die Dimension, bei der das Flatten endet. Standard ist -1 (bis zur letzten Dimension).
Anwendungsbeispiele
Beispiel 1: Grundlegende Verwendung
Beispiel
import torch
import torch.nn as nn
flatten = nn.Flatten()
# 4D-Eingabe: (Batch, Kanäle, Höhe, Breite)
x = torch.randn(4, 3, 32, 32)
output = flatten(x)
print("Eingabeform:", x.shape)
print("Ausgabeform:", output.shape)
print("Nach dem Flatten: 3*32*32 = 3072 Dimensionen")
import torch.nn as nn
flatten = nn.Flatten()
# 4D-Eingabe: (Batch, Kanäle, Höhe, Breite)
x = torch.randn(4, 3, 32, 32)
output = flatten(x)
print("Eingabeform:", x.shape)
print("Ausgabeform:", output.shape)
print("Nach dem Flatten: 3*32*32 = 3072 Dimensionen")
Beispiel 2: Beibehaltung der Batch-Dimension
Beispiel
import torch
import torch.nn as nn
# start_dim=1 behält die Batch-Dimension bei
x = torch.randn(8, 64, 8, 8)
print("Eingabe:", x.shape)
# Flatten zu (8, 4096)
out1 = nn.Flatten(start_dim=1)(x)
print("Beginnend bei Dimension 1:", out1.shape)
# Batch nicht beibehalten
out2 = nn.Flatten(start_dim=0)(x)
print("Beginnend bei Dimension 0:", out2.shape)
import torch.nn as nn
# start_dim=1 behält die Batch-Dimension bei
x = torch.randn(8, 64, 8, 8)
print("Eingabe:", x.shape)
# Flatten zu (8, 4096)
out1 = nn.Flatten(start_dim=1)(x)
print("Beginnend bei Dimension 1:", out1.shape)
# Batch nicht beibehalten
out2 = nn.Flatten(start_dim=0)(x)
print("Beginnend bei Dimension 0:", out2.shape)
Beispiel 3: 3D-Eingabe
Beispiel
import torch
import torch.nn as nn
# 3D-Eingabe: (batch, seq_len, features)
x = torch.randn(4, 100, 512)
# Sequenz und Features abflachen
flatten = nn.Flatten(start_dim=1)
output = flatten(x)
print("Eingabeform:", x.shape)
print("Ausgabeform:", output.shape)
import torch.nn as nn
# 3D-Eingabe: (batch, seq_len, features)
x = torch.randn(4, 100, 512)
# Sequenz und Features abflachen
flatten = nn.Flatten(start_dim=1)
output = flatten(x)
print("Eingabeform:", x.shape)
print("Ausgabeform:", output.shape)
Beispiel 4: Vollständiges CNN-Beispiel
Beispiel
import torch
import torch.nn as nn
model = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3, padding=1),
nn.ReLU(),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(64, 10)
)
x = torch.randn(4, 3, 32, 32)
output = model(x)
print("Eingabe:", x.shape, "-> Ausgabe:", output.shape)
import torch.nn as nn
model = nn.Sequential(
nn.Conv2d(3, 32, 3, padding=1),
nn.ReLU(),
nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3, padding=1),
nn.ReLU(),
nn.AdaptiveAvgPool2d(1),
nn.Flatten(),
nn.Linear(64, 10)
)
x = torch.randn(4, 3, 32, 32)
output = model(x)
print("Eingabe:", x.shape, "-> Ausgabe:", output.shape)
Anwendungsfälle
- CNN zu FC: Nach dem Abflachen der Ausgabe der Faltungsschicht, mit der vollständig verbundenen Schicht verbinden
- Dimensionstransformation: Tensorform anpassen
Andere Erweiterungen