PyTorch-Funktion torch.matmul
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
# 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
# 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;">(</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;">)</span> <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;">(</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;">)</span> <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;">(</span>batch_a<span style="color: Gray;">,</span> batch_b<span style="color: Olive;">)</span><br /> <br /> <span style="color: Green;font-weight:bold;">print</span><span style="color: Olive;">(</span><span style="color: #a11;">"批量 a 的形状:"</span><span style="color: Gray;">,</span> batch_a.<span style="color: #05a;">shape</span><span style="color: Olive;">)</span><br /> <span style="color: Green;font-weight:bold;">print</span><span style="color: Olive;">(</span><span style="color: #a11;">"批量 b 的形状:"</span><span style="color: Gray;">,</span> batch_b.<span style="color: #05a;">shape</span><span style="color: Olive;">)</span><br /> <span style="color: Green;font-weight:bold;">print</span><span style="color: Olive;">(</span><span style="color: #a11;">"批量结果 c 的形状:"</span><span style="color: Gray;">,</span> batch_c.<span style="color: #05a;">shape</span><span style="color: Olive;">)</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
# 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 verwenden
torch.mm(), abertorch.matmulist allgemeiner. - Beachten Sie den Unterschied zwischen
torch.matmul(Matrixmultiplikation) undtorch.mul(elementweise Multiplikation).
Weitere Erweiterungen