【发布时间】:2017-03-07 06:26:53
【问题描述】:
我目前使用的是 Torch 7,我需要自定义损失函数,尤其是交叉熵误差函数。
我正在考虑向交叉熵误差函数添加一些参数,但我找不到应该修改哪个部分。
我查看了 CrossEntropyCriterion.lua 但仍然不知道方法,因为我在此文件中看不到任何方程式。
谁能告诉我方程式在哪里?或者我应该修改哪个文件?
【问题讨论】:
标签: torch
我目前使用的是 Torch 7,我需要自定义损失函数,尤其是交叉熵误差函数。
我正在考虑向交叉熵误差函数添加一些参数,但我找不到应该修改哪个部分。
我查看了 CrossEntropyCriterion.lua 但仍然不知道方法,因为我在此文件中看不到任何方程式。
谁能告诉我方程式在哪里?或者我应该修改哪个文件?
【问题讨论】:
标签: torch
要自定义损失函数,您必须更改方法 __init、updateOutput 和 updateGradInput。
__init是类初始化函数:forward() 方法时,将调用updateOutput
updateGradInput 将在您使用 :backward() 时被调用,它是您标准的梯度自定义标准的结构如下:
local yourCriterion, parent = torch.class('nn.yourCriterion', 'nn.Criterion')
function yourCriterion:__init(your_parameters):
parent.__init(self)
... (you can add as many parameters as you want to your criterion
and give them the name your prefer)
self.parameters = your_parameters
function yourCriterion:updateOutput(input)
... (your criterion code here)
return value_of_the_criterion
function yourCriterion:updateGradInput(input):
... (your criterion gradient code here)
return gradient
[编辑]:你可以在这里找到交叉熵准则的代码https://github.com/torch/nn/blob/master/CrossEntropyCriterion.lua
【讨论】: