# 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

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

Controls number of zeros to be add to the front/top/left of spatial dimensions

s64

A s64 list containing non-negative values

Required

Controls number of zeros to be add to the back/bottom/right of spatial dimensions

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

Controls how the padding is calculated

string

none (default), same_upper , same_lower , valid

Optional

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

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