PairwiseMeanSquaredError 类keras_rs.losses.PairwiseMeanSquaredError(temperature: float = 1.0, **kwargs: Any)
计算真实标签和预测分数之间的成对均方误差。此损失函数专为排序任务设计,目标是正确排列每个列表中的项目。它通过比较每个列表中的项目对来计算损失,惩罚真实标签较高但预测分数低于真实标签较低的项目的案例。
对于 y_pred 中每个预测分数列表 s 和 y_true 中对应的真实标签列表 y,损失计算如下:
loss = sum_{i} sum_{j} I(y_i > y_j) * (s_i - s_j)^2
其中
y_i 和 y_j 分别是项目 i 和 j 的真实标签。s_i 和 s_j 分别是项目 i 和 j 的预测分数。I(y_i > y_j) 是一个指示函数,如果 y_i > y_j 则等于 1,否则等于 0。(s_i - s_j)^2 是项目 i 和 j 的预测分数之间的平方差,它惩罚项目预测顺序与其真实顺序之间的差异。参数
"sum_over_batch_size"。支持的选项有 "sum"、"sum_over_batch_size"、"mean"、"mean_with_sample_weight" 或 None。"sum" 对损失求和,"sum_over_batch_size" 和 "mean" 对损失求和并除以样本大小,而 "mean_with_sample_weight" 对损失求和并除以样本权重的总和。"none" 和 None 不执行聚合。默认为 "sum_over_batch_size"。None,这意味着使用 keras.backend.floatx()。keras.backend.floatx() 是 "float32",除非设置为其他值(通过 keras.backend.set_floatx())。如果提供了 keras.DTypePolicy,则将使用 compute_dtype。示例
使用 compile() API
model.compile(
loss=keras_rs.losses.PairwiseMeanSquaredError(),
...
)
作为具有非批处理输入的独立函数
>>> y_true = np.array([1.0, 0.0, 1.0, 3.0, 2.0])
>>> y_pred = np.array([1.0, 3.0, 2.0, 4.0, 0.8])
>>> pairwise_mse = keras_rs.losses.PairwiseMeanSquaredError()
>>> pairwise_mse(y_true=y_true, y_pred=y_pred)
>>> 19.10400
使用默认“auto”/“sum_over_batch_size”缩减的批处理输入
>>> y_true = np.array([[1.0, 0.0, 1.0, 3.0], [0.0, 1.0, 2.0, 3.0]])
>>> y_pred = np.array([[1.0, 3.0, 2.0, 4.0], [1.0, 1.8, 2.0, 3.0]])
>>> pairwise_mse = keras_rs.losses.PairwiseMeanSquaredError()
>>> pairwise_mse(y_true=y_true, y_pred=y_pred)
5.57999
使用掩码输入(对不规则输入有用)
>>> y_true = {
... "labels": np.array([[1.0, 0.0, 1.0, 3.0], [0.0, 1.0, 2.0, 3.0]]),
... "mask": np.array(
... [[True, True, True, True], [True, True, False, False]]
... ),
... }
>>> y_pred = np.array([[1.0, 3.0, 2.0, 4.0], [1.0, 1.8, 2.0, 3.0]])
>>> pairwise_mse(y_true=y_true, y_pred=y_pred)
4.76000
使用 sample_weight
>>> y_true = np.array([[1.0, 0.0, 1.0, 3.0], [0.0, 1.0, 2.0, 3.0]])
>>> y_pred = np.array([[1.0, 3.0, 2.0, 4.0], [1.0, 1.8, 2.0, 3.0]])
>>> sample_weight = np.array(
... [[2.0, 3.0, 1.0, 1.0], [2.0, 1.0, 0.0, 0.0]]
... )
>>> pairwise_mse = keras_rs.losses.PairwiseMeanSquaredError()
>>> pairwise_mse(
... y_true=y_true, y_pred=y_pred, sample_weight=sample_weight
... )
11.0500
使用 'none' 缩减
>>> y_true = np.array([[1.0, 0.0, 1.0, 3.0], [0.0, 1.0, 2.0, 3.0]])
>>> y_pred = np.array([[1.0, 3.0, 2.0, 4.0], [1.0, 1.8, 2.0, 3.0]])
>>> pairwise_mse = keras_rs.losses.PairwiseMeanSquaredError(
... reduction="none"
... )
>>> pairwise_mse(y_true=y_true, y_pred=y_pred)
[[11., 17., 5., 5.], [2.04, 1.3199998, 1.6399999, 1.6399999]]
call 方法PairwiseMeanSquaredError.call(y_true: Any, y_pred: Any)
计算成对损失。
参数
(list_size);对于批处理输入,形状为 (batch_size, list_size)。如果项目的标签为 -1,则在损失计算中忽略。如果为字典,则应有两个键:“labels”和“mask”。“mask”可用于在损失计算中忽略元素,即,不会与这些项目形成对。请注意,最终掩码是传递的掩码和 labels >= 0 的“与”结果。(list_size),批处理输入的形状为 (batch_size, list_size)。应与 y_true 形状相同。返回
损失值。