Welche Bedeutung hat das Zusammenführen von Modellen in Keras?

10

Ich habe erfahren, dass Keras eine Funktion zum "Zusammenführen" von zwei Modellen hat, und zwar wie folgt:

from keras.layers import Merge

left_branch = Sequential()
left_branch.add(Dense(32, input_dim=784))

right_branch = Sequential()
right_branch.add(Dense(32, input_dim=784))

merged = Merge([left_branch, right_branch], mode='concat')

Was ist der Sinn von Mergint-NNs, in welchen Situationen ist es nützlich? Ist es eine Art Ensemble-Modellierung? Was ist der Unterschied zwischen den verschiedenen "Modi" (concat, avg, dot etc ...) im Sinne der Leistung?

Hendrik
quelle

Antworten:

14

Es wird aus mehreren Gründen verwendet. Grundsätzlich wird es verwendet, um mehrere Netzwerke miteinander zu verbinden. Ein gutes Beispiel wäre, wenn Sie zwei Arten von Eingaben haben, zum Beispiel Tags und ein Bild. Sie könnten ein Netzwerk aufbauen, das zum Beispiel Folgendes hat:

BILD -> Conv -> Max Pooling -> Conv -> Max Pooling -> Dicht

TAG -> Einbetten -> Dichte Ebene

Um diese Netzwerke zu einer Vorhersage zu kombinieren und zusammen zu trainieren, können Sie diese dichten Schichten vor der endgültigen Klassifizierung zusammenführen.

Netzwerke, in denen Sie mehrere Eingänge haben, werden am offensichtlichsten verwendet. Hier ist ein Bild, das Wörter mit Bildern innerhalb eines RNN kombiniert. Im multimodalen Teil werden die beiden Eingänge zusammengeführt:

Multimodales neuronales Netzwerk

Ein weiteres Beispiel ist die Inception-Ebene von Google, in der Sie verschiedene Windungen haben, die wieder zusammengefügt werden, bevor Sie zur nächsten Ebene gelangen.

Um Keras mehrere Eingaben zuzuführen, können Sie eine Liste von Arrays übergeben. Im Wort- / Bildbeispiel hätten Sie zwei Listen:

x_input_image = [image1, image2, image3]
x_input_word = ['Feline', 'Dog', 'TV']
y_output = [1, 0, 0]

Dann können Sie wie folgt passen:

model.fit(x=[x_input_image, x_input_word], y=y_output]
Jan van der Vegt
quelle
Entschuldigung, ich sehe keinen Sinn darin, separate Netzwerke sowohl für die Trainingsinstanzen als auch für die Labels aufzubauen, während die Möglichkeit besteht, diese in der Anpassungsphase, die den Job sowieso erledigt, in einem einzigen Netzwerk zu speisen. Ich kann sehen, dass das Zusammenführen eine Möglichkeit ist, aber nicht der Vorteil gegenüber dem "Nicht-Zusammenführen".
Hendrik
Wie füttern Sie sie in der Anpassungsphase? Die Eingaben sind immer getrennt. Sie können Ihre Faltungsebene nicht auf Ihren Etiketten verwenden, daher müssen diese Ebenen irgendwie zusammengeführt werden.
Jan van der Vegt
In Keras werden model.fit()sowohl X als auch y zum Anpassen akzeptiert und modelin diesem Fall kann es sich auch um ein "nicht zusammengeführtes" Modell handeln. Ziemlich ähnlich wie andere Modelltypen in Sklearn zum Beispiel.
Hendrik
3
Labels könnten von meiner Seite ein schlecht gewählter Name sein. Nehmen wir an, Sie haben ein Bild und die Anmerkung zu diesem Bild, und Sie möchten klassifizieren, ob es sich bei dieser Kombination um Katzen handelt oder nicht. Dann haben Sie zwei Arten von Eingaben und eine binäre Ausgabe . Um die Synergie zwischen ihnen zu erzielen, müssen Sie die Ebenen irgendwo zusammenführen. Ein anderes Beispiel ist, wo Sie zwei Bilder haben, eines von oben und eines von unten, die Sie zusammen klassifizieren müssen
Jan van der Vegt
3
@ Hendrik: Es gibt keine "Komponentenmodelle", es gibt nur ein Modell. Es ist komplex und wird durch die Funktion zum Zusammenführen von Ebenen aktiviert. Sie bewerten es wie für jedes einzelne Modell - dh mit einer Metrik gegen einen Hold-Out-Testdatensatz (im Bild- / Wortbeispiel mit Daten, die Bilder, zugehörigen Teiltext und das nächste Wort als zu prognostizierende Bezeichnung umfassen). Wenn Sie möchten, können Sie die Ebenen im Modell untersuchen, um festzustellen, was sie tun. Beispielsweise kann die Analyse von CNN-Merkmalen weiterhin auf die Faltungsebenen angewendet werden.
Neil Slater