@@ -25,31 +25,28 @@ License along with SensiML Piccolo AI. If not, see <https://www.gnu.org/licenses
2525
2626float results [NNOM_MAX_NUMBER_REULTS ];
2727
28- nnom_classifier_rows_t * nnom_classifier_rows ;
28+ nnom_classifier_rows_t * nnom_classifier_rows_table ;
2929float probability ;
3030int32_t label ;
3131
32- int last_nnom_initialized = 0 ;
33- nnom_model_t * model ;
32+ static bool last_nnom_initialized = false ;
33+
3434uint8_t nnom_simple_submit (uint8_t classifier_id , feature_vector_t * feature_vector , model_results_t * model_results )
3535{
3636 uint8_t y = 1 ;
3737 float max_result = 0 ;
38- feature_vector_data = (int8_t * )feature_vector -> data ;
38+ uint8_t * feature_vector_data = (uint8_t * )feature_vector -> data ;
3939
40- /*if (last_nnom_initialized != classifier_id)
41- {
42- model = nnom_model_create();
43- //nnom_classifier_rows[0].model=model
44- last_nnom_initialized = classifier_id;
40+ if (!last_nnom_initialized ){
41+ nnom_classifier_rows_table [classifier_id ].model = nnom_model_create ();
42+ last_nnom_initialized = true;
4543 }
46- */
47-
4844 for (int i = 0 ; i < feature_vector -> size ; i ++ ){
4945
50- nnom_input_data [i ]= feature_vector_data [i ]
46+ nnom_input_data [i ]= ( int8_t )(( int ) feature_vector_data [i ]- 127 );
5147 }
52- nnom_predict (nnom_classifier_rows [classifier_id ].model , & label , & probability );
48+
49+ nnom_predict (nnom_classifier_rows_table [classifier_id ].model , & label , results );
5350
5451
5552 // regression
@@ -58,39 +55,32 @@ uint8_t nnom_simple_submit(uint8_t classifier_id, feature_vector_t *feature_vect
5855 return (uint8_t )label ;
5956 }
6057
61- // classification
62- /*
58+
6359 max_result = results [0 ];
64- model_results->output_tensor->data[0] = (int16_t) results[0];
65- for (int32_t i = 1; i < nnom_classifier_rows [classifier_id].num_outputs; i++)
60+ model_results -> output_tensor -> data [0 ] = results [0 ];
61+ for (int32_t i = 1 ; i < nnom_classifier_rows_table [classifier_id ].num_outputs ; i ++ )
6662 {
6763 if (results [i ] > max_result )
6864 {
6965 max_result = results [i ];
7066 y = i + 1 ;
7167 }
72- model_results->output_tensor->data[i] = (int16_t) results[i];
68+ model_results -> output_tensor -> data [i ] = results [i ];
7369 }
7470
7571
76- if (max_result < nnom_classifier_rows [classifier_id].threshold)
72+ if (max_result < nnom_classifier_rows_table [classifier_id ].threshold )
7773 {
7874 model_results -> result = 0.0f ;
7975 return 0 ;
8076 }
8177
82- */
83- model_results -> result = (float )label ;
84-
85- return (float )label ;
78+ return (uint8_t )model_results -> result ;
8679}
8780
8881void nnom_init (nnom_classifier_rows_t * classifier_table , const uint8_t num_classifiers )
8982{
90- model = nnom_model_create ();
91- nnom_classifier_rows = classifier_table ;
92- nnom_classifier_rows [0 ].model = model ;
93- last_nnom_initialized = 0 ;
83+ nnom_classifier_rows_table = classifier_table ;
9484
9585}
9686
0 commit comments