概率损失函数

开篇

这次要与大家分享的是概率损失函数,常见的概率函数包括交叉熵,possion,KL散度。我们在这里整理了keras官方给出的不同的loss函数的API,并从网上搜集了相关函数的一些特性,把他们整理在了一起。

Probabilistic losses

categorical_crossentropy

img

y为真实标签值,a为神经元实际输出,這是交叉熵的多分类损失版本。

1
categorical_crossentropy(y_true, y_pred)

sparse_categorical_crossentropy

与多类交叉熵相同理,但是适用于稀疏情况

1
sparse_categorical_crossentropy(y_true, y_pred)

binary_crossentropy

交叉熵损失函数,一般用于二分类。这是针对概率之间的损失函数,只有yi和ŷ i相等时,loss才为0,否则为一个正数。而且概率相差越大,loss就越大。631

1
2
tf.keras.losses.BinaryCrossentropy(    from_logits=False, label_smoothing=0, reduction="auto", name="binary_crossentropy" )
binary_crossentropy(y_true, y_pred)

单独使用:

1
2
3
4
5
6
>>> y_true = [[0., 1.], [0., 0.]]
>>> y_pred = [[0.6, 0.4], [0.4, 0.6]]
>>> # Using 'auto'/'sum_over_batch_size' reduction type.
>>> bce = tf.keras.losses.BinaryCrossentropy()
>>> bce(y_true, y_pred).numpy()
0.815

kullback_leibler_divergence

632

KL散度,与交叉熵相似,是一种信息熵,但是两者并不相同。不过最小化KL散度等价于最小化交叉熵,而交叉熵更容易计算。

1
kullback_leibler_divergence(y_true, y_pred)

poisson

计算预测值与真值的泊松函数值

1
poisson(y_true, y_pred)

注意: 当使用 categorical_crossentropy 损失时,你的目标值应该是分类格式 (即,如果你有 10 个类,每个样本的目标值应该是一个 10 维的向量,这个向量除了表示类别的那个索引为 1,其他均为 0)。为了将 整数目标值 转换为 分类目标值,你可以使用 Keras 实用函数 to_categorical

1
model.compile(optimizer='sgd', loss=tf.keras.losses.CosineSimilarity(axis=1))