问题描述
假设首先通过数据x、标签y及 mindspore.gard 获取到了模型的梯度g,
现在需要将梯度g进行一定的运算(假设为 f(g)),最后 f(g) 需要对最初的 数据x 进行求导,mindspore 该如何实现呢?
如果使用 Torch 的话,在求 梯度g 的时候只要 retain_graph=True, f(g) 就可以直接对 数据x 进行求导。
但是有大佬知道 MindSpore 该如何实现吗?
解决方案
在第一次求梯度g的时候,不调用MindSpore的 NLLLoss() 即可(然而 MindSpore 自带的交叉熵损失也自动调用了 NLLLoss(),因此也需要重写 )。
通过自己写负对数似然损失nll_loss,成功不报错。