mindspore.mint.nn.ConvTranspose2d

查看源文件
class mindspore.mint.nn.ConvTranspose2d(in_channels, out_channels, kernel_size, stride=1, padding=0, output_padding=0, groups=1, bias=True, dilation=1, padding_mode='zeros', dtype=None)[源代码]

将2D转置卷积运算应用于由多个输入平面组成的输入图像。

这个模块可以看作是Conv2d相对于其输入的梯度。它也被称为分数跨步卷积或反卷积(尽管它不是实际的反卷积操作,其不是计算卷积的真逆函数)。

所有参数中的 kernel_sizestridepaddingoutput_padding 可以为:

  • 单个整数 – 在这种情况下,该值同时被用于H和W维度

  • 一个由两个整数组成的tuple – 在这种情况下,第一个整数用于H维度,第二个整数用于W维度。

警告

  • 这是一个实验性API,后续可能修改或删除。

  • 在输入非连续场景下, output_padding 必须小于 stride

  • 在Atlas训练系列产品上,float32类型输入时,仅支持 groups 为1。

参数:
  • in_channels (int) - 输入图像中的通道数。

  • out_channels (int) - 卷积生成的通道数。

  • kernel_size (Union[int, tuple(int)]) - 卷积核的大小。

  • stride (Union[int, tuple(int)], 可选) - 卷积的步长。默认值: 1

  • padding (Union[int, tuple(int)], 可选) - dilation(kernel_size1)padding 零填充将添加到输入中每个维度的两侧。默认值: 0

  • output_padding (Union[int, tuple(int)], 可选) - 在输出形状中每个维度的一侧增加额外的尺寸。 output_padding 的值必须小于 stridedilation 。默认值: 0

  • groups (int, 可选) - 从输入通道到输出通道的分块数。默认值: 1

  • bias (bool, 可选) - 如果值为 True , 则添加一个可学习的偏置至输出中。默认值: True

  • dilation (Union[int, tuple(int)], 可选) - 内核元素之间的间距。默认值: 1

  • padding_mode (str, 可选) - 指定填充值的填充模式。目前仅支持 zeros。默认值: zeros

  • dtype (mindspore.dtype, 可选) - 模型参数的类型。默认值: None,此时模型参数类型为 mstype.float32

可学习参数:
  • weigh (Parameter) - 模型的可学习权重,其shape为 (in_channels,out_channelsgroups,kernel_size[0],kernel_size[1])。 其值从分布 U(k,k) 中采样得到,其中 k=groupsCouti=01kernel_size[i]

  • bias (Parameter) - 模型的可学习偏置,其shape为 (out_channels,) 。 如果 bias 为True,则其值从分布 U(k,k) 中采样得到,其中 k=groupsCouti=01kernel_size[i]

输入:
  • input (Tensor) - Tensor,其shape为 (N,Cin,Hin,Win)(Cin,Hin,Win)

输出:

Tensor, shape为 (N,Cout,Hout,Wout)(Cout,Hout,Wout) ,其中:

Hout=(Hin1)×stride[0]2×padding[0]+dilation[0]×(kernel_size[0]1)+output_padding[0]+1
Wout=(Win1)×stride[1]2×padding[1]+dilation[1]×(kernel_size[1]1)+output_padding[1]+1
支持平台:

Ascend

样例:

>>> import mindspore as ms
>>> from mindspore import mint
>>> # With square kernels and equal stride
>>> m = mint.nn.ConvTranspose2d(16, 33, 3, stride=2)
>>> # non-square kernels and unequal stride and with padding
>>> m = mint.nn.ConvTranspose2d(16, 33, (3, 5), stride=(2, 1), padding=(4, 2))
>>> input = mint.randn(20, 16, 50, 100)
>>> output = m(input)
>>> # exact output size can be also specified as an argument
>>> input = mint.randn(1, 16, 12, 12)
>>> downsample = mint.nn.Conv2d(16, 16, 3, stride=2, padding=1)
>>> upsample = mint.nn.ConvTranspose2d(16, 16, 3, stride=2, padding=1)
>>> h = downsample(input)
>>> h.shape
(1, 16, 6, 6)
>>> output = upsample(h, output_size=input.shape)
>>> output.shape
(1, 16, 12, 12)