本文简要介绍python语言中 torch.linalg.lstsq
的用法。
用法:
torch.linalg.lstsq(A, B, rcond=None, *, driver=None)
driver(str,可选的) -要使用的 LAPACK/MAGMA 方法的名称。如果
None
,‘gelsy’
用于 CPU 输入,‘gels’
用于 CUDA 输入。默认值:None
。命名元组
(solution, residuals, rank, singular_values)
。计算线性方程组的最小二乘问题的解。
让
是 或者 , 这最小二乘问题对于线性系统 和 定义为其中 表示 Frobenius 范数。
支持 float、double、cfloat 和 cdouble dtypes 的输入。还支持矩阵批次,如果输入是矩阵批次,则输出具有相同的批次尺寸。
driver
选择将使用的 LAPACK/MAGMA 函数。对于 CPU 输入,有效值为‘gels’
、‘gelsy’
、‘gelsd
、‘gelss’
。对于 CUDA 输入,唯一有效的驱动程序是‘gels’
,它假定A
是满秩的。要在 CPU 上选择最佳驱动程序,请考虑:如果
A
条件良好(它的condition number 不是太大),或者您不介意一些精度损失。对于一般矩阵:
‘gelsy’
(带旋转的 QR)(默认)如果
A
是满秩:‘gels’
(QR)
如果
A
条件不佳。‘gelsd’
(三对角缩减和 SVD)但是,如果您遇到内存问题:
‘gelss’
(完整的 SVD)。
另见full description of these drivers
当
driver
是(‘gelsy’
、‘gelsd’
、‘gelss’
)之一时,rcond
用于确定A
中矩阵的有效秩。在这种情况下,如果 是A
的降序奇异值,如果 ,则 将向下舍入为零。如果rcond
= None
(默认),rcond
设置为A
dtype 的机器精度。此函数在四个张量
(solution, residuals, rank, singular_values)
的命名元组中返回问题的解决方案和一些额外信息。对于形状为(*, m, n)
、(*, m, k)
的输入A
、B
,它包含solution
:最小二乘解。它的形状为(*, n, k)
。residuals
:解的平方残差,即 。它的形状等于A
的批量尺寸。当m > n
和A
中的每个矩阵都是满秩时计算它,否则它是一个空张量。如果A
是一批矩阵并且该批中的任何矩阵不是满秩的,则返回一个空张量。此行为可能会在未来的PyTorch 版本中发生变化。rank
:A
中矩阵的秩张量。它的形状等于A
的批量尺寸。当driver
是(‘gelsy’
、‘gelsd’
、‘gelss’
)之一时计算,否则为空张量。singular_values
:A
中矩阵的奇异值的张量。它的形状为(*, min(m, n))
。当driver
是 (‘gelsd’
,‘gelss’
) 之一时计算它,否则它是一个空张量。
注意
此函数计算
X =
A
.pinverse() @
B
比单独执行计算更快且数值更稳定。警告
rcond
的默认值可能会在未来的 PyTorch 版本中更改。因此,建议使用固定值以避免潜在的破坏性变化。例子:
>>> A = torch.tensor([[[10, 2, 3], [3, 10, 5], [5, 6, 12]]], dtype=torch.float) # shape (1, 3, 3) >>> B = torch.tensor([[[2, 5, 1], [3, 2, 1], [5, 1, 9]], [[4, 2, 9], [2, 0, 3], [2, 5, 3]]], dtype=torch.float) # shape (2, 3, 3) >>> X = torch.linalg.lstsq(A, B).solution # A is broadcasted to shape (2, 3, 3) >>> torch.dist(X, torch.linalg.pinv(A) @ B) tensor(2.0862e-07) >>> S = torch.linalg.lstsq(A, B, driver='gelsd').singular_values >>> torch.dist(S, torch.linalg.svdvals(A)) tensor(5.7220e-06) >>> A[:, 0].zero_() # Decrease the rank of A >>> rank = torch.linalg.lstsq(A, B).rank >>> rank tensor([2])
参数:
关键字参数:
返回:
相关用法
- Python PyTorch log2用法及代码示例
- Python PyTorch lerp用法及代码示例
- Python PyTorch logical_xor用法及代码示例
- Python PyTorch load_state_dict_from_url用法及代码示例
- Python PyTorch logical_and用法及代码示例
- Python PyTorch lt用法及代码示例
- Python PyTorch log_softmax用法及代码示例
- Python PyTorch lgamma用法及代码示例
- Python PyTorch logical_or用法及代码示例
- Python PyTorch lazy_apply用法及代码示例
- Python PyTorch logit用法及代码示例
- Python PyTorch logical_not用法及代码示例
- Python PyTorch ldexp用法及代码示例
- Python PyTorch logcumsumexp用法及代码示例
- Python PyTorch log10用法及代码示例
- Python PyTorch logaddexp用法及代码示例
- Python PyTorch logdet用法及代码示例
- Python PyTorch load_sp_model用法及代码示例
- Python PyTorch log用法及代码示例
- Python PyTorch list用法及代码示例
- Python PyTorch logsumexp用法及代码示例
- Python PyTorch linspace用法及代码示例
- Python PyTorch lu_solve用法及代码示例
- Python PyTorch logspace用法及代码示例
- Python PyTorch l1_unstructured用法及代码示例
注:本文由纯净天空筛选整理自pytorch.org大神的英文原创作品 torch.linalg.lstsq。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。