ConvolutionBackwardData#

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

Comment

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

Description

Value Type

Supported

Values

Required or

Optional

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

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 the below index order when constructing an operation.

Inputs#

Index

Argument Name

Required or Optional

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

Argument Name

Required or Optional

0

diff_src

Required

Supported Data Types#

ConvolutionBackwardData operation supports the following data type combinations.

Diff_dst

Weights

Diff_src

Dst_shape

f32

f32

f32

s32

bf16

bf16

bf16

s32

f16

f16

f16

s32