2022-07-05 08:13:25 +02:00
|
|
|
#include <stdio.h>
|
2022-09-28 10:20:08 +02:00
|
|
|
|
2022-10-24 12:54:51 +02:00
|
|
|
#include "../include/colors.h"
|
2022-11-01 17:24:29 +01:00
|
|
|
#include "include/convolution.h"
|
2022-09-16 14:53:35 +02:00
|
|
|
#include "include/make.h"
|
2022-07-05 08:13:25 +02:00
|
|
|
|
|
|
|
|
|
|
|
void make_average_pooling(float*** input, float*** output, int size, int output_depth, int output_dim) {
|
2022-11-01 10:10:43 +01:00
|
|
|
// input[output_depth][output_dim+size-1][output_dim+size-1]
|
|
|
|
// output[output_depth][output_dim][output_dim]
|
2023-01-13 22:17:37 +01:00
|
|
|
float sum;
|
2022-09-09 17:39:07 +02:00
|
|
|
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++) {
|
2023-01-13 22:17:37 +01:00
|
|
|
sum = 0.;
|
2022-09-09 17:39:07 +02:00
|
|
|
for (int a=0; a < size; a++) {
|
|
|
|
for (int b=0; b < size; b++) {
|
2023-01-13 22:17:37 +01:00
|
|
|
sum += input[i][size*j +a][size*k +b];
|
2022-07-05 08:13:25 +02:00
|
|
|
}
|
|
|
|
}
|
2023-01-13 22:17:37 +01:00
|
|
|
output[i][j][k] = sum/(float)n;
|
2022-07-05 08:13:25 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-10-02 20:31:20 +02:00
|
|
|
void make_dense(Kernel_nn* kernel, float* input, float* output, int size_input, int size_output) {
|
2022-11-01 10:10:43 +01:00
|
|
|
// input[size_input]
|
|
|
|
// output[size_output]
|
2022-07-05 08:13:25 +02:00
|
|
|
float f;
|
2022-11-03 18:13:01 +01:00
|
|
|
|
2022-09-09 17:39:07 +02:00
|
|
|
for (int i=0; i < size_output; i++) {
|
2022-07-05 08:13:25 +02:00
|
|
|
f = kernel->bias[i];
|
2022-09-09 17:39:07 +02:00
|
|
|
for (int j=0; j < size_input; j++) {
|
2022-07-05 08:13:25 +02:00
|
|
|
f += kernel->weights[i][j]*input[j];
|
|
|
|
}
|
|
|
|
output[i] = f;
|
|
|
|
}
|
2022-10-02 20:31:20 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
void make_dense_linearised(Kernel_nn* kernel, float*** input, float* output, int depth_input, int dim_input, int size_output) {
|
2022-11-01 10:10:43 +01:00
|
|
|
// input[depth_input][dim_input][dim_input]
|
|
|
|
// output[size_output]
|
2022-10-02 20:31:20 +02:00
|
|
|
float f;
|
2022-11-03 18:13:01 +01:00
|
|
|
|
|
|
|
for (int l=0; l < size_output; l++) {
|
2022-10-02 20:31:20 +02:00
|
|
|
f = 0;
|
2022-11-03 18:13:01 +01:00
|
|
|
for (int i=0; i < depth_input; i++) {
|
|
|
|
for (int j=0; j < dim_input; j++) {
|
|
|
|
for (int k=0; k < dim_input; k++) {
|
2022-10-02 20:31:20 +02:00
|
|
|
f += input[i][j][k]*kernel->weights[k + j*dim_input + i*depth_input][l];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2022-11-03 11:04:47 +01:00
|
|
|
output[l] = f;
|
2022-10-02 20:31:20 +02:00
|
|
|
}
|
2022-07-05 08:13:25 +02:00
|
|
|
}
|