本文档基于X2Paddle研发过程梳理了 PyTorch(v1.8.1)常用 API 与 PaddlePaddle 2.0.0 API 对应关系与差异分析。通过本文档,帮助开发者快速迁移 PyTorch 使用经验,完成模型的开发与调优。
X2Paddle 介绍
X2Paddle 致力于帮助其它主流深度学习框架开发者快速迁移至飞桨框架,目前提供三大功能
- 预测模型转换
- 支持 Caffe/TensorFlow/ONNX/PyTorch 的模型一键转为飞桨的预测模型,并使用 PaddleInference/PaddleLite 进行 CPU/GPU/Arm 等设备的部署
- PyTorch 训练项目转换
- 支持 PyTorch 项目 Python 代码(包括训练、预测)一键转为基于飞桨框架的项目代码,帮助开发者快速迁移项目,并可享受 AI Studio 平台对于飞桨框架提供的海量免费计算资源
- API 映射文档
- 详细的 API 文档对比分析,帮助开发者快速从 PyTorch 框架的使用迁移至飞桨框架的使用,大大降低学习成本
详细的项目信息与使用方法参考 X2Paddle 在 GitHub 上的开源项目: https://github.com/PaddlePaddle/X2Paddle
API 映射表目录
基础操作类 API 映射列表
梳理了基础操作的 PyTorch-PaddlePaddle API 映射列表,主要包括了构造 Tensor、数学计算、逻辑计算相关的 API。
号 | PyTorch API | PaddlePaddle API | 备注 |
1 | torch.set_default_dtype | paddle.set_default_dtype | 功能一致 |
2 | torch.get_default_dtype | paddle.get_default_dtype | 功能一致 |
3 | torch.numel | paddle.numel | 功能一致,参数名不一致 |
4 | torch.tensor | paddle.to_tensor | 差异对比 |
5 | torch.from_numpy | paddle.to_tensor | 差异对比 |
6 | torch.zeros | paddle.zeros | 差异对比 |
7 | torch.zeros_like | paddle.zeros_like | 差异对比 |
8 | torch.ones | paddle.ones | 差异对比 |
9 | torch.ones_like | paddle.ones_like | 差异对比 |
10 | torch.empty | paddle.empty | 差异对比 |
11 | torch.empty_like | paddle.empty_like | 差异对比 |
12 | torch.full | paddle.full | 功能一致,参数不一致 |
13 | torch.full_like | paddle.full_like | 差异对比 |
14 | torch.arange | paddle.arange | 功能一致,参数不一致 |
15 | torch.range | paddle.arange | 功能一致,参数不一致 |
16 | torch.linspace | paddle.linspace | 功能一致,参数不一致 |
17 | torch.eye | paddle.eye | 功能一致,参数不一致 |
18 | torch.cat | paddle.concat | 功能一致,参数名不一致 |
19 | torch.chunk | paddle.chunk | 功能一致,参数名不一致 |
20 | torch.gather | paddle.gather | 差异对比 |
21 | torch.index_select | paddle.index_select | 功能一致,参数名不一致 |
22 | torch.masked_select | paddle.masked_select | 功能一致,参数名不一致 |
23 | torch.narrow | paddle.slice | 差异对比 |
24 | torch.nonzero | paddle.nonzero | 功能一致,参数名不一致 |
25 | torch.reshape | paddle.reshape | 功能一致,参数名不一致 |
26 | torch.split | paddle.split | 功能一致,参数名不一致 |
27 | torch.squeeze | paddle.squeeze | 功能一致,参数名不一致 |
28 | torch.stack | paddle.stack | 功能一致,参数名不一致 |
29 | torch.t | paddle.t | 功能一致,参数名不一致 |
30 | torch.transpose | paddle.transpose | 差异对比 |
31 | torch.unbind | paddle.unbind | 功能一致,参数名不一致 |
32 | torch.unsqueeze | paddle.unsqueeze | 功能一致,参数名不一致 |
33 | torch.where | paddle.where | 功能一致 |
34 | torch.bernoulli | paddle.bernoulli | 功能一致,参数不一致 |
35 | torch.multinomial | paddle.multinomial | 功能一致,参数不一致 |
36 | torch.normal | paddle.normal | 差异对比 |
37 | torch.rand | paddle.rand | 差异对比 |
38 | torch.randint | paddle.randint | 功能一致,参数不一致 |
39 | torch.randn | paddle.randn | 差异对比 |
40 | torch.randperm | paddle.randperm | 功能一致,参数不一致 |
41 | torch.save | paddle.save | 差异对比 |
42 | torch.load | paddle.load | 差异对比 |
43 | torch.abs | paddle.abs | 功能一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
44 | torch.absolute | paddle.abs | 功能一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
45 | torch.acos | paddle.acos | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
46 | torch.arccos | paddle.acos | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
47 | torch.add | padle.add | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
48 | torch.asin | paddle.asin | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
49 | torch.arcsin | paddle.asin | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
50 | torch.atan | paddle.atan | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
51 | torch.arctan | paddle.atan | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
52 | torch.ceil | paddle.ceil | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
53 | torch.clamp | paddle.clip | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
54 | torch.conj | paddle.conj | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
55 | torch.cos | paddle.cos | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
56 | torch.cosh | paddle.cosh | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
57 | torch.div | paddle.divide | 差异对比 |
58 | torch.divide | paddle.divide | 差异对比 |
59 | torch.erf | paddle.erf | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
60 | torch.exp | paddle.exp | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
61 | torch.floor | paddle.floor | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
62 | torch.floor_divide | paddle.floor_divide | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
63 | torch.fmod | paddle.mod | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
64 | torch.log | paddle.log | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
65 | torch.log10 | paddle.log10 | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
66 | torch.log1p | paddle.log1p | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
67 | torch.log2 | paddle.log2 | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
68 | torch.logical_and | paddle.logical_and | 功能一致,参数名不一致 |
69 | torch.logical_not | paddle.logical_not | 功能一致,参数名不一致 |
70 | torch.logical_or | paddle.logical_or | 功能一致,参数名不一致 |
71 | torch.logical_xor | paddle.logical_xor | 功能一致,参数名不一致 |
72 | torch.mul | paddle.multiply | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
73 | torch.multiply | paddle.multiply | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
74 | torch.pow | paddle.pow | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
75 | torch.real | paddle.real | 功能一致,参数名不一致 |
76 | torch.reciprocal | paddle.reciprocal | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
77 | torch.remainder | paddle.mod | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
78 | torch.round | paddle.round | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
79 | torch.rsqrt | paddle.rsqrt | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
80 | torch.sign | paddle.sign | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
81 | torch.sin | paddle.sin | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
82 | torch.sinh | paddle.sinh | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
83 | torch.sqrt | paddle.sqrt | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
84 | torch.argmax | paddle.argmax | 功能一致,参数名不一致 |
85 | torch.argmin | paddle.argmin | 功能一致,参数名不一致 |
86 | torch.max | paddle.max | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
87 | torch.min | paddle.min | 功能一致,参数名不一致,PaddlePaddle 未定义out 参数代表输出 Tensor |
组网类 API 映射列表
梳理了与构造网络相关的 PyTorch-PaddlePaddle API 映射列表。
Loss 类 API 映射列表
梳理了计算 loss 相关的 PyTorch-PaddlePaddle API 映射列表。
序号 | PyTorch API | PaddlePaddle API | 备注 |
1 | torch.nn.L1Loss | paddle.nn.L1Loss | 功能一致,PyTorch 存在废弃参数size_average 和reduce 。 |
2 | torch.nn.MSELoss | paddle.nn.MSELoss | 功能一致,PyTorch 存在废弃参数size_average 和reduce 。 |
3 | torch.nn.CrossEntropyLoss | paddle.nn.CrossEntropyLoss | 差异对比 |
4 | torch.nn.KLDivLoss | paddle.nn.KLDivLoss | 差异对比 |
5 | torch.nn.BCELoss | paddle.nn.BCELoss | 功能一致,PyTorch 存在废弃参数size_average 和reduce 。 |
6 | torch.nn.BCEWithLogitsLoss | paddle.nn.BCEWithLogitsLoss | 功能一致,PyTorch 存在废弃参数size_average 和reduce 。 |
7 | torch.nn.SmoothL1Loss | paddle.nn.SmoothL1Loss | 功能一致,参数名不一致,PyTorch 存在废弃参数size_average 和reduce 。 |
工具类 API 映射列表
梳理了与数据处理、分布式处理等相关的 PyTorch-PaddlePaddle API 映射列表。
视觉类 API 映射列表
梳理了与视觉处理相关的 PyTorch-PaddlePaddle API 映射列表