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,Cout,Hout,Wout)

  • weight (Tensor) - 设置卷积核大小为 (K1,K2) ,然后shape为 (Cout,Cin,K1,K2)

  • input_size (Tensor) - 输入的shape,shape的格式为 (N,Cin,Hin,Win)

输出:

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

异常:
  • TypeError - 如果 kernel_sizestridepaddilation 既不是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)