2017-03-04 3 views
1

Ich habe 2 verschiedene Modelle, sagen wir NM1 und NM2.Caffe, Ausgänge von 2 Modellen verbinden

Also, was ich suche ist etwas, das wie im folgenden Beispiel funktioniert.

Nehmen wir an, wir haben ein Bild von einem Hund.

NM1 sagt voraus, dass es eine Katze auf dem Bild mit einer Wahrscheinlichkeit von 0,52 ist und dass es ein Hund mit einer Wahrscheinlichkeit von 0,48 ist. NM2 sagt voraus, dass es ein Hund mit einer Wahrscheinlichkeit von 0,6 ist und dass es eine Katze mit einer Wahrscheinlichkeit von 0,4 ist.

NM1 - wird vorhersagen falsch NM2 - wird korrekt vorherzusagen

NM1 + NM2 - Verbindung korrekt vorhersagen (weil 0,48 + 0,6> 0,52 + 0,4)

So endet jedes Modell mit InnerProducts (nach Softmax), die mir 2 Wahrscheinlichkeitsvektoren geben.

Nächster Schritt, ich habe diese 2 Vektoren und ich möchte sie hinzufügen. Hier verwende ich Eltwise-Layer.

layer { 
    name: "eltwise-sum" 
    type: "Eltwise" 
    bottom: "fc8" 
    bottom: "fc8N" 
    top: "out" 
    eltwise_param { operation: SUM } 
} 

Vor dem Beitritt NM1 hatte Genauigkeit ~ 70% und NM2 ~ 10%.

Nach Verbindung Genauigkeit kann nicht einmal 1% erreichen.

Also meine Schlussfolgerung ist, dass ich etwas falsch verstehe und ich wäre dankbar, wenn mir jemand erklären könnte, wo ich falsch liege.

PS. Ich habe Shuffle beim Erstellen von lmdb deaktiviert.

UPDATE

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 
    } 
} 

Model image

+1

[** Schalten Sie nicht schlurfenden OFF **] (http://stackoverflow.com/a/37659171/1714410) haben. – Shai

+0

@Shai Ich verstehe, dass es ein Problem ist, aber Abmischen war nur ein Weg, um sicher zu sein, dass ich die gleichen Bilder von beiden Eingaben bekomme. Mit Shuffling könnte es verschiedene Bilder auf jedem Eingang zurückgeben. –

+1

shuffle die Zeilen der Textdatei für die Generierung der LMBs – Shai

Antwort

1

Wenn Sie (elementweise) hinzuzufügen, die Wahrscheinlichkeiten, müssen Sie nach die "Softmax" Schicht, und nicht nach der "InnerProduct" Schicht hinzuzufügen. Sie sollten so etwas wie

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 
    } 
} 
+0

Vielen Dank für Ihre Antwort. Ich habe vorher falsch geschrieben, ich habe Softmax nach InnerProducts benutzt. Die Sache, die ich nicht kannte, war das Argument "coeff" in der Eltwise-Schicht. Vielleicht war das das Problem! Ich werde es jetzt ausprobieren und Ergebnisse hier schreiben. Danke noch einmal! –

+1

@AleksanderMonk Ich bin mir nicht sicher, dass dies den Trick machen wird. Trainierst du das kombinierte Modell/Feinabstimmung? Wie messen Sie die Genauigkeit? – Shai

+0

Ja, ich versuche, das kombinierte Modell mit normalen Bildern an einem der Eingänge und mit geschärften Bildern am zweiten Eingang zu trainieren. Ich habe meine Frage mit Genauigkeitsschichten aktualisiert. Mit ein paar Worten, ich überprüfe die Genauigkeit für die Ausgabe vom ersten Modell, die Genauigkeit für die Ausgabe vom zweiten Modell und die Genauigkeit für die Eltwise Ausgabe. –