提交代码前请参考官网安装
pre-commit,规范化代码格式。
请严格根据此格式规范来新增《API 映射关系》,不符合规范的文档将不予合入,具体如下:
API 映射关系文档 - 规范
[分类名称] api 全称
由于 API 映射关系的复杂性,为了保证文档格式的规范性,我们将所有 API 映射关系分为 12 类,并制定了统一的 分类名称:
参数与 API 名均一致
参数一致但 API 名不一致
仅参数名不一致
paddle 参数更多
参数默认值不一致
torch 参数更多
输入参数用法不一致
输入参数类型不一致
返回参数类型不一致
组合替代实现
可删除
功能缺失
注意:
分类的优先级依次递增,例如:如果同时
仅参数名不一致+paddle 参数更多,则分类为后者paddle 参数更多,如果同时paddle 参数更多+torch 参数更多,则分类为后者torch 参数更多。
输入参数用法不一致、输入参数类型不一致、返回参数类型不一致其中的不一致都是从 torch 的角度来看,只要 torch 能被 paddle 全覆盖,则将其视作一致(例如:torch 参数仅支持 list 用法,而 paddle 参数支持 list/tuple 用法,则视作用法一致),如果 torch 无法被 paddle 全覆盖,才认定为 不一致。
可删除表示转写时可直接删除该 API,并不会对代码运行结果有影响,无需写映射文档,仅标注即可。功能缺失表示 Paddle 当前无对应 API 功能,则无需写映射文档,仅标注即可。所有的 Paddle API 无需关注
name参数,直接忽略即可。将类成员 API 映射为非类成员 API,则无需对比第一个参数。例如将
torch.Tensor.outer(vec2)映射为paddle.outer(x, y),则忽略 paddle 的第一个参数x,直接从 torch 的vec2和 paddle 的y开始对比参数。
[pytorch api 全称] (pytorch api 链接)
PyTorch API 签名
[paddle api 全称] (paddle api 链接)
Paddle API 签名
一句话总结。整体概述总结两个 API 的差异。例如 输入参数用法不一致 ,需要简述下有参数哪些用法不一致的地方。在描写参数时,需要用 ` ` 来加深其底色。
参数映射
参数映射以表格的形式呈现,表格的第 1 列是PyTorch 所有参数,第 2 列是Paddle对应参数,表格顺序按第 1 列 PyTorch 的参数顺序来。
参数与 API 名均一致:无需映射文档与转写示例。
参数一致但 API 名不一致:无需映射文档与转写示例。
仅参数名不一致:无需转写示例,但需要在备注列里注明哪些参数
仅参数名不一致。paddle 参数更多:无需转写示例,但需要在备注列里注明
PyTorch 无此参数,[Paddle 应如何设置此参数]。如果无需特殊设置,则写PyTorch 无此参数,Paddle 保持默认即可。参数默认值不一致:无需转写示例,但需要在备注列里注明
参数默认值不一致,[Paddle 应如何设置此参数,设置为多少]。torch 参数更多:对每个 torch 多的参数都需要转写示例,同时需要在备注列里注明
Paddle 无此参数,需要转写;如确实无法转写,则注明Paddle 无此参数,暂无转写方式;若可直接删除,则需要写Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。输入参数用法不一致、输入参数类型不一致、返回参数类型不一致:对每个不一致的参数都需要转写示例,同时需要在备注列里注明
[不一致的用法说明],需要转写;如确实无法转写,需要在备注里写[不一致的用法说明],暂无转写方式。组合替代实现:无需参数映射,需要写 转写示例 。
每个备注都需要
以句号结尾。
转写示例
转写示例需要写得精简和一目了然。一般情形下只需写两行代码,无需打印各种结果,需要保证转写前后的输出结果是一致的。另外需要先描述下转写的是 torch api 的哪个参数及其功能。
参数名 1:参数功能 1
# PyTorch 写法
torch.xxx()
# Paddle 写法
paddle.xxx()
参数名 2:参数功能 2
# PyTorch 写法
torch.xxx()
# Paddle 写法
paddle.xxx()
是否需要 参数映射 与 转写示例 可查阅表格:
第 1、2、10 类不需要参数映射,其他类均需要写参数映射。第 1-5 类不需要转写示例,第 6-10 类需要写转写示例。第 11-12 类则无需新建文档,仅标注即可。
| 分类序号 | 分类名称 | 参数映射 | 转写示例 |
|---|---|---|---|
| 1 | 参数与 API 名均一致 | ❌ | ❌ |
| 2 | 参数一致但 API 名不一致 | ❌ | ❌ |
| 3 | 仅参数名不一致 | ✅ | ❌ |
| 4 | paddle 参数更多 | ✅ | ❌ |
| 5 | 参数默认值不一致 | ✅ | ❌ |
| 6 | torch 参数更多 | ✅ | ✅ |
| 7 | 输入参数用法不一致 | ✅ | ✅ |
| 8 | 输入参数类型不一致 | ✅ | ✅ |
| 9 | 返回参数类型不一致 | ✅ | ✅ |
| 10 | 组合替代实现 | ❌ | ✅ |
API 映射关系文档 - 模板
分类 3:仅参数名不一致
[ 仅参数名不一致 ]torch.dist
torch.dist
torch.dist(input,
other,
p=2)
参数映射
| PyTorch | PaddlePaddle | 备注 |
|---|---|---|
| input | x | 表示输入的 Tensor ,仅参数名不一致。 |
| other | y | 表示输入的 Tensor ,仅参数名不一致。 |
| p | p | 表示需要计算的范数 |
分类 4:paddle 参数更多
[ paddle 参数更多 ]torch.nn.ZeroPad2d
torch.nn.ZeroPad2d
torch.nn.ZeroPad2d(padding)
paddle.nn.ZeroPad2D
paddle.nn.ZeroPad2D(padding,
data_format='NCHW',
name=None)
其中 Paddle 相比 PyTorch 支持更多其他参数,具体如下:
参数映射
| PyTorch | PaddlePaddle | 备注 |
|---|---|---|
| padding | padding | 表示填充大小。 |
| - | data_format | 指定输入的 format, PyTorch 无此参数, Paddle 保持默认即可。 |
分类 5:参数默认值不一致
[ 参数默认值不一致 ]torch.linalg.diagonal
torch.linalg.diagonal
torch.linalg.diagonal(A, *, offset=0, dim1=-2, dim2=-1)
paddle.diagonal
paddle.diagonal(x,
offset=0,
axis1=0,
axis2=1,
name=None)
两者功能一致且参数用法一致,参数默认值不一致,具体如下:
参数映射
| PyTorch | PaddlePaddle | 备注 |
|---|---|---|
| A | x | 表示输入的 Tensor ,仅参数名不一致。 |
| offset | offset | 表示对角线偏移量。 |
| dim1 | axis1 | 获取对角线的二维平面的第一维,参数默认值不一致。PyTorch 默认为-2,Paddle 默认为0,Paddle 需设置为与 PyTorch 一致。 |
| dim2 | axis2 | 获取对角线的二维平面的第二维,参数默认值不一致。PyTorch 默认为-1,Paddle 默认为1,Paddle 需设置为与 PyTorch 一致。 |
分类 6:torch 参数更多
[ torch 参数更多 ] torch.abs
paddle.abs
paddle.abs(x,
name=None)
PyTorch 相比 Paddle 支持更多其他参数,具体如下:(注:这里额外列举了一些其他常见 Pytorch 的参数的转写方式,与 torch.abs 无关)
参数映射
| PyTorch | Paddle | 备注 |
|---|---|---|
| input | x | 表示输入的 Tensor ,仅参数名不一致。 |
| out | - | 表示输出的 Tensor ,Paddle 无此参数,需要转写。 |
| *size | shape | 表示输出形状大小, PyTorch 是多个元素,Paddle 是列表或元组,需要转写。 |
| layout | - | 表示布局方式, Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 |
| device | - | 表示 Tensor 存放设备位置,Paddle 无此参数,需要转写。 |
| requires_grad | - | 表示是否计算梯度, Paddle 无此参数,需要转写。 |
| memory_format | - | 表示内存格式, Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 |
| pin_memeory | - | 表示是否使用锁页内存, Paddle 无此参数,需要转写。 |
| generator | - | 用于采样的伪随机数生成器, Paddle 无此参数,一般对网络训练结果影响不大,可直接删除。 |
| size_average | - | PyTorch 已弃用, Paddle 无此参数,需要转写。 |
| reduce | - | PyTorch 已弃用, Paddle 无此参数,需要转写。 |
| async_op | - | 是否异步操作,Paddle 无此参数,暂无转写方式。 |
| antialias | - | 是否使用 anti-aliasing,Paddle 无此参数,暂无转写方式。 |
转写示例
out:指定输出
# PyTorch 写法
torch.abs([-3, -5], out=y)
# Paddle 写法
paddle.assign(paddle.abs([-3, -5]), y)
device: Tensor 的设备
# PyTorch 写法
torch.zeros_like(x, device=torch.device('cpu'))
# Paddle 写法
y = paddle.zeros_like(x)
y.cpu()
requires_grad:是否求梯度
# PyTorch 写法
x = torch.zeros_like(x, requires_grad=True)
# Paddle 写法
x = paddle.zeros_like(x)
x.stop_gradient = False
pin_memory:是否分配到固定内存上
# PyTorch 写法
x = torch.empty_like((2, 3), pin_memory=True)
# Paddle 写法
x = paddle.empty_like([2, 3]).pin_memory()
size_average:做 reduce 的方式
# PyTorch 的 size_average、reduce 参数转为 Paddle 的 reduction 参数
if size_average is None:
size_average = True
if reduce is None:
reduce = True
if size_average and reduce:
reduction = 'mean'
elif reduce:
reduction = 'sum'
else:
reduction = 'none'
分类 7:输入参数用法不一致
[ 输入参数用法不一致 ] torch.transpose
torch.transpose
torch.transpose(input,
dim0,
dim1)
参数映射
| PyTorch | PaddlePaddle | 备注 |
|---|---|---|
| input | x | 输入 Tensor。 |
| dim0 | - | PyTorch 转置的第一个维度,Paddle 无此参数,需要转写。 |
| dim1 | - | PyTorch 转置的第二个维度,Paddle 无此参数,需要转写。 |
| - | perm | Paddle 可通过 perm 参数,等价的实现 torch 的 dim0、dim1 的功能。 |
分类 8:输入参数类型不一致
[ 输入参数类型不一致 ]torch.broadcast_tensors
torch.broadcast_tensors
torch.broadcast_tensors(*tensors)
参数映射
| PyTorch | PaddlePaddle | 备注 |
|---|---|---|
| *tensors | inputs | 一组输入 Tensor , PyTorch 参数 tensors 为可变参, Paddle 参数 inputs 为 list(Tensor) 或 tuple(Tensor) 的形式。 |
分类 9:返回参数类型不一致
[ 返回参数类型不一致 ]torch.equal
torch.equal
torch.equal(input,
other)
参数映射
| PyTorch | PaddlePaddle | 备注 |
|---|---|---|
| input | x | 表示输入的 Tensor,仅参数名不一致。 |
| other | y | 表示输入的 Tensor,仅参数名不一致。 |
| 返回值 | 返回值 | PyTorch 返回 bool 类型,Paddle 返回 0-D bool Tensor,需要转写。 |