【问题标题】:Reduce mantissa bit-width减少尾数位宽
【发布时间】:2013-10-17 15:38:52
【问题描述】:

好吧,我很尴尬,我自己不能得到这个,但是..
我怎样才能减少尾数(和指数)位-with 表示浮点数?


我正在训练一个(卷积)人工神经网络(我正在 FPGA 上实现它),我想研究尾数(和指数)位宽与测试(和训练)精度之间的关系CPU(和 GPU)。下一步是将我的浮点数转换为定点表示(这就是我在 FPGA 上使用的),然后看看情况如何。

其他人已经做过类似的研究([Tong, Rutenbar and Nagle (1998)] 和 [Leeser and Zhao (2003)]),所以应该有一种方法可以做到这一点,尽管“如何”我还不清楚。

最后一点,我正在使用 Lua 进行编程,但我可以轻松地将 C 内容包含在 LuaJIT 的 ffi 中。

【问题讨论】:

    标签: floating-point neural-network fixed-point exponent mantissa


    【解决方案1】:

    要从二进制浮点数 x 的有效位中删除 s 位并舍入剩余位,请使用 Veltkamp 算法:

    Let factor = 2**s + 1.
    Let c = factor * x.
    Let y = c - (c-x).
    

    上面的每个操作都应该用浮点算法计算,包括以与 x 相同的精度舍入到最近。那么y就是想要的结果。

    请注意,这会将单个数字四舍五入为较短的有效位。它通常不会重现具有较短有效位的计算结果。例如,给定 ab,以更高的精度计算 ab 然后四舍五入到更小的精度不会总是与以最终精度计算 ab 的结果相同。

    要减小指数范围,您只需将一个值与新指数范围的阈值进行比较,并根据需要声明下溢或上溢。

    【讨论】:

    • 非常感谢。这将是很好的考虑,因为现在我只是在点之后的特定位截断我的浮点数 (number:mul(2^b):floor():div(2^b))因为我们仍在使用静态定点数。明年我们可能会切换到动态定点,然后我将处理尾数:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多