昇腾社区首页
中文
注册
开发者
下载

aclnnConvolutionBackward

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:卷积的反向传播。根据输出掩码设置计算输入、权重和偏差的梯度。此函数支持1D、2D和3D卷积。

  • 计算公式:

    输入input(N,Cin,Din,Hin,WinN,C_{in},D_{in},H_{in},W_{in})、输出out(N,Cout,Dout,Hout,WoutN,C_{out},D_{out},H_{out},W_{out})和卷积步长(stridestride)、卷积核大小(kernelSizekD,kH,kWkernelSize,kD,kH,kW)、膨胀参数(dilationdilation)的关系是:

    Dout=Din+2padding[0]dilation[0](kernelSize[0]1)1stride[0]+1D_{out}=\lfloor \frac{D_{in}+2*padding[0]-dilation[0] * (kernelSize[0] - 1) - 1}{stride[0]}+1 \rfloor Hout=Hin+2padding[1]dilation[1](kernelSize[1]1)1stride[1]+1H_{out}=\lfloor \frac{H_{in}+2*padding[1]-dilation[1] * (kernelSize[1] - 1) - 1}{stride[1]}+1 \rfloor Wout=Win+2padding[2]dilation[2](kernelSize[2]1)1stride[2]+1W_{out}=\lfloor \frac{W_{in}+2*padding[2]-dilation[2] * (kernelSize[2] -1) -1}{stride[2]}+1 \rfloor

    卷积反向传播需要计算对卷积正向的输入张量 xx(对应函数原型中的input)、卷积核权重张量 ww (对应函数原型中的weight)和偏置 bb 的梯度。

    • 对于 xx 的梯度 Lx\frac{\partial L}{\partial x}(对应函数原型中的gradInput参数):

      Lxn,cin,i,j=cout=1Coutp=1kHq=1kWLyn,cout,ip,jqwcout,cin,p,q\frac{\partial L}{\partial x_{n, c_{in}, i, j}} = \sum_{c_{out}=1}^{C_{out}} \sum_{p=1}^{k_H} \sum_{q=1}^{k_W} \frac{\partial L}{\partial y_{n, c_{out}, i-p, j-q}}\cdot w_{c_{out}, c_{in}, p, q}

      其中,LL 为损失函数,Ly\frac{\partial L}{\partial y} 为输出张量 yyLL 的梯度(对应函数原型中的gradOutput参数)。

    • 对于 ww 的梯度 Lw\frac{\partial L}{\partial w}(对应函数原型中的gradWeight参数):

      Lwcout,cin,p,q=n=1Ni=1Houtj=1Woutxn,cin,isH+p,jsW+qLyn,cout,i,j\frac{\partial L}{\partial w_{c_{out}, c_{in}, p, q}} = \sum_{n=1}^{N} \sum_{i=1}^{H_{out}} \sum_{j=1}^{W_{out}} x_{n, c_{in}, i \cdot s_H + p, j \cdot s_W + q} \cdot \frac{\partial L}{\partial y_{n, c_{out}, i, j}}
    • 对于 bb 的梯度 Lb\frac{\partial L}{\partial b}(对应函数原型中的gradBias参数):

      Lbcout=n=1Ni=1Houtj=1WoutLyn,cout,i,j\frac{\partial L}{\partial b_{c_{out}}} = \sum_{n=1}^{N} \sum_{i=1}^{H_{out}} \sum_{j=1}^{W_{out}} \frac{\partial L}{\partial y_{n, c_{out}, i, j}}

函数原型

每个算子分为,必须先调用“aclnnConvolutionBackwardGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnConvolutionBackward”接口执行计算。

[object Object]
[object Object]

aclnnConvolutionBackwardGetWorkspaceSize

  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object][object Object][object Object]

aclnnConvolutionBackward

  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

约束说明

  • 确定性计算

    • aclnnConvolutionBackward默认非确定性实现,支持通过aclrtCtxSetSysParamOpt开启确定性。
    [object Object][object Object]
    • 公式一:(inputdim+paddim×2)((weightdim1)×dilationdim+1)(input_{dim} + pad_{dim} \times 2) \ge ((weight_{dim} - 1) \times dilation_{dim} + 1)

由于硬件资源限制,算子在部分参数取值组合场景下会执行失败,请根据日志信息提示分析并排查问题。若无法解决,请单击获取技术支持。

调用示例

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]