比较与torch.nn.functional.pad的功能差异

查看源文件

torch.nn.functional.pad

class torch.nn.functional.pad(
    input
    pad,
    mode='constant',
    value=0.0
)

更多内容详见torch.nn.functional.pad

mindspore.nn.Pad

class mindspore.nn.Pad(
    paddings,
    mode="CONSTANT"
)(x)

更多内容详见mindspore.nn.Pad

使用方式

PyTorch:pad参数是一个有m个值的tuple,m/2小于等于输入数据的维度,且m为偶数。支持填充负维度。假设pad=(k1, k2, …, kl, km),输入x的shape为(d1, d2…, dg),则dg维的两边分别填充长度为k1,k2的值。依此类推,d1维的两边分别填充长度为kl,km的值。

MindSpore:paddings参数是一个shape为(n, 2)的tuple,n为输入数据的维度。对于输入x的D维,对应输出D维的大小等于paddings[D, 0] + x.dim_size(D) + paddings[D, 1]。当前不支持填充负维度,可用ops.Slice切小。假设输入x为的shape为(1, 2, 2, 3),Pytorch的pad参数为(1, 1, 2, 2),要使MindSpore的输出shape与Pytorch的一致,则paddings参数应为((0, 0), (0, 0), (2, 2), (1, 1)),输出的shape为(1, 2, 6, 5)。

代码示例

# In MindSpore.
import numpy as np
import torch
import mindspore.nn as nn
import mindspore as ms

x = ms.Tensor(np.ones([1, 2, 2, 3]).astype(np.float32))
pad_op = nn.Pad(paddings=((0, 0), (0, 0), (2, 2), (1, 1)))
output = pad_op(x)
print(output.shape)
# Out:
# (1, 2, 6, 5)

# In Pytorch.
x = torch.empty(1, 2, 2, 3)
pad = (1, 1, 2, 2)
output = torch.nn.functional.pad(x, pad)
print(output.size())
# Out:
# torch.Size([1, 2, 6, 5])