Функция torch.matmul в PyTorch


Pytorch torch 参考手册Справочное руководство Pytorch torch

torch.matmulЭто функция в PyTorch, используемая для выполнения матричного умножения. Она поддерживает входные данные разных размерностей и может обрабатывать умножение одномерных, двумерных и многомерных тензоров.

Это одна из наиболее часто используемых операций в глубоком обучении. Прямое распространение нейронной сети по сути представляет собой последовательность матричных умножений.

Определение функции

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

Parameters:

  • input(Tensor): первый входной тензор.
  • other(Tensor): Второй входной тензор.
  • out(Tensor, необязательный): Выходной тензор.

Возвращаемое значение:

  • torch.Tensor: Возвращает результат умножения матриц.

Примеры использования

Пример 1: Двумерное матричное умножение

Пример

import torch

# Создайте две 2D-матрицы
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])

Батчевое матричное умножение — распространённая операция в глубоком обучении, например, в механизме внимания трансформеров.

Пример 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Поддерживается широковещание, но последние два измерения обоих входов должны удовлетворять требованиям к размерности матричного умножения.
  • Для двумерного матричного умножения также можно использоватьtorch.mm(), ноtorch.matmulявляется более общим.
  • Обратите внимание на разницу междуtorch.matmul(матричное умножение) иtorch.mul(поэлементное умножение).

Pytorch torch 参考手册Справочное руководство Pytorch torch

Другие расширения