Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

API improvement for paddle.svd_lowrank 易用性提升 #6562

Merged
merged 5 commits into from
Apr 7, 2024
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions docs/api/paddle/linalg/Overview_cn.rst
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ paddle.linalg 目录下包含飞桨框架支持的线性代数相关 API。具
" :ref:`paddle.linalg.eigvalsh <cn_api_paddle_linalg_eigvalsh>` ", "计算厄米特矩阵或者实数对称矩阵的特征值"
" :ref:`paddle.linalg.cholesky <cn_api_paddle_linalg_cholesky>` ", "计算一个实数对称正定矩阵的 Cholesky 分解"
" :ref:`paddle.linalg.svd <cn_api_paddle_linalg_svd>` ", "计算矩阵的奇异值分解"
" :ref:`paddle.linalg.svd_lowrank <cn_api_paddle_linalg_svd_lowrank>` ", "对低秩矩阵进行奇异值分解"
" :ref:`paddle.linalg.pca_lowrank <cn_api_paddle_linalg_pca_lowrank>` ", "对矩阵进行线性主成分分析"
" :ref:`paddle.linalg.qr <cn_api_paddle_linalg_qr>` ", "计算矩阵的正交三角分解(也称 QR 分解)"
" :ref:`paddle.linalg.lu <cn_api_paddle_linalg_lu>` ", "计算矩阵的 LU 分解"
Expand Down
1 change: 1 addition & 0 deletions docs/api/paddle/linalg/pca_lowrank_cn.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ pca_lowrank
- **x** (Tensor) - 输入的需要进行线性主成分分析的一个或一批方阵,类型为 Tensor。 ``x`` 的形状应为 ``[*, M, N]``,其中 ``*`` 为零或更大的批次维度,数据类型支持 float32, float64。
- **q** (int,可选) - 对输入 :math:`X` 的秩稍微高估的预估值,默认值是 :math:`q=min(6,N,M)`。
- **center** (bool,可选) - 是否对输入矩阵进行中心化操作,类型为 bool ,默认为 True。
- **niter** (int) - 需要进行的子空间迭代次数。默认值为 2。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

torch.pca_lowrank的差异对比文档是不是也有问题?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

torch.pca_lowrank的差异对比文档里面写了niter,没有问题

- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。

返回
Expand Down
42 changes: 42 additions & 0 deletions docs/api/paddle/linalg/svd_lowrank_cn.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
.. _cn_api_paddle_linalg_svd_lowrank:

svd_lowrank
-------------------------------

.. py:function:: paddle.linalg.svd_lowrank(x, q=None, niter=2, M=None, name=None)


计算在低秩矩阵或者批次的矩阵上进行奇异值分解(SVD)。

记 :math:`X` 为一个矩阵或者批次矩阵,输出结果满足:

.. math::
X \approx U * diag(S) * V^{T}

若提供了 :math:`M` ,输出结果满足:

.. math::
X - M \approx U * diag(S) * V^{T}

参数
::::::::::::

- **x** (Tensor) - 输入的需要进行奇异值分解的一个或一批方阵,类型为 Tensor。 ``x`` 的形状应为 ``[*, M, N]``,其中 ``*`` 为零或更大的批次维度,数据类型支持 float32, float64。
- **q** (int,可选) - 对输入 :math:`X` 的秩稍微高估的预估值,默认值为 6。
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

建议和前面的 q=None 统一一下描述吧,尽量减少用户的理解成本,比如 默认值为 None,代表...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

好的

- **niter** (int) - 需要进行的子空间迭代次数。默认值为 2。
- **M** (Tensor) - 输入矩阵在 `axis=-2` 维上的均值,形状应为 ``[*, 1, N]``,默认为 None。
- **name** (str,可选) - 具体用法请参见 :ref:`api_guide_Name`,一般无需设置,默认值为 None。

返回
::::::::::::

- Tensor U,形状为 N x q 的矩阵。
- Tensor S,长度为 q 的向量。
- Tensor V,形状为 M x q 的矩阵。

tuple (U, S, V): 对输入 :math:`X` 或 :math:`X-M` 的奇异值分解的近似最优解。

代码示例
::::::::::

COPY-FROM: paddle.linalg.svd_lowrank
Original file line number Diff line number Diff line change
@@ -1,24 +1,23 @@
## [ torch 参数更多 ] torch.svd_lowrank
## [ 仅参数名不一致 ] torch.svd_lowrank

### [torch.svd_lowrank](https://pytorch.org/docs/stable/generated/torch.svd_lowrank.html?highlight=torch+svd_lowrank#torch.svd_lowrank)

```python
torch.svd_lowrank(A, q=6, niter=2, M=None)
```

### [paddle.linalg.svd](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/linalg/svd_cn.html#svd)
### [paddle.linalg.svd_lowrank](https://www.paddlepaddle.org.cn/documentation/docs/zh/develop/api/paddle/linalg/svd_lowrank_cn.html)

```python
paddle.linalg.svd(x, full_matrics=False, name=None)
paddle.linalg.svd_lowrank(x, q=None, niter=2, M=None name=None)
```

PyTorch 相比 Paddle 支持更多其他参数,具体如下:
两者功能一致,仅参数名不一致,具体如下:

### 参数映射
| PyTorch | PaddlePaddle | 备注 |
NKNaN marked this conversation as resolved.
Show resolved Hide resolved
| ------------- | ------------ | ------------------------------------------------------ |
| A | x | 表示输入 Tensor,仅参数名不一致。 |
| q | - | 表示输入 Tensor 略高估计秩。 Paddle 无此参数,暂无转写方式。 |
| niter | - | 表示子空间进行迭代的数量。Paddle 无此参数,暂无转写方式。 |
| M | - | 表示输入 Tensor 的平均 size。 Paddle 无此参数,暂无转写方式。 |
| - | full_matrics | 表示是否计算完整的 U 和 V 矩阵。 PyTorch 无此参数,Paddle 保持默认即可。 |
| q | q | 表示输入 Tensor 略高估计秩。 |
| niter | niter | 表示子空间进行迭代的数量。 |
| M | M | 表示输入 Tensor 的平均值矩阵。 |