mindspore.nn.AdaptiveAvgPool3d

class mindspore.nn.AdaptiveAvgPool3d(output_size)[源代码]

三维自适应平均池化。

对输入Tensor,提供3维的自适应平均池化操作。也就是说对于输入任何尺寸,指定输出的尺寸都为 \((D, H, W)\)。但是输入和输出特征的数目不会变化。

假设输入 x 最后3维大小分别为 \((inD, inH, inW)\),则输出的最后3维大小分别为 \((outD, outH, outW)\)。运算如下:

\[\begin{split}\begin{array}{ll} \\ \forall \quad od \in [0,outD-1], oh \in [0,outH-1], ow \in [0,outW-1]\\ output[od,oh,ow] = \\ \qquad mean(x[istartD:iendD+1,istartH:iendH+1,istartW:iendW+1])\\ where,\\ \qquad istartD= \left\lceil \frac{od * inD}{outD} \right\rceil \\ \qquad iendD=\left\lfloor \frac{(od+1)* inD}{outD} \right\rfloor \\ \qquad istartH=\left\lceil \frac{oh * inH}{outH} \right\rceil \\ \qquad iendH=\left\lfloor \frac{(oh+1) * inH}{outH} \right\rfloor \\ \qquad istartW=\left\lceil \frac{ow * inW}{outW} \right\rceil \\ \qquad iendW=\left\lfloor \frac{(ow+1) * inW}{outW} \right\rfloor \end{array}\end{split}\]
参数:
  • output_size (Union[int, tuple]) - 指定输出特征图的尺寸,可以是个tuple \((D, H, W)\),也可以是一个int值D来表示输出尺寸为 \((D, D, D)\)\(D\)\(H\)\(W\) 可以是int值或者None,其中None表示输出大小与对应的输入的大小相同。

输入:
  • x (Tensor) - AdaptiveAvgPool3d的输入,是4D或者5D的Tensor。

输出:

Tensor,与输入 x 的数据类型相同。

异常:
  • TypeError - x 不是Tensor。

  • TypeError - x 的数据类型不是float16、float32或者float64。

  • ValueError - x 维度不是4D或者5D。

  • ValueError - output_size 的值不是正数。

支持平台:

GPU

样例:

>>> # case 1: output_size=(3, 3, 4)
>>> output_size=(3, 3, 4)
>>> input_x_val = np.random.randn(4, 3, 5, 6, 7)
>>> input_x = Tensor(input_x_val, mindspore.float32)
>>> net = nn.AdaptiveAvgPool3d(output_size)
>>> output = net(input_x)
>>> print(output.shape)
(4, 3, 3, 3, 4)
>>> # case 2: output_size=4
>>> output_size=5
>>> input_x_val = np.random.randn(2, 3, 8, 6, 12)
>>> input_x = Tensor(input_x_val, mindspore.float32)
>>> net = nn.AdaptiveAvgPool3d(output_size)
>>> output = net(input_x)
>>> print(output.shape)
(2, 3, 5, 5, 5)
>>> # case 3: output_size=(None, 4, 5)
>>> output_size=(None, 4, 5)
>>> input_x_val = np.random.randn(4, 1, 9, 10, 8)
>>> input_x = Tensor(input_x_val, mindspore.float32)
>>> net = nn.AdaptiveAvgPool3d(output_size)
>>> output = net(input_x)
>>> print(output.shape)
(4, 1, 9, 4, 5)