如何在PyTorch中计算张量的矩阵对数?
在PyTorch中实现矩阵对数(支持自动微分)
PyTorch 1.8.0及以上版本提供了torch.linalg.logm()函数,完全等价于scipy.linalg.logm()的功能,原生支持PyTorch张量,且保留自动微分能力,不需要转换成NumPy数组。
基础使用示例
import torch # 创建带梯度追踪的正定矩阵张量 A = torch.tensor([[3.0, 1.0], [1.0, 3.0]], requires_grad=True) # 计算矩阵对数 log_matrix = torch.linalg.logm(A) print("矩阵对数结果:\n", log_matrix)
验证梯度传递
要确认梯度能正常用于后续运算,可以做一个简单的反向传播测试:
# 定义一个简单的损失函数(取对数矩阵所有元素的和) loss = log_matrix.sum() loss.backward() # 查看原矩阵的梯度 print("原矩阵的梯度:\n", A.grad)
注意事项
- 和
scipy.linalg.logm()一样,输入矩阵需要是可逆且存在对数的矩阵(比如正定矩阵、无负实特征值的可逆矩阵),否则会出现数值不稳定或报错。 - 函数支持批量矩阵输入(形状为
(batch_size, n, n)的张量),无需手动循环处理每个样本。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

