我正在尝试使用Keras变量来构建自定义损失函数,但偶然发现了一个奇怪的行为。 让我们在np.arrays中进行此元素操作
np_yt = np.arange(10)/10
np_yw = np.arange(10)
np_yt * np_yw
输出为
array([0. , 0.1, 0.4, 0.9, 1.6, 2.5, 3.6, 4.9, 6.4, 8.1])
我尝试对Keras变量做同样的事情
yt = K.variable(np.arange(10)/10)
yw = K.variable(np.arange(10))
K.eval( yt*yw )
输出为
array([0. , 0.1 , 0.4 , 0.90000004, 1.6 ,
2.5 , 3.6000001 , 4.9 , 6.4 , 8.099999 ],
dtype=float32)
显然存在明显的舍入误差。 我的问题是:这是预期的吗?在解释 Is floating point math broken?? 但是如果是这样,为什么在Keras而不是纯粹的numpy中发生这种情况?两种情况下浮点二进制表示形式是否不同?