| 12345678910111213141516171819202122232425262728293031 | local ClippedMSECriterion, parent = torch.class('w2nn.ClippedMSECriterion','nn.Criterion')ClippedMSECriterion.has_instance_loss = truefunction ClippedMSECriterion:__init(min, max)   parent.__init(self)   self.min = min or 0   self.max = max or 1   self.diff = torch.Tensor()   self.diff_pow2 = torch.Tensor()   self.instance_loss = {}endfunction ClippedMSECriterion:updateOutput(input, target)   self.diff:resizeAs(input):copy(input)   self.diff:clamp(self.min, self.max)   self.diff:add(-1, target)   self.diff_pow2:resizeAs(self.diff):copy(self.diff):pow(2)   self.instance_loss = {}   self.output = 0   local scale = 1.0 / input:size(1)   for i = 1, input:size(1) do      local instance_loss = self.diff_pow2[i]:sum() / self.diff_pow2[i]:nElement()      self.instance_loss[i] = instance_loss      self.output = self.output + instance_loss   end   return self.output / input:size(1)endfunction ClippedMSECriterion:updateGradInput(input, target)   local norm = 1.0 / input:nElement()   self.gradInput:resizeAs(self.diff):copy(self.diff):mul(norm)   return self.gradInput end
 |