在我的项目中,我必须将两个小浮点数相乘,例如8.696503446228892e-159和1.2425389522444519e-158,因为我在以下代码中进行了测试:
def a2(a,b):
a = tf.cast(a, tf.float64)
b = tf.cast(b, tf.float64)
d = a*b
return d
它将返回0,这会导致很多问题(因为在我的损失函数中使用了它)任何解决方案我如何将它们相乘?
答案 0 :(得分:1)
处理计算量上的大差异本身就是一个研究领域。 执行此操作的一阶方法是编写评估代码以检测情况并重新排序操作,以保留每个结果的显着位。例如,让我们简化一下您的姓名:
tf.log(tf.linalg.det(temp_sigma) /
(tf.sqrt(tf.linalg.det(sigma1) * tf.linalg.det(sigma2))))
变成
log(det(A) / (sqrt(det(B) * det(c))))
您遇到的情况是det(B)
和det(C)
几乎不大于零,但彼此相对接近:sqrt(det(B) * det(C))
的结果将接近任一行列式。
更改操作顺序。对于这种情况,请分配平方根并分别进行除法:
log(
( det(A) / sqrt(det(B)) ) / sqrt(det(C)) )
这会让你前进吗?