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

github.com/clementfarabet/lua---nnx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael 'myrhev' Mathieu <michael.mathieu@ens.fr>2012-03-24 05:18:05 +0400
committerMichael 'myrhev' Mathieu <michael.mathieu@ens.fr>2012-03-24 05:20:19 +0400
commit12ba058c41397436cd3c80c14f7375cb77e81cbb (patch)
tree19bfd08313fa81d0948ac85fc3f889508052e734 /generic
parent111dc87bd431717e3a71425b9b34c70f778d0f5b (diff)
Fix bug in SpatialUpSampling whith non-contiguous tensors
Diffstat (limited to 'generic')
-rw-r--r--generic/SpatialUpSampling.c21
1 files changed, 15 insertions, 6 deletions
diff --git a/generic/SpatialUpSampling.c b/generic/SpatialUpSampling.c
index ea9828c..ec0d086 100644
--- a/generic/SpatialUpSampling.c
+++ b/generic/SpatialUpSampling.c
@@ -17,6 +17,10 @@ static int nn_(SpatialUpSampling_updateOutput)(lua_State *L)
int owidth = iwidth * dW;
int oheight = iheight * dH;
+ // get strides
+ long *is = input->stride;
+ long *os = output->stride;
+
// get raw pointers
real *input_data = THTensor_(data)(input);
real *output_data = THTensor_(data)(output);
@@ -25,8 +29,8 @@ static int nn_(SpatialUpSampling_updateOutput)(lua_State *L)
int k;
for (k=0; k<ochannels; k++) {
// get planes
- real *input_p = input_data + k*iwidth*iheight;
- real *output_p = output_data + k*owidth*oheight;
+ real *input_p = input_data + k*is[0];
+ real *output_p = output_data + k*os[0];
// for each plane, resample
int x,y;
@@ -37,7 +41,7 @@ static int nn_(SpatialUpSampling_updateOutput)(lua_State *L)
int iy = y/dH;
// set output
- output_p[y*owidth + x] = input_p[iy*iwidth + ix];
+ output_p[y*os[1] + x*os[2]] = input_p[iy*is[1] + ix*is[2]];
}
}
}
@@ -64,6 +68,11 @@ static int nn_(SpatialUpSampling_updateGradInput)(lua_State *L)
// resize gradInput
THTensor_(zero)(gradInput);
+ // get strides
+ long *gis = gradInput->stride;
+ long *gos = gradOutput->stride;
+
+
// get raw pointers
real *gradInput_data = THTensor_(data)(gradInput);
real *gradOutput_data = THTensor_(data)(gradOutput);
@@ -72,8 +81,8 @@ static int nn_(SpatialUpSampling_updateGradInput)(lua_State *L)
int k;
for (k=0; k<ochannels; k++) {
// get planes
- real *gradInput_p = gradInput_data + k*iwidth*iheight;
- real *gradOutput_p = gradOutput_data + k*owidth*oheight;
+ real *gradInput_p = gradInput_data + k*gis[0];
+ real *gradOutput_p = gradOutput_data + k*gos[0];
// for each plane, resample
int x,y;
@@ -84,7 +93,7 @@ static int nn_(SpatialUpSampling_updateGradInput)(lua_State *L)
int iy = y/dH;
// accumulate gradient
- gradInput_p[iy*iwidth + ix] += gradOutput_p[y*owidth + x];
+ gradInput_p[iy*gis[1] + ix*gis[2]] += gradOutput_p[y*gos[1] + x*gos[2]];
}
}
}