半精确是什么?
本视频介绍了半精度或float16的概念,这是一种相对较新的浮点数据。它可以用来减少一半的内存使用,并在加速深度学习训练和推理方面变得非常流行。我们还研究了传统控制应用程序相对于传统的32位单精度或64位双精度数据类型的优点和优缺点。
半精度或float16是一种使用16位的相对较新的浮点数据类型,与传统的32位单精度或64位双精度数据类型不同。
所以,当你在MATLAB中声明一个变量为1 / 2时,比如数字pi,与我们在这里看到的单或双表示相比,你可能会注意到精度的损失。
这种差异来自于一半精度所使用的比特数有限。我们只有10位的精度和5位的指数而不是23位的精度和8位的指数。因此,eps要大得多,而且动态范围也有限。
那么为什么这很重要呢?Half最近的流行是因为它在加速深度学习训练和推理方面的有用性,主要是在NVIDIA gpu上的文章中强调的。此外,英特尔和ARM平台也都支持half加速计算。
使用一半精度的明显好处是减少内存和减少50%的数据带宽,就像我们在Resnet50中看到的那样。此外,硬件供应商还为计算提供硬件加速,例如NVIDIA gpu中的CUDA intrinsic。
我们看到传统的应用程序,如动力总成控制系统,也在做同样的事情,其中可能有查找表形式的数据,如图所示。通过使用half作为存储类型,可以将这个2D查找表的内存占用减少4倍。
然而,了解有限精度和半精度范围之间的权衡是很重要的。例如,在深度学习网络的情况下,量化误差是10^-4的数量级,人们必须分析这是如何影响网络的整体精度的。
这是对半精确的一个简短介绍。请参考下面的链接,以了解更多关于如何在MATLAB和Simulink中模拟和生成C/ c++或CUDA代码。
您也可以从以下列表中选择一个网站:
如何获得最佳的网站性能
选择中国站点(中文或英文)以获得最佳站点性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。