从浮点数 32 到 浮点数 16 的 numpy 类型



我想知道 numpy 如何从 float32 转换为 float16,因为当我使用 astype 将 8193 这样的数字从 float32 转换为 float16 时,它将输出 8192,而 float32 的 10000 转换为 float16 的 10000

import numpy as np
a = np.array([8193], dtype=np.float32)
b = a.astype(np.float16)

IEEE 754-2008 16 位基数 2 格式(又名二进制 16)不能为您提供很多精度。您对 16 位的期望是什么?:)1 位是符号位,5 位用于指数,剩下 10 位来存储归一化的 11 位尾数,因此 2**11 == 2048>任何内容都必须量化。

根据维基百科,4097 到 8192 之间的整数舍入为 4 的倍数,8193 和 16384 之间的整数舍入为 8 的倍数。

Tensorflow 需要 float16 并产生 float32 的错误。您可以使用 Reti43 的建议:

np.float16(a)
Out[102]: array([8192.], dtype=float16)

我很惊讶一个无用的回复被如此高地投票。我知道版主要求将得票最高的答案标记为最佳答案,但问题作者没有义务这样做。有很多人只是在这里收集积分,并不关心实际回复请求。他们可能会以不同的名字投票。

最新更新