完善代码
This commit is contained in:
@@ -41,7 +41,6 @@ float* expand(const float* old_matrix, int old_matrix_length, int layer){
|
||||
//c_rl <20><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>ı߳<C4B1><DFB3><EFBFBD>100
|
||||
//<2F><><EFBFBD>ؾ<EFBFBD><D8BE><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
|
||||
float* convolution(Model model_w, Model model_b, const float* input_matrix, int input_matrix_length){
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ\r\n");
|
||||
// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
int im_l = input_matrix_length;
|
||||
int cr_l = input_matrix_length - 2;
|
||||
@@ -97,7 +96,6 @@ float* convolution(Model model_w, Model model_b, const float* input_matrix, int
|
||||
}
|
||||
myfree(SRAMEX,_conv_rlst);
|
||||
_conv_rlst = NULL;
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
|
||||
return conv_rlst;
|
||||
}
|
||||
|
||||
@@ -176,10 +174,6 @@ float* output(const float* input_matrix){
|
||||
float *affine2_rslt = (float *) mymalloc(SRAMEX,sizeof(float)*7);
|
||||
memset(affine2_rslt, 0, sizeof(float)*7);
|
||||
|
||||
// <20>Ƚ<EFBFBD><C8BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
float temp = -100; // <20><><EFBFBD>ڴ洢<DAB4><E6B4A2><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ϊһ<CEAA><D2BB><EFBFBD>dz<EFBFBD>С<EFBFBD><D0A1>ֵ
|
||||
int predict_num; // <20><><EFBFBD>ڴ洢Ԥ<E6B4A2><D4A4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֣<EFBFBD><D6A3><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
// <20><><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
for(int n=0; n<7; n++)
|
||||
{
|
||||
@@ -194,18 +188,8 @@ float* output(const float* input_matrix){
|
||||
// <20><><EFBFBD>϶<EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>ƫ<EFBFBD><C6AB>
|
||||
affine2_temp = affine2_temp + fc2_weight.array[n];
|
||||
affine2_rslt[n] = affine2_temp; // <20>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD>
|
||||
|
||||
// Ѱ<><D1B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
if(temp <= affine2_rslt[n])
|
||||
{
|
||||
temp = affine2_rslt[n]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
predict_num = n; // <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
|
||||
print_rslt(affine2_rslt,7,7);
|
||||
printf("Label is:%d\r\n",predict_num+1);
|
||||
|
||||
return affine2_rslt;
|
||||
}
|
||||
|
||||
@@ -272,74 +256,123 @@ float* generateMatrix(Model model, const float* value)
|
||||
return CNN_data;
|
||||
}
|
||||
|
||||
float calculate_probabilities(float *input_array)
|
||||
{
|
||||
float sum = 0;
|
||||
u8 input_num = 7;
|
||||
float *result = (float *) mymalloc(SRAMEX,sizeof(float)*input_num);
|
||||
memset(result, 0, sizeof(float)*input_num);
|
||||
|
||||
float *temp = (float *) mymalloc(SRAMEX,sizeof(float)*input_num);
|
||||
memset(temp, 0, sizeof(float)*input_num);
|
||||
|
||||
for (int i = 0; i < input_num; i++)
|
||||
{
|
||||
temp[i] = expf(input_array[i]);
|
||||
sum = sum + temp[i];
|
||||
}
|
||||
for (int j = 0; j < input_num; j++)
|
||||
{
|
||||
result[j] = temp[j] / sum;
|
||||
if(isnan(result[j]))result[j] = 1;
|
||||
}
|
||||
|
||||
int max_index = 0;
|
||||
float max_value = result[0];
|
||||
for (int k = 1; k < input_num; k++)
|
||||
{
|
||||
if (result[k] > max_value)
|
||||
{
|
||||
max_value = result[k];
|
||||
max_index = k;
|
||||
}
|
||||
}
|
||||
|
||||
float _tmp = result[max_index] * 100;
|
||||
myfree(SRAMEX,temp);
|
||||
temp = NULL;
|
||||
myfree(SRAMEX,result);
|
||||
result = NULL;
|
||||
return _tmp;
|
||||
}
|
||||
|
||||
|
||||
u8 calculate_layer(float *input_array){
|
||||
u8 input_num = 7;
|
||||
u8 predict_num = 0;
|
||||
float max_temp = -100;
|
||||
for(int n=0; n<input_num; n++)
|
||||
{
|
||||
if(max_temp <= input_array[n])
|
||||
{
|
||||
max_temp = input_array[n]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
|
||||
predict_num = n; // <20><>¼<EFBFBD><C2BC><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
}
|
||||
}
|
||||
//print_rslt(input_array,7,7);
|
||||
return predict_num+1;
|
||||
}
|
||||
|
||||
|
||||
void cnn_run(){
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼCNN\r\n");
|
||||
float value[3] = {0};
|
||||
calculate_statistics(data,&value[0]);
|
||||
if (check_threshold(data,&value[0])){
|
||||
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100 * 100 <20><><EFBFBD><EFBFBD>
|
||||
float* _data = generateMatrix(data,&value[0]);
|
||||
send_blocks(_data);
|
||||
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>\r\n");
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ磡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:%f ƽ<><C6BD>ֵ:%f <20><><EFBFBD><D7BC>:%f\r\n",value[0],value[1],value[2]);
|
||||
char* _uuid = uuid();
|
||||
send_blocks(_data,_uuid);
|
||||
|
||||
//<2F><>һ<EFBFBD>㣺<EFBFBD><E3A3BA><EFBFBD><EFBFBD>102 * 102
|
||||
float* expand_matrix_1 = expand(_data, 100, 1);
|
||||
float* conv_rlst_1 = convolution(conv1_weight,conv1_bias,expand_matrix_1, 102);
|
||||
float* pool_rslt_1 = pooling(conv1_weight, conv_rlst_1, 100);
|
||||
|
||||
{
|
||||
myfree(SRAMEX,_data);
|
||||
_data = NULL;
|
||||
myfree(SRAMEX,expand_matrix_1);
|
||||
expand_matrix_1 = NULL;
|
||||
myfree(SRAMEX,conv_rlst_1);
|
||||
conv_rlst_1 = NULL;
|
||||
}
|
||||
|
||||
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD>ڶ<EFBFBD><EFBFBD><EFBFBD>\r\n");
|
||||
//<2F>ڶ<EFBFBD><DAB6>㣺<EFBFBD><E3A3BA><EFBFBD><EFBFBD>32 * 52 * 52
|
||||
float* expand_matrix_2 = expand(pool_rslt_1, 50, 32);
|
||||
float* conv_rlst_2 = convolution(conv2_weight,conv2_bias,expand_matrix_2, 52);
|
||||
float* pool_rslt_2 = pooling(conv2_weight, conv_rlst_2, 50);
|
||||
|
||||
{
|
||||
myfree(SRAMEX,pool_rslt_1);
|
||||
pool_rslt_1 = NULL;
|
||||
myfree(SRAMEX,expand_matrix_2);
|
||||
expand_matrix_2 = NULL;
|
||||
myfree(SRAMEX,conv_rlst_2);
|
||||
conv_rlst_2 = NULL;
|
||||
}
|
||||
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
|
||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>㣺<EFBFBD><E3A3BA><EFBFBD><EFBFBD> 64 * 27 * 27
|
||||
float* expand_matrix_3 = expand(pool_rslt_2, 25, 64);
|
||||
float* conv_rlst_3 = convolution(conv3_weight,conv3_bias,expand_matrix_3, 27);
|
||||
float* pool_rslt_3 = pooling(conv3_weight, conv_rlst_3, 25);
|
||||
|
||||
{
|
||||
myfree(SRAMEX,pool_rslt_2);
|
||||
pool_rslt_2 = NULL;
|
||||
myfree(SRAMEX,expand_matrix_3);
|
||||
expand_matrix_3 = NULL;
|
||||
myfree(SRAMEX,conv_rlst_3);
|
||||
conv_rlst_3 = NULL;
|
||||
}
|
||||
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD>\r\n");
|
||||
float* affine1_rslt = hidden(pool_rslt_3);
|
||||
|
||||
DEBUG_PRINTF("<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>\r\n");
|
||||
float* affine2_rslt = output(affine1_rslt);
|
||||
|
||||
{
|
||||
printf("<EFBFBD><EFBFBD><EFBFBD>ʣ<EFBFBD>%f\r\n",calculate_probabilities(affine2_rslt));
|
||||
printf("Label is:%d\r\n",calculate_layer(affine2_rslt));
|
||||
|
||||
myfree(SRAMEX,pool_rslt_3);
|
||||
pool_rslt_3 = NULL;
|
||||
myfree(SRAMEX,affine1_rslt);
|
||||
affine1_rslt = NULL;
|
||||
myfree(SRAMEX,affine2_rslt);
|
||||
affine2_rslt = NULL;
|
||||
}
|
||||
|
||||
} else{
|
||||
printf("δ<EFBFBD>ŵ磡<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ:%f ƽ<><C6BD>ֵ:%f <20><><EFBFBD><D7BC>:%f\r\n",value[0],value[1],value[2]);
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
#include "tools.h"
|
||||
|
||||
|
||||
|
||||
void send_blocks(float* arr){
|
||||
char uuid_str[9];
|
||||
char* uuid(){
|
||||
static char uuid_str[9];
|
||||
u32 time_stamp = HAL_GetTick();
|
||||
u32 random_part = rand();
|
||||
snprintf(uuid_str, 9, // 16 λ UUID<49><44>8 <20><><EFBFBD>ַ<EFBFBD> + <20><><EFBFBD><EFBFBD>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD>
|
||||
@@ -11,6 +10,11 @@ void send_blocks(float* arr){
|
||||
(unsigned long)(time_stamp & 0xFFFF),
|
||||
(unsigned long)(random_part & 0xFFFF));
|
||||
|
||||
return uuid_str;
|
||||
}
|
||||
|
||||
|
||||
void send_blocks(float* arr, char* uuid_str){
|
||||
// <20><><EFBFBD>鴦<EFBFBD><E9B4A6> ÿ<><C3BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢1000<30><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>
|
||||
char* block = (char*) mymalloc(SRAMEX,sizeof(char)*100*100);
|
||||
memset(block, 0 ,sizeof(char)*100*100);
|
||||
|
||||
@@ -2,5 +2,5 @@
|
||||
#include "debug.h"
|
||||
|
||||
|
||||
|
||||
void send_blocks(float* arr);
|
||||
char* uuid(void);
|
||||
void send_blocks(float* arr, char* uuid_str);
|
||||
|
||||
Reference in New Issue
Block a user