ConvolutionBackwardData

General

ConvolutionBackwardData operation accepts \(\diffdst\), \(\weights\) and optional dst shape as inputs, and compute the \(\diffsrc\).

If auto_pad attribute is specified to one of valid, same_upper and same_lower, pads_begin and pads_end attributes will be ignored. The paddings will be calculated by following the below formula:

Let the parameters be:

Parameter

Depth

Height

Width

Paddings: Front, top, and left

\(PD_L\)

\(PH_L\)

\(PW_L\)

In the attributes we use pads_begin to indicate the corresponding vector of paddings

Padding: Back, bottom, and right

\(PD_R\)

\(PH_R\)

\(PW_R\)

In the attributes we use pads_end to indicate the corresponding vector of paddings

Stride

\(SD\)

\(SH\)

\(SW\)

In the attributes we use strides to indicate the corresponding vector of strides

Dilation

\(DD\)

\(DH\)

\(DW\)

In the attributes we use dilations to indicate the corresponding vector of dilations

Firstly, \(total\_padding\) is calculated according to \(src\_shape\) and \(dst\_shape\). Let \(src\_h\) be height dimension of \(src\_shape\) and \(dst\_h\) be height dimension of \(dst\_shape\).

\[total\_padding_h = SH \times (src\_h - 1) + ((KH -1 ) \times DH + 1) - dst\_h + output\_padding_h\]

If auto_pad attribute is specified as valid :

\[\begin{split}PD_L = 0 \\ PD_R = 0\end{split}\]

If auto_pad attribute is specified as same_lower :

\[\begin{split}PD_L = floor(total\_padding / 2) \\ PD_R = total\_padding - PD_L\end{split}\]

If auto_pad attribute is specified as same_upper :

\[\begin{split}PD_L = total\_padding - PD_R \\ PD_R = floor(total\_padding / 2)\end{split}\]

where:

  • \(dst\_shape\) is either an attribute or an input tensor,

  • \(output\_padding\) is an optional attribute.

Operation attributes

Attribute Name

De

strides

Controls the strides the weights tensor is moved when computing convolution.

s64

A s64 list containing positive values

Required

pads_begin

Controls number of zeros to be add to the front/top/left of spatial dimensions, the attribute will be ignored when auto_pad attribute is specified to same_upper , same_lower or valid .

s64

A s64 list containing non-negative values

Required

pads_end

Controls number of zeros to be add to the back/bottom/right of spatial dimensions, the attribute will be ignored when auto_pad attribute is specified to same_upper , same_lower or valid .

s64

A s64 list containing non-negative values

Required

dilations

Controls the amount of stretching the kernel before convolution ( visualization link ).

s64

A s64 list containing positive values (>1 means dilated convolution)

Required

auto_pad

Controls how the padding is calculated.

string

none (default), same_upper , same_lower , valid

Optional

output_padding

Adds additional amount of padding per each spatial axis in dst .

s64

A s64 list containing non-negative values, all zeros by default

Optional

groups

Controls how input channels and output channels are divided into.

s64

A positive s64 value, 1 by default

Optional

data_format

Controls how to interpret the shape of src and dst .

string

NCX , NXC (default)

Optional

weights_format

Controls how to interpret the shape of weights .

string

OIX , XIO (default)

Optional

dst_shape

Denotes the shape of the dst tensor.

s64

A s64 list containing positive values

Optional

Execution arguments

The inputs and outputs must be provided according to below index order when constructing an operation.

Inputs

Index

Argu

0

diff_dst

Required

1

weights

Required

2

dst_shape

Optional

Note

The shape of \(\weights\) is \((out\_channels, in\_channels / groups, spatial\_shape)\) for OIX format or \((spatial\_shape, in\_channels / groups, out\_channels)\) for XIO format. Both \(in\_channels\) and \(out\_channels\) must be divisible by groups attribute.

Note

Either dst_shape input or dst_shape attribute should be provided. If both provided, dst_shape input will precede over dst_shape attribute.

Outputs

Index

Argu

0

diff_src

Required

Supported data types

ConvolutionBackwardData operation supports the following data type combinations.

Diff_dst

We

f32

f32

f32

s32

bf16

bf16

bf16

s32

f16

f16

f16

s32