mindspore.ops.Conv2DTranspose

class mindspore.ops.Conv2DTranspose(out_channel, kernel_size, pad_mode='valid', pad=0, pad_list=None, mode=1, stride=1, dilation=1, group=1, data_format='NCHW')[源代码]

计算二维转置卷积,也称为反卷积,实际不是真正的反卷积。因为它不能完全的恢复输入矩阵的数据,但能恢复输入矩阵的形状。

参数:
  • out_channel (int) - 输出的通道数。

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

  • pad_mode (str,可选) - 指定填充模式,填充值为0。可选值为 "same""valid""pad" 。默认值: "valid"

    • "same":在输入的四周填充,使得当 stride1 时,输入和输出的shape一致。待填充的量由算子内部计算,若为偶数,则均匀地填充在四周,若为奇数,多余的填充量将补充在底部/右侧。如果设置了此模式, pad 必须为0。

    • "valid":不对输入进行填充,返回输出可能的最大高度和宽度,不能构成一个完整stride的额外的像素将被丢弃。如果设置了此模式, pad 必须为0。

    • "pad":对输入填充指定的量。在这种模式下,在输入的高度和宽度方向上填充的量由 pad 参数指定。如果设置此模式, pad 必须大于或等于0。 请参考 mindspore.nn.Conv2dTranspose 了解更多 pad_mode 的使用规则。

  • pad (Union[int, tuple[int]]) - 指定要填充的填充值。默认值: 0 。如果 pad 是整数,则顶部、底部、左侧和右侧的填充都等于 pad 。如果 pad 是四个整数的tuple,则顶部、底部、左侧和右侧的填充分别等于pad[0]、pad[1]、pad[2]和pad[3]。

  • pad_list (Union[str, None]) - 卷积填充方式,如(顶部、底部、左、右)。默认值: None ,表示不使用此参数。

  • mode (int) - 指定不同的卷积模式。当前未使用该值。默认值: 1

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

  • dilation (Union[int, tuple[int]]) - 卷积核膨胀尺寸。默认值: 1

  • group (int) - 将过滤器拆分为组。默认值: 1

  • data_format (str) - 输入和输出的数据格式。它应该是 'NHWC''NCHW' ,默认值是 'NCHW'

输入:
  • dout (Tensor) - 卷积操作的输出的梯度Tensor。shape: \((N, C_{out}, H_{out}, W_{out})\)

  • weight (Tensor) - 设置卷积核大小为 \((K_1, K_2)\) ,然后shape为 \((C_{out}, C_{in}, K_1, K_2)\)

  • input_size (Tensor) - 输入的shape,shape的格式为 \((N, C_{in}, H_{in}, W_{in})\)

输出:

Tensor,卷积操作的输入的梯度Tensor。它的shape与输入相同。

异常:
  • TypeError - 如果 kernel_sizestridepaddiation 既不是int也不是tuple。

  • TypeError - 如果 out_channelgroup 不是int。

  • ValueError - 如果 kernel_sizestridedlation 小于1。

  • ValueError - 如果 pad_mode 不是’same’、’valid’或’pad’。

  • ValueError - 如果 padding 是长度不等于4的tuple。

  • ValueError - 如果 pad_mode 不等于’pad’,pad 不等于(0,0,0,0)。

  • ValueError - 如果 data_format 既不是’NCHW’也不是’NHWC’。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore
>>> import numpy as np
>>> from mindspore import Tensor, ops
>>> dout = Tensor(np.ones([10, 32, 30, 30]), mindspore.float32)
>>> weight = Tensor(np.ones([32, 32, 3, 3]), mindspore.float32)
>>> x = Tensor(np.ones([10, 32, 32, 32]))
>>> conv2d_transpose_input = ops.Conv2DTranspose(out_channel=32, kernel_size=3)
>>> output = conv2d_transpose_input(dout, weight, ops.shape(x))
>>> print(output.shape)
(10, 32, 32, 32)