mik*_*era 11
通常情况下,我会使用a double
,因为float
对于许多数字用例来说没有足够的准确性,并且性能差异小到不重要.
与往常一样,性能取决于实现,因此您需要对特定情况进行基准测试,以确定它是否"重要".
一般来说,我发现:
float
和a long
都适合64位机器字.通常没有差别.float
它有一点点优势,因为它们消耗更少的内存,这有助于降低CPU缓存压力.我发现在对大型阵列进行简单操作时浮动速度要快30-50%.nic*_*o_c 11
由于您的问题主要是关于性能,本文将向您介绍一些特定的计算(请记住,尽管本文特定于神经网络,您的计算可能与他们在文章中所做的完全不同):http: //web.archive.org/web/20150310213841/http://www.heatonresearch.com/content/choosing-between-java%E2%80%99s-float-and-double
链接中的一些相关材料在此处转载:
double和float都可以支持相对较大的数字.上下范围实际上不是神经网络的考虑因素.Float可以处理1.40129846432481707e-45到3.40282346638528860e + 38之间的数字......基本上,float可以处理大约7位小数.双精度可以处理大约16位小数.
矩阵乘法是神经网络编程最常用的数学运算之一.绝不是唯一的操作,但它将提供一个很好的基准.以下程序将用于对双精度进行基准测试.
跳过所有代码,网站上的表格显示,对于100x100矩阵乘法,如果他们使用双精度,他们的性能增益约为10%.对于500x100矩阵乘法,由于使用双精度而导致的性能损失约为7%.对于1000x1000矩阵乘法,该损失约为17%.
对于小型100x100矩阵,切换到浮点实际上可能会降低性能.随着矩阵的大小增加,增益百分比增加.使用非常大的矩阵,性能提升增加到17%.17%值得考虑.
归档时间: |
|
查看次数: |
10035 次 |
最近记录: |