【问题标题】:How to minimize two loss using TensorFlow?如何使用 TensorFlow 最小化两次损失?
【发布时间】:2016-07-22 15:51:37
【问题描述】:

我正在做一个项目,该项目是在图像中定位对象。我要采用的方法是基于CS231n-8中的定位算法。

网络结构有两个优化头,分类头和回归头。在训练网络时如何将它们都最小化?

我有一个想法,将两者总结为一种损失。但问题是分类损失是softmax损失,回归损失是l2损失,这意味着它们有不同的范围。我认为这不是最好的方法。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    这取决于您的网络状态。

    如果您的网络只能提取特征 [您正在使用从其他网络保留的权重],您可以将此权重设置为常数,然后分别训练两个分类头,因为梯度不会流过常量。

    如果您没有使用来自预训练模型的权重,则

    1. 必须训练网络提取特征:因此使用分类头训练网络,让梯度从分类头流到第一个卷积滤波器。通过这种方式,您的网络现在可以结合提取的特征对对象进行分类。
    2. 将卷积滤波器和分类头的学习权重转换为常数张量并训练回归头。

    回归头将学习组合从卷积层提取的特征,调整其参数,以最小化 L2 损失。

    Tl;博士:

    1. 首先训练网络进行分类。
    2. 使用graph_util.convert_variables_to_constants 将每个学习参数转换为常数张量,如'freeze_graph` 脚本中所示。
    3. 训练回归主管。

    【讨论】:

    • 太棒了!感谢您的回答。我可以再问一个问题,在训练回归头时如何表示“背景”类?我现在使用零。有没有更好的办法?
    • 你正在训练回归头:你不需要背景类。您的训练集包含对象边界框的位置,因此您将学会回归这些坐标,仅此而已。背景是这些坐标之外的一切。我仅在分类头中使用背景类,在训练时未使用(我只显示包含对象的图像),但在网络以定位模式运行时使用。如果我用回归头预测一些坐标,但分类头告诉我那是背景,我会跳过位置
    • 有道理。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多