Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/soumith/cudnn.torch.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Zagoruyko <zagoruyko2@gmail.com>2016-04-23 21:44:31 +0300
committerSergey Zagoruyko <zagoruyko2@gmail.com>2016-04-23 21:44:31 +0300
commitfd12753169c5742b9390988f32947386f3820c79 (patch)
tree68bdcb004f41d8e1957b90b5f537b7dca94a3100
parentd976c1060a7ad804f4c1988a7bf49980d8fc5bfb (diff)
parent93ab1c9947eabc16a31faa865bf8bbef87282930 (diff)
Merge pull request #171 from szagoruyko/R5-gradInput-move
[R5] Move gradInput:resizeAs(input) everywhere
-rw-r--r--BatchNormalization.lua2
-rw-r--r--Pointwise.lua8
-rw-r--r--Pooling.lua7
-rw-r--r--Pooling3D.lua9
-rw-r--r--SpatialConvolution.lua2
-rw-r--r--SpatialCrossMapLRN.lua7
-rw-r--r--SpatialFullConvolution.lua6
-rw-r--r--SpatialSoftMax.lua7
-rw-r--r--VolumetricConvolution.lua8
9 files changed, 19 insertions, 37 deletions
diff --git a/BatchNormalization.lua b/BatchNormalization.lua
index a342063..83597d3 100644
--- a/BatchNormalization.lua
+++ b/BatchNormalization.lua
@@ -48,7 +48,6 @@ function BatchNormalization:createIODescriptors(input)
local nFeature = self.running_mean:numel()
self.iSize = input:size()
self.output:resizeAs(input)
- self.gradInput:resizeAs(input)
self.iDesc = cudnn.toDescriptor(input)
self.oDesc = cudnn.toDescriptor(self.output)
local biasSize = torch.ones(self.nDim):totable()
@@ -88,6 +87,7 @@ end
local function backward(self,input,gradOutput, scale)
assert(gradOutput:isContiguous())
self:createIODescriptors(input)
+ self.gradInput:resizeAs(input)
scale = scale or 1
scaleTens:fill(scale)
errcheck('cudnnBatchNormalizationBackward',
diff --git a/Pointwise.lua b/Pointwise.lua
index 92b3e45..93298ad 100644
--- a/Pointwise.lua
+++ b/Pointwise.lua
@@ -12,7 +12,6 @@ function Pointwise:createIODescriptors(input)
assert(self.mode, 'mode is not set. (trying to use base class?)');
assert(input:isContiguous(), 'Non-contiguous inputs not supported yet');
if not self.inplace then
- self.gradInput:resizeAs(input)
self.output:resizeAs(input)
end
@@ -60,7 +59,12 @@ function Pointwise:updateGradInput(input, gradOutput)
gradOutput = self._gradOutput
end
self:createIODescriptors(input)
- if self.inplace then self.output:set(input); self.gradInput:set(gradOutput) end
+ if self.inplace then
+ self.output:set(input);
+ self.gradInput:set(gradOutput)
+ else
+ self.gradInput:resizeAs(input)
+ end
errcheck('cudnnActivationBackward',
cudnn.getHandle(), self.activDesc[0],
one:data(),
diff --git a/Pooling.lua b/Pooling.lua
index d004563..45afccb 100644
--- a/Pooling.lua
+++ b/Pooling.lua
@@ -53,9 +53,6 @@ function Pooling:createIODescriptors(input)
input:size(1) ~= self.iSize[1] or input:size(2) ~= self.iSize[2]
or input:size(3) ~= self.iSize[3] or input:size(4) ~= self.iSize[4] then
self.iSize = input:size()
- -- resize gradInput
- self.gradInput:resizeAs(input)
- -- resize output
local oW, oH
if self.ceil_mode then
oW = math.ceil((input:size(4)+self.padW*2 - self.kW)/self.dW + 1)
@@ -70,9 +67,6 @@ function Pooling:createIODescriptors(input)
self.iDesc = cudnn.toDescriptor(input)
self.oDesc = cudnn.toDescriptor(self.output)
if not batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(2),
- self.gradInput:size(3),
- self.gradInput:size(4))
self.output = self.output:view(self.output:size(2),
self.output:size(3),
self.output:size(4))
@@ -102,6 +96,7 @@ function Pooling:updateGradInput(input, gradOutput)
self._gradOutput:resizeAs(gradOutput):copy(gradOutput)
gradOutput = self._gradOutput
end
+ self.gradInput:resizeAs(input)
if not self.poolDesc then self:resetPoolDescriptors() end
self:createIODescriptors(input)
errcheck('cudnnPoolingBackward',
diff --git a/Pooling3D.lua b/Pooling3D.lua
index cce67c3..e4c0218 100644
--- a/Pooling3D.lua
+++ b/Pooling3D.lua
@@ -58,8 +58,6 @@ function Pooling:createIODescriptors(input)
or input:size(3) ~= self.iSize[3] or input:size(4) ~= self.iSize[4]
or input:size(5) ~= self.iSize[5] then
self.iSize = input:size()
- -- resize gradInput
- self.gradInput:resizeAs(input)
-- resize output
local oW, oH, oT
if self.ceil_mode then
@@ -77,10 +75,6 @@ function Pooling:createIODescriptors(input)
self.iDesc = cudnn.toDescriptor(input)
self.oDesc = cudnn.toDescriptor(self.output)
if not batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(2),
- self.gradInput:size(3),
- self.gradInput:size(4),
- self.gradInput:size(5))
self.output = self.output:view(self.output:size(2),
self.output:size(3),
self.output:size(4),
@@ -105,6 +99,9 @@ function Pooling:updateOutput(input)
end
function Pooling:updateGradInput(input, gradOutput)
+ if not self.gradInput then return end
+ self.gradInput:resizeAs(input)
+
assert(gradOutput:dim() == 4 or gradOutput:dim() == 5);
if not gradOutput:isContiguous() then
self._gradOutput = self._gradOutput or gradOutput.new()
diff --git a/SpatialConvolution.lua b/SpatialConvolution.lua
index b92dd57..1fd3ea0 100644
--- a/SpatialConvolution.lua
+++ b/SpatialConvolution.lua
@@ -388,8 +388,8 @@ end
function SpatialConvolution:updateGradInput(input, gradOutput)
if not self.gradInput then return end
-
self.gradInput:resizeAs(input)
+
input, gradOutput = makeContiguous(self, input, gradOutput)
assert(gradOutput:dim() == 3 or gradOutput:dim() == 4, 'gradOutput has to be 3D or 4D');
if not self.weightDesc then self:resetWeightDescriptors() end
diff --git a/SpatialCrossMapLRN.lua b/SpatialCrossMapLRN.lua
index f6e7cd9..1f4ba33 100644
--- a/SpatialCrossMapLRN.lua
+++ b/SpatialCrossMapLRN.lua
@@ -36,15 +36,11 @@ function LRN:createIODescriptors(input)
input:size(1) ~= self.iSize[1] or input:size(2) ~= self.iSize[2]
or input:size(3) ~= self.iSize[3] or input:size(4) ~= self.iSize[4] then
self.iSize = input:size()
- self.gradInput:resizeAs(input)
self.output:resizeAs(input)
-- create input/output descriptor
self.iDesc = cudnn.toDescriptor(input)
if not batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(2),
- self.gradInput:size(3),
- self.gradInput:size(4))
self.output = self.output:view(self.output:size(2),
self.output:size(3),
self.output:size(4))
@@ -70,6 +66,9 @@ function LRN:updateOutput(input)
end
function LRN:updateGradInput(input, gradOutput)
+ if not self.gradInput then return end
+ self.gradInput:resizeAs(input)
+
assert(gradOutput:dim() == 3 or gradOutput:dim() == 4);
if not gradOutput:isContiguous() then
self._gradOutput = self._gradOutput or gradOutput.new()
diff --git a/SpatialFullConvolution.lua b/SpatialFullConvolution.lua
index 887e85b..cfbd61d 100644
--- a/SpatialFullConvolution.lua
+++ b/SpatialFullConvolution.lua
@@ -75,8 +75,6 @@ function SpatialFullConvolution:createIODescriptors(input)
or input:size(3) ~= self.iSize[3] or input:size(4) ~= self.iSize[4] then
self.iSize = input:size()
- -- resize gradInput
- if self.gradInput then self.gradInput:resizeAs(input); end
assert(self.nInputPlane == input:size(2), 'input has to contain: '
.. self.nInputPlane
.. ' feature maps, but received input of size: '
@@ -291,9 +289,6 @@ function SpatialFullConvolution:createIODescriptors(input)
end
if not batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(2),
- self.gradInput:size(3),
- self.gradInput:size(4))
self.output = self.output:view(self.output:size(2),
self.output:size(3),
self.output:size(4))
@@ -329,6 +324,7 @@ end
function SpatialFullConvolution:updateGradInput(input, gradOutput)
if not self.gradInput then return end
+ self.gradInput:resizeAs(input)
assert(gradOutput:dim() == 3 or gradOutput:dim() == 4, 'gradOutput has to be 3D or 4D');
assert(gradOutput:isContiguous(), 'gradOutput has to be contiguous')
diff --git a/SpatialSoftMax.lua b/SpatialSoftMax.lua
index 4b3a488..167eb1f 100644
--- a/SpatialSoftMax.lua
+++ b/SpatialSoftMax.lua
@@ -35,22 +35,16 @@ function SpatialSoftMax:createIODescriptors(input)
input:size(1) ~= self.iSize[1] or input:size(2) ~= self.iSize[2]
or input:size(3) ~= self.iSize[3] or input:size(4) ~= self.iSize[4] then
self.iSize = input:size()
- self.gradInput:resizeAs(input)
self.output:resizeAs(input)
self.iDesc = cudnn.toDescriptor(input)
self.oDesc = cudnn.toDescriptor(self.output)
if not singleDim and not batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(2),
- self.gradInput:size(3),
- self.gradInput:size(4))
self.output = self.output:view(self.output:size(2),
self.output:size(3),
self.output:size(4))
elseif singleDim and not batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(2))
self.output = self.output:view(self.output:size(2))
elseif singleDim and batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(1), self.gradInput:size(2))
self.output = self.output:view(self.output:size(1), self.output:size(2))
end
end
@@ -72,6 +66,7 @@ function SpatialSoftMax:updateOutput(input)
end
function SpatialSoftMax:updateGradInput(input, gradOutput)
+ self.gradInput:resizeAs(input)
if not gradOutput:isContiguous() then
self._gradOutput = self._gradOutput or gradOutput.new()
self._gradOutput:resizeAs(gradOutput):copy(gradOutput)
diff --git a/VolumetricConvolution.lua b/VolumetricConvolution.lua
index e9efb64..fd5e9c7 100644
--- a/VolumetricConvolution.lua
+++ b/VolumetricConvolution.lua
@@ -76,8 +76,6 @@ function VolumetricConvolution:createIODescriptors(input)
or input:size(3) ~= self.iSize[3] or input:size(4) ~= self.iSize[4]
or input:size(5) ~= self.iSize[5] then
self.iSize = input:size()
- -- resize gradInput
- if self.gradInput then self.gradInput:resizeAs(input); end
-- create input descriptor
self.iDesc = cudnn.toDescriptor(input)
-- create conv descriptor
@@ -287,10 +285,6 @@ function VolumetricConvolution:createIODescriptors(input)
-----------------------------------------------------------------------
if not batch then
- self.gradInput = self.gradInput:view(self.gradInput:size(2),
- self.gradInput:size(3),
- self.gradInput:size(4),
- self.gradInput:size(5))
self.output = self.output:view(self.output:size(2),
self.output:size(3),
self.output:size(4),
@@ -337,6 +331,8 @@ end
function VolumetricConvolution:updateGradInput(input, gradOutput)
if not self.gradInput then return end
+ self.gradInput:resizeAs(input)
+
input, gradOutput = makeContiguous(self, input, gradOutput)
assert(gradOutput:dim() == 4 or gradOutput:dim() == 5,
'gradOutput has to be a 4D or 5D tensor');