您的位置:首页 > 其它

深度学习中的激活函数SoftMax函数的FPGA设计与实现(二)(CORDIC)

2018-03-23 17:53 1351 查看
这次我们来继续设计我们的SoftMax函数实现。
上次我们将SoftMax函数进行了简单的分析,发现算法的实现第一个难点就是如何实现指数函数。这次我打算囫囵吞枣的来简述一下指数函数的实现。
在最初思考如何去实现指数函数的时候,脑海中有两种思路,一是使用MATLAB对指数函数进项采样,再以自变量值位地址位(假设地址位共8位,自变量值位高四位,所以每个数据就会有8位的字长),函数值为存储数据存储进ROM中。这样每次函数值的调用就是对ROM中的数值的读取过程。
二就是使用CORDIC算法来实现指数函数。这种办法只使用旋转和移位的操作来实现指数函数。
综合以上的两种思路,初步希望使用CORDIC算法来实现指数函数,后期如果有时间的话会使用ROM来实现一下看资源使用率和最长路径时间会不会有巨大的差距。
既然决定使用CORDIC算法来实现指数函数,首先我们要对CORDIC算法有一个初步的认识。CORDIC算法全称为坐标旋转计算法,是一个“化繁为简”的算法,将许多复杂的运算转化为一种“仅需要移位和加法”的迭代操作。他经常被使用的计算公式





在公式的原理方面我就不在进行解释了,(在这推荐一个博客:https://www.cnblogs.com/rouwawa/p/7101468.html,对算法的解释很详细。)由于他的原理并不是我们一篇的篇幅就可以讲清楚的。我们使用状态机来实现该算法的迭代要求,在每次迭代计算后与目标进行比对,以此来确定下一次的移动的是进行左移还是右移。
在我们实现的时候,就可以在一个状态机中来实现每次逼近,并且在状态和逼近的时候的2的幂(实际上就是左移的位数)是有固定差的。但是如果是用这种方法的话,最大缺点就是速度过慢。你希望得到的数据越精确,则需要的翻转次数越多,所需要的时间也就越大。如果可以的话,我们可以使用流水线的方式来实现。
关于指数函数的部分我们就简单的说这么多了。

今年就要考研了,最近也一直在复习,可能整个一年更新博客的频率也会慢一些。但是FPGA的学习我也会一直坚持下去。加油!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  深度学习 FPGA softmax
相关文章推荐