ed8ec64f创建于 2025年12月25日历史提交
文件最后提交记录最后更新时间
9 个月前
9 个月前
1 年前
9 个月前
9 个月前
9 个月前
9 个月前
9 个月前
README

aclnnUnfoldGrad

产品支持情况

产品 是否支持
Atlas A3 训练系列产品/Atlas A3 推理系列产品 √
Atlas A2 训练系列产品/Atlas A2 推理系列产品 √

功能说明

  • 算子功能:实现Unfold算子的反向功能,计算相应的梯度。

    Unfold算子根据入参self,计算出维度dimdim的所有大小为sizesize的切片。两个切片之间的步长由stepstep给出。如果sizedimsizedim是入参self的维度dimdim的大小,则返回的张量中维度dimdim的大小将为(sizedim−size)/step+1(sizedim-size)/step+1。返回的张量中附加了一个大小为sizesize的附加维度。

    UnfoldGrad算子入参gradOutput的shape为Unfold正向输出的shape,入参inputSizes为Unfold正向输入self的shape,UnfoldGrad算子出参gradIn的shape为Unfold正向入参self的shape。

    例子:

    >>> x = torch.arange(1., 8)
    >>> x
    tensor([ 1.,  2.,  3.,  4.,  5.,  6.,  7.])
    >>> x.unfold(0, 2, 1)
    tensor([[ 1.,  2.],
            [ 2.,  3.],
            [ 3.,  4.],
            [ 4.,  5.],
            [ 5.,  6.],
            [ 6.,  7.]])
    >>> grad = x.unfold(0, 2, 2)
    tensor([[ 1.,  2.],
            [ 3.,  4.],
            [ 5.,  6.]])
    >>> res = torch.ops.aten.unfold_backward(grad, [7], 0, 2, 2)
    tensor([1, 2, 3, 4, 5, 6, 0])
    

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
gradOutput 输入张量 表示梯度更新系数,shape为(..., (sizedim-size)/step+1, size),要求满足gradOutput的第dim维等于(inputSizes[dim]−size)/step+1(inputSizes[dim]-size)/step+1和gradOut的size等于inputSizes的size+1。 FLOAT、FLOAT16、BFLOAT16 ND
inputSizes 输入数组 表示输出张量的形状,值为(..., sizedim),inputSizes的size小于等于8。 INT64 ND
dim 输入 公式中的dimdim。表示展开发生的维度。dimdim需要满足dim大于等于0且dim小于inputSizes的size。 INT64 -
size 输入 公式中的sizesize。表示展开的每个切片的大小。sizesize需要满足size大于0且size小于等于inputSizes的第dim维。 INT64 -
step 输入 公式中的stepstep。表示每个切片之间的步长。stepstep需要满足step大于0。 INT64
gradIn 输出 表示Unfold的对应梯度,数据类型必须和gradOut一致。 FLOAT、FLOAT16、BFLOAT16

约束说明

gradOutput的shape满足约束:

  • gradOutput的第dim维等于(inputSizes[dim]-size)/step+1。
  • gradOutput的size等于inputSizes的size+1。

dim大于等于0且dim小于inputSizes的size。size大于0且size小于等于inputSizes的第dim维。step大于0。

调用说明

调用方式 样例代码 说明
aclnn接口 test_unfold_grad 通过aclnnUnfoldGrad接口方式调用UnfoldGrad算子。