昇腾社区首页
中文
注册

aclnnAdaptiveMaxPool2dBackward

产品支持情况

产品 是否支持
[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] ×

功能说明

  • 算子功能: 正向自适应最大池化的反向传播,将梯度回填到每个自适应窗口最大值的坐标处,相同坐标处累加。
  • 正向计算公式: 对于输入self维度[N,C,H,W][N,C,H,W],N(Batch)表示批量大小、C(Channels)表示特征图通道、H(Height)表示特征图高度、W(Width)表示特征图宽度,outputSize值为[Ho,Wo][H_o,W_o]的场景,其输出output维度为[N,C,Ho,Wo][N,C,H_o,W_o],索引indices维度为[N,C,Ho,Wo][N,C,H_o,W_o],相应tensor中每个元素的计算公式如下:Hleftm=(mH)/HoHrightm=(mH)/HoWleftn=(nW)/WoWrightn=(nW)/Wooutput(N,C,l,m,n)=maxi,j[Hleftm,Hrightm],k[Wleftn,Wrightn]input(N,C,i,j,k)indices(N,C,l,m,n)=argmaxi,j[Hleftm,Hrightm],k[Wleftn,Wrightn]input(N,C,i,j,k)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 ,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 ,j\in[H_{left}^m,H_{right}^m],k\in[W_{left}^n,W_{right}^n]} input(N,C,i,j,k)

函数原型

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

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

aclnnAdaptiveMaxPool2dBackwardGetWorkspaceSize

  • 参数说明:

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

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

    • indices(aclTensor *, 计算输入):输入Tensor,是Device侧aclTensor。数据类型支持INT32,INT64。正向输入中最大元素的索引位置。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]

aclnnAdaptiveMaxPool2dBackward

  • 参数说明:

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

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

约束说明

非整除场景下(self的后两个维度的维度值对gradOutput后两个维度的维度值取余不为0),shape不超过2的24次方。整除场景下,没有这个限制。 举例整除场景:self=[a,b,c,d],gradOutput=[a,b,e,f]。 c%e为0并且e%f为0就是整除场景。

调用示例

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

[object Object]