概率损失函数
开篇
这次要与大家分享的是概率损失函数,常见的概率函数包括交叉熵,possion,KL散度。我们在这里整理了keras官方给出的不同的loss函数的API,并从网上搜集了相关函数的一些特性,把他们整理在了一起。
Probabilistic losses
categorical_crossentropy
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就越大。
1 | tf.keras.losses.BinaryCrossentropy( from_logits=False, label_smoothing=0, reduction="auto", name="binary_crossentropy" ) |
单独使用:
1 | 0., 1.], [0., 0.]] y_true = [[ |
kullback_leibler_divergence
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)) |