PyTorch torch.stack-Funktion


Pytorch torch 参考手册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)

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)

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)

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)

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)

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.

Pytorch torch 参考手册PyTorch torch Referenzhandbuch

Andere Erweiterungen