本文档基于X2Paddle研发过程梳理了 PyTorch(v1.8.1)常用 API 与 PaddlePaddle 2.0.0 API 对应关系与差异分析。通过本文档,帮助开发者快速迁移 PyTorch 使用经验,完成模型的开发与调优。
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
类别 | 简介 |
---|---|
基础操作类 | 主要为torch.XX 类 API |
组网类 | 主要为torch.nn.XX 类下组网相关的 API |
Loss 类 | 主要为torch.nn.XX 类下 loss 相关的 API |
工具类 | 主要为torch.nn.XX 类下分布式相关的 API 和torch.utils.XX 类 API |
视觉类 | 主要为torchvision.XX 类 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 |
梳理了与构造网络相关的 PyTorch-PaddlePaddle API 映射列表。
序号 | PyTorch API | PaddlePaddle API | 备注 |
---|---|---|---|
1 | torch.nn.Conv1d | paddle.nn.Conv1D | 差异对比 |
2 | torch.nn.Conv2d | paddle.nn.Conv2D | 差异对比 |
3 | torch.nn.Conv3d | paddle.nn.Conv3D | 差异对比 |
4 | torch.nn.ConvTranspose1d | paddle.nn.Conv1DTranspose | 差异对比 |
5 | torch.nn.ConvTranspose2d | paddle.nn.Conv2DTranspose | 差异对比 |
6 | torch.nn.ConvTranspose3d | paddle.nn.Conv3DTranspose | 差异对比 |
7 | torch.nn.Linear | paddle.nn.Linear | 差异对比 |
8 | torch.nn.MaxPool1d | paddle.nn.MaxPool1D | 差异对比 |
9 | torch.nn.MaxPool2d | paddle.nn.MaxPool2D | 差异对比 |
10 | torch.nn.MaxPool3d | paddle.nn.MaxPool3D | 差异对比 |
11 | torch.nn.MaxUnpool1d | 无对应实现 | 组合实现 |
12 | torch.nn.MaxUnpool2d | 无对应实现 | 组合实现 |
13 | torch.nn.MaxUnpool3d | 无对应实现 | 组合实现 |
14 | torch.nn.AvgPool1d | paddle.nn.AvgPool1D | 差异对比 |
15 | torch.nn.AvgPool2d | paddle.nn.AvgPool2D | 差异对比 |
16 | torch.nn.AvgPool3d | paddle.nn.AvgPool3D | 差异对比 |
17 | torch.nn.AdaptiveMaxPool1d | paddle.nn.AdaptiveMaxPool1D | 功能一致,参数名不一致 |
18 | torch.nn.AdaptiveMaxPool2d | paddle.nn.AdaptiveMaxPool2D | 功能一致,参数名不一致 |
19 | torch.nn.AdaptiveMaxPool3d | paddle.nn.AdaptiveMaxPool3D | 功能一致,参数名不一致 |
20 | torch.nn.AdaptiveAvgPool1d | paddle.nn.AdaptiveAvgPool1D | 功能一致,参数名不一致 |
21 | torch.nn.AdaptiveAvgPool2d | paddle.nn.AdaptiveAvgPool2D | 功能一致,参数名不一致 |
22 | torch.nn.AdaptiveAvgPool3d | paddle.nn.AdaptiveAvgPool3D | 功能一致,参数名不一致 |
23 | torch.nn.ConstantPad1d | paddle.nn.Pad1D | 差异对比 |
24 | torch.nn.ConstantPad2d | paddle.nn.Pad2D | 差异对比 |
25 | torch.nn.ConstantPad3d | paddle.nn.Pad3D | 差异对比 |
26 | torch.nn.ReflectionPad1d | paddle.nn.Pad1D | 差异对比 |
27 | torch.nn.ReflectionPad2d | paddle.nn.Pad2D | 差异对比 |
28 | torch.nn.ReplicationPad1d | paddle.nn.Pad1D | 差异对比 |
29 | torch.nn.ReplicationPad2d | paddle.nn.Pad2D | 差异对比 |
30 | torch.nn.ReplicationPad3d | paddle.nn.Pad3D | 差异对比 |
31 | torch.nn.BatchNorm1d | paddle.nn.BatchNorm1D | 差异对比 |
32 | torch.nn.BatchNorm2d | paddle.nn.BatchNorm2D | 差异对比 |
33 | torch.nn.BatchNorm3d | paddle.nn.BatchNorm3D | 差异对比 |
34 | torch.nn.Upsample | paddle.nn.Upsample | 差异对比 |
35 | torch.nn.Dropout | paddle.nn.Dropout | 差异对比 |
36 | torch.nn.Dropout2d | paddle.nn.Dropout2D | 差异对比 |
37 | torch.nn.Dropout3d | paddle.nn.Dropout3D | 差异对比 |
38 | torch.nn.LSTM | paddle.nn.LSTM | 差异对比 |
39 | torch.nn.GRU | paddle.nn.GRU | 差异对比 |
40 | torch.nn.Embedding | paddle.nn.Embedding | 差异对比 |
41 | torch.nn.ELU | paddle.nn.ELU | 功能一致,PaddlePaddle 未定义inplace 参数表示在不更改变量的内存地址的情况下,直接修改变量的值 |
42 | torch.nn.Hardsigmoid | paddle.nn.Hardsigmoid | 功能一致,PaddlePaddle 未定义inplace 参数表示在不更改变量的内存地址的情况下,直接修改变量的值 |
43 | torch.nn.LeakyReLU | paddle.nn.LeakyReLU | 功能一致,PaddlePaddle 未定义inplace 参数表示在不更改变量的内存地址的情况下,直接修改变量的值 |
44 | torch.nn.PReLU | paddle.nn.PReLU | 功能一致 |
45 | torch.nn.ReLU | paddle.nn.ReLU | 功能一致,PaddlePaddle 未定义inplace 参数表示在不更改变量的内存地址的情况下,直接修改变量的值 |
46 | torch.nn.Softmax | paddle.nn.Softmax | 功能一致,参数名不一致 |
梳理了计算 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 。 |
梳理了与数据处理、分布式处理等相关的 PyTorch-PaddlePaddle API 映射列表。
号 | PyTorch API | PaddlePaddle API | 备注 |
---|---|---|---|
1 | torch.nn.DataParallel | paddle.DataParallel | 差异对比 |
2 | torch.nn.parameter.Parameter | paddle.create_parameter | 差异对比 |
3 | torch.nn.utils.clip_grad_value_ | 无对应实现 | 组合实现 |
4 | torch.utils.data.DataLoader | paddle.io.DataLoader | 差异对比 |
5 | torch.utils.data.random_split | 无对应实现 | 组合实现 |
6 | torch.utils.data.distributed.DistributedSampler | 无对应实现 | 组合实现 |
7 | torch.utils.data.Dataset | paddle.io.Dataset | 功能一致 |
8 | torch.utils.data.BatchSampler | paddle.io.BatchSampler | 差异对比 |
9 | torch.utils.data.Sampler | paddle.io.Sampler | 功能一致 |
梳理了与视觉处理相关的 PyTorch-PaddlePaddle API 映射列表
序号 | PyTorch API | PaddlePaddle API | 备注 |
---|---|---|---|
1 | torchvision.transforms.Compose | paddle.vision.transforms.Compose | 功能一致 |
2 | torchvision.transforms.ToPILImage | 无对应实现 | 组合实现 |
3 | torchvision.transforms.Resize | paddle.vision.transforms.Resize | 功能一致 |
4 | torchvision.transforms.ToTensor | paddle.vision.transforms.ToTensor | 功能一致 |
5 | torchvision.transforms.RandomHorizontalFlip | paddle.vision.transforms.RandomHorizontalFlip | 功能一致 |
6 | torchvision.transforms.CenterCrop | paddle.vision.transforms.CenterCrop | 功能一致 |
7 | torchvision.transforms.ColorJitter | paddle.vision.transforms.ColorJitter | 功能一致 |
8 | torchvision.transforms.Grayscale | paddle.vision.transforms.Grayscale | 功能一致 |
9 | torchvision.transforms.Normalize | paddle.vision.transforms.Normalize | 差异对比 |
10 | torchvision.transforms.RandomResizedCrop | paddle.vision.transforms.RandomResizedCrop | 功能一致 |
11 | torchvision.transforms.Pad | paddle.vision.transforms.Pad | 功能一致 |
12 | torchvision.transforms.RandomCrop | paddle.vision.transforms.RandomCrop | 功能一致 |
13 | torchvision.transforms.RandomRotation | paddle.vision.transforms.RandomRotation | 功能一致 |
14 | torchvision.transforms.RandomVerticalFlip | paddle.vision.transforms.RandomVerticalFlip | 功能一致 |
15 | torchvision.transforms.Lambda | 无对应实现 | 组合实现 |
17 | torchvision.utils.save_image | 无对应实现 | 组合实现 |
18 | torchvision.models 系列模型 | X2Paddle 提供 |