FP16(半精度):在 FP16 中,浮點數使用 16 位元表示。它由 1 個符號位、5 位指數和 10 位分數(尾數)組成。這種格式為表示其範圍內的小數值提供了更高的精度。
BF16 (BFloat16):BF16 也使用 16 位,但分佈不同。它有 1 個符號位、8 位指數、7 位尾數。這種格式犧牲了小數部分的一些精確度以適應更廣泛的指數。
FP16 由於其 10 位元尾數,其範圍較小,但在該範圍內精度較高。
BF16 由於其 8 位指數和 7 位尾數,其小數範圍較寬,但精度較低。
我們用3個例子來說明FP16和BF16的差別。使用TensorFlow來做測試和程式碼共享在底層:
原始值:0.0001 — 兩種方法都可以表示
FP16: 0.00010001659393 (二進位:0|00001|1010001659393 (二進位:0|00001|1010001110,E2 月:203 個指數:0
0.00010013580322 (二進位:0|01110001| 1010010,十六進位:38D2) — 7 個尾數和8 個指數
如您所見,它們具有不同的指數和尾數,因此能夠表示不同的值。
原始值:1e-08(0.00000001)
FP16:0.00000000000000(二進位:0|00000|0000000000,十六進位:0000) 1100100|0101100,十六進位: 322C)
這是一個非常有趣的案例。
FP16 失敗
原始值:100000.00001
FP16:inf(二進位:0|11111|0000000000,十六進位:7C00)BF16:99840.0001001001001001001001001010010100100100100100100100100100100100100100100100100122220100100100100100100100122010010010201001001220100100301001001012220100101201012。 1,十六進位:47C3)
在上面的情況下,
FP16 失敗
用例:
總結一下
最終結論
雷雷
以上是FP和BF有什麼區別這裡給你很好的解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!