tensorflow2.0常用损失函数小结

这些天损失函数有点困扰我,现结合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())
原创文章 46 获赞 49 访问量 2186

猜你喜欢

转载自blog.csdn.net/qq_41660119/article/details/105813079