       getTopLeft(xf, inputImages_width, xInTopLeft, xWeightTopLeft);
       getTopLeft(yf, inputImages_height, yInTopLeft, yWeightTopLeft);
 
+      xWeightTopLeft = 0.5;
+      yWeightTopLeft = 0.5;
+
       const int inTopLeftAddress = inputImages_strideBatch * b + inputImages_strideHeight * yInTopLeft + inputImages_strideWidth * xInTopLeft;
       const int inTopRightAddress = inTopLeftAddress + inputImages_strideWidth;
       const int inBottomLeftAddress = inTopLeftAddress + inputImages_strideHeight;

   getTopLeft(xf, inputImages_width, xInTopLeft, xWeightTopLeft);
   getTopLeft(yf, inputImages_height, yInTopLeft, yWeightTopLeft);

   const int outAddress = output_strideBatch * b + output_strideHeight * yOut + output_strideWidth * xOut;

   const int inTopLeftAddress = inputImages_strideBatch * b + inputImages_strideHeight * yInTopLeft + inputImages_strideWidth * xInTopLeft;

            bottomLeftDotProduct += inBottomLeft * gradOutValue_fg;
            if(!onlyGrid) atomicAdd(&gradInputImages_data[gradInputImagesBottomLeftAddress + t], xWeightTopLeft * (1 - yWeightTopLeft) * gradOutValue_fg);
         }

         if(bottomRightIsIn)
         {
            float inBottomRight = inputImages_data[inBottomRightAddress + t];
