1

我已经设置了 Caffe 并使用 FCN-8s 模型,输出类几乎没有变化:

layer {
 name: "score_5classes"
 type: "Convolution"
 bottom: "score"
 top: "score_5classes"
 convolution_param {
    num_output: 2
    pad: 0 
    kernel_size: 1 
    }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "score_5classes"
  bottom: "label"
  top: "loss"
  loss_param {
    normalize: true
  }
}

我已将最后一层输出编号更改为 2,因为我想将输入图像分为 2 个类,0 和 1(所以看来我应该有 2 个输出!我不明白为什么?!它可能是一个带有零和那些,不能吗?)

所以我的问题是:

1.我应该总结这两个类吗?因为我需要 1 个输出

2.损失这么小!即使输出与预期相差甚远!Caffe 是如何计算丢失层的?

谢谢

4

1 回答 1

0

在进行二元分类时,使用"SoftmaxWithLoss"两个输出在数学上等价于使用"SigmoidCrossEntropyLoss". 因此,如果您真的只需要一个输出,您可以将最后一层设置为num_output: 1并使用"SigmoidCrossEntropyLoss". 但是,如果你想利用 caffe 的"Accuracy"layer,你需要使用两个输出和"SoftmaxWithLoss"layer。

关于您的问题:
1. 如果您选择使用"SoftmaxWithLoss"并且只需要一个输出,请为每个像素取第二个输出,因为此条目表示第 1 类的概率。
我将把它留给您作为练习,以弄清楚您'如果你取总和就会得到(提示:`“Softmax”输出概率......)
2. 损失非常小很可能是因为你有严重的类不平衡 - 你的大部分像素是 0,而只有极少数是 1(反之亦然),因此总是预测 0 不会产生如此大的惩罚。如果这是您的情况,我建议查看解决此问题的Focal Loss 。

于 2018-07-30T04:33:52.710 回答