昇腾社区首页
中文
注册

aclnnAdaptiveMaxPool3dBackward

产品支持情况

产品 是否支持
[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]
[object Object]Atlas A2 训练系列产品/Atlas 800I A2 推理产品/A200I A2 Box 异构组件[object Object]
[object Object]Atlas 200I/500 A2 推理产品[object Object] ×
[object Object]Atlas 推理系列产品 [object Object] ×
[object Object]Atlas 训练系列产品[object Object] ×

功能说明

  • 算子功能: 正向自适应最大池化的反向传播,将梯度回填到每个自适应窗口最大值的坐标处,相同坐标处累加。
  • 正向计算公式:

    说明 N(Batch)表示批量大小、H(Height)表示特征图高度、W(Width)表示特征图宽度、C(Channels)表示特征图通道、D(Depth)表示特征图深度

对于输入self维度[N,C,D,H,W][N,C,D,H,W]、outputSize值为[Do,Ho,Wo][D_o,H_o,W_o]的场景,其输出output维度为[N,C,Do,Ho,Wo][N,C,D_o,H_o,W_o],索引indices维度为[N,C,Do,Ho,Wo][N,C,D_o,H_o,W_o],相应tensor中每个元素的计算公式如下:

Dleftl=(lD)/DoDrightl=(lD)/DoHleftm=(mH)/HoHrightm=(mH)/HoWleftn=(nW)/WoWrightn=(nW)/Wooutput(N,C,l,m,n)=maxi[Dleftl,Drightl],j[Hleftm,Hrightm],k[Wleftn,Wrightn]input(N,C,i,j,k)indices(N,C,l,m,n)=argmaxi[Dleftl,Drightl],j[Hleftm,Hrightm],k[Wleftn,Wrightn]input(N,C,i,j,k)D_{left}^l = \lfloor(l*D)/D_o\rfloor \\ D_{right}^l = \lceil(l*D)/D_o\rceil \\ H_{left}^m = \lfloor(m*H)/H_o\rfloor \\ H_{right}^m = \lceil(m*H)/H_o\rceil \\ W_{left}^n = \lfloor(n*W)/W_o\rfloor \\ W_{right}^n = \lceil(n*W)/W_o\rceil \\ output(N,C,l,m,n) = \mathop{\max}\limits_{i \in [D_{left}^l,D_{right}^l],j\in[H_{left}^m,H_{right}^m],k\in[W_{left}^n,W_{right}^n]} input(N,C,i,j,k) \\ indices(N,C,l,m,n) = \mathop{\arg\max}\limits_{i \in [D_{left}^l,D_{right}^l],j\in[H_{left}^m,H_{right}^m],k\in[W_{left}^n,W_{right}^n]} input(N,C,i,j,k)

函数原型

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

  • aclnnStatus aclnnAdaptiveMaxPool3dBackwardGetWorkspaceSize(const aclTensor* gradOutput, const aclTensor* self, const aclTensor* indices, aclTensor* gradInput, uint64_t* workspaceSize, aclOpExecutor** executor)
  • aclnnStatus aclnnAdaptiveMaxPool3dBackward(void* workspace, uint64_t workspaceSize, aclOpExecutor* executor, aclrtStream stream)

aclnnAdaptiveMaxPool3dBackwardGetWorkspaceSize

  • 参数说明:

    • gradOutput(aclTensor *, 计算输入):梯度Tensor,Device侧aclTensor,数据类型支持FLOAT32、FLOAT16、BFLOAT16。和正向的输出shape一致。支持undefinedundefined支持ND, 当输入是5维时,内部按照NCDHW处理,当输入是4维时,在0维度处补1,内部按照NCDHW处理。

    • self(aclTensor *, 计算输入):正向的输入Tensor,Device侧aclTensor,数据类型支持FLOAT32、FLOAT16、BFLOAT16。支持undefinedundefined支持ND, 当输入是5维时,内部按照NCDHW处理,当输入是4维时,在0维度处补1,内部按照NCDHW处理,与gradOutput一致。

    • indices(aclTensor *, 计算输入):输入Tensor,是Device侧aclTensor,数据类型仅支持INT32。正向输入中最大元素的索引位置。undefined与gradOutput保持一致。shape与gradOutput一致

    • gradInput(aclTensor *, 计算输出):反向输出Tensor,是Device侧aclTensor,数据类型支持FLOAT32、FLOAT16、BFLOAT16。shape与self保持一致。支持undefinedundefined与self保持一致。

    • workspaceSize(uint64_t *, 出参):返回需要在Device侧申请的workspace大小。

    • executor(aclOpExecutor **, 出参):返回op执行器,包含了算子计算流程。

  • 返回值:

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

    [object Object]

aclnnAdaptiveMaxPool3dBackward

  • 参数说明:

    • workspace(void *, 入参):在Device侧申请的workspace内存地址。
    • workspaceSize(uint64_t, 入参):在Device侧申请的workspace大小,由第一段接口aclnnAdaptiveMaxPool3dBackwardGetWorkspaceSize获取。
    • executor(aclOpExecutor *, 入参):op执行器,包含了算子计算流程。
    • stream(aclrtStream, 入参):指定执行任务的Stream。
  • 返回值:

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

约束说明

非整除场景下,shape不超过2的24次方。整除场景下,没有这个限制。

调用示例

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

[object Object]