mindspore.nn.LPPool2d

class mindspore.nn.LPPool2d(norm_type, kernel_size, stride=None, ceil_mode=False)[源代码]

在一个输入Tensor上应用2D LP池化运算,可被视为组成一个2D输入平面。

通常,输入的shape为 \((N, C, H_{in}, W_{in})\),输出的shape为 \((N, C, H_{in}, W_{in})\),输出与输入的shape一致,公式如下:

\[f(X) = \sqrt[p]{\sum_{x \in X} x^{p}}\]
参数:
  • norm_type (Union[int, float]) - 标准化类型,代表公式里的p,不能为0,

    • 如果 p = 1,得到的结果为池化核内元素之和(与平均池化成比例);

    • 如果 p = \(\infty\),得到的结果为最大池化的结果。

  • kernel_size (Union[int, tuple[int]]) - 池化核尺寸大小。如果为整数,则代表池化核的高和宽。如果为tuple,其值必须包含两个整数值分别表示池化核的高和宽。

  • stride (Union[int, tuple[int]]) - 池化操作的移动步长,如果为整数,则代表stride的高和宽。如果为tuple,其值必须包含两个整数值分别表示stride的高和宽。如果值为 None ,则使用默认值 kernel_size。 默认值: None

  • ceil_mode (bool) - 若为 True ,使用ceil模式来计算输出shape。若为 False ,使用floor模式来计算输出shape。默认值: False

输入:
  • x (Tensor) - shape为 \((N, C, H_{in}, W_{in})\) 的Tensor。

输出:
  • output - LPPool2d的计算结果,shape为 \((N, C, H_{in}, W_{in})\) 的Tensor,与 输入 x 的类型一致,其中

\[H_{out} = \left\lfloor\frac{H_{in} - \text{kernel_size}[0]}{\text{stride}[0]} + 1\right\rfloor\]
\[W_{out} = \left\lfloor\frac{W_{in} - \text{kernel_size}[1]}{\text{stride}[1]} + 1\right\rfloor\]
异常:
  • TypeError - x 不是Tensor。

  • TypeError - kernel_sizestride 不是int也不是tuple。

  • TypeError - ceil_mode 不是bool。

  • TypeError - norm_type 不是float也不是int。

  • ValueError - norm_type 等于0。

  • ValueError - kernel_sizestride 小于1。

  • ValueError - kernel_sizestride 是一个长度不为2的tuple。

  • ValueError - x 的shape长度不等于4。

支持平台:

Ascend GPU CPU

样例:

>>> import mindspore as ms
>>> import numpy as np
>>> a = ms.Tensor(np.arange(2 * 3 * 4 * 5).reshape((2, 3, 4, 5)), dtype=ms.float32)
>>> net = ms.nn.LPPool2d(norm_type=1, kernel_size=3, stride=1)
>>> out = net(a)
>>> print(out)
[[[[  54.   63.   72.]
   [  99.  108.  117.]]
  [[ 234.  243.  252.]
   [ 279.  288.  297.]]
  [[ 414.  423.  432.]
   [ 459.  468.  477.]]]
 [[[ 594.  603.  612.]
   [ 639.  648.  657.]]
  [[ 774.  783.  792.]
   [ 819.  828.  837.]]
  [[ 954.  963.  972.]
   [ 999. 1008. 1017.]]]]