PyTorch-Funktion torch.matmul


Pytorch torch 参考手册Pytorch torch-Referenzhandbuch

torch.matmulEs ist eine Funktion in PyTorch, die zur Durchführung der Matrixmultiplikation verwendet wird. Sie unterstützt Eingaben unterschiedlicher Dimensionen und kann Tensor-Multiplikationen von eindimensionalen, zweidimensionalen und höherdimensionalen Tensoren verarbeiten.

Dies ist eine der am häufigsten verwendeten Operationen im Deep Learning. Die Vorwärtspropagierung eines neuronalen Netzwerks ist im Wesentlichen eine Reihe von Matrixmultiplikationen.

Funktionsdefinition

torch.matmul(input, other, out=None)

Parameters:

  • input(Tensor): Der erste Eingabe-Tensor.
  • other(Tensor): Der zweite Eingabetensor.
  • out(Tensor, optional): Der Ausgabe-Tensor.

Rückgabewert:

  • torch.Tensor: Gibt das Ergebnis der Matrixmultiplikation zurück.

Anwendungsbeispiele

Beispiel 1: Zweidimensionale Matrixmultiplikation

Beispiel

import torch

# Zwei 2D-Matrizen erstellen
a = torch.randn(3, 4)  # 3x4-Matrix
b = torch.randn(4, 5)  # 4x5-Matrix

# Matrizenmultiplikation
c = torch.matmul(a, b)

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

Die Ausgabe ist:

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

Beispiel 2: Multiplikation eines Vektors mit einer Matrix

Beispiel

import torch

# Einen Vektor und eine Matrix erstellen
vector = torch.randn(4)      # 4-dimensionaler Vektor
matrix = torch.randn(4, 5)  # 4x5-Matrix

# Vektor und Matrix multiplizieren
result = torch.matmul(vector, matrix)

print("Form des Vektors:", vector.shape)
print("Form der Matrix:", matrix.shape)
print("Form des Ergebnisses:", result.shape)
print(result)

Die Ausgabe ist:

向量的形状: torch.Size([4])
矩阵的形状: torch.Size([4, 5])
结果的形状: torch.Size([5])
tensor([-0.7837,  0.3684, -0.6542, -0.4594,  1.5328])
</p>

<h3>示例 3: 批量矩阵乘法</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 />
batch_a <span style="color: Gray;">=</span> torch.<span style="color: #05a;">randn</span><span style="color: Olive;">&#40;</span><span style="color: Maroon;">10</span><span style="color: Gray;">,</span> <span style="color: Maroon;">3</span><span style="color: Gray;">,</span> <span style="color: Maroon;">4</span><span style="color: Olive;">&#41;</span> &nbsp;<span style="color: #a50"># 10 个 3x4 矩阵</span><br />
batch_b <span style="color: Gray;">=</span> torch.<span style="color: #05a;">randn</span><span style="color: Olive;">&#40;</span><span style="color: Maroon;">10</span><span style="color: Gray;">,</span> <span style="color: Maroon;">4</span><span style="color: Gray;">,</span> <span style="color: Maroon;">5</span><span style="color: Olive;">&#41;</span> &nbsp;<span style="color: #a50"># 10 个 4x5 矩阵</span><br />
<br />
<span style="color: #a50"># 批量矩阵乘法</span><br />
batch_c <span style="color: Gray;">=</span> torch.<span style="color: #05a;">matmul</span><span style="color: Olive;">&#40;</span>batch_a<span style="color: Gray;">,</span> batch_b<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;批量 a 的形状:&quot;</span><span style="color: Gray;">,</span> batch_a.<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;批量 b 的形状:&quot;</span><span style="color: Gray;">,</span> batch_b.<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;批量结果 c 的形状:&quot;</span><span style="color: Gray;">,</span> batch_c.<span style="color: #05a;">shape</span><span style="color: Olive;">&#41;</span><br />
</div>
</div>

<p>输出结果为:</p>
<pre>
批量 a 的形状: torch.Size([10, 3, 4])
批量 b 的形状: torch.Size([10, 4, 5])
批量结果 c 的形状: torch.Size([10, 3, 5])

Batch-Matrixmultiplikation ist eine gängige Operation im Deep Learning, zum Beispiel im Attention-Mechanismus von Transformern.

Beispiel 4: Matrixmultiplikation in neuronalen Netzen

Beispiel

import torch

# Simuliere eine neuronale Netzwerkschicht: Eingabe xW + b
x = torch.randn(32, 128)   # Batch-Größe 32, Feature-Dimension 128
W = torch.randn(128, 256)  # Gewichtsmatrix
b = torch.randn(256)       # Bias-Vektor

# Lineare Transformation: y = x @ W^T + b (in PyTorch wird W normalerweise transponiert)
# Hier demonstrieren wir x @ W
y = torch.matmul(x, W) + b

print("Form der Eingabe x:", x.shape)
print("Form des Gewichts W:", W.shape)
print("Form der Ausgabe y:", y.shape)

Die Ausgabe ist:

输入 x 形状: torch.Size([32, 128])
权重 W 形状: torch.Size([128, 256])
输出 y 形状: torch.Size([32, 256])

Dieses Beispiel simuliert den Vorwärtspropagationsprozess einer vollständig verbundenen Schicht in einem neuronalen Netz.


Hinweise

  • torch.matmulBroadcasting wird unterstützt, aber die letzten beiden Dimensionen beider Eingaben müssen die Dimensionsanforderungen der Matrixmultiplikation erfüllen.
  • Für zweidimensionale Matrixmultiplikation können Sie auch verwendentorch.mm(), abertorch.matmulist allgemeiner.
  • Beachten Sie den Unterschied zwischentorch.matmul(Matrixmultiplikation) undtorch.mul(elementweise Multiplikation).

Pytorch torch 参考手册Pytorch torch-Referenzhandbuch

Weitere Erweiterungen