---
title: Deconvolution
description: "设:"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/aolapi/operatorlist_00112.html
sourcePath: /source/zh/canncommercial/900/API/aolapi/operatorlist_00112.html
indexId: 883c258edfad556ed82e3e1c2e8952fc3de1ef8615ea90faa43302324019f60c64
---
# Deconvolution

#### 总体约束

设:

Ny, Cy, Hy, Wy [x1] = x.shape

Nk, Ck/group, Hk, Wk = filter.shape (k=kernel)

stride、stride_h、stride_w和pad、pad_h、pad_w处理逻辑为:

```
if stride.size() == 0:
   stride_h, stride_w
elif stride.size() == 1:
   stride_h, stride_w = stride[0]
else:
   stride_h = stride[0]
   stride_w = stride[1]

if pad.size() == 0:
   pad_h, pad_w
elif pad.size() == 1:
   pad_h = pad_w = pad[0]
else:
   pad_h = pad[0]
   pad_w = pad[1]
if dilation.size() == 1:
   dilation_h = dilation_w = dilation[0]
else:
   dilation_h = dilation[0]
   dilation_w = dilation[1]
```

设输出shape为[Nx,Cx,Hx,Wx]，其中:

- Nx=Ny, Cx=Ck
- Wx = (Wy-1)*stride_w - 2*pad_w + dilation_h*(Wk-1)+1
- Hx = (Hy-1)*stride_h - 2*pad_h + dilation_w*(Hk-1)+1

则总体限制如下:

1. 1<=stride_h*stride_w<256
2. Hy+2*pad_h>=dilation_h*(Hk-1)+1, Wy+2*pad_w>=dilation_w*(Wk-1)+1
3. Hy*stride_h, Wy*stride_w范围为[2,4096]:

  - 当Hk==Wk==1时：
    限制加强为: Wy*stride_w*stride_h为[2,4096]，并且当stride_h>1或者stride_w>1时: Wy<=2032。

  - 当Atlas 训练系列产品场景时: Hx!=Hk,Wx!=Wk支持Hy或Wy为1。
  - 当Hy=1, Hk=1, pad_h=0, stride_h=1, dilation_h=1时，支持Wx范围为[1,2147483647]（int32可表示的范围）。
4. AL1Size限制计算方式如下：
  设w_value = Wy*stride_w

  1 2 3 4 5 6 if Wx>16: h_value_max = Hk + 1 else if 16% Wx== 0: h_value_max = Hk + 16//Wx - 1 else: h_value_max = Hk + 16//Wx +1

  则，AL1Size= h_value_max*w_value*32Byte、BL1Size = Hk*Wk*512Byte

  AL1Size+BL1Size <= l1_size（l1_size见对应芯片的配置文件，例如platform_config/${soc_version}.ini）

  其中，Hy>=dilation*(Hk-1)+1，Wy>=dilation*(Wk-1)+1

  当Hy=1, Hk=1, pad_h=0, stride_h=1, dilation_h=1时，AL1Size = [15*stride_w+(Wk-1)*dilation_w+1]*32B


#### 输入

- x:

  - 是否必填: 必填
  - 数据类型: float16
  - 参数解释: 输入Tensor
  - 规格限制: 无


- filter:

  - 是否必填: 必填
  - 数据类型: float16
  - 参数解释: 卷积核，shape为 [Nk, Ck, Hk, Wk ]，Nk必须与Cy相等
  - 规格限制：

    1. 如果Wx==Hx==1: Wy==Hy==Wk==Hk，且取值范围在1~11
    2. 不支持输出的W==1，输出的H不等于1的场景
    3. 其它场景: Wx和Hx配置范围在1~255

- bias:

  - 是否必填: 非必填
  - 数据类型: float16
  - 参数解释: 无
  - 规格限制: 无

#### 属性

- pad:

  - 是否必填: 非必填
  - 数据类型: ListInt
  - 参数解释: 高和宽轴开始和结束的Padding，pad和pad_h/pad_w不能同时提供，默认值为0；pad List的长度最大为2
  - 规格限制: List长度为1时: pad<Hk&pad<Wk；List长度为2时: pad[0]<Hk，pad[1]<Wk


- pad_h:

  - 是否必填: 非必填
  - 数据类型: int
  - 参数解释: 高和宽轴开始和结束的Padding，pad和pad_h/pad_w不能同时提供，默认值为0
  - 规格限制: pad_h<Hk

- pad_w:

  - 是否必填: 非必填
  - 数据类型: int
  - 参数解释: 高和宽轴开始和结束的Padding，pad和pad_h/pad_w不能同时提供，默认值为0
  - 规格限制: pad_w<Wk

- stride:

  - 是否必填: 非必填
  - 数据类型: ListInt
  - 参数解释: 高和宽轴的stride.stride和stride_h/stride_w不能同时提供，默认值为1；stride的List长度最大为2
  - 规格限制: List长度为1时: 0<=stride*stride<256；List长度为2时: 1<=stride[0]<=63，1<=stride[1]<=63，1<=stride[0]*stride[1]<256

- stride_h:

  - 是否必填: 非必填
  - 数据类型: int
  - 参数解释: 高和宽轴的stride.stride和stride_h/stride_w不能同时提供，默认值为1
  - 规格限制: 1<=stride<=63

- stride_w:

  - 是否必填: 非必填
  - 数据类型: int
  - 参数解释: 高和宽轴的stride.stride和stride_h/stride_w不能同时提供，默认值为1
  - 规格限制: 1<=stride<=63

- dilation:

  - 是否必填: 非必填
  - 数据类型: ListInt
  - 参数解释: filter的高和宽轴的放大系数，List长度最大为2，默认值为1
  - 规格限制: 支持1~255，配置后(kernel-1)*dilation+1<256

- group:

  - 是否必填: 非必填
  - 数据类型: int
  - 参数解释: 无
  - 规格限制: group能被channel整除

#### 输出

y:- 是否必填: 必填
- 数据类型: float16
- 参数解释: 无
- 规格限制: 无
