在 Torch 中修改 ClassNLLCriterion
Modifying ClassNLLCriterion in Torch
我是 Torch 的新手,我想在 Torch 中创建一个自定义损失函数,它是 ClassNLLCriterion 的修改版。具体来说,ClassNLLCriterion loss为:
loss(x, class) = -x[class]
我想修改为:
loss(x, class) = -x[class] + F(x)
其中 F(x)
是一个在 table 中查找 x
(作为键)并输出其值的函数。
我的问题是,实施此自定义标准的正确方法是什么? updateOutput()
功能看似简单,但是updateGradInput()
功能如何实现呢?
如果F(x)
对于网络参数是不可微的,那么你不能在损失函数中使用它。可微性是在反向传播过程中执行梯度下降的必要条件。参见 Non-smooth and non-differentiable customized loss function tensorflow。
我是 Torch 的新手,我想在 Torch 中创建一个自定义损失函数,它是 ClassNLLCriterion 的修改版。具体来说,ClassNLLCriterion loss为:
loss(x, class) = -x[class]
我想修改为:
loss(x, class) = -x[class] + F(x)
其中 F(x)
是一个在 table 中查找 x
(作为键)并输出其值的函数。
我的问题是,实施此自定义标准的正确方法是什么? updateOutput()
功能看似简单,但是updateGradInput()
功能如何实现呢?
如果F(x)
对于网络参数是不可微的,那么你不能在损失函数中使用它。可微性是在反向传播过程中执行梯度下降的必要条件。参见 Non-smooth and non-differentiable customized loss function tensorflow。