From d09f71ab50e64cc290011e2844a9492b472cc013 Mon Sep 17 00:00:00 2001 From: Eric Cosatto Date: Tue, 25 Jul 2017 12:12:56 -0400 Subject: [PATCH 1/4] replace lon glong types with size_t Work around bug in msvc compiler in win32 mode --- lib/THNN/generic/TemporalRowConvolution.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/THNN/generic/TemporalRowConvolution.c b/lib/THNN/generic/TemporalRowConvolution.c index e3ae41e22..4947aad38 100644 --- a/lib/THNN/generic/TemporalRowConvolution.c +++ b/lib/THNN/generic/TemporalRowConvolution.c @@ -73,7 +73,7 @@ static void THNN_(unfolded_acc_row)( // #pragma omp parallel for private(c) for (c = 0; c < inputFrameSize; c++) { size_t kw, x; - long long ix = 0; + size_t ix = 0; for (kw = 0; kw < kW; kw++) { real *src = finput_data @@ -81,7 +81,7 @@ static void THNN_(unfolded_acc_row)( + kw * (nOutputFrame); real *dst = input_data + c * (nInputFrame); - ix = (long long)(kw); + ix = (size_t)(kw); if (dW == 1) { real *dst_slice = dst + (size_t)(ix); THVector_(cadd)(dst_slice, dst_slice, src, 1, nOutputFrame); @@ -116,11 +116,11 @@ static void THNN_(unfolded_copy_row)( size_t rest = k % kW; size_t kw = rest % kW; size_t x; - long long ix; + size_t ix; real *dst = finput_data + c * (kW * nOutputFrame) + kw * (nOutputFrame); real *src = input_data + c * (nInputFrame); - ix = (long long)(kw); + ix = (size_t)(kw); if (dW == 1) { memcpy(dst, src+(size_t)(ix), sizeof(real) * (nOutputFrame)); } else { From 93b646c75d9d2e7757d7c98cb30df8a79a2b8b48 Mon Sep 17 00:00:00 2001 From: Eric Cosatto Date: Mon, 2 Oct 2017 14:35:40 -0400 Subject: [PATCH 2/4] fix condition logic for coef recalculation in SpatialSubtractiveNormalization Existing conditional expression always verified, resulting in overhead as coeffcients were recalculated every time. Fix and simplify expression by using chached input size. --- SpatialSubtractiveNormalization.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SpatialSubtractiveNormalization.lua b/SpatialSubtractiveNormalization.lua index e2da2c6a2..7fa440267 100644 --- a/SpatialSubtractiveNormalization.lua +++ b/SpatialSubtractiveNormalization.lua @@ -63,7 +63,8 @@ end function SpatialSubtractiveNormalization:updateOutput(input) -- compute side coefficients local dim = input:dim() - if input:dim()+1 ~= self.coef:dim() or (input:size(dim) ~= self.coef:size(dim)) or (input:size(dim-1) ~= self.coef:size(dim-1)) then + if not self._inpsz or not input:isSize(self._inpsz) then + self._inpsz = input:size() self.ones = self.ones or input.new() self._coef = self._coef or self.coef.new() if dim == 4 then From 7be70a67e4b6c76c79e88b29e56cb62338379338 Mon Sep 17 00:00:00 2001 From: Eric Cosatto Date: Mon, 2 Oct 2017 15:44:06 -0400 Subject: [PATCH 3/4] SpatialSubtractiveNormalization:clearState: clear cached size to make Travis happy --- SpatialSubtractiveNormalization.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/SpatialSubtractiveNormalization.lua b/SpatialSubtractiveNormalization.lua index 7fa440267..d92614a8c 100644 --- a/SpatialSubtractiveNormalization.lua +++ b/SpatialSubtractiveNormalization.lua @@ -109,6 +109,7 @@ function SpatialSubtractiveNormalization:updateGradInput(input, gradOutput) end function SpatialSubtractiveNormalization:clearState() + self._inpsz = nil if self.ones then self.ones:set() end if self._coef then self._coef:set() end self.meanestimator:clearState() From d095326344d4c405dc73a6b0f4b12fdc83ea1a00 Mon Sep 17 00:00:00 2001 From: Eric Cosatto Date: Tue, 2 Jan 2018 14:51:46 -0500 Subject: [PATCH 4/4] SpatialSubtractiveNormalization:clearState missing several cleanups --- SpatialSubtractiveNormalization.lua | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/SpatialSubtractiveNormalization.lua b/SpatialSubtractiveNormalization.lua index d92614a8c..dd77dde00 100644 --- a/SpatialSubtractiveNormalization.lua +++ b/SpatialSubtractiveNormalization.lua @@ -109,9 +109,10 @@ function SpatialSubtractiveNormalization:updateGradInput(input, gradOutput) end function SpatialSubtractiveNormalization:clearState() - self._inpsz = nil - if self.ones then self.ones:set() end - if self._coef then self._coef:set() end - self.meanestimator:clearState() - return parent.clearState(self) + nn.utils.clear(self, '_inpsz', 'ones', '_coef') + self.coef = torch.Tensor(1,1,1) + self.subtractor:clearState() + self.divider:clearState() + self.meanestimator:clearState() + return parent.clearState(self) end