From c1b4f55929b6e1934e313915ae628fa9abc6a50e Mon Sep 17 00:00:00 2001 From: augustin64 Date: Mon, 27 Feb 2023 18:53:13 +0100 Subject: [PATCH] Fix *average* pooling --- src/cnn/make.c | 16 +++++++--------- src/cnn/make.cu | 16 +++++++--------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/src/cnn/make.c b/src/cnn/make.c index 0d62d5b..46d8732 100644 --- a/src/cnn/make.c +++ b/src/cnn/make.c @@ -38,16 +38,14 @@ __global__ void make_average_pooling_kernel(float*** input, float*** output, int return; } - float m = FLT_MIN; - float temp; + float sum = 0; for (int a=0; a < size; a++) { for (int b=0; b < size; b++) { - temp = input[idx][size*idy +a][size*idz +b]; - m = m > temp ? m : temp; // max(m, temp) + sum += input[idx][size*idy +a][size*idz +b]; } } - output[idx][idy][idz] = m/(float)n; + output[idx][idy][idz] = sum/(float)n; } void make_average_pooling_device(float*** input, float*** output, int size, int output_depth, int output_dim) { @@ -64,19 +62,19 @@ void make_average_pooling_device(float*** input, float*** output, int size, int void make_average_pooling_cpu(float*** input, float*** output, int size, int output_depth, int output_dim) { // input[output_depth][output_dim+size-1][output_dim+size-1] // output[output_depth][output_dim][output_dim] - float m; + float sum; int n = size*size; for (int i=0; i < output_depth; i++) { for (int j=0; j < output_dim; j++) { for (int k=0; k < output_dim; k++) { - m = FLT_MIN; + sum = 0; for (int a=0; a < size; a++) { for (int b=0; b < size; b++) { - m = max_flt(m, input[i][size*j +a][size*k +b]); + sum += input[i][size*j +a][size*k +b]; } } - output[i][j][k] = m/(float)n; + output[i][j][k] = sum/(float)n; } } } diff --git a/src/cnn/make.cu b/src/cnn/make.cu index 0d62d5b..46d8732 100644 --- a/src/cnn/make.cu +++ b/src/cnn/make.cu @@ -38,16 +38,14 @@ __global__ void make_average_pooling_kernel(float*** input, float*** output, int return; } - float m = FLT_MIN; - float temp; + float sum = 0; for (int a=0; a < size; a++) { for (int b=0; b < size; b++) { - temp = input[idx][size*idy +a][size*idz +b]; - m = m > temp ? m : temp; // max(m, temp) + sum += input[idx][size*idy +a][size*idz +b]; } } - output[idx][idy][idz] = m/(float)n; + output[idx][idy][idz] = sum/(float)n; } void make_average_pooling_device(float*** input, float*** output, int size, int output_depth, int output_dim) { @@ -64,19 +62,19 @@ void make_average_pooling_device(float*** input, float*** output, int size, int void make_average_pooling_cpu(float*** input, float*** output, int size, int output_depth, int output_dim) { // input[output_depth][output_dim+size-1][output_dim+size-1] // output[output_depth][output_dim][output_dim] - float m; + float sum; int n = size*size; for (int i=0; i < output_depth; i++) { for (int j=0; j < output_dim; j++) { for (int k=0; k < output_dim; k++) { - m = FLT_MIN; + sum = 0; for (int a=0; a < size; a++) { for (int b=0; b < size; b++) { - m = max_flt(m, input[i][size*j +a][size*k +b]); + sum += input[i][size*j +a][size*k +b]; } } - output[i][j][k] = m/(float)n; + output[i][j][k] = sum/(float)n; } } }