This commit is contained in:
Qiea
2024-11-11 11:19:11 +08:00
parent b91bb81d81
commit 034e3a5302

50
cnn.c
View File

@@ -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;
}