• FP16\FP32\INT8\混合精度的含义


    FP32 单精度浮点数,用8bit 表示指数,23bit 表示小数,占用4字节;

    FP16半精度浮点数,用5bit 表示指数,10bit 表示小数,占用2字节;

    INT8,八位整型占用1个字节,INT8是一种定点计算方式,代表整数运算,一般是由浮点运算量化而来。在二进制中一个“0”或者“1”为一bit,INT8则意味着用8bit来表示一个数字。因此,虽然INT8比FP16精度低,但是数据量小、能耗低,计算速度相对更快,更符合端侧运算的特点;

    混合精度:简单的讲就是使用fp16进行乘法和存储,只使用fp32进行加法操作,避免累加误差;

    在数据表示范围上,FP32和BF16 表示的整数范围是一样的,小数部分表示不一样,存在舍入误差;FP32和FP16 表示的数据范围不一样,在大数据计算中,FP16存在溢出风险。

    以下为int8范围为何是-128 至 127的解释

    int8占1个字节,1字节(byte)占8位(bit)
     
    其中最高位代表符号位 1-负号;0-正号
     
    那么最大数值的二进制为:
    0 1 1 1 1 1 1 1
    换算成10进制为 从低位到高位开始计算
    0       1       1       1       1       1       1       1
    0*2^7 + 1*2^6 + 1*2^5 + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 + 1*2^0
    0     + 64    + 32    + 16    + 8     + 4     + 2     + 1
    = 127
     
    最小数值的二进制应与最大数值相反
    1 0 0 0 0 0 0 0
    换算成10进制为 从低位到高位开始计算
    1       0       0       0       0       0       0       0
    1*2^7 + 0*2^6 + 0*2^5 + 0*2^4 + 0*2^3 + 0*2^2 + 0*2^1 + 0*2^0
    128   + 0     + 0     + 0     + 0     + 0     + 0     + 0
    = 128
     
     
     
    其实还有一种很好理解的解释
    1.int8占1个字节(byte) 也就是8个二进制位(bit)
    2.每个二进制位 可以存储0 和 1 两个数 ,8个二进制位就有2^8 = 256种组合(可以存储256个数)
    3.int8为有符号,所以正数和负数将平分256个数。256 / 2 = 128
    4.负数为128个数 最小值为-128
    5.正数为128个数,0占一个数 最大值为+127
     
    如果是uint8(8bit无符号-没有负数) 2^8 = 256
    0 占一个数 ,所以最大是255

  • 相关阅读:
    【学生网页设计作品 】关于HTML公益主题网页设计——谨防电信诈骗网
    C 多维数组
    c语言练习10周(11~15)
    Django中的缓存
    Java 如何借助InputStream读取网络图片呢?
    【操作系统】文件管理(一)—— 文件管理的概述
    Three.js 进阶之旅:物理效果-3D乒乓球小游戏 🏓
    linux系统基本配置
    JS实现对用户名、密码进行正则表达式判断,网页跳转
    sqlite 操作记录。
  • 原文地址:https://blog.csdn.net/pangxing6491/article/details/126760421