mindspore/docs/api/api_python/nn/mindspore.nn.Conv3dTranspos...

86 lines
9.0 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

mindspore.nn.Conv3dTranspose
=============================
.. py:class:: mindspore.nn.Conv3dTranspose(in_channels, out_channels, kernel_size, stride=1, pad_mode='same', padding=0, dilation=1, group=1, output_padding=0, has_bias=False, weight_init=None, bias_init=None, data_format='NCDHW', dtype=mstype.float32)
计算三维转置卷积可以视为Conv3d对输入求梯度也称为反卷积实际不是真正的反卷积
输入的shape通常为 :math:`(N, C_{in}, D_{in}, H_{in}, W_{in})` ,其中 :math:`N` 为batch size :math:`C_{in}` 是空间维度,:math:`D_{in}, H_{in}, W_{in}` 分别为特征层的深度、高度和宽度。
当Conv3d和ConvTranspose3d使用相同的参数初始化时`pad_mode` 设置为 ``"pad"``,它们会在输入的深度、高度和宽度方向上填充 :math:`dilation * (kernel\_size - 1) - padding` 个0这种情况下它们的输入shape和输出shape是互逆的。
然而,当 `stride` 大于1时Conv3d会将多个输入的shape映射到同一个输出shape。反卷积网络的详细介绍可以参考论文 `Deconvolutional Networks <https://www.matthewzeiler.com/mattzeiler/deconvolutionalnetworks.pdf>`_ 。
.. note::
- Atlas A2训练系列产品暂不支持 `output_padding`
参数:
- **in_channels** (int) - Conv3dTranspose层输入Tensor的空间维度。
- **out_channels** (int) - Conv3dTranspose层输出Tensor的空间维度。
- **kernel_size** (Union[int, tuple[int]]) - 指定三维卷积核的深度、高度和宽度。数据类型为int或包含三个整数的tuple。若为一个整数则表示卷积核的深度、高度和宽度均为该整数值若为包含三个整数的tuple则分别表示卷积核的深度、高度和宽度。
- **stride** (Union[int, tuple[int]],可选) - 三维卷积核的移动步长。数据类型为int或包含三个整型的tuple。若为一个整数则表示在深度、高度和宽度方向的移动步长均为该整数值若为包含三个整数的tuple则分别表示在深度、高度和宽度方向的移动步长。默认值 ``1``
- **pad_mode** (str可选) - 指定填充模式填充值为0。可选值为 ``"same"`` ``"valid"````"pad"`` 。默认值: ``"same"``
- ``"same"``:在输入的深度、高度和宽度维度进行填充,使得当 `stride```1``输入和输出的shape一致。待填充的量由算子内部计算若为偶数则均匀地填充在四周若为奇数则多余的填充量将补充在前方/底部/右侧。如果设置了此模式, `padding` 必须为0。
- ``"valid"``不对输入进行填充返回输出可能的最大深度、高度和宽度如果不能构成一个完整stride那么额外的像素将被丢弃。如果设置了此模式 `padding` 必须为0。
- ``"pad"``:对输入填充指定的量。在这种模式下,在输入的深度、高度和宽度方向上填充的量由 `padding` 参数指定。如果设置此模式, `padding` 必须大于或等于0。
- **padding** (Union(int, tuple[int]),可选) - 输入的深度、高度和宽度方向上填充的数量。数据类型为int或包含六个整数的tuple。若 `padding` 是一个整数,则前部、后部、顶部,底部,左边和右边的填充都等于 `padding` ;若 `padding` 是包含六个整数的tuple则前部、尾部、顶部、底部、左边和右边的填充分别等于填充padding[0]、padding[1]、padding[2]、padding[3]、padding[4]和padding[5]。值要大于等于0默认值 ``0``
- **dilation** (Union[int, tuple[int]],可选) - 三维卷积核的膨胀尺寸。数据类型为int或包含三个整数的tuple。若为一个整数则表示在深度、高度和宽度方向的膨胀尺寸均为该整数值若为包含三个整数的tuple则分别表示在深度、高度和宽度方向的膨胀尺寸。
假设 :math:`dilation=(d0, d1, d2)`, 则卷积核在深度方向间隔 :math:`d0-1` 个元素进行采样,在高度方向间隔 :math:`d1-1` 个元素进行采样,在宽度方向间隔 :math:`d2-1` 个元素进行采样。深度、高度和宽度上取值范围分别为[1, D]、[1, H]和[1, W]。默认值: ``1``
- **group** (int可选) - 将过滤器拆分为组, `in_channels``out_channels` 必须可被 `group` 整除。当 `group` 大于1时暂不支持Ascend平台。默认值 ``1``
- **output_padding** (Union(int, tuple[int]),可选) - 输出的深度、高度和宽度方向上填充的数量。数据类型为int或包含3个整数的tuple。如果 `output_padding` 是一个整数,则深度、高度和宽度方向的填充都等于 `output_padding` ;如果 `output_padding` 是包含三个整数的tuple则深度、高度和宽度方向的填充分别等于填充output_padding[0]、output_padding[1]和output_padding[2]。值要大于等于0默认值 ``0``
- **has_bias** (bool可选) - Conv3dTranspose层是否添加偏置参数。默认值 ``False``
- **weight_init** (Union[Tensor, str, Initializer, numbers.Number],可选) - 权重参数的初始化方法。它可以是Tensor、str、Initializer或numbers.Number。当使用str时可选 ``"TruncatedNormal"`` ``"Normal"`` ``"Uniform"`` ``"HeUniform"````"XavierUniform"`` 分布以及常量 ``"One"````"Zero"`` 分布的值,可接受别名 ``"xavier_uniform"`` ``"he_uniform"`` ``"ones"````"zeros"`` 。上述字符串大小写均可。更多细节请参考Initializer的值。默认值 ``None`` 即权重使用HeUniform初始化。
- **bias_init** (Union[Tensor, str, Initializer, numbers.Number],可选) - 偏置参数的初始化方法。可以使用的初始化方法与 `weight_init` 相同。更多细节请参考Initializer的值。默认值 ``None`` 即偏差使用Uniform初始化。
- **data_format** (str可选) - 数据格式的可选值。目前仅支持 ``'NCDHW'`` 。 默认值: ``'NCDHW'``
- **dtype** (:class:`mindspore.dtype`,可选) - Parameters的dtype需要跟输入的dtype保持一致。默认值 ``mstype.float32``
输入:
- **x** (Tensor) - shape为 :math:`(N, C_{in}, D_{in}, H_{in}, W_{in})` 的Tensor。目前CPU/GPU只支持输入数据类型为float16和float32Ascend只支持输入数据类型为float16。
输出:
Tensorshape为 :math:`(N, C_{out}, D_{out}, H_{out}, W_{out})`
pad_mode为 ``"same"`` 时:
.. math::
\begin{array}{ll} \\
D_{out} = \left \lfloor{\frac{D_{in}}{\text{stride[0]}} + 1} \right \rfloor \\
H_{out} = \left \lfloor{\frac{H_{in}}{\text{stride[1]}} + 1} \right \rfloor \\
W_{out} = \left \lfloor{\frac{W_{in}}{\text{stride[2]}} + 1} \right \rfloor \\
\end{array}
pad_mode为 ``"valid"`` 时:
.. math::
\begin{array}{ll} \\
D_{out} = \left \lfloor{\frac{D_{in} - \text{dilation[0]} \times (\text{kernel_size[0]} - 1) }
{\text{stride[0]}} + 1} \right \rfloor \\
H_{out} = \left \lfloor{\frac{H_{in} - \text{dilation[1]} \times (\text{kernel_size[1]} - 1) }
{\text{stride[1]}} + 1} \right \rfloor \\
W_{out} = \left \lfloor{\frac{W_{in} - \text{dilation[2]} \times (\text{kernel_size[2]} - 1) }
{\text{stride[2]}} + 1} \right \rfloor \\
\end{array}
pad_mode为 ``"pad"`` 时:
.. math::
\begin{array}{ll} \\
D_{out} = \left \lfloor{\frac{D_{in} + padding[0] + padding[1] - (\text{dilation[0]} - 1) \times
\text{kernel_size[0]} - 1 }{\text{stride[0]}} + 1} \right \rfloor \\
H_{out} = \left \lfloor{\frac{H_{in} + padding[2] + padding[3] - (\text{dilation[1]} - 1) \times
\text{kernel_size[1]} - 1 }{\text{stride[1]}} + 1} \right \rfloor \\
W_{out} = \left \lfloor{\frac{W_{in} + padding[4] + padding[5] - (\text{dilation[2]} - 1) \times
\text{kernel_size[2]} - 1 }{\text{stride[2]}} + 1} \right \rfloor \\
\end{array}
异常:
- **TypeError** - `in_channels``out_channels``group` 不是int。
- **TypeError** - `kernel_size``stride``padding``dilation``output_padding` 既不是int也不是tuple。
- **TypeError** - 输入数据类型不是要求的类型即CPU/GPU不是float16或float32Ascend不是float16。
- **ValueError** - `in_channels``out_channels``kernel_size``stride``dilation` 小于1。
- **ValueError** - `padding` 小于0。
- **ValueError** - `pad_mode` 不是 ``"same"`` ``"valid"````"pad"``
- **ValueError** - `padding` 是长度不等于6的tuple。
- **ValueError** - `pad_mode` 不等于 ``"pad"```padding` 不等于 ``(0, 0, 0, 0, 0, 0)``
- **ValueError** - `data_format` 不是 ``"NCDHW"``