PyTorch torch.matmul Función
Manual de referencia de Pytorch torch
torch.matmulEs una función de PyTorch utilizada para realizar multiplicación de matrices. Admite entradas de diferentes dimensiones y puede manejar la multiplicación de tensores de una, dos y más dimensiones.
Esta es una de las operaciones más comunes en el aprendizaje profundo. La propagación hacia adelante de una red neuronal es, en esencia, una serie de multiplicaciones de matrices.
Definición de la función
torch.matmul(input, other, out=None)
Parámetros:
input(Tensor): El primer tensor de entrada.other(Tensor): El segundo tensor de entrada.out(Tensor, opcional): El tensor de salida.
Valor de retorno:
torch.Tensor: Devuelve el resultado de la multiplicación de matrices.
Ejemplo de uso
Ejemplo 1: Multiplicación de matrices bidimensionales
Ejemplo
# Crear dos matrices bidimensionales
a = torch.randn(3, 4) # Matriz de 3x4
b = torch.randn(4, 5) # Matriz de 4x5
# Multiplicación de matrices
c = torch.matmul(a, b)
print("Forma de a:", a.shape)
print("Forma de b:", b.shape)
print("Forma de c:", c.shape)
El resultado de salida es:
a 的形状: torch.Size([3, 4]) b 的形状: torch.Size([4, 5]) c 的形状: torch.Size([3, 5])
Ejemplo 2: Multiplicación de vector y matriz
Ejemplo
# Crear un vector y una matriz
vector = torch.randn(4) # Vector de 4 dimensiones
matrix = torch.randn(4, 5) # Matriz de 4x5
# Multiplicar vector y matriz
result = torch.matmul(vector, matrix)
print("Forma del vector:", vector.shape)
print("Forma de la matriz:", matrix.shape)
print("Forma del resultado:", result.shape)
print(result)
El resultado de salida es:
向量的形状: 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])
La multiplicación de matrices por lotes es una operación común en el aprendizaje profundo, por ejemplo, en el mecanismo de atención de Transformer.
Ejemplo 4: Multiplicación de matrices en redes neuronales
Ejemplo
# Simular una capa de red neuronal: entrada xW + b
x = torch.randn(32, 128) # Tamaño de lote 32, dimensión de características 128
W = torch.randn(128, 256) # Matriz de pesos
b = torch.randn(256) # Vector de sesgo
# Transformación lineal: y = x @ W^T + b (en PyTorch normalmente W está transpuesta)
# Aquí se demuestra x @ W
y = torch.matmul(x, W) + b
print("Forma de la entrada x:", x.shape)
print("Forma del peso W:", W.shape)
print("Forma de la salida y:", y.shape)
El resultado de salida es:
输入 x 形状: torch.Size([32, 128]) 权重 W 形状: torch.Size([128, 256]) 输出 y 形状: torch.Size([32, 256])
Este ejemplo simula el proceso de propagación hacia adelante de una capa totalmente conectada en una red neuronal.
Notas
torch.matmulSe admite broadcasting, pero las dos últimas dimensiones de las dos entradas deben cumplir los requisitos de dimensiones de la multiplicación de matrices.- Para la multiplicación de matrices bidimensionales, también se puede usar
torch.mm(), perotorch.matmules más general. - Ten en cuenta la diferencia entre
torch.matmul(multiplicación de matrices) ytorch.mul(multiplicación elemento a elemento).
Otras extensiones