深度学习中的激活函数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的学习我也会一直坚持下去。加油!
上次我们将SoftMax函数进行了简单的分析,发现算法的实现第一个难点就是如何实现指数函数。这次我打算囫囵吞枣的来简述一下指数函数的实现。
在最初思考如何去实现指数函数的时候,脑海中有两种思路,一是使用MATLAB对指数函数进项采样,再以自变量值位地址位(假设地址位共8位,自变量值位高四位,所以每个数据就会有8位的字长),函数值为存储数据存储进ROM中。这样每次函数值的调用就是对ROM中的数值的读取过程。
二就是使用CORDIC算法来实现指数函数。这种办法只使用旋转和移位的操作来实现指数函数。
综合以上的两种思路,初步希望使用CORDIC算法来实现指数函数,后期如果有时间的话会使用ROM来实现一下看资源使用率和最长路径时间会不会有巨大的差距。
既然决定使用CORDIC算法来实现指数函数,首先我们要对CORDIC算法有一个初步的认识。CORDIC算法全称为坐标旋转计算法,是一个“化繁为简”的算法,将许多复杂的运算转化为一种“仅需要移位和加法”的迭代操作。他经常被使用的计算公式
在公式的原理方面我就不在进行解释了,(在这推荐一个博客:https://www.cnblogs.com/rouwawa/p/7101468.html,对算法的解释很详细。)由于他的原理并不是我们一篇的篇幅就可以讲清楚的。我们使用状态机来实现该算法的迭代要求,在每次迭代计算后与目标进行比对,以此来确定下一次的移动的是进行左移还是右移。
在我们实现的时候,就可以在一个状态机中来实现每次逼近,并且在状态和逼近的时候的2的幂(实际上就是左移的位数)是有固定差的。但是如果是用这种方法的话,最大缺点就是速度过慢。你希望得到的数据越精确,则需要的翻转次数越多,所需要的时间也就越大。如果可以的话,我们可以使用流水线的方式来实现。
关于指数函数的部分我们就简单的说这么多了。
今年就要考研了,最近也一直在复习,可能整个一年更新博客的频率也会慢一些。但是FPGA的学习我也会一直坚持下去。加油!
相关文章推荐
- 深度学习中的激活函数SoftMax函数的FPGA设计与实现 (一)
- 深度学习笔记7:激活函数层的实现
- 神经网络与深度学习 笔记4 交叉熵代价函数 softmax函数
- 深度学习FPGA实现基础知识3(Altera与百度展开合作在云数据中心使用FPGA加速)
- 深度学习FPGA实现基础知识12(CSDN网友--深度学习总结)
- 深度学习FPGA实现基础知识8(Deep Learning(深度学习)Matlab实现--简单清晰的实验)
- 深度学习FPGA实现基础知识9(Deep Learning(深度学习)Matlab工具箱下载、安装、测试)
- 深度学习FPGA实现基础知识4(Mariana——腾讯深度学习平台的进展与应用)
- 深度学习/神经神经网络常用激活函数总结
- The Activation Function in Deep Learning 浅谈深度学习中的激活函数
- 深度学习FPGA实现基础知识16(图像处理中任意核卷积(matlab中conv2函数)的快速实现)
- 深度学习激活函数
- 关于深度学习中激活函数的思考总结(转载+原创)
- 深度学习中的激活函数导引
- 深度学习FPGA实现基础知识19(通过文件读写方式实现Matlab和Modelsim的联合仿真)
- 深度学习FPGA实现基础知识1(网友关于FPGA机器学习想法)
- 深度学习FPGA实现基础知识11(向专家致敬--吴恩达)
- 深度学习FPGA实现基础知识6(Deep Learning(深度学习)学习资料大全及CSDN大牛博客推荐)
- 深度学习FPGA实现基础知识20(FPGA小数运算--DSP基础“定点小数运算”)
- 深度学习FPGA实现基础知识7(深度学习Matlab工具箱代码详解)