【问题标题】:How can I have multiple losses in a network in Caffe?如何在 Caffe 的网络中出现多次损失?
【发布时间】:2017-07-09 16:47:49
【问题描述】:

如果我在网络中定义多个损失层,是否会从这些末端到网络的开头发生多次反向传播?我的意思是,他们甚至是这样工作的吗?

假设我有这样的事情:

Layer1{
}
Layer2{
}
...
Layer_n{
}
Layer_cls1{
bottom:layer_n
top:cls1
}
Layer_cls_loss1{
type:some_loss
bottom:cls1
top:loss1
}
Layer_n1{
bottom:layer_n
..
}
Layer_n2{
}
...
layer_n3{
}
Layer_cls2{
bottom:layer_n3
top:cls2
}
Layer_cls_loss2{
type:some_loss
bottom:cls2
top:loss2
}
layer_n4{
bottom:layer_n3
..
}
...
layer_cls3End{
top:cls_end
bottom:...
}
loss{
bottom:cls_end
top:loss:
type: someloss
}

所以基本上假设我们不是每个网络都有一个分类/损失,而是介于两者之间。

如果它们起作用,我如何将所有损失加在一起,使我的最终损失成为所有先前损失的总和?

【问题讨论】:

    标签: neural-network deep-learning caffe gradient-descent


    【解决方案1】:

    Caffe 会为您做到这一点。
    此外,对于每个损失层,您都有loss_weight 参数,可让您决定此特定损失对网络中所有其他损失的影响程度。
    总体而言,caffe 最小化的损失是模型中所有损失层的加权总和。

    【讨论】:

    • 再次感谢 Shai :) 一如既往的有用 :) 如果我们把这个简单的表格放在一边,我需要用一个不平凡的公式来累积这些损失,我该怎么做呢?我是否必须对此进行编码,还是可以使用普通/prototxt 方式来实现?
    • @Hossein 你所说的“非平凡公式”是什么意思?
    • 我想我找到了答案!继承人另一个,关于损失。假设我们的第一个损失在第 5 层计算,第二个在第 10 层计算,最后一个在第 15 层计算。这是怎么回事?当流到第 5 层时,back prop 开始,权重从第 5 层更新到第一层,同时,forward prop 继续到下一层,直到到达第 10 层,这里发生同样的事情,发起 backprop,并且这一直持续到我们从网络的最末端到达最后的损失和最后的 back prop
    • 您描述的场景与GoogLeNet 中描述的场景非常相似,其中损失被“注入”到不同的层中。 AFAIK,caffe 进行 full 前向传递,然后计算所有损失,获取导数,然后在后向传递中更新权重。自然,层数 > 5 不会受到第 5 层损失梯度的影响(链式法则)。
    • 那么,caffe 就是这么干的,那你觉得我怎么能像 GoogleNet 那样做呢?我们在 caffe 中有 GoogleNet 架构,对吗?所以基本上我们应该能够做谷歌人在他们的论文中所做的事情,因为我们在 caffe 中有他们的模型?!
    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 2019-07-07
    • 2016-03-31
    • 2015-06-08
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多