| 123456789101112131415161718192021222324252627282930313233343536 | 
							- if w2nn and w2nn.LeakyReLU then
 
-    return w2nn.LeakyReLU
 
- end
 
- local LeakyReLU, parent = torch.class('w2nn.LeakyReLU','nn.Module')
 
-  
 
- function LeakyReLU:__init(negative_scale)
 
-    parent.__init(self)
 
-    self.negative_scale = negative_scale or 0.333
 
-    self.negative = torch.Tensor()
 
- end
 
-  
 
- function LeakyReLU:updateOutput(input)
 
-    self.output:resizeAs(input):copy(input):abs():add(input):div(2)
 
-    self.negative:resizeAs(input):copy(input):abs():add(-1.0, input):mul(-0.5*self.negative_scale)
 
-    self.output:add(self.negative)
 
-    
 
-    return self.output
 
- end
 
- function LeakyReLU:updateGradInput(input, gradOutput)
 
-    self.gradInput:resizeAs(gradOutput)
 
-    -- filter positive
 
-    self.negative:sign():add(1)
 
-    torch.cmul(self.gradInput, gradOutput, self.negative)
 
-    -- filter negative
 
-    self.negative:add(-1):mul(-1 * self.negative_scale):cmul(gradOutput)
 
-    self.gradInput:add(self.negative)
 
-    
 
-    return self.gradInput
 
- end
 
- function LeakyReLU:clearState()
 
-    nn.utils.clear(self, 'negative')
 
-    return parent.clearState(self)
 
- end
 
 
  |