TensorFlow中float64张量无法保留12位小数的问题求助
TensorFlow float64张量精度丢失问题解析与解决
首先要明确:float64(双精度浮点数)本身无法精确表示所有十进制小数,这是浮点数二进制存储的固有特性,和TensorFlow无关。
你给出的代码:
tensor = tf.constant([57.695030261422, 11.911734826863], dtype=tf.float64)
这两个十进制数值在二进制浮点数体系中是无限循环的,因此存储时会被近似为最接近的可表示值,最终出现你看到的精度丢失。
验证问题本质
你可以直接用Python原生的float(本质就是双精度)验证,结果和TensorFlow张量完全一致:
print(float(57.695030261422)) print(float(11.911734826863))
解决办法
如果需要精确保留12位小数,推荐两种方案:
- 整数存储法:将小数转换为整数(乘以10^12),用
tf.int64存储,计算时再转回小数,彻底避免浮点数精度损失:# 转为整数存储 tensor_int = tf.constant([57695030261422, 11911734826863], dtype=tf.int64) # 计算时还原为小数 tensor_float = tf.cast(tensor_int, tf.float64) / 1e12 - 字符串存储法:用
tf.strings存储精确的十进制字符串,仅在需要计算时转换为高精度类型(适合对精度要求极高但计算量不大的场景),但会增加运算复杂度。
内容的提问来源于stack exchange,提问作者Mixalis Navridis
相关产品推荐
相关产品推荐

