diff --git a/cnn.c b/cnn.c index fed1873..9564b17 100644 --- a/cnn.c +++ b/cnn.c @@ -49,9 +49,37 @@ float* convolution(Model model_w, Model model_b, const float* input_matrix, int for (int y = 0; y < 3; y++) { // 将输入图像的对应像素与卷积核权重相乘,并累加到conv_temp conv_temp += input_matrix[(c*im_l*im_l) + (row*(im_l)+col) + (x*(im_l)+y)] - * model_w.array[() + (x*3+y) + (k*3*3)]; + * model_w.array[((c+k*model_w.channel)*3*3) + (x*3+y)]; } } + _conv_rlst[(c*model_w.num_kernels*cr_l*cr_l) + (k*cr_l*cr_l) + (row*cr_l+col)] = conv_temp; + } + } + } + } + //合并子图 + { + for(int k=0; k < model_w.num_kernels; k++) { + for (int row = 0; row < cr_l; row++) { + for (int col = 0; col < cr_l; col++) { + for (int c = 0; c < model_w.channel; c++) { + conv_temp += _conv_rlst[(c * model_w.num_kernels * cr_l * cr_l) + (k * cr_l * cr_l) + (row * cr_l + col)]; + } + conv_rlst[(k * cr_l * cr_l) + (row * cr_l + col)] = conv_temp; + // 加上对应卷积核的偏置 + conv_temp += model_b.array[k]; + // 激活函数:ReLU(将小于0的值设为0) + if (conv_temp > 0) + conv_rlst[(k * (cr_l * cr_l)) + (row * cr_l) + (col)] = conv_temp; // 如果卷积结果大于0,存入结果数组 + else + conv_rlst[(k * (cr_l * cr_l)) + (row * cr_l) + (col)] = 0; // 否则存入0 + } + } + } + } + + + // if(model_w.channel>1){ // float sum=0; @@ -70,26 +98,6 @@ float* convolution(Model model_w, Model model_b, const float* input_matrix, int // } // _debug++; - // 加上对应卷积核的偏置 - conv_temp += model_b.array[k]; - // 激活函数:ReLU(将小于0的值设为0) - if (conv_temp > 0) - conv_rlst[(k * (cr_l * cr_l)) + (row * cr_l) + (col)] = conv_temp; // 如果卷积结果大于0,存入结果数组 - else - conv_rlst[(k * (cr_l * cr_l)) + (row * cr_l) + (col)] = 0; // 否则存入0 - } - } - } - - - - - - - - } - - return conv_rlst; }