如何使用TensorFlow最小化两次丢失?

时间:2016-07-22 02:12:23

标签: tensorflow

我正在开发一个项目,用于本地化图像中的对象。我将采用的方法基于CS231n-8中的定位算法。

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

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

1 个答案:

答案 0 :(得分:2)

这取决于您的网络状态。

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

如果您没有使用预先训练过的模型中的权重,那么

  1. 必须训练网络以提取特征:因此使用分类头训练网络并让梯度从分类头流到第一卷积滤波器。通过这种方式,您的网络现在可以对提取的要素进行分类。
  2. 将卷积滤波器和分类头的学习权重转换为常数张量,并训练回归头。
  3. 回归头将学习将从卷积层提取的特征与其参数相结合,以最大限度地减少L2损失。

    <强>铊; DR:

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