问题描述:
【自定义算子功能】
【操作步骤&问题现象】
问题一、aot类型自定义算子如何确定输出参数数量
我使用Custom算子定义了一个算子,有7个输入参数和3个输出参数,理论上在C++代码中应该获取到10个参数,可是实际却只获得了8个参数,请问应该如何修改呢?
C++代码如下:
Python调用代码:
问题二、上图中的backword函数我将其定义为了另一个Custom算子的反向求导过程,希望对kernels, offsets_h, offsets_v三个参数求导,输出shape都为[8, 169, 48, 48],可是我却得到了一个长度为169的list,内容为(48,48)的Tensor。但我希望得到3个[8, 169, 48, 48]的grad_Tensor。请问应该怎么修改呢?
输出:
解答:
第一个问题:out_shape和out_dtype你要用一个列表把所有输出的shape和dtype放进去,如果三个输出都是[8, 169, 48, 48]和mindspore.float32,那么out_shape = [[8, 169, 48, 48], [8, 169, 48, 48], [8, 169, 48, 48]], out_dtype=[mindspore.float32, mindspore.float32, mindspore.float32]
第二个问题虽然我不是太清楚为什么会出现169个,但是应该和第一个问题类似,你可以先把out_shape和out_dtype设置正确,看看是否还有问题,如果还有可以在这留言反馈我帮你看看
也非常感谢你在MindSpore实践中的反馈,多输出这块我们会在文档中更新相关内容指导用户书写。
把输出shape的最外层用tuple包装,即((8, 169, 48, 48), (8, 169, 48, 48), (8, 169, 48, 48))试试,输出dtype也是,用tuple包装,不要用list,从报错信息来看,MindSpore无法处理ListShape类型



