Softmax 分类交叉熵

tflearn.objectives.softmax_categorical_crossentropy (y_pred, y_true)

计算 y_pred(logits)和 y_true(标签)之间的 softmax 交叉熵。

测量离散分类任务中的概率误差,其中类别互斥(每个条目恰好在一个类别中)。例如,每个 CIFAR-10 图像都标有一个且仅有一个标签:图像可以是狗或卡车,但不能同时是两者。

警告:此操作需要未缩放的 logits,因为它在内部对 y_pred 执行 softmax 以提高效率。不要使用 softmax 的输出调用此操作,因为它会产生错误的结果。

y_predy_true 必须具有相同的形状 [batch_size, num_classes] 和相同的数据类型(float32float64)。还要求 y_true(标签)是二进制数组(例如,总共 5 个不同类别中的类别 2 将定义为 [0., 1., 0., 0., 0.])

参数

  • y_pred: 张量。预测值。
  • y_true: 张量。目标(标签),概率分布。

分类交叉熵

tflearn.objectives.categorical_crossentropy (y_pred, y_true)

计算 y_pred(logits)和 y_true(标签)之间的交叉熵。

测量离散分类任务中的概率误差,其中类别互斥(每个条目恰好在一个类别中)。例如,每个 CIFAR-10 图像都标有一个且仅有一个标签:图像可以是狗或卡车,但不能同时是两者。

y_predy_true 必须具有相同的形状 [batch_size, num_classes] 和相同的数据类型(float32float64)。还要求 y_true(标签)是二进制数组(例如,总共 5 个不同类别中的类别 2 将定义为 [0., 1., 0., 0., 0.])

参数

  • y_pred: 张量。预测值。
  • y_true: 张量。目标(标签),概率分布。

二元交叉熵

tflearn.objectives.binary_crossentropy (y_pred, y_true)

计算 y_pred(logits)和 y_true(标签)之间的 sigmoid 交叉熵。

测量离散分类任务中的概率误差,其中每个类别都是独立的,而不是互斥的。例如,可以执行多标签分类,其中一张图片可以同时包含大象和狗。

为简洁起见,令 x = logitsz = targets。逻辑损失为

x - x * z + log(1 + exp(-x))

为了确保稳定性并避免溢出,实现使用

max(x, 0) - x * z + log(1 + exp(-abs(x)))

y_predy_true 必须具有相同的类型和形状。

参数

  • y_pred: float 类型的 张量。预测值。
  • y_true: float 类型的 张量。目标(标签)。

加权交叉熵

tflearn.objectives.weighted_crossentropy (y_pred, y_true, weight)

计算 y_pred(logits)和 y_true(标签)之间的加权 sigmoid 交叉熵。

计算加权交叉熵。

这类似于 sigmoid_cross_entropy_with_logits(),除了 pos_weight 允许通过增加或减少正误差相对于负误差的成本来权衡召回率和精度。

通常的交叉熵成本定义为

targets * -log(sigmoid(logits)) + (1 - targets) * -log(1 - sigmoid(logits))

参数 pos_weight 用作正目标的乘数

targets * -log(sigmoid(logits)) * pos_weight + (1 - targets) * -log(1 - sigmoid(logits))

为简洁起见,令 x = logits,z = targets,q = pos_weight。损失为

  qz * -log(sigmoid(x)) + (1 - z) * -log(1 - sigmoid(x))
= qz * -log(1 / (1 + exp(-x))) + (1 - z) * -log(exp(-x) / (1 + exp(-x)))
= qz * log(1 + exp(-x)) + (1 - z) * (-log(exp(-x)) + log(1 + exp(-x)))
= qz * log(1 + exp(-x)) + (1 - z) * (x + log(1 + exp(-x))
= (1 - z) * x + (qz +  1 - z) * log(1 + exp(-x))
= (1 - z) * x + (1 + (q - 1) * z) * log(1 + exp(-x))

设置 l = (1 + (q - 1) * z),以确保稳定性并避免溢出,实现使用

(1 - z) * x + l * (log(1 + exp(-abs(x))) + max(-x, 0))

logits 和 targets 必须具有相同的类型和形状。

参数

  • y_pred: float 类型的 张量。预测值。
  • y_true: float 类型的 张量。目标(标签)。
  • weight: 用于正例的系数。

均方损失

tflearn.objectives.mean_square (y_pred, y_true)

参数

  • y_pred: float 类型的 张量。预测值。
  • y_true: float 类型的 张量。目标(标签)。

铰链损失

tflearn.objectives.hinge_loss (y_pred, y_true)

参数

  • y_pred: float 类型的 张量。预测值。
  • y_true: float 类型的 张量。目标(标签)。

ROC AUC 分数

tflearn.objectives.roc_auc_score (y_pred, y_true)

使用基于 Wilcoxon-Mann-Whitney U 统计量的近似值来近似曲线下面积分数。

Yan, L., Dodier, R., Mozer, M. C., & Wolniewicz, R. (2003). Optimizing Classifier Performance via an Approximation to the Wilcoxon-Mann-Whitney Statistic.

测量所有阈值级别的整体性能。

参数

  • y_pred: 张量。预测值。
  • y_true: 张量。目标(标签),概率分布。

二维弱交叉熵

tflearn.objectives.weak_cross_entropy_2d (y_pred, y_true, num_classes=None, epsilon=0.0001, head=None)

使用弱 softmax 交叉熵损失计算语义分割。

给定形状为二维图像的预测 y_pred 和相应的 y_true,这将计算广泛使用的语义分割损失。当前不支持使用 tf.nn.softmax_cross_entropy_with_logits。请参阅 https://github.com/tensorflow/tensorflow/issues/2327#issuecomment-224491229

参数

  • y_pred: 张量,浮点数 - [batch_size, width, height, num_classes]。
  • y_true: 标签张量,int32 - [batch_size, width, height, num_classes]。数据的真实标签。
  • num_classes: 整数。类别数。
  • epsilon: 浮点数。要添加到 y_pred 的小数字。
  • head: numpy 数组 - [num_classes]。对每个类别的损失进行加权。

返回值

浮点类型的损失张量。