Pad

Pad // General padding operation

Description

Adds edge padding.

Inputs

Name Element Type Shape
arg Any \((d_1, \ldots, d_n)\)
arg_pad_value Same as arg Scalar

Attributes

Name Description
padding_below Padding added before arg. May be negative.
padding_above Padding added after arg. May be negative.
pad_mode Padding mode: CONSTANT(default), EDGE or REFLECT.

Outputs

Name Element Type Shape
output Same as arg \((d'_1, \ldots, d'_n)\)
\[d'_i = \mathtt{padding\_below}_i+d_i\cdot(\mathtt{padding\_interior}_i)+\mathtt{padding\_above}_i\]

Takes an input tensor of shape \((d_1,\dots,d_n)\) and pads by inserting a scalar \(x\) supplied as input, in three possible ways:

  1. exterior padding inserts copies of \(x\) below or above the bounds of existing rows, columns, etc.,
  2. interior padding inserts copies of \(x\) between rows, columns, etc., or
  3. both of the above.

The number and position of elements to be inserted along a given axis is determined by three attributes:

  1. the padding-below CoordinateDiff \((p_1,\ldots,p_n)\),
  2. the padding-above CoordinateDiff \((q_1,\ldots,q_n)\), and
  3. the interior padding Shape \((r_1,\ldots,r_n)\).

The output tensor will have the shape \((d'_1,\dots,d'_n)\) where \(d'_i = p_i + (d_i - 1)(r_i + 1) + 1 + q_i\) if \(d_i > 0\), and \(d'_i = p_i + q_i\) if \(d_i = 0\).

Example: given a \(3\times 3\) tensor, with interior-padding sizes of \((1,2)\), padding-below of \((1,2)\), padding-above of \((1,0)\), and a pad-value of \(42\), we obtain:

          42 42 42 42 42 42 42 42 42
          42 42  1 42 42  2 42 42  3
1 2 3     42 42 42 42 42 42 42 42 42
4 5 6 --> 42 42  4 42 42  5 42 42  6
7 8 9     42 42 42 42 42 42 42 42 42
          42 42  7 42 42  8 42 42  9
          42 42 42 42 42 42 42 42 42

In other words we have inserted one new row between each pair of adjacent rows, two new columns between each pair of adjacent columns, one new row at the top and two new columns on the left, and one new row at the bottom and zero new columns on the right; then filled the new rows and columns with 42.

Note

The terms below and above here refer respectively to lower- or higher-numbered coordinate indices, and numbering starts at the upper-left corner; thus inserting a row “below” actually inserts it at the “top” of the matrix.

C++ Interface

class Pad : public ngraph::op::Op

Generic padding operation.

Public Functions

Pad(const std::shared_ptr<Node> &arg, const std::shared_ptr<Node> &arg_pad_value, const CoordinateDiff &padding_below, const CoordinateDiff &padding_above, PadMode pad_mode = PadMode::CONSTANT)

Constructs a generic padding operation.

Parameters
  • arg: The node producing input tensor to be padded.
  • arg_pad_value: The node producing the scalar value to be inserted for padding.
  • padding_below: The padding-below widths.
  • padding_above: The padding-above widths.
  • pad_mode: The padding mode: CONSTANT(default), EDGE or REFLECT.

const CoordinateDiff &get_padding_below() const

Return
The padding-below sizes.

const CoordinateDiff &get_padding_above() const

Return
The padding-above sizes.

const Shape &get_padding_interior() const

DEPRECATED. This is just a stub for backends that used to implement the interior padding feature, which is no longer supported.

Return
Returns a shape full of zeros, with the same rank as get_padding_below().

PadMode get_pad_mode() const

Return
The padding mode.

std::shared_ptr<Node> get_default_value() const

Return
The default value for Pad.