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

aclnnConvolution

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:实现卷积功能,支持 1D 卷积、2D 卷积、3D 卷积,同时支持转置卷积、空洞卷积、分组卷积。 对于入参 [object Object] 时,表示使用转置卷积或者分数步长卷积。它可以看作是普通卷积的梯度或者逆向操作,即从卷积的输出形状恢复到输入形状,同时保持与卷积相容的连接模式。它的参数和普通卷积类似,包括输入通道数、输出通道数、卷积核大小、步长、填充、输出填充、分组、偏置、扩张等。

  • 计算公式:

    我们假定输入(input)的 shape 是 (N,Cin,D,H,W)(N, C_{\text{in}}, D, H, W),(weight) 的 shape 是 (Cout,Cin,Kd,Kh,Kw)(C_{\text{out}}, C_{\text{in}}, K_d, K_h, K_w),输出(output)的 shape 是 (N,Cout,Dout,Hout,Wout)(N, C_{\text{out}}, D_{\text{out}}, H_{\text{out}}, W_{\text{out}}),其中 NN 表示批次大小(batch size),CC 是通道数,DDHHWW 分别是样本的深度、高度和宽度,KdK_dKhK_hKwK_w 分别是卷积核的深度、高度和宽度,那输出将被表示为:

    output(Ni,Coutj,Dout,Hout,Wout)=k=0Cin1weight(Coutj,k)input(Ni,k)+bias(Coutj)\text{output}(N_i, C_{\text{out}_j}, D_{\text{out}}, H_{\text{out}}, W_{\text{out}}) = \sum_{k = 0}^{C_{\text{in}} - 1} \text{weight}(C_{\text{out}_j}, k) \star \text{input}(N_i, k) + \text{bias}(C_{\text{out}_j})

    其中,\star 表示卷积计算,根据卷积输入的维度,卷积的类型(空洞卷积、分组卷积)而定。NN 代表批次大小(batch size),CC 代表通道数,DDHHWW 分别代表深度、高度和宽度,相应输出维度的计算公式如下:

    • 对于入参 [object Object] 时:
    Dout=[(D+2×padding[0]dilation[0]×(Kd1)1)/stride[0]]+1Hout=[(H+2×padding[1]dilation[1]×(Kh1)1)/stride[1]]+1Wout=[(W+2×padding[2]dilation[2]×(Kw1)1)/stride[2]]+1D_{\text{out}}=[(D + 2 \times padding[0] - dilation[0] \times (K_d - 1) - 1 ) / stride[0]] + 1 \\ H_{\text{out}}=[(H + 2 \times padding[1] - dilation[1] \times (K_h - 1) - 1 ) / stride[1]] + 1 \\ W_{\text{out}}=[(W + 2 \times padding[2] - dilation[2] \times (K_w - 1) - 1 ) / stride[2]] + 1
    • 对于入参 [object Object] 时:
    Dout=(D1)×stride[0]2×padding[0]+dilation[0]×(Kd1)+outputPadding[0]+1Hout=(H1)×stride[1]2×padding[1]+dilation[1]×(Kh1)+outputPadding[1]+1Wout=(W1)×stride[2]2×padding[2]+dilation[2]×(Kw1)+outputPadding[2]+1D_{\text{out}}=(D - 1) \times \text{stride}[0] - 2 \times \text{padding}[0] + \text{dilation}[0] \times (K_d - 1) + \text {outputPadding}[0] + 1 \\ H_{\text{out}}=(H - 1) \times \text{stride}[1] - 2 \times \text{padding}[1] + \text{dilation}[1] \times (K_h - 1) + \text {outputPadding}[1] + 1 \\ W_{\text{out}}=(W - 1) \times \text{stride}[2] - 2 \times \text{padding}[2] + \text{dilation}[2] \times (K_w - 1) + \text {outputPadding}[2] + 1

函数原型

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

[object Object]
[object Object]

aclnnConvolutionGetWorkspaceSize

  • 参数说明:

    [object Object]
  • 返回值:

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

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

    [object Object]

aclnnConvolution

  • 参数说明:

    [object Object]
  • 返回值:

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

约束说明

  • 确定性计算

    • aclnnConvolution默认确定性实现。
    [object Object]

调用示例

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

[object Object]