PyTorch torch.matmul 関数


Pytorch torch リファレンスマニュアル

torch.matmulPyTorch で行列積を実行するための関数です。異なる次元の入力をサポートし、1次元、2次元、およびそれ以上の次元のテンソル乗算を処理できます。

これはディープラーニングで最もよく使われる演算の1つであり、ニューラルネットワークの順伝播は本質的に一連の行列積です。

関数定義

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

引数:

  • input(Tensor): 1つ目の入力テンソル。
  • other(Tensor): 2つ目の入力テンソル。
  • out(Tensor, オプション): 出力テンソル。

戻り値:

  • torch.Tensor: 行列積の結果を返します。

使用例

例1:2次元行列積

例

import torch

# 2つの2次元行列を作成
a = torch.randn(3, 4)  # 3x4 行列
b = torch.randn(4, 5)  # 4x5 行列

# 行列積
c = torch.matmul(a, b)

print("a の形状:", a.shape)
print("b の形状:", b.shape)
print("c の形状:", c.shape)

出力結果は次のとおりです:

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

例 2: ベクトルと行列の乗算

例

import torch

# ベクトルと行列を作成
vector = torch.randn(4)      # 4次元ベクトル
matrix = torch.randn(4, 5)  # 4x5 行列

# ベクトルと行列の乗算
result = torch.matmul(vector, matrix)

print("ベクトルの形状:", vector.shape)
print("行列の形状:", matrix.shape)
print("結果の形状:", result.shape)
print(result)

出力結果は次のとおりです:

向量的形状: 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])

バッチ行列積はディープラーニングで一般的な操作であり、例えば Transformer のアテンション機構などで使用されます。

例 4: ニューラルネットワークにおける行列積

例

import torch

# ニューラルネットワーク層をシミュレーション:入力 xW + b
x = torch.randn(32, 128)   # バッチサイズ32、特徴次元128
W = torch.randn(128, 256)  # 重み行列
b = torch.randn(256)       # バイアスベクトル

# 線形変換:y = x @ W^T + b (PyTorch では通常 W は転置されます)
# ここでは x @ W を示します
y = torch.matmul(x, W) + b

print("入力 x の形状:", x.shape)
print("重み W の形状:", W.shape)
print("出力 y の形状:", y.shape)

出力結果は次のとおりです:

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

この例は、ニューラルネットワークにおける全結合層の順伝播プロセスをシミュレーションしています。


注意事項

  • torch.matmulブロードキャストをサポートしますが、2つの入力の最後の2つの次元は行列積の次元要件を満たす必要があります。
  • 2次元行列積には、次のものも使用できますtorch.mm()、ただしtorch.matmulより汎用的です。
  • 区別に注意してくださいtorch.matmul(行列積)とtorch.mul(要素ごとの積)。

Pytorch torch リファレンスマニュアル

その他の拡張