# 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

$$PD_L$$

$$PH_L$$

$$PW_L$$

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

$$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