假设我有两个张量,p1
和p2
在相同形状的张量流中包含概率,其中一些可能是零或一个。他们优雅的方式是逐点计算对数似然:p1*log(p2) + (1-p1)*log(1-p2)
?
使用张量流函数天真地实现它
p1*tf.log(p2) + (1-p1)*tf.log(1-p2)
冒险调用0*tf.log(0)
会产生nan
。
答案 0 :(得分:1)
作为最初的黑客(大多数是更好的解决方案)我在log
内添加了一个epsilon:
eps = 1e-10
p1*tf.log(p2+eps) + (1-p1)*tf.log(1-p2+eps)
会阻止log(0)
。
答案 1 :(得分:0)
请查看CRF。它包含Log Likelihood的实现。特别是你可以看一下implementation