当前位置:   article > 正文

【Tensorflow slim】slim losses包_slim 定义多个损失函数

slim 定义多个损失函数
损失函数定义了我们想要最小化的数量。 对于分类问题,这通常是跨分类的真实分布和预测概率分布之间的交叉熵。 对于回归问题,这通常是预测值和真值之间的平方和差异。

某些模型(如多任务学习模型)需要同时使用多个损失函数。 换句话说,最终被最小化的损失函数是各种其他损失函数的总和。 例如,考虑预测图像中的场景类型以及每个像素的相机深度的模型。 这个模型的损失函数将是分类损失和深度预测损失的总和。

TF-Slim提供了一个易于使用的机制,通过损失模块定义和跟踪损失功能。 考虑一下我们想要训练VGG网络的简单情况:

  1. import tensorflow as tf
  2. vgg = tf.contrib.slim.nets.vgg
  3. # Load the images and labels.
  4. images, labels = ...
  5. # Create the model.
  6. predictions, _ = vgg.vgg_16(images)
  7. # Define the loss functions and get the total loss.
  8. loss = slim.losses.softmax_cross_entropy(predictions, labels)

在这个例子中,我们首先创建模型(使用TF-Slim的VGG实现),并添加标准分类损失。 现在,让我们假设有一个多任务模型,产生多个输出的情况:

  1. # Load the images and labels.
  2. images, scene_labels, depth_labels = ...
  3. # Create the model.
  4. scene_predictions, depth_predictions = CreateMultiTaskModel(images)
  5. # Define the loss functions and get the total loss.
  6. classification_loss = slim.losses.softmax_cross_entropy(scene_predictions, scene_labels)
  7. sum_of_squares_loss = slim.losses.sum_of_squares(depth_predictions, depth_labels)
  8. # The following two lines have the same effect:
  9. total_loss = classification_loss + sum_of_squares_loss
  10. total_loss = slim.losses.get_total_loss(add_regularization_losses=False)

在这个例子中,我们有两个损失,我们通过调用slim.losses.softmax_cross_entropy和slim.losses.sum_of_squares来添加。 我们可以通过将它们相加(total_loss)或调用slim.losses.get_total_loss()来获得全部损失。 这是如何工作的? 当您通过TF-Slim创建loss function时,TF-Slim将损失添加到损失函数中特殊的TensorFlow集合中。 这使您可以手动管理全部损失,或允许TF-Slim为您管理它们。


如果你想让TF-Slim管理你的损失,通过一个自定义的损失函数呢? loss_ops.py也有一个功能,把这个损失添加到TF-Slims集合中。 例如:

  1. # Load the images and labels.
  2. images, scene_labels, depth_labels, pose_labels = ...
  3. # Create the model.
  4. scene_predictions, depth_predictions, pose_predictions = CreateMultiTaskModel(images)
  5. # Define the loss functions and get the total loss.
  6. classification_loss = slim.losses.softmax_cross_entropy(scene_predictions, scene_labels)
  7. sum_of_squares_loss = slim.losses.sum_of_squares(depth_predictions, depth_labels)
  8. pose_loss = MyCustomLossFunction(pose_predictions, pose_labels)
  9. slim.losses.add_loss(pose_loss) # Letting TF-Slim know about the additional loss.
  10. # The following two ways to compute the total loss are equivalent:
  11. regularization_loss = tf.add_n(slim.losses.get_regularization_losses())
  12. total_loss1 = classification_loss + sum_of_squares_loss + pose_loss + regularization_loss
  13. # (Regularization Loss is included in the total loss by default).
  14. total_loss2 = slim.losses.get_total_loss()
在这个例子中,我们可以再次手动产生总损失函数,或者让TF-Slim知道额外的损失,让TF-Slim处理损失。


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/133242
推荐阅读
相关标签
  

闽ICP备14008679号