我有2个不同的模型,比方说NM1和NM2。
因此,我正在寻找的东西就像下面的示例一样。
假设我们有一张狗的照片。
NM1预测它是图片上的猫,概率为0.52,而它是狗,概率为0.48。
NM2预测这是一只狗,概率为0.6,而这是一只猫,概率为0.4。
NM1-会预测错误
NM2-将正确预测
NM1 + NM2-连接将正确预测(因为0.48 + 0.6> 0.52 + 0.4)
因此,每个模型都以InnerProducts(在Softmax之后)结尾,这给了我2个概率向量。
下一步,我有这两个向量,我想将它们相加。在这里,我使用Eltwise层。
layer {
name: "eltwise-sum"
type: "Eltwise"
bottom: "fc8"
bottom: "fc8N"
top: "out"
eltwise_param { operation: SUM }
}
在加入之前,NM1的准确度约为70%,NM2的准确度约为10%。
加入后精度甚至不能达到1%。
因此,我的结论是我理解错了,如果有人可以向我解释我错了,我将不胜感激。
PS。创建lmdb时,我确实关闭了shuffle。
更新
layer {
name: "eltwise-sum"
type: "Eltwise"
bottom: "fc8L"
bottom: "fc8NL"
top: "out"
eltwise_param {
operation: SUM
coeff: 0.5
coeff: 0.5
}
}
#accur for PI alone
layer {
name: "accuracyPINorm"
type: "Accuracy"
bottom: "fc8L"
bottom: "label"
top: "accuracyPiNorm"
include {
phase: TEST
}
}
#accur for norm images alone
layer {
name: "accuracyIMGNorm"
type: "Accuracy"
bottom: "fc8NL"
bottom: "labelN"
top: "accuracyIMGNorm"
include {
phase: TEST
}
}
#accur for them together
layer {
name: "accuracy"
type: "Accuracy"
bottom: "out"
bottom: "label"
top: "accuracy"
include {
phase: TEST
}
}
最佳答案
如果要添加(按元素划分)概率,则需要在"Softmax"
层之后而不是在"InnerProduct"
层之后添加。你应该有这样的东西
layer {
type: "InnerProduct"
name: "fc8"
top: "fc8"
# ...
}
layer {
type: "Softmax"
name: "prob_nm1"
top: "prob_nm1"
bottom: "fc8"
}
layer {
type: "InnerProduct"
name: "fc8N"
top: "fc8N"
# ...
}
layer {
type: "Softmax"
name: "prob_nm2"
top: "prob_nm2"
bottom: "fc8N"
}
# Joining the probabilites
layer {
type: "Eltwise"
name: "prob_sum"
bottom: "prob_nm1"
bottom: "prob_nm2"
top: "prob_sum"
eltwise_param {
operation: SUM
coeff: 0.5
coeff: 0.5
}
}