tensorflow2.0常用损失函数小结

Aure ·
更新时间:2024-11-13
· 611 次阅读

这些天损失函数有点困扰我,现结合tensorflow2.0官方文档,做以下小结,如果有其它想要补充的,后面再随时更新。

1、tf.keras.losses.sparse_categorical_crossentropy /            tf.keras.losses.SparseCategoricalCrossentropy

https://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 关注 私信 展开阅读全文
作者:兰钧



小结 损失 函数 损失函数 tensorflow

需要 登录 后方可回复, 如果你还没有账号请 注册新账号