Shish

Dependencies:   mbed USBDevice GLCD

Committer:
pepperu96
Date:
Tue Nov 09 16:04:17 2021 +0000
Revision:
6:3a0fd4eef371
Parent:
5:2dce07562de8
debug deactivated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pepperu96 5:2dce07562de8 1 #ifndef LOWPOWERNEURALNETWORK_DEEPNEURALNETWORK_H
pepperu96 5:2dce07562de8 2 #define LOWPOWERNEURALNETWORK_DEEPNEURALNETWORK_H
pepperu96 5:2dce07562de8 3
pepperu96 5:2dce07562de8 4 /**
pepperu96 5:2dce07562de8 5 * Default Hyperparameters for a test set accuracy equals to 95.61%
pepperu96 5:2dce07562de8 6 * */
pepperu96 5:2dce07562de8 7 #define INPUT_IMAGE_SIZE 28
pepperu96 5:2dce07562de8 8 #define CONV2D_SIZE 7
pepperu96 5:2dce07562de8 9 //#define CONV2D_SIZE 2
pepperu96 5:2dce07562de8 10 #define MAX_POOL_SIZE 2
pepperu96 5:2dce07562de8 11 #define DROPOUT_RATE 0.25
pepperu96 5:2dce07562de8 12 #define N_OUT_CLASSES 36
pepperu96 5:2dce07562de8 13
pepperu96 5:2dce07562de8 14 /**
pepperu96 5:2dce07562de8 15 * Layers inputs-outputs dimensions (each dimension refers to a single dimension -> matrix are squares)
pepperu96 5:2dce07562de8 16 */
pepperu96 5:2dce07562de8 17 #define CONV2D_INPUT_SIZE INPUT_IMAGE_SIZE
pepperu96 5:2dce07562de8 18 //#define CONV2D_INPUT_SIZE 3
pepperu96 5:2dce07562de8 19 //#define CONV2D_OUTPUT_SIZE 22
pepperu96 5:2dce07562de8 20 #define CONV2D_OUTPUT_SIZE CONV2D_INPUT_SIZE-CONV2D_SIZE+1
pepperu96 5:2dce07562de8 21
pepperu96 5:2dce07562de8 22 #define MAX_POOL_INPUT_SIZE CONV2D_OUTPUT_SIZE
pepperu96 5:2dce07562de8 23 //#define MAX_POOL_INPUT_SIZE 4
pepperu96 5:2dce07562de8 24 #define MAX_POOL_OUTPUT_SIZE 11
pepperu96 5:2dce07562de8 25
pepperu96 5:2dce07562de8 26 #define FLATTEN_INPUT_SIZE MAX_POOL_OUTPUT_SIZE
pepperu96 5:2dce07562de8 27 #define FLATTEN_OUTPUT_SIZE FLATTEN_INPUT_SIZE * FLATTEN_INPUT_SIZE
pepperu96 5:2dce07562de8 28
pepperu96 5:2dce07562de8 29 #define DENSE_INPUT_SIZE FLATTEN_OUTPUT_SIZE
pepperu96 5:2dce07562de8 30 //#define DENSE_INPUT_SIZE 5
pepperu96 5:2dce07562de8 31
pepperu96 5:2dce07562de8 32 #define DENSE_OUTPUT_SIZE N_OUT_CLASSES
pepperu96 5:2dce07562de8 33 //#define DENSE_OUTPUT_SIZE 3
pepperu96 5:2dce07562de8 34
pepperu96 5:2dce07562de8 35 #define DENSE_WEIGHTS_LEN DENSE_INPUT_SIZE * DENSE_OUTPUT_SIZE
pepperu96 5:2dce07562de8 36
pepperu96 5:2dce07562de8 37
pepperu96 5:2dce07562de8 38 #include <iostream>
pepperu96 5:2dce07562de8 39 #include <algorithm>
pepperu96 5:2dce07562de8 40 #include <limits>
pepperu96 5:2dce07562de8 41 #include "mbed.h"
pepperu96 5:2dce07562de8 42
pepperu96 5:2dce07562de8 43 /**
pepperu96 5:2dce07562de8 44 * Static dimensioned deep neural network without dynamic allocation
pepperu96 5:2dce07562de8 45 */
pepperu96 5:2dce07562de8 46 class DeepNeuralNetwork {
pepperu96 5:2dce07562de8 47 //private:
pepperu96 5:2dce07562de8 48 public:
pepperu96 5:2dce07562de8 49 float conv2d_output[CONV2D_OUTPUT_SIZE][CONV2D_OUTPUT_SIZE];
pepperu96 5:2dce07562de8 50 float maxpool_output[MAX_POOL_OUTPUT_SIZE][MAX_POOL_OUTPUT_SIZE];
pepperu96 5:2dce07562de8 51 float flatten_output[FLATTEN_OUTPUT_SIZE];
pepperu96 5:2dce07562de8 52 float dense_output[DENSE_OUTPUT_SIZE];
pepperu96 5:2dce07562de8 53
pepperu96 5:2dce07562de8 54 float leaky_relu(float x);
pepperu96 5:2dce07562de8 55
pepperu96 5:2dce07562de8 56 void conv2d(const float input[][CONV2D_INPUT_SIZE], const float kernel[][CONV2D_SIZE], float output[][CONV2D_OUTPUT_SIZE]);
pepperu96 5:2dce07562de8 57 void maxpool2d(const float input[][MAX_POOL_INPUT_SIZE], float output[][MAX_POOL_OUTPUT_SIZE]);
pepperu96 5:2dce07562de8 58 void flatten(const float input[][FLATTEN_INPUT_SIZE], float *output);
pepperu96 5:2dce07562de8 59 void dense(const float *input, float *output);
pepperu96 5:2dce07562de8 60
pepperu96 5:2dce07562de8 61 static char label_to_char(int label);
pepperu96 5:2dce07562de8 62 //public:
pepperu96 5:2dce07562de8 63 DeepNeuralNetwork();
pepperu96 5:2dce07562de8 64
pepperu96 5:2dce07562de8 65 int inference(const int image[][INPUT_IMAGE_SIZE]);
pepperu96 5:2dce07562de8 66
pepperu96 5:2dce07562de8 67 };
pepperu96 5:2dce07562de8 68
pepperu96 5:2dce07562de8 69
pepperu96 5:2dce07562de8 70 #endif //LOWPOWERNEURALNETWORK_DEEPNEURALNETWORK_H
pepperu96 5:2dce07562de8 71