我怎么能在 Caffe 的网络中有多个损失?
How can I have multiple losses in a network in Caffe?
如果我在网络中定义了多个损失层,从这些端到网络的开始是否会发生多次反向传播?我的意思是,他们甚至是那样工作的吗?
假设我有这样的东西:
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
}
所以基本上假设不是每个网络有一个 classification/loss,我们也有几个。
如果它们有效,我如何将所有损失加在一起并使我的最终损失是所有先前损失的总和?
Caffe 为您做这件事。
此外,对于每个损失层,您都有 loss_weight
参数,可让您决定此特定损失相对于网络中所有其他损失的影响程度。
总的来说,caffe 最小化的损失是模型中所有损失层的 weighted 总和。
如果我在网络中定义了多个损失层,从这些端到网络的开始是否会发生多次反向传播?我的意思是,他们甚至是那样工作的吗?
假设我有这样的东西:
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
}
所以基本上假设不是每个网络有一个 classification/loss,我们也有几个。
如果它们有效,我如何将所有损失加在一起并使我的最终损失是所有先前损失的总和?
Caffe 为您做这件事。
此外,对于每个损失层,您都有 loss_weight
参数,可让您决定此特定损失相对于网络中所有其他损失的影响程度。
总的来说,caffe 最小化的损失是模型中所有损失层的 weighted 总和。