利用Python训练模型,提取模型参数到C语言的头文件,C语言进行前向推理计算。
1.填充算子
有时我们还希望输入和输出的大小应该保持一致。为解决这个问题,可以在进行卷积操作前,对原矩阵进行边界填充,也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常都用“0”来进行填充的。
1.1多维数组实现
for (col=0;col<INPUT1;col++)
{
for (row=0;row<INPUT1;row++)
out1[col+PADDING1][row+PADDING1] = input_img[col][row];
}
填充一圈,多维数组容易操作,先初始化一个全零的二维数组,然后将数据进行对应替换,填充多圈类似。
1.2一维数组实现
for (int col=0;col<OUTPUT1;col++)
{
for (int row=0;row<OUTPUT1;row++)
{
if (col==0 || col==OUTPUT1-1)
{
out2[col*OUTPUT1+row] = 0.0;
}else
{
out2[col*OUTPUT1+row] = (row==0 || row==OUTPUT1-1) ? 0:img_pixels[(col-PADDING1)*INPUT1+row-PADDING1];
}
}
}
2.卷积算子
卷积神经网路中每层卷积层由若干卷积单元组成,每个卷积单元的参数都是通过反向传播算法优化得到的。卷积运算的目的是提取输入的不同特征,第一层卷积层可能只能提取一些低级的特征如边缘、线条和角等层级,更多层的网络能从低级特征中迭代提取更复杂的特征。
2.1多维数组实现
for (outChs=0;outChs<OUT_CHANNELS1;outChs++)
{
for (col=0;col<OUTPUT2;col