33//* The code is available under the Apache-2.0 license. Read the License for details.
44//***************************************************************************************************
55
6- //-> Latest commit: Brykin Gleb, 21 .03.2021
6+ //-> Latest commit: Brykin Gleb, 22 .03.2021
77
88using System ;
99using System . Threading ;
@@ -51,7 +51,7 @@ public static void dAvgPool2d(Half[] dx, int[] x_shape, System.Tuple<int, int> k
5151 for ( int oy = 0 ; oy < y_height ; oy ++ )
5252 {
5353 var iy_ = oy * stride_y - padding_y ;
54- Half grad = dy [ ( ( oy * y_width + ox ) * y_channel + c ) * y_batch + b ] / norm ;
54+ Half grad = dy [ ( ( c * y_batch + b ) * y_height + oy ) * y_width + ox ] / norm ;
5555 for ( int fx = 0 ; fx < kernel_width ; fx ++ )
5656 {
5757 var ix = ix_ + fx * dilation_x ;
@@ -66,7 +66,7 @@ public static void dAvgPool2d(Half[] dx, int[] x_shape, System.Tuple<int, int> k
6666 {
6767 continue ;
6868 }
69- dx [ ( ( iy * x_width + ix ) * x_channel + c ) * x_batch + b ] += grad ;
69+ dx [ ( ( c * x_batch + b ) * x_height + iy ) * x_width + ix ] += grad ;
7070 }
7171 }
7272 }
@@ -105,7 +105,7 @@ public static void dAvgPool2d(float[] dx, int[] x_shape, System.Tuple<int, int>
105105 for ( int oy = 0 ; oy < y_height ; oy ++ )
106106 {
107107 var iy_ = oy * stride_y - padding_y ;
108- float grad = dy [ ( ( oy * y_width + ox ) * y_channel + c ) * y_batch + b ] / norm ;
108+ float grad = dy [ ( ( c * y_batch + b ) * y_height + oy ) * y_width + ox ] / norm ;
109109 for ( int fx = 0 ; fx < kernel_width ; fx ++ )
110110 {
111111 var ix = ix_ + fx * dilation_x ;
@@ -120,7 +120,7 @@ public static void dAvgPool2d(float[] dx, int[] x_shape, System.Tuple<int, int>
120120 {
121121 continue ;
122122 }
123- dx [ ( ( iy * x_width + ix ) * x_channel + c ) * x_batch + b ] += grad ;
123+ dx [ ( ( c * x_batch + b ) * x_height + iy ) * x_width + ix ] += grad ;
124124 }
125125 }
126126 }
@@ -159,7 +159,7 @@ public static void dAvgPool2d(double[] dx, int[] x_shape, System.Tuple<int, int>
159159 for ( int oy = 0 ; oy < y_height ; oy ++ )
160160 {
161161 var iy_ = oy * stride_y - padding_y ;
162- double grad = dy [ ( ( oy * y_width + ox ) * y_channel + c ) * y_batch + b ] / norm ;
162+ double grad = dy [ ( ( c * y_batch + b ) * y_height + oy ) * y_width + ox ] / norm ;
163163 for ( int fx = 0 ; fx < kernel_width ; fx ++ )
164164 {
165165 var ix = ix_ + fx * dilation_x ;
@@ -174,7 +174,7 @@ public static void dAvgPool2d(double[] dx, int[] x_shape, System.Tuple<int, int>
174174 {
175175 continue ;
176176 }
177- dx [ ( ( iy * x_width + ix ) * x_channel + c ) * x_batch + b ] += grad ;
177+ dx [ ( ( c * x_batch + b ) * x_height + iy ) * x_width + ix ] += grad ;
178178 }
179179 }
180180 }
0 commit comments