|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- from typing import Tuple
-
- from ..functional import nn
- from .module import Module
-
-
- class Pad(Module):
- r"""Pads the input tensor.
-
- Args:
- pad_width: A tuple. Each element in the tuple is the tuple of 2-elements,
- the 2 elements represent the padding size on both sides of the current dimension, ``(front_offset, back_offset)``
- mode: One of the following string values. Default: ``'constant'``
-
- * ``'constant'``: Pads with a constant value.
- * ``'reflect'``: Pads with the edge values of tensor.
- * ``'replicate'``: Pads with the reflection of the tensor mirrored on the first and last values of the tensor along each axis.
- constant_val: Fill value for ``'constant'`` padding. Default: 0
-
- Examples:
-
- >>> import numpy as np
- >>> inp = Tensor([[1., 2., 3.],[4., 5., 6.]])
- >>> inp
- Tensor([[1. 2. 3.]
- [4. 5. 6.]], device=xpux:0)
- >>> m = M.Pad(pad_width=((1, 1),), mode="constant")
- >>> m(inp)
- Tensor([[0. 0. 0.]
- [1. 2. 3.]
- [4. 5. 6.]
- [0. 0. 0.]], device=xpux:0)
- >>> m = M.Pad(pad_width=((1, 1),), mode="constant", constant_val=9)
- >>> m(inp)
- Tensor([[9. 9. 9.]
- [1. 2. 3.]
- [4. 5. 6.]
- [9. 9. 9.]], device=xpux:0)
- >>> m = M.Pad(pad_width=((1, 1), (1, 2)), mode="reflect")
- >>> m(inp)
- Tensor([[5. 4. 5. 6. 5. 4.]
- [2. 1. 2. 3. 2. 1.]
- [5. 4. 5. 6. 5. 4.]
- [2. 1. 2. 3. 2. 1.]], device=xpux:0)
- >>> m = M.Pad(pad_width=((1, 1), (1, 2)), mode="replicate")
- >>> m(inp)
- Tensor([[1. 1. 2. 3. 3. 3.]
- [1. 1. 2. 3. 3. 3.]
- [4. 4. 5. 6. 6. 6.]
- [4. 4. 5. 6. 6. 6.]], device=xpux:0)
-
- """
-
- def __init__(
- self,
- pad_width: Tuple[Tuple[int, int], ...],
- mode: str = "constant",
- constant_val: float = 0.0,
- ):
- super().__init__()
- self.pad_width = pad_width
- self.mode = mode
- self.pad_val = constant_val
-
- def forward(self, src):
- return nn.pad(
- src, pad_width=self.pad_width, mode=self.mode, constant_value=self.pad_val
- )
|