tf.哪里海关损失

2024-10-01 07:17:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图定义我自己的自定义损失,我在PoincarèDisk中实现双曲线距离,如果其中一个点的半径大于等于1,则不定义双曲线距离。你知道吗

所以我想用tf.哪里避免使用nan值并返回mse而不是nan。你知道吗

这是我的密码:

def hyperbolic_loss(y_true, y_pred):    
    num = 2 * tf.norm(y_true - y_pred, axis = 1)
    densx = (1 - tf.norm(y_pred, axis = 1))
    dendx = (1 - tf.norm(y_true, axis = 1))
    frac = num/(densx * dendx)
    acos = tf.math.acosh(1  + frac)
    acos = tf.diag(acos)
    ret = K.mean(K.mean(acos, axis = -1))
    mse = K.mean(mean_squared_error(y_true, y_pred))

    return tf.where(
        tf.reduce_any(tf.is_nan(acos)),
        mse * 10, 
        ret)

我在网络外尝试了它,它可以处理任何输入(即使有radius>;=1的点),但是当我在网络中将函数用作损失函数时,可能会返回nan。你知道吗

距离是here,r等于1。你知道吗

我认为问题出在tf.哪里使用,但我不确定。你知道吗

如何避免nan返回?你知道吗


Tags: true距离norm定义tfnanmeannum