基于PYNQ实现LeNet(3)仿真验证

        在前篇文章中在HLS上完成了LeNet的编写,编写完lenet后,要确保网络的功能正确就需要仿真测试,在HLS上可以使用c语言仿真验证代码。

        在验证之前,要在matlab上跑一遍正确的结果,以及把网络的权重转成.h头文件导入HLS工程文件夹下。选择使用matlab的原因是它用于数据处理非常的方便。也可以直接用python搭建这个lenet网络,并获得对应权重数据。

        以上为卷积层仿真验证,其他层的验证以此类推。

        在HLS上写好test_bench,接下来要将权重数据导入工程。打开matlab,将数据放到工作区,开始编写代码

 代码如下

         以上是将权重转为头文件的代码,这里需要注意一个问题,matlab读取权重数据是列优先的,而c语言读头文件是行优先的,所以对于二维的权重数据,要先将其转置再处理,四维权重数据要使用permute函数交换各维度,四维要将维度变为4321,即第一第四维度交换,第二第三维度交换,因为matlab当中是以个数、通道数、行、列来存四维权重数据的,我们要将其变为列、行、通道数、个数,这样通过头文件读取的权重才是正确的,当然这个问题只在使用matlab导出权重数据才需要考虑。

        

         以上为将28x28图片转为头文件的代码,记得将数据转置后处理,测试图片可以打开电脑的画图软件自己画,只要是28x28的黑底白字图片即可,格式为bmp图片。

        将导出的权重数据头文件和图片头文件放到与工程源文件,测试文件同一文件夹下。接下来就可以开始仿真,点击HLS中的Run C Simulation,即可开始仿真

                           

        仿真结果与matlab中对比无误,然后就可以继续对全连接层和整个lenet网络进行仿真测试。

        下篇文章会对代码中的约束优化进行总结

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值