1

我正在为神经网络编写代码,我想知道是否应该这样做。我实际上有点担心,即使使用 double 也可能不会产生好的结果,并且我可能不得不将我的代码迁移到更高效的语言,比如 c++。我在这里读到一个问题,BigDecimal 比 double 慢 1000 倍?好多啊。

另一方面,我将大量使用十进制数字,让它更精确总是好的。我也无法确定精度是否会导致问题。我不认为我见过的任何实现都可以做到这一点,所以我可能不会这样做。尽管有时网络并没有表现出应有的行为;我不确定这是精度错误还是逻辑问题。

但我想知道,你们在处理金钱时只使用 BigDecimal 吗?对此有什么想法吗?

4

6 回答 6

4

double在神经网络中使用 Java 的数据类型作为权重似乎非常合适。它是工程和科学应用的不错选择。

神经网络本质上是近似的。的精度BigDecimal在此应用程序中毫无意义,性能影响除外。主要BigDecimal用于金融应用。

于 2009-12-29T05:24:28.020 回答
0

我在处理金钱时使用整数/长整数,因为使用任何类型的十进制表示都是荒谬的。您绝对不应该使用双打,并且您可能想查看一些货币处理库。

然而,我记得,货币图书馆还不成熟或不发达。

于 2009-12-29T04:17:29.077 回答
0

整数和小数值的整数,结合货币,是要走的路。要么找一个图书馆,要么自己写。

于 2009-12-29T04:25:20.527 回答
0

您绝对不应该将浮点十进制数用于定点金额 - 例如货币。

在过去,我使用了一个自定义的 Money 类,它只包装了一个 BigDecimal 实例——它运行良好并且没有任何问题。

于 2009-12-29T05:11:16.407 回答
0

人们只是将BigDecimal/BigInteger用于金钱。相反,他们将它们用于需要比使用doubleor更精确的应用程序中long

当然,使用BigDecimalandBigInteger是以更慢的算术运算为代价的。例如,大数加法是数字O(N)N的有效位数,乘法是O(N**2)

因此,决定是否使用long/double或它们的“大”类似物的方法是查看您的应用程序真正需要多少精度。货币应用程序确实需要能够在不损失一分钱的情况下代表价值。其他应用对精度同样敏感。

但坦率地说,我不认为神经网络应用程序需要 13 位十进制数字的精度。您的网络无法正常运行的原因可能与精度无关。IMO,这更可能与“真正的”神经网络并不总是表现得像他们应该的方式有关。

于 2009-12-29T09:42:22.123 回答
-1

做你自己的基准并以此为基础做出决定......这意味着“人们所说的”。

于 2009-12-29T05:16:02.763 回答