Mxnet 自定义操作向后

Mxnet 自定义操作向后,mxnet,Mxnet,我正在写一个定制的op,当我写后面的部分时,我被绊倒了 当我调用out\u grad[0].asnumpy()或对out\u grad执行任何操作时,程序会崩溃,而不会出现任何错误消息 我尝试用零填充in_梯度,程序运行平稳,但我需要梯度向后流动。 def向后(自身、请求、输出梯度、输入数据、输出数据、输入梯度、辅助): 自我分配(按等级[0],要求[0],0) 自我分配(按等级[1],要求[1],0) 这里出了什么问题?您是否尝试按照这里的教程开发 如果这没有帮助,请提供自定义运算符的完

我正在写一个定制的op,当我写后面的部分时,我被绊倒了

当我调用out\u grad[0].asnumpy()或对out\u grad执行任何操作时,程序会崩溃,而不会出现任何错误消息

我尝试用零填充in_梯度,程序运行平稳,但我需要梯度向后流动。

def向后(自身、请求、输出梯度、输入数据、输出数据、输入梯度、辅助):
自我分配(按等级[0],要求[0],0)
自我分配(按等级[1],要求[1],0)


这里出了什么问题?

您是否尝试按照这里的教程开发

如果这没有帮助,请提供自定义运算符的完整代码以及一些示例数据和一个简单的模型,以便轻松复制此问题。

向我们展示如何使用自定义运算定义损失函数。损失运算非常特殊,因为它不需要梯度流入

但在我的情况下,我需要grad流到我的op中。因此,下面的函数应该返回依赖项,而不是像loss op那样为空

def declare_backward_dependency(self, out_grad, in_data, out_data):
    return [out_grad[0]]

在我看来,依赖关系是梯度应该转换到的某个变量。

我使用“.shape”来获得梯度的形状,结果是空的。也许上游出了问题。但是我怎么才能知道呢?我已经找到了问题所在,我已经在下面发布了我的解决方案。是的。本教程向我们展示了如何使用自定义运算定义损失函数。损失运算非常特殊,因为它不需要梯度流入。我发现出了什么问题。我现在发布我的解决方案。你所说的“毕业生流入”是什么意思?