33#else
44
55static inline void THNN_ (SpatialConvolutionLocal_shapeCheck )(
6- THTensor * input , THTensor * gradOutput ,
7- THTensor * weight , THTensor * bias ,
8- int kH , int kW , int dH ,
9- int dW , int padH , int padW ,
10- long inputHeight , long inputWidth ,
11- long outputHeight , long outputWidth ) {
6+ THTensor * input , THTensor * gradOutput ,
7+ THTensor * weight , THTensor * bias ,
8+ int kH , int kW , int dH ,
9+ int dW , int padH , int padW ,
10+ long inputHeight , long inputWidth ,
11+ long outputHeight , long outputWidth ) {
1212
1313 THArgCheck (kW > 0 && kH > 0 , 9 ,
14- "kernel size should be greater than zero, but got kH: %d kW: %d" , kH , kW );
14+ "kernel size should be greater than zero, but got kH: %d kW: %d" , kH , kW );
1515 THArgCheck (dW > 0 && dH > 0 , 11 ,
16- "stride should be greater than zero, but got dH: %d dW: %d" , dH , dW );
16+ "stride should be greater than zero, but got dH: %d dW: %d" , dH , dW );
1717
1818 int ndim = input -> nDimension ;
1919 int dimf = 0 ;
@@ -27,7 +27,7 @@ static inline void THNN_(SpatialConvolutionLocal_shapeCheck)(
2727 }
2828
2929 THNN_ARGCHECK (ndim == 3 || ndim == 4 , 2 , input ,
30- "3D or 4D input tensor expected but got: %s" );
30+ "3D or 4D input tensor expected but got: %s" );
3131
3232 long nInputPlane = weight -> size [2 ] / (kH * kW );
3333 long nOutputPlane = weight -> size [1 ];
@@ -47,21 +47,22 @@ static inline void THNN_(SpatialConvolutionLocal_shapeCheck)(
4747 }
4848}
4949
50- static int THNN_ (view_weight_local )(THTensor * * _weight )
50+ static THTensor * THNN_ (view_weight_local )(THTensor * _weight )
5151{
52- THTensor * weight = * _weight ;
52+ THTensor * weight = THTensor_ ( newContiguous )( _weight ) ;
5353 THArgCheck (weight -> nDimension == 3 || weight -> nDimension == 6 , 4 ,
5454 "weight tensor should be 3D or 6D - got %dD" , weight -> nDimension );
5555 if (weight -> nDimension == 6 ) {
5656 long s1 = weight -> size [0 ] * weight -> size [1 ];
5757 long s2 = weight -> size [2 ];
5858 long s3 = weight -> size [3 ] * weight -> size [4 ] * weight -> size [5 ];
59- * _weight = THTensor_ (newWithStorage3d )(weight -> storage ,
60- weight -> storageOffset ,
61- s1 , -1 , s2 , -1 , s3 , -1 );
62- return 1 ;
59+ THTensor * old_weight = weight ;
60+ weight = THTensor_ (newWithStorage3d )(weight -> storage ,
61+ weight -> storageOffset ,
62+ s1 , -1 , s2 , -1 , s3 , -1 );
63+ THTensor_ (free )(old_weight );
6364 }
64- return 0 ;
65+ return weight ;
6566}
6667
6768static void THNN_ (SpatialConvolutionLocal_updateOutput_frame )
@@ -76,8 +77,8 @@ static void THNN_(SpatialConvolutionLocal_updateOutput_frame)
7677 THTensor * output3d , * finput3d ;
7778
7879 THNN_ (unfolded_copy )(finput , input , kW , kH , dW , dH , padW , padH ,
79- nInputPlane , inputWidth , inputHeight ,
80- outputWidth , outputHeight );
80+ nInputPlane , inputWidth , inputHeight ,
81+ outputWidth , outputHeight );
8182
8283 THTensor_ (copy )(output , bias );
8384
@@ -116,7 +117,7 @@ void THNN_(SpatialConvolutionLocal_updateOutput)(
116117 long inputWidth , long inputHeight ,
117118 long outputWidth , long outputHeight )
118119{
119- int freeWeight = THNN_ (view_weight_local )(& weight );
120+ weight = THNN_ (view_weight_local )(weight );
120121
121122 THNN_ (SpatialConvolutionLocal_shapeCheck )
122123 (input , NULL , weight , bias , kH , kW , dH , dW , padH , padW ,
@@ -154,10 +155,10 @@ void THNN_(SpatialConvolutionLocal_updateOutput)(
154155 THTensor * finput_t = THTensor_ (newSelect )(finput , 0 , t );
155156
156157 THNN_ (SpatialConvolutionLocal_updateOutput_frame )
157- (input_t , output_t , weight , bias , finput_t ,
158- kW , kH , dW , dH , padW , padH ,
159- nInputPlane , inputWidth , inputHeight ,
160- nOutputPlane , outputWidth , outputHeight );
158+ (input_t , output_t , weight , bias , finput_t ,
159+ kW , kH , dW , dH , padW , padH ,
160+ nInputPlane , inputWidth , inputHeight ,
161+ nOutputPlane , outputWidth , outputHeight );
161162
162163 THTensor_ (free )(input_t );
163164 THTensor_ (free )(output_t );
@@ -166,8 +167,7 @@ void THNN_(SpatialConvolutionLocal_updateOutput)(
166167 }
167168
168169 THTensor_ (free )(input );
169- if (freeWeight )
170- THTensor_ (free )(weight );
170+ THTensor_ (free )(weight );
171171}
172172
173173
@@ -198,8 +198,8 @@ static void THNN_(SpatialConvolutionLocal_updateGradInput_frame)
198198 THTensor_ (zero )(gradInput );
199199
200200 THNN_ (unfolded_acc )(fgradInput , gradInput , kW , kH , dW , dH , padW , padH ,
201- nInputPlane , inputWidth , inputHeight ,
202- outputWidth , outputHeight );
201+ nInputPlane , inputWidth , inputHeight ,
202+ outputWidth , outputHeight );
203203
204204}
205205
@@ -217,7 +217,7 @@ void THNN_(SpatialConvolutionLocal_updateGradInput)(
217217 long inputWidth , long inputHeight ,
218218 long outputWidth , long outputHeight )
219219{
220- int freeWeight = THNN_ (view_weight_local )(& weight );
220+ weight = THNN_ (view_weight_local )(weight );
221221
222222 THNN_ (SpatialConvolutionLocal_shapeCheck )
223223 (input , gradOutput , weight , NULL , kH , kW , dH , dW , padH , padW ,
@@ -255,10 +255,10 @@ void THNN_(SpatialConvolutionLocal_updateGradInput)(
255255 THTensor * fgradInput_t = THTensor_ (newSelect )(fgradInput , 0 , t );
256256
257257 THNN_ (SpatialConvolutionLocal_updateGradInput_frame )
258- (gradInput_t , gradOutput_t , tweight , fgradInput_t ,
259- kW , kH , dW , dH , padW , padH ,
260- nInputPlane , inputWidth , inputHeight ,
261- nOutputPlane , outputWidth , outputHeight );
258+ (gradInput_t , gradOutput_t , tweight , fgradInput_t ,
259+ kW , kH , dW , dH , padW , padH ,
260+ nInputPlane , inputWidth , inputHeight ,
261+ nOutputPlane , outputWidth , outputHeight );
262262
263263 THTensor_ (free )(gradInput_t );
264264 THTensor_ (free )(gradOutput_t );
@@ -269,9 +269,7 @@ void THNN_(SpatialConvolutionLocal_updateGradInput)(
269269 THTensor_ (free )(tweight );
270270 THTensor_ (free )(input );
271271 THTensor_ (free )(gradOutput );
272- if (freeWeight )
273- THTensor_ (free )(weight );
274-
272+ THTensor_ (free )(weight );
275273}
276274
277275static void THNN_ (SpatialConvolutionLocal_accGradParameters_frame )
@@ -317,8 +315,10 @@ void THNN_(SpatialConvolutionLocal_accGradParameters)(
317315 long outputWidth , long outputHeight ,
318316 accreal scale_ )
319317{
318+ THArgCheck (THTensor_ (isContiguous )(gradWeight ), 4 , "gradWeight needs to be contiguous" );
319+ THArgCheck (THTensor_ (isContiguous )(gradBias ), 5 , "gradBias needs to be contiguous" );
320320 real scale = TH_CONVERT_ACCREAL_TO_REAL (scale_ );
321- int freeWeight = THNN_ (view_weight_local )(& gradWeight );
321+ gradWeight = THNN_ (view_weight_local )(gradWeight );
322322
323323 THNN_ (SpatialConvolutionLocal_shapeCheck )
324324 (input , gradOutput , gradWeight , gradBias , kH , kW , dH , dW , padH , padW ,
@@ -349,10 +349,10 @@ void THNN_(SpatialConvolutionLocal_accGradParameters)(
349349 THTensor * finput_t = THTensor_ (newSelect )(finput , 0 , t );
350350
351351 THNN_ (SpatialConvolutionLocal_accGradParameters_frame )
352- (gradOutput_t , gradWeight , gradBias , finput_t , scale ,
353- kW , kH , dW , dH , padW , padH ,
354- nInputPlane , inputWidth , inputHeight ,
355- nOutputPlane , outputWidth , outputHeight );
352+ (gradOutput_t , gradWeight , gradBias , finput_t , scale ,
353+ kW , kH , dW , dH , padW , padH ,
354+ nInputPlane , inputWidth , inputHeight ,
355+ nOutputPlane , outputWidth , outputHeight );
356356
357357 THTensor_ (free )(gradOutput_t );
358358 THTensor_ (free )(finput_t );
@@ -361,10 +361,7 @@ void THNN_(SpatialConvolutionLocal_accGradParameters)(
361361
362362 THTensor_ (free )(input );
363363 THTensor_ (free )(gradOutput );
364-
365- if (freeWeight )
366- THTensor_ (free )(gradWeight );
367-
364+ THTensor_ (free )(gradWeight );
368365}
369366
370367#endif
0 commit comments