空闲时间使用Verilog写了LSTM神经网络数字手写识别的代码。只实现了功能,里面的乘法和加法直接使用了算数符号,按说是可以使用加法器和乘法器优化的,但是一来我并不是从业者,不知道在具体项目中怎么优化,二来也没时间改这东西,所以就这么着吧。我用几个图片跑了一下,能识别,但是有bug,有的时候识别结果超过了9,也就是说并不是识别错误,确实有bug,同样不想改了,这东西确实没有什么意义。没有在FPGA上跑,估计频率是上不去的,因为有着大量的组合逻辑,在路径上延迟很大,应该可以插入寄存器进行优化提升工作频率。另外,在乘法中,我估摸着不会溢出,所以直接粗暴的截位了,这也是潜藏的不稳定因素。
权重是我在TensorFlow环境下搭建网络训练的,隐藏层64,提取权重后使用MATLAB进行了定点化保存到TXT文件用作仿真,之后应该可以制作coe固定到rom中在FPGA上跑。测试图片也是读到文件中然后使用MATLAB转换成了TXT文件。
百度云
链接: https://pan.baidu.com/s/1YNwDLidttdANC7ZQInC6Ww 提取码: 3ia2
大概写一下,没什么技术含量。写的很粗糙,代码和博客都是。要是有人感兴趣,等我找到工作再试着改改。仿真结果如下所示,可以看到每一个识别的数字输出都有valid信号标志出来。
Verilog实现LSTM神经网络数字手写识别
于 2024-05-03 22:59:37 首次发布