解释 Caffe FCN 输出 类
Interpret Caffe FCN output classes
我已经设置了 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个输出!我不明白为什么?!它可以是一个包含 0 和 1 的输出矩阵,不是吗?)
所以我的问题是:
1.Should 我把这 2 个加起来 类 ?因为我需要 1 个输出
2.The损失这么小!即使输出与预期相去甚远! Caffe如何计算丢失层?
谢谢
进行二进制class化时,使用"SoftmaxWithLoss"
with two outputs, is mathematically equivalent to using "SigmoidCrossEntropyLoss"
。所以,如果你真的只需要一个输出,你可以将最后一层设置为 num_output: 1
并使用 "SigmoidCrossEntropyLoss"
。但是,如果你想利用caffe的"Accuracy"
层,你需要使用两个输出和"SoftmaxWithLoss"
层。
关于您的问题:
1. 如果您选择使用 "SoftmaxWithLoss"
并且您只需要一个输出,则为每个像素取第二个输出,因为此条目表示 class 1.
的概率
我会把它留给你作为一个练习来弄清楚如果你求和你会得到什么(提示:`"Softmax" 输出概率...)
2. 损失非常小很可能是因为你有严重的 class 不平衡——你的大部分像素是 0 而只有极少数是 1(反之亦然),因此预测总是 0 不会招致这么大的惩罚。如果是这种情况,我建议查看解决此问题的 Focal Loss。
我已经设置了 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个输出!我不明白为什么?!它可以是一个包含 0 和 1 的输出矩阵,不是吗?)
所以我的问题是:
1.Should 我把这 2 个加起来 类 ?因为我需要 1 个输出
2.The损失这么小!即使输出与预期相去甚远! Caffe如何计算丢失层?
谢谢
进行二进制class化时,使用"SoftmaxWithLoss"
with two outputs, is mathematically equivalent to using "SigmoidCrossEntropyLoss"
。所以,如果你真的只需要一个输出,你可以将最后一层设置为 num_output: 1
并使用 "SigmoidCrossEntropyLoss"
。但是,如果你想利用caffe的"Accuracy"
层,你需要使用两个输出和"SoftmaxWithLoss"
层。
关于您的问题:
1. 如果您选择使用 "SoftmaxWithLoss"
并且您只需要一个输出,则为每个像素取第二个输出,因为此条目表示 class 1.
的概率
我会把它留给你作为一个练习来弄清楚如果你求和你会得到什么(提示:`"Softmax" 输出概率...)
2. 损失非常小很可能是因为你有严重的 class 不平衡——你的大部分像素是 0 而只有极少数是 1(反之亦然),因此预测总是 0 不会招致这么大的惩罚。如果是这种情况,我建议查看解决此问题的 Focal Loss。