这些天损失函数有点困扰我,现结合tensorflow2.0官方文档,做以下小结,如果有其它想要补充的,后面再随时更新。
1、tf.keras.losses.sparse_categorical_crossentropy / tf.keras.losses.SparseCategoricalCrossentropyhttps://tensorflow.google.cn/versions/r2.0/api_docs/python/tf/keras/losses/SparseCategoricalCrossentropy
tf.keras.losses.SparseCategoricalCrossentropy(
from_logits=False, reduction=losses_utils.ReductionV2.AUTO,
name='sparse_categorical_crossentropy'
)
这个交叉熵损失函数适用于两个或更多类标签中(也就是(多)分类问题),它要求类标签是整型数(Integer),如果类标签使用的是one-hot表示,那么应该使用CategoricalCrossentropy损失。(参考下面具体介绍),它要求y_pred(预测值)的每个特征应该有#classes(类别数)个浮点值,y_true(真实值)的每个特征有一个浮点值。
下面是官方文档给出的例子:
在下面的代码段中,对于y_true的每个样本有一个浮点值,对于y_pred的每个样本有#classes(类别数)个浮点值,则y_true的shape为:[batch_size], y_pred
的 shape 是: [batch_size, num_classes]
cce = tf.keras.losses.SparseCategoricalCrossentropy()
loss = cce(
[0, 1, 2],
[[.9, .05, .05], [.5, .89, .6], [.05, .01, .94]])
print('Loss: ', loss.numpy()) # Loss: 0.3239
Usage with the compile
API:
model = tf.keras.Model(inputs, outputs)
model.compile('sgd', loss=tf.keras.losses.SparseCategoricalCrossentropy())
2、tf.keras.losses.CategoricalCrossentropy /
tf.keras.losses.categorical_crossentropy
tf.keras.losses.CategoricalCrossentropy(
from_logits=False, label_smoothing=0, reduction=losses_utils.ReductionV2.AUTO,
name='categorical_crossentropy'
)
这个交叉熵损失函数适用于两个或更多类标签中(也就是(多)分类问题),它要求类标签使用one-hot表示,如果类标签是整数,那么应该使用SparseCategoricalCrossentropy损失。(参考上面具体介绍),它要求y_true(真实值)的每个特征有#classes(类别数)个浮点值。
在下面的代码段中,每个样本有#classes(类别数)个浮点值,y_true和y_pred
的 shape 是: [batch_size, num_classes]
cce = tf.keras.losses.CategoricalCrossentropy()
loss = cce(
[[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]],
[[.9, .05, .05], [.05, .89, .06], [.05, .01, .94]])
print('Loss: ', loss.numpy()) # Loss: 0.0945
Usage with the compile
API:
model = tf.keras.Model(inputs, outputs)
model.compile('sgd', loss=tf.keras.losses.CategoricalCrossentropy())
3、tf.keras.losses.MSE / tf.keras.losses.MeanSquaredError
MSE损失函数是计算labels(真实值)与预测值(predictions)之间误差平方的平均值。
loss = square(y_true - y_pred)
tf.keras.losses.MeanSquaredError(
reduction=losses_utils.ReductionV2.AUTO, name='mean_squared_error'
)
使用示例:
mse = tf.keras.losses.MeanSquaredError()
loss = mse([0., 0., 1., 1.], [1., 1., 1., 0.])
print('Loss: ', loss.numpy()) # Loss: 0.75
Usage with the compile
API:
model = tf.keras.Model(inputs, outputs)
model.compile('sgd', loss=tf.keras.losses.MeanSquaredError())
4、tf.keras.losses.MeanAbsoluteError/ tf.keras.losses.MAE
计算标签和预测之间的绝对差的平均值。
loss = abs(y_true - y_pred)
tf.keras.losses.MeanAbsoluteError(
reduction=losses_utils.ReductionV2.AUTO, name='mean_absolute_error'
)
使用示例:
mae = tf.keras.losses.MeanAbsoluteError()
loss = mae([0., 0., 1., 1.], [1., 1., 1., 0.])
print('Loss: ', loss.numpy()) # Loss: 0.75
Usage with the compile
API:
model = tf.keras.Model(inputs, outputs)
model.compile('sgd', loss=tf.keras.losses.MeanAbsoluteError())
兰钧
原创文章 30获赞 32访问量 882
关注
私信
展开阅读全文
作者:兰钧