You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现PyTorch对应张量的矩阵-列向量乘法?需保留梯度

解决方案:对应位置矩阵与列向量批量乘法(保留梯度)

首先明确你的张量形状:

  • 第一个张量(记为matrices):shape是(5, 2, 2),代表5个2x2矩阵
  • 第二个张量(记为vectors):shape是(5, 2),代表5个2维列向量(PyTorch中默认以行向量形式存储,需调整维度适配矩阵乘法)

要实现对应位置的矩阵-向量乘法且保留梯度,你可以用以下两种简洁的方法:

方法1:使用torch.bmm(批量矩阵乘法)

torch.bmm专门处理批量矩阵乘法,要求输入为3维张量((batch, n, m) 和 (batch, m, p)),输出为(batch, n, p)。我们只需把向量张量扩展为3维(增加最后一个维度转为列向量),运算后再压缩多余维度即可:

import torch

# 初始化带梯度的张量
matrices = torch.tensor([[[8.1776, 0.6560],
                          [0.6560, 2.3653]],

                         [[8.1776, 0.6560],
                          [0.6560, 2.3104]],

                         [[8.9871, 0.6560],
                          [0.6560, 2.2535]],

                         [[1.3231, 0.6560],
                          [0.6560, 2.3331]],

                         [[4.8677, 0.6560],
                          [0.6560, 2.2935]]], requires_grad=True)

vectors = torch.tensor([[-0.1836, -0.9153],
                        [-0.1836, -0.8057],
                        [-0.2288, -0.6442],
                        [ 0.1017, -0.8555],
                        [-0.0175, -0.7637]], requires_grad=True)

# 将向量转为(5,2,1)的列向量批量格式
vectors_col = vectors.unsqueeze(-1)
# 执行批量矩阵乘法,得到(5,2,1)的结果
result = torch.bmm(matrices, vectors_col)
# 压缩最后一个冗余维度,得到(5,2)的目标张量
result = result.squeeze(-1)

# 验证梯度保留:执行反向传播测试
loss = result.sum()
loss.backward()
print(matrices.grad is not None)  # 输出True,说明梯度正常保留
print(vectors.grad is not None)   # 输出True,说明梯度正常保留

方法2:使用@运算符配合维度调整

@运算符支持广播机制,只要维度匹配即可完成运算,同样需要先将向量转为列向量维度:

# 调整向量维度后执行矩阵乘法
result = matrices @ vectors.unsqueeze(-1)
result = result.squeeze(-1)

# 梯度保留验证逻辑与方法1一致
loss = result.sum()
loss.backward()

为什么之前的方法无效?

  • *是元素级乘法,并非矩阵乘法,完全不符合你的需求;
  • 直接使用matrices @ vectors会因维度不匹配报错:matrices为(5,2,2),vectors为(5,2),PyTorch无法自动对齐批量维度下的矩阵-向量乘法规则;
  • torch.split是张量拆分工具,完全没必要用在这个场景,只会增加代码复杂度。

内容的提问来源于stack exchange,提问作者thedumbkid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 20:10:26