| #include "edge-impulse-sdk/classifier/ei_classifier_config.h" |
| #if EI_CLASSIFIER_TFLITE_LOAD_CMSIS_NN_SOURCES |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #include "edge-impulse-sdk/CMSIS/NN/Include/arm_nnfunctions.h" |
| #include "edge-impulse-sdk/CMSIS/NN/Include/arm_nnsupportfunctions.h" |
|
|
| |
| |
| |
|
|
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
|
|
| arm_cmsis_nn_status arm_fully_connected_s8(const cmsis_nn_context *ctx, |
| const cmsis_nn_fc_params *fc_params, |
| const cmsis_nn_per_tensor_quant_params *quant_params, |
| const cmsis_nn_dims *input_dims, |
| const q7_t *input, |
| const cmsis_nn_dims *filter_dims, |
| const q7_t *kernel, |
| const cmsis_nn_dims *bias_dims, |
| const int32_t *bias, |
| const cmsis_nn_dims *output_dims, |
| q7_t *output) |
| { |
| (void)bias_dims; |
| (void)ctx; |
| (void)fc_params->filter_offset; |
|
|
| int32_t batch_cnt = input_dims->n; |
|
|
| while (batch_cnt) |
| { |
| arm_nn_vec_mat_mult_t_s8(input, |
| kernel, |
| bias, |
| output, |
| fc_params->input_offset, |
| 0, |
| fc_params->output_offset, |
| quant_params->multiplier, |
| quant_params->shift, |
| filter_dims->n, |
| output_dims->c, |
| fc_params->activation.min, |
| fc_params->activation.max, |
| 1L); |
| input += filter_dims->n; |
| output += output_dims->c; |
| batch_cnt--; |
| } |
| return (ARM_CMSIS_NN_SUCCESS); |
| } |
|
|
| int32_t arm_fully_connected_s8_get_buffer_size(const cmsis_nn_dims *filter_dims) |
| { |
| (void)filter_dims; |
| return 0; |
| } |
|
|
| |
| |
| |
|
|
| #endif |
|
|