numpy astype从float32到float16

xytpbqjk  于 2023-08-05  发布在  其他
关注(0)|答案(2)|浏览(167)

我想知道numpy是如何从float32转换为float16的,因为当我使用astype从float32转换为float16时,它会输出8192,而float32的10000转换为float16的10000。

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

字符串

bnlyeluc

bnlyeluc1#

IEEE 754-2008 16位base 2格式,也就是binary 16,并没有给予很高的精度。你对16比特有什么期望?:)1位是符号位,5位用于指数,并且留下10位来存储归一化的11位尾数,因此任何> 2**11 == 2048都必须被量化。
根据Wikipedia,4097到8192之间的整数舍入为4的倍数,8193到16384之间的整数舍入为8的倍数。

kuhbmx9i

kuhbmx9i2#

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

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

字符串
我很惊讶,一个无用的回复竟然得到了如此高的支持率。我知道主持人要求将最高票数的答案标记为最佳答案,但问题作者没有义务这样做。有很多人只是在这里收集点,并不关心实际回复请求。他们可能会用不同的名字来提升自己。

相关问题