我试图定义我自己的自定义损失,我在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
返回?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐