张量除法精度误差
Tensor division precision error
我在节点 (v10.0.0) 上使用 @tensorflow/tfjs (v0.10.3),通过简单的算术运算得到以下输出
> import * as tf from '@tensorflow/tfjs'
> tf.print(tf.tensor1d([10]).div(tf.scalar(3)))
Tensor
[3.3333333]
> tf.tensor1d([10]).div(tf.scalar(3)).get(0)
3.3333332538604736
> 10 / 3
3.3333333333333335
为什么简单的除法可以得到不同的结果?
tensorflow 可能使用 32 位浮点数来存储值,但这些值被 javascript 转换回 64 位浮点数,因为 javascript 中的浮点数是 always 64 bit。
例如,考虑 Python 中的以下内容:
import numpy as np
a = np.float32(10.0)
b = np.float32(3.0)
print(a/b)
> 3.3333333
print(np.float64(a/b))
> 3.3333332538604736
a = np.float64(10.0)
b = np.float64(3.0)
print(a/b)
> 3.3333333333333335
我在节点 (v10.0.0) 上使用 @tensorflow/tfjs (v0.10.3),通过简单的算术运算得到以下输出
> import * as tf from '@tensorflow/tfjs'
> tf.print(tf.tensor1d([10]).div(tf.scalar(3)))
Tensor
[3.3333333]
> tf.tensor1d([10]).div(tf.scalar(3)).get(0)
3.3333332538604736
> 10 / 3
3.3333333333333335
为什么简单的除法可以得到不同的结果?
tensorflow 可能使用 32 位浮点数来存储值,但这些值被 javascript 转换回 64 位浮点数,因为 javascript 中的浮点数是 always 64 bit。
例如,考虑 Python 中的以下内容:
import numpy as np
a = np.float32(10.0)
b = np.float32(3.0)
print(a/b)
> 3.3333333
print(np.float64(a/b))
> 3.3333332538604736
a = np.float64(10.0)
b = np.float64(3.0)
print(a/b)
> 3.3333333333333335