| 123456789101112131415161718192021222324252627 | -- ref: https://en.wikipedia.org/wiki/L1_losslocal L1Criterion, parent = torch.class('w2nn.L1Criterion','nn.Criterion')function L1Criterion:__init()   parent.__init(self)   self.diff = torch.Tensor()   self.linear_loss_buff = torch.Tensor()endfunction L1Criterion:updateOutput(input, target)   self.diff:resizeAs(input):copy(input)   if input:dim() == 1 then      self.diff[1] = input[1] - target   else      for i = 1, input:size(1) do	 self.diff[i]:add(-1, target[i])      end   end   local linear_targets = self.diff   local linear_loss = self.linear_loss_buff:resizeAs(linear_targets):copy(linear_targets):abs():sum()   self.output = (linear_loss) / input:nElement()   return self.outputendfunction L1Criterion:updateGradInput(input, target)   local norm = 1.0 / input:nElement()   self.gradInput:resizeAs(self.diff):copy(self.diff):sign():mul(norm)   return self.gradInputend
 |