mindspore.nn.FractionalMaxPool2d

class mindspore.nn.FractionalMaxPool2d(kernel_size, output_size=None, output_ratio=None, return_indices=False, _random_samples=None)[源代码]

对多个输入平面组成的输入上应用2D分数最大池化。在 \((kH_{in}, kW_{in})\) 区域上应用最大池化操作,由输出shape决定随机步长。对于任何输入shape,指定输出shape为 \((H, W)\) 。输出特征的数量等于输入平面的数量。 在一个输入Tensor上应用2D fractional max pooling,可被视为组成一个2D平面。

分数最大池化的详细描述在 Fractional Max-Pooling

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

  • output_size (Union[int, tuple[int]],可选) - 目标输出shape。如果是整数,则表示输出目标的高和宽。如果是tuple,其值必须包含两个整数值分别表示目标输出的高和宽。默认值:None。

  • output_ratio (Union[float, tuple[float]],可选) - 目标输出shape与输入shape的比率。通过输入shape和 output_ratio 确定输出shape。支持数据类型:float16、float32、double,数值介于0到1之间。默认值:None。

  • return_indices (bool,可选) - 如果为 True ,返回分数最大池化的最大值的的索引值。默认值:False。

  • _random_samples (Tensor,可选) - 3D张量,分数最大池化的随机步长。支持的数据类型:float16、float32、double。数值介于0到1之间。shape为 \((N, C, 2)\) 的Tensor。默认值:None。

输入:
  • input_x (Tensor) - shape为 \((N, C, H_{in}, W_{in})\) 的Tensor。支持的数据类型,float16、float32、float64、int32和int64。

输出:
  • y (Tensor) - 数据类型和输入相同,shape是 \((N, C, H, W)\)

  • argmax (Tensor) - 输出的索引,是一个张量。shape和输出 y 一致,数据类型是int64。仅当 return_indices 为True时,输出最大池化的索引值。

异常:
  • TypeError - input_x 不是float16、float32、float64、int32或int64。

  • TypeError - _random_samples 不是float16、float32或float64。

  • ValueError - kernel_size 不是整数并且不是长度为2的元组。

  • ValueError - output_shape 不是整数并且不是长度为2的元组。

  • ValueError - kernel_sizeoutput_shape 与-1的和大于 input_x 的对应维度的量。

  • ValueError - _random_samples 维度不是3。

  • ValueError - output_sizeoutput_ratio 同时为 None

  • ValueError - input_x_random_samples 的第一维度大小不相等。

  • ValueError - input_x_random_samples 第二维度大小不相等。

  • ValueError - _random_samples 第三维度大小不是2。

支持平台:

CPU

样例:

>>> # the kernel_size is an int number and the output_size is a tuple.
>>> import numpy as np
>>> from mindspore import nn
>>> from mindspore import Tensor
>>> import mindspore.common.dtype as mstype
>>> input_x = Tensor(np.array([0.3220, 0.9545, 0.7879, 0.0975, 0.3698,
...                            0.5135, 0.5740, 0.3435, 0.1895, 0.8764,
...                            0.9581, 0.4760, 0.9014, 0.8522, 0.3664,
...                            0.4980, 0.9673, 0.9879, 0.6988, 0.9022,
...                            0.9304, 0.1558, 0.0153, 0.1559, 0.9852]).reshape([1, 1, 5, 5]), mstype.float32)
>>> _random_samples = Tensor(np.array([[[0.8, 0.8]]]), mstype.float32)
>>> net = nn.FractionalMaxPool2d(kernel_size=2, output_size=(2, 2), _random_samples=_random_samples,
...                              return_indices=True)
>>> y, argmax = net(input_x)
>>> y
[[[[0.9545 0.8764]
   [0.9673 0.9852]]]]
>>> argmax
[[[[ 1  9]
   [16 24]]]]
>>> net = nn.FractionalMaxPool2d(kernel_size=2, output_ratio=(0.5, 0.5), _random_samples=_random_samples,
...                              return_indices=True)
>>> y, argmax = net(input_x)
>>> print(y)
[[[[0.9545 0.8764]
   [0.9673 0.9852]]]]
>>> print(argmax)
[[[[ 1  9]
   [16 24]]]]