C语言实现CNN的前向推理

C语言实现CNN的前向推理1.填充算子1.1多维数组实现1.2一维数组实现2.卷积算子2.1多维数组实现2.2一维数组实现3.池化算子3.1多维数组实现3.2一维数组实现4.全连接算子1.填充算子有时我们还希望输入和输出的大小应该保持一致。为解决这个问题,可以在进行卷积操作前,对原矩阵进行边界填充,也就是在矩阵的边界上填充一些值,以增加矩阵的大小,通常都用“0”来进行填充的。1.1多维数组实现for (col=0;col<INPUT1;col++) { for (row
摘要由CSDN通过智能技术生成

  利用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
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值