Source code for draugr.torch_utilities.operations.sizes.max_pool2d

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = "Christian Heider Nielsen"
__doc__ = r"""

           Created on 23/07/2020
           """

import math
from typing import Tuple, Union

from warg import replicate

__all__ = ["max_pool2d_hw_shape"]


[docs]def max_pool2d_hw_shape( h_w: Union[int, Tuple[int, int]], pool_size: Union[int, Tuple[int, int]] = 2, stride: Union[int, Tuple[int, int]] = None, pad: Union[int, Tuple[int, int]] = 0, dilation: Union[int, Tuple[int, int]] = 1, ) -> Tuple[int, int]: r""" .. math:: H_{out} = \left\lfloor\frac{H_{in} + 2 * \text{padding[0]} - \text{dilation[0]} \times (\text{kernel\_size[0]} - 1) - 1}{\text{stride[0]}} + 1\right\rfloor .. math:: W_{out} = \left\lfloor\frac{W_{in} + 2 * \text{padding[1]} - \text{dilation[1]} \times (\text{kernel\_size[1]} - 1) - 1}{\text{stride[1]}} + 1\right\rfloor :param pool_size: :type pool_size: :param h_w: :type h_w: :param stride: :type stride: :param pad: :type pad: :param dilation: :type dilation: :return: :rtype:""" if stride is None: stride = pool_size (h_w, pool_size, stride, pad, dilation) = ( replicate(h_w), replicate(pool_size), replicate(stride), replicate(pad), replicate(dilation), ) pad = (replicate(pad[0]), replicate(pad[1])) h = math.floor( (h_w[0] + sum(pad[0]) - dilation[0] * (pool_size[0] - 1) - 1) / stride[0] + 1 ) w = math.floor( (h_w[1] + sum(pad[1]) - dilation[1] * (pool_size[1] - 1) - 1) / stride[1] + 1 ) return h, w
if __name__ == "__main__": print(max_pool2d_hw_shape(12, 2))