gpt4 book ai didi

python - tensorflow.keras.losses.cosine_similarity 在 TensorFlow 1.15 中返回正值

转载 作者:行者123 更新时间:2023-12-04 08:00:49 25 4
gpt4 key购买 nike

不确定我是否在这里做错了什么,但是无论出于何种原因,当我按照 tf 2.4.1 here 的示例进行操作时
我没有得到相同的结果,事实上,我在示例中得到了否定的结果。
这是我在做什么

import tensorflow as tf
from tensorflow.keras.losses import cosine_similarity

y_true = [[0., 1.], [1., 1.], [1., 1.]]
y_pred = [[1., 0.], [1., 1.], [-1., -1.]]

loss = cosine_similarity(y_true, y_pred, axis=1)
loss_numpy = loss.eval(session=tf.Session())

print(loss_numpy) # array([ 0. , 0.99999994, -0.99999994], dtype=float32)
# expected output array([-0. , -0.99999994, 0.99999994], dtype=float32)
我假设在 tf 2+ 中不是这种情况,但这是否是我必须处理的已知问题,还是发生了其他事情?
附言
我已经通过定义解决了这个问题
cosine_proximity_loss = lambda y_true, y_pred: -1. * cosine_similarity(y_true, y_pred)
并在我的模型中使用它。如果有人知道我不应该这样做,任何建议将不胜感激!

最佳答案

这不是你的错,由于一些历史原因,tf.keras.losses.cosine_similaritytf v1.15只会返回余弦值,但在 tf v2.4.1将返回负余弦值。
tf v1.15 source codetf.keras.losses.cosine_similarity :

y_true = nn.l2_normalize(y_true, axis=axis)
y_pred = nn.l2_normalize(y_pred, axis=axis)
return math_ops.reduce_sum(y_true * y_pred, axis=axis)
tf v2.4.1 source codetf.keras.losses.cosine_similarity :
y_true = nn.l2_normalize(y_true, axis=axis)
y_pred = nn.l2_normalize(y_pred, axis=axis)
return -math_ops.reduce_sum(y_true * y_pred, axis=axis)
所以,如果你想使用 tf.keras.losses.cosine_similaritytf v1.15tf v2.4.1 一样, 只需在输出前加减号

关于python - tensorflow.keras.losses.cosine_similarity 在 TensorFlow 1.15 中返回正值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66482923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com