tf.train.FloatList为何会出现精度损失问题?
Python float转tf.train.FloatList精度丢失原因及解决方法
- 核心问题在于**
tf.train.FloatList默认采用单精度浮点数(float32)存储**,而Python中的float类型本质是双精度浮点数(float64)。 - 当你将Python的float64数值传入
FloatList时,TensorFlow会自动执行类型转换,把双精度值转为单精度。由于float32的有效位数仅约7位,远少于float64的15-17位,转换过程必然会损失部分精度。你看到的2.299999952316284就是2.3转成float32后的精确存储结果,这是浮点数二进制表示的正常特性,并非程序错误。 - 如果需要完全保留原数值的精度,只需改用**
tf.train.DoubleList**,它专门用于存储双精度浮点数,转换后不会出现精度丢失:
import tensorflow as tf x = 2.3 lst = tf.train.DoubleList(value=[x]) reloaded = lst.value[0] # 结果为2.3
内容的提问来源于stack exchange,提问作者gebbissimo
相关产品推荐
相关产品推荐

