修改 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
,您可以使用此损失函数的 updateGradInput
和 updateOutput
来计算您的损失函数。
我想在 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
,您可以使用此损失函数的 updateGradInput
和 updateOutput
来计算您的损失函数。