PyTorch torch.stack-Funktion
PyTorch torch Referenzhandbuch
torch.stackEs ist eine Funktion in PyTorch, die verwendet wird, um mehrere Tensoren entlang einer neuen Dimension zu stapeln. Sie erstellt eine neue Dimension und platziert alle Eingabetensoren entlang dieser neuen Dimension.
Dies wird im Deep Learning häufig für Szenarien wie das Erstellen von Batch-Daten und das Stapeln von Ausgaben mehrerer Modelle verwendet.
Funktionsdefinition
torch.stack(tensors, dim=0, out=None)
Parameters:
tensors(Sequenz von Tensoren): Die Sequenz von Tensoren, die gestapelt werden sollen. Alle Tensoren müssen dieselbe Form haben.dim(int, optional): Die Dimension, entlang der gestapelt wird, standardmäßig 0. Die neue Dimension wird an dieser Position eingefügt.out(Tensor, optional): Der Ausgabe-Tensor.
Rückgabewert:
torch.Tensor: Gibt den gestapelten Tensor zurück.
Anwendungsbeispiele
Beispiel 1: Grundlegendes Stapeln
Beispiel
import torch
# Zwei eindimensionale Tensoren erstellen
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
# Entlang einer neuen Dimension stapeln
c = torch.stack([a, b])
print("Form von a:", a.shape)
print("Form von b:", b.shape)
print("Form von c:", c.shape)
print(c)
# Zwei eindimensionale Tensoren erstellen
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
# Entlang einer neuen Dimension stapeln
c = torch.stack([a, b])
print("Form von a:", a.shape)
print("Form von b:", b.shape)
print("Form von c:", c.shape)
print(c)
Das Ausgabeergebnis ist:
a 的形状: torch.Size([3])
b 的形状: torch.Size([3])
c 的形状: torch.Size([2, 3])
tensor([[1, 2, 3],
[4, 5, 6]])
Beispiel 2: Angeben der Stapeldimension
Beispiel
import torch
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
# Entlang dim=1 stapeln
c = torch.stack([a, b], dim=1)
print("Form von c:", c.shape)
print(c)
a = torch.tensor([1, 2, 3])
b = torch.tensor([4, 5, 6])
# Entlang dim=1 stapeln
c = torch.stack([a, b], dim=1)
print("Form von c:", c.shape)
print(c)
Das Ausgabeergebnis ist:
c 的形状: torch.Size([3, 2])
tensor([[1, 4],
[2, 5],
[3, 6]])
Beispiel 3: Mehrere Tensoren stapeln
Beispiel
import torch
# Mehrere Tensoren erstellen
tensors = [torch.tensor([i, i+1, i+2]) for i in range(5)]
# Alle Tensoren stapeln
result = torch.stack(tensors)
print("Form des Ergebnisses:", result.shape)
print(result)
# Mehrere Tensoren erstellen
tensors = [torch.tensor([i, i+1, i+2]) for i in range(5)]
# Alle Tensoren stapeln
result = torch.stack(tensors)
print("Form des Ergebnisses:", result.shape)
print(result)
Das Ausgabeergebnis ist:
结果形状: torch.Size([5, 3])
tensor([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
Beispiel 4: Speichern mehrerer Zustände in einem neuronalen Netzwerk
Beispiel
import torch
# Simuliere das Speichern von Loss-Werten für mehrere Epochen
losses = []
for epoch in range(5):
loss = torch.tensor([epoch * 0.1, (epoch + 1) * 0.1])
losses.append(loss)
# Stapel die Loss-Werte aller Epochen
all_losses = torch.stack(losses)
print("Loss-Form über Epochen:", all_losses.shape)
print(all_losses)
# Simuliere das Speichern von Loss-Werten für mehrere Epochen
losses = []
for epoch in range(5):
loss = torch.tensor([epoch * 0.1, (epoch + 1) * 0.1])
losses.append(loss)
# Stapel die Loss-Werte aller Epochen
all_losses = torch.stack(losses)
print("Loss-Form über Epochen:", all_losses.shape)
print(all_losses)
Das Ausgabeergebnis ist:
各 epoch 损失形状: torch.Size([5, 2])
tensor([[0.0000, 0.1000],
[0.1000, 0.2000],
[0.2000, 0.3000],
[0.3000, 0.4000],
[0.4000, 0.5000]])
Unterschied zwischen torch.stack und torch.cat
Beispiel
import torch
a = torch.randn(2, 3)
b = torch.randn(2, 3)
# stack erzeugt eine neue Dimension
stack_result = torch.stack([a, b])
print("Form des stack-Ergebnisses:", stack_result.shape)
# cat erzeugt keine neue Dimension
cat_result = torch.cat([a, b], dim=0)
print("Form des cat-Ergebnisses:", cat_result.shape)
a = torch.randn(2, 3)
b = torch.randn(2, 3)
# stack erzeugt eine neue Dimension
stack_result = torch.stack([a, b])
print("Form des stack-Ergebnisses:", stack_result.shape)
# cat erzeugt keine neue Dimension
cat_result = torch.cat([a, b], dim=0)
print("Form des cat-Ergebnisses:", cat_result.shape)
Das Ausgabeergebnis ist:
stack 结果形状: torch.Size([2, 2, 3]) cat 结果形状: torch.Size([4, 3])
torch.stack: Stapelt entlang einer neuen Dimension; die Eingabetensoren müssen exakt dieselbe Form haben, und eine neue Dimension wird hinzugefügt.torch.cat: Konkateniert entlang einer vorhandenen Dimension; die Eingabetensoren dürfen sich in der Konkatenationsdimension unterscheiden, und es wird keine neue Dimension hinzugefügt.
Andere Erweiterungen