基于SoC FPAG实现手写体识别(HLS编译的全连接算子)

基于SoC FPAG实现手写体识别(HLS编译的全连接算子)

由于流程过多,这里采用pdf文件下载的方式

点击操作手册下载

链接:

https://pan.baidu.com/s/1bG7SiEfTkkltgvKRacuThg
提取码:3333

完整代码:

根据手册来操作

1.HLS的代码

#include "HLS/hls.h"
#include <stdio.h>

#include "input_0.h"
#include "input_1.h"
#include "input_2.h"
#include "input_3.h"
#include "input_4.h"
#include "input_5.h"
#include "input_6.h"
#include "input_7.h"
#include "input_8.h"
#include "input_9.h"
#include "layer1_weight.h"
#include "layer1_bais.h"
#include "layer2_weight.h"
#include "layer2_bais.h"

#define IMG_SIZE 784
#define WEIGTH1_ROW 784
#define WEIGHT1_COL 64
#define WEIGHT2_ROW 64 
#define WEIGHT2_COL 10

hls_avalon_slave_component
component int full_connect(
    hls_avalon_slave_memory_argument(784*sizeof(float)) float *img_pixel,
    hls_avalon_slave_memory_argument(784*64*sizeof(float)) float *weight1,
    hls_avalon_slave_memory_argument(64*sizeof(float)) float *bais1,
    hls_avalon_slave_memory_argument(64*10*sizeof(float)) float *weight2,
    hls_avalon_slave_memory_argument(10*sizeof(float)) float *bais2
    )
{
   
    int ret,i,j;
    static float a1[WEIGHT1_COL];
    static float a2[WEIGHT2_COL];
    float tmp=0.0;
    for(i=0;i<WEIGHT1_COL;i++)
    {
   
        a1[i]=0.0f;
        for(j=0;j<WEIGTH1_ROW;j++)
        {
   
            a1[i] = a1[i] + img_pixel[j]*weight1[i+WEIGHT1_COL*j] ;
        }
        //加偏置 
        a1[i] = a1[i] + bais1[i];
        //再激活relu
        a1[i] = a1[i] > 0 ? a1[i]:0.0;
    }
    
    for(i=0;i<WEIGHT2_COL;i++)
    {
   
        a2[i] = 0.0f;
        for(j=0;j<WEIGHT2_ROW;j++)
        {
   
            a2[i] = a2[i] + a1[j]*weight2[i+WEIGHT2_COL*j];
        }
        //加偏置
        a2[i] = a2[i] + bais2[i];
        if(a2[i]>tmp)
        {
   
            tmp = a2[i];
            ret = i;
        }
    }
    
    return ret;
}

int main()
{
   
    int ret;
    // float *imgx[10]={
   
    //     input_0,
    //     input_1,
    //     input_2,
    //     input_3,
    //     input_4,
    //     input_5,
    //     input_6,
    //     input_7,
    //     input_8,
    //     input_9
    // };
    
    //for(int i=0;i<10;i++)
    //{
   
        ret = full_connect(input_9,layer1_weight,layer1_bais,layer2_weight,layer2_bais);
        printf("ret:%d\n",ret);
        
    //}
    return 0;
}

2.SoC EDS 中 eclipse 测试代码:

/*
 * main.c
 *
 *  Created on: 2021年10月11日
 *      Author: awcloud
 */

//1.导入头文件
//2.接口定义(结构体的方式)
//3.定义初始化函数
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值