修改 Torch 标准

Modifying Torch criterion

我想在 Torch 中创建一个自定义损失函数,它是对 ClassNLLCriterion 的修改。具体来说,ClassNLLCriterion loss为:

loss(x, class) = -x[class]

我想修改为:

loss(x, class) = -x[class]*K

其中 K 是网络输入的函数,而不是网络权重或网络输出。因此 K 可以被视为一个常量。

实施此自定义标准的最简单方法是什么? updateOutput()函数看似简单,但是如何修改updateGradInput()函数呢?

基本上你的损失函数L是输入和目标的函数。所以你有

loss(input, target) = ClassNLLCriterion(input, target) * K

如果我理解正确的话,你的新损失。然后你想实现 updateGradInput 损失函数相对于输入的 returns 导数,即

updateGradInput[ClassNLLCriterion](input, target) * K + ClassNLLCriterion(input, target) * dK/dinput

因此,您只需计算 K 对损失函数输入的导数(您没有给我们计算 K 的公式)并将其代入上一行。由于您的新损失函数依赖于 ClassNLLCriterion,您可以使用此损失函数的 updateGradInputupdateOutput 来计算您的损失函数。