我想知道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)
字符串
bnlyeluc1#
IEEE 754-2008 16位base 2格式,也就是binary 16,并没有给予很高的精度。你对16比特有什么期望?:)1位是符号位,5位用于指数,并且留下10位来存储归一化的11位尾数,因此任何> 2**11 == 2048都必须被量化。根据Wikipedia,4097到8192之间的整数舍入为4的倍数,8193到16384之间的整数舍入为8的倍数。
kuhbmx9i2#
Tensorflow需要float16,并对float32产生错误。你可以使用Reti43的建议:
np.float16(a) Out[102]: array([8192.], dtype=float16)
字符串我很惊讶,一个无用的回复竟然得到了如此高的支持率。我知道主持人要求将最高票数的答案标记为最佳答案,但问题作者没有义务这样做。有很多人只是在这里收集点,并不关心实际回复请求。他们可能会用不同的名字来提升自己。
2条答案
按热度按时间bnlyeluc1#
IEEE 754-2008 16位base 2格式,也就是binary 16,并没有给予很高的精度。你对16比特有什么期望?:)1位是符号位,5位用于指数,并且留下10位来存储归一化的11位尾数,因此任何> 2**11 == 2048都必须被量化。
根据Wikipedia,4097到8192之间的整数舍入为4的倍数,8193到16384之间的整数舍入为8的倍数。
kuhbmx9i2#
Tensorflow需要float16,并对float32产生错误。你可以使用Reti43的建议:
字符串
我很惊讶,一个无用的回复竟然得到了如此高的支持率。我知道主持人要求将最高票数的答案标记为最佳答案,但问题作者没有义务这样做。有很多人只是在这里收集点,并不关心实际回复请求。他们可能会用不同的名字来提升自己。