torch.nn.MaxPool2d()和slim.max_pool2d()函数详解

本文详细比较了TensorFlow的slim.max_pool2d和PyTorch的torch.nn.MaxPool2d函数,介绍了它们的参数、数据格式和行为,帮助理解这两种库中池化操作的关键概念。
摘要由CSDN通过智能技术生成

1.slim.max_pool2d()函数

def max_pool2d(inputs,
               kernel_size,
               stride=2,
               padding='VALID',
               data_format=DATA_FORMAT_NHWC,
               outputs_collections=None,
               scope=None):
  if data_format not in (DATA_FORMAT_NCHW, DATA_FORMAT_NHWC):
    raise ValueError('data_format has to be either NCHW or NHWC.')
  with ops.name_scope(scope, 'MaxPool2D', [inputs]) as sc:
    inputs = ops.convert_to_tensor(inputs)
    df = ('channels_first'
          if data_format and data_format.startswith('NC') else 'channels_last')
    layer = pooling_layers.MaxPooling2D(
        pool_size=kernel_size,
        strides=stride,
        padding=padding,
        data_format=df,
        _scope=sc)
    outputs = layer.apply(inputs)
    return utils.collect_named_outputs(outputs_collections, sc, outputs)

1.1 参数:

1.1.1 inputs:

一个形状’ [batch_size, height, width, channels] ‘的4-D张量,如果’ data_format ‘是’ NHWC ‘,那么’ [batch_size, channels, height, width] ‘如果’ data_format ‘是’ NCHW '。

1.1.2 kernel_size:

计算op的池内核的长度2:[kernel_height, kernel_width]的列表。如果两个值相同,则可以是int。

1.1.3 stride:

一个长度为2的列表:[stride_height, stride_width]。如果两个步骤相同,则可以是int。注意,目前这两个步骤必须具有相同的值。

1.1.4 padding:

填充方法,要么“有效”,要么“相同”。

1.1.5 data_forma:

一个字符串。支持’ NHWC ‘(默认值)和’ NCHW '。

1.1.6 outputs_collections:

将输出添加到其中的集合。

1.1.7 scope:

name_scope的可选作用域。

1.2 返回值:

表示池操作结果的“张量”。

2.torch.nn.MaxPool2d()函数

class MaxPool2d(_MaxPoolNd):
    kernel_size: _size_2_t
    stride: _size_2_t
    padding: _size_2_t
    dilation: _size_2_t

    def forward(self, input: Tensor) -> Tensor:
        return F.max_pool2d(input, self.kernel_size, self.stride,
                            self.padding, self.dilation, self.ceil_mode,
                            self.return_indices)

2.1 参数:

2.1.1 kernel_size :

表示做最大池化的窗口大小,可以是单个值,也可以是tuple元组

注意这里的 kernel_size 跟卷积核不是一个东西。 kernel_size 可以看做是一个滑动窗口,这个窗口的大小由自己指定,如果输入是单个值,例如 3 ,那么窗口的大小就是 3 × 3,还可以输入元组,例如 (3, 2) ,那么窗口大小就是 3 × 2 。

最大池化的方法就是取这个窗口覆盖元素中的最大值。

2.1.2 stride :

步长,可以是单个值,也可以是tuple元组

上一个参数我们确定了滑动窗口的大小,现在我们来确定这个窗口如何进行滑动。如果不指定这个参数,那么默认步长跟最大池化窗口大小一致。如果指定了参数,那么将按照我们指定的参数进行滑动。例如 stride=(2,3) , 那么窗口将每次向右滑动三个元素位置,或者向下滑动两个元素位置。

2.1.3 padding :

填充,可以是单个值,也可以是tuple元组

这参数控制如何进行填充,填充值默认为0。如果是单个值,例如 1,那么将在周围填充一圈0。

还可以用元组指定如何填充,例如

padding=(2, 1)

表示在上下两个方向个填充两行0,在左右两个方向各填充一列0。

2.1.4 dilation :

控制窗口中元素步幅

2.1.5 return_indices :

布尔类型,返回最大值位置索引

这是个布尔类型值,表示返回值中是否包含最大值位置的索引。注意这个最大值指的是在所有窗口中产生的最大值,如果窗口产生的最大值总共有5个,就会有5个返回值。

2.1.6 ceil_mode :

布尔类型,为True,用向上取整的方法,计算输出形状;默认是向下取整。

这个也是布尔类型值,它决定的是在计算输出结果形状的时候,是使用向上取整还是向下取整。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

daijingxin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值