Я экспериментирую с переменной 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)
Очевидно, существует значительная ошибка округления.
Мой вопрос: это ожидается, как, например, объяснил в
Математика с плавающей точкой нарушена? ?
Но если это так, то почему это происходит с Керасом, а не с явной тупицей? Различается ли двоичное представление с плавающей запятой в этих двух случаях?