UnfoldGrad
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | × |
| Atlas 训练系列产品 | × |
功能说明
-
算子功能:实现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仅支持len(inputSizesinputSizes)-1或者len(inputSizesinputSizes)-2。。 | INT64 | - |
| size | 输入 | 公式中的sizesize。表示展开的每个切片的大小。sizesize需要满足sizesize大于0且sizesize小于等于inputSizesinputSizes的第dimdim维。dimdim等于len(inputSizesinputSizes)-1时,fp32数据类型,sizesize小于等于49088。fp16数据类型,sizesize小于等于32720。dimdim等于len(inputSizesinputSizes)-2时,fp32数据类型,sizesize小于等于88。fp16数据类型,stepstep、sizesize小于等于72。 | INT64 | - |
| step | 输入 | 公式中的stepstep。表示每个切片之间的步长。stepstep需要满足stepstep大于0。dimdim等于len(inputSizesinputSizes)-1时,fp32数据类型,sizesize小于等于49088。fp16数据类型,sizesize小于等于32720。dimdim等于len(inputSizesinputSizes)-2时,fp32数据类型,sizesize小于等于88。fp16数据类型,stepstep、sizesize小于等于72。 | INT64 | |
| gradIn | 输出 | 表示Unfold的对应梯度,数据类型必须和gradOut一致。 | FLOAT、FLOAT16、BFLOAT16 |
约束说明
- gradOut的shape满足约束:
- gradOut的第dim维等于(inputSizes[dim]-size)/step+1。
- gradOut的size等于inputSizes的size+1。
- dim、size、step的要求:
- size大于0且size小于等于inputSizes的第dim维。
- step大于0。
- dim等于len(inputSizes)-1或者dim等于len(inputSizes)-2轴。
- dim等于len(inputSizes)-1时,fp32数据类型,step、size大于49088。fp16数据类型,step、size大于32720。
- dim等于len(inputSizes)-2时,fp32数据类型,step、size大于88。fp16数据类型,step、size大于72。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| aclnn接口 | test_unfold_grad | 通过aclnnUnfoldGrad接口方式调用UnfoldGrad算子。 |