PyTorch torch.cat Funktion


Pytorch torch 参考手册PyTorch torch Referenzhandbuch

torch.catist eine Funktion in PyTorch, die verwendet wird, um mehrere Tensoren entlang einer angegebenen Dimension zu verketten. Sie verkettet mehrere Tensoren entlang der angegebenen Dimension zu einem größeren Tensor.

Dies ist eine sehr häufige Operation im Deep Learning, beispielsweise in Szenarien wie dem Verketten von Feature-Maps und dem Zusammenführen von Daten-Batches.

Funktionsdefinition

torch.cat(tensors, dim=0, out=None)

Parameters:

  • tensors(Sequenz von Tensor): Die Sequenz der zu verkettenden Tensoren. Alle Tensoren müssen in allen Dimensionen außer der Verkettungsdimension die gleiche Form haben.
  • dim(int, optional): Die Dimension, entlang der verkettet werden soll. Standardwert ist 0.
  • out(Tensor, optional): Der Ausgabe-Tensor.

Rückgabewert:

  • torch.Tensor: Gibt den verketteten Tensor zurück.

Anwendungsbeispiele

Beispiel 1: Verketten entlang der ersten Dimension

Beispiel

import torch

# Zwei Tensoren erstellen
a = torch.randn(2, 3)
b = torch.randn(2, 3)

# Entlang der ersten Dimension verketten (Zeilen)
c = torch.cat([a, b], dim=0)

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([2, 3])
b 的形状: torch.Size([2, 3])
c 的形状: torch.Size([4, 3])
tensor([[ 0.2532,  0.3643,  0.5341],
        [ 0.9578,  0.9086, -0.2847],
        [-0.7108, -0.0142,  0.7168],
        [-0.1542, -0.9841, -1.4945]])

Beispiel 2: Entlang der zweiten Dimension verketten

Beispiel

import torch

# Zwei Tensoren erstellen
a = torch.randn(2, 3)
b = torch.randn(2, 4)

# Entlang der zweiten Dimension verketten (Spalten)
c = torch.cat([a, b], dim=1)

print("Form von a:", a.shape)
print("Form von b:", b.shape)
print("Form von c:", c.shape)

Das Ausgabeergebnis ist:

a 的形状: torch.Size([2, 3])
b 的形状: torch.Size([2, 4])
c 的形状: torch.Size([2, 7])

Beispiel 3: Mehrere Tensoren verketten

Beispiel

import torch

# Mehrere Tensoren erstellen
a = torch.tensor([1, 2])
b = torch.tensor([3, 4])
c = torch.tensor([5, 6])

# Mehrere Tensoren verketten
result = torch.cat([a, b, c])

print(result)

Das Ausgabeergebnis ist:

tensor([1, 2, 3, 4, 5, 6])
</p>

<h3>示例 4: 在神经网络中拼接特征</h3>

<div class="example">
<h2 class="example">实例</h2>
<div class="example_code">
<span style="color: Green;font-weight:bold;">import</span> torch<br />
<br />
<span style="color: #a50"># 模拟来自不同层的特征图</span><br />
feature1 <span style="color: Gray;">=</span> torch.<span style="color: #05a;">randn</span><span style="color: Olive;">&#40;</span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span> <span style="color: Maroon;">64</span><span style="color: Gray;">,</span> <span style="color: Maroon;">32</span><span style="color: Gray;">,</span> <span style="color: Maroon;">32</span><span style="color: Olive;">&#41;</span> &nbsp;<span style="color: #a50"># 来自第一层的特征</span><br />
feature2 <span style="color: Gray;">=</span> torch.<span style="color: #05a;">randn</span><span style="color: Olive;">&#40;</span><span style="color: Maroon;">1</span><span style="color: Gray;">,</span> <span style="color: Maroon;">128</span><span style="color: Gray;">,</span> <span style="color: Maroon;">32</span><span style="color: Gray;">,</span> <span style="color: Maroon;">32</span><span style="color: Olive;">&#41;</span> <span style="color: #a50"># 来自第二层的特征</span><br />
<br />
<span style="color: #a50"># 在通道维度(dim=1)拼接特征</span><br />
combined <span style="color: Gray;">=</span> torch.<span style="color: #05a;">cat</span><span style="color: Olive;">&#40;</span><span style="color: Olive;">&#91;</span>feature1<span style="color: Gray;">,</span> feature2<span style="color: Olive;">&#93;</span><span style="color: Gray;">,</span> dim<span style="color: Gray;">=</span><span style="color: Maroon;">1</span><span style="color: Olive;">&#41;</span><br />
<br />
<span style="color: Green;font-weight:bold;">print</span><span style="color: Olive;">&#40;</span><span style="color: #a11;">&quot;特征1 形状:&quot;</span><span style="color: Gray;">,</span> feature1.<span style="color: #05a;">shape</span><span style="color: Olive;">&#41;</span><br />
<span style="color: Green;font-weight:bold;">print</span><span style="color: Olive;">&#40;</span><span style="color: #a11;">&quot;特征2 形状:&quot;</span><span style="color: Gray;">,</span> feature2.<span style="color: #05a;">shape</span><span style="color: Olive;">&#41;</span><br />
<span style="color: Green;font-weight:bold;">print</span><span style="color: Olive;">&#40;</span><span style="color: #a11;">&quot;拼接后形状:&quot;</span><span style="color: Gray;">,</span> combined.<span style="color: #05a;">shape</span><span style="color: Olive;">&#41;</span><br />
</div>
</div>

<p>输出结果为:</p>
<pre>
特征1 形状: torch.Size([1, 64, 32, 32])
特征2 形状: torch.Size([1, 128, 32, 32])
拼接后形状: torch.Size([1, 192, 32, 32])

In neuronalen Netzen,torch.catEs wird häufig in Strukturen wie Feature Pyramid Networks (FPN) verwendet, um Merkmale aus verschiedenen Schichten zu fusionieren.


Unterschied zwischen torch.cat und torch.stack

  • torch.cat: Verkettet entlang vorhandener Dimensionen; die Tensorformen summieren sich entlang der Verkettungsdimension.
  • torch.stack: Stapelt entlang einer neuen Dimension und fügt eine neue Dimension hinzu.

Beispiel

import torch

a = torch.randn(2, 3)
b = torch.randn(2, 3)

# Unterschied zwischen cat und stack
cat_result = torch.cat([a, b], dim=0)
stack_result = torch.stack([a, b], dim=0)

print("Form des cat-Ergebnisses:", cat_result.shape)  # (4, 3)
print("Form des stack-Ergebnisses:", stack_result.shape)  # (2, 2, 3)

Pytorch torch 参考手册PyTorch torch Referenzhandbuch

Andere Erweiterungen