diff options
author | Ronan Collobert <ronan@collobert.com> | 2012-01-25 17:55:20 +0400 |
---|---|---|
committer | Ronan Collobert <ronan@collobert.com> | 2012-01-25 17:55:20 +0400 |
commit | 4df3893abd1b9f840f1d9a8c1859799ccbf941de (patch) | |
tree | e8a1e1cc1b6ea6e47855347b157eaf419fdb357b /SpatialConvolution.lua |
initial revamp of torch7 tree
Diffstat (limited to 'SpatialConvolution.lua')
-rw-r--r-- | SpatialConvolution.lua | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/SpatialConvolution.lua b/SpatialConvolution.lua new file mode 100644 index 0000000..38d2737 --- /dev/null +++ b/SpatialConvolution.lua @@ -0,0 +1,50 @@ +local SpatialConvolution, parent = torch.class('nn.SpatialConvolution', 'nn.Module') + +function SpatialConvolution:__init(nInputPlane, nOutputPlane, kW, kH, dW, dH) + parent.__init(self) + + dW = dW or 1 + dH = dH or 1 + + self.nInputPlane = nInputPlane + self.nOutputPlane = nOutputPlane + self.kW = kW + self.kH = kH + self.dW = dW + self.dH = dH + + self.weight = torch.Tensor(nOutputPlane, nInputPlane, kH, kW) + self.bias = torch.Tensor(nOutputPlane) + self.gradWeight = torch.Tensor(nOutputPlane, nInputPlane, kH, kW) + self.gradBias = torch.Tensor(nOutputPlane) + + self:reset() +end + +function SpatialConvolution:reset(stdv) + if stdv then + stdv = stdv * math.sqrt(3) + else + stdv = 1/math.sqrt(self.kW*self.kH*self.nInputPlane) + end + self.weight:apply(function() + return torch.uniform(-stdv, stdv) + end) + self.bias:apply(function() + return torch.uniform(-stdv, stdv) + end) +end + +function SpatialConvolution:updateOutput(input) + return input.nn.SpatialConvolution_updateOutput(self, input) +end + +function SpatialConvolution:updateGradInput(input, gradOutput) + if self.gradInput then + return input.nn.SpatialConvolution_updateGradInput(self, input, gradOutput) + end +end + +function SpatialConvolution:accGradParameters(input, gradOutput, scale) + return input.nn.SpatialConvolution_accGradParameters(self, input, gradOutput, scale) +end |