Qual è il significato della fusione dei modelli in Keras?


10

Ho imparato che Keras ha una funzionalità per "unire" due modelli in base a quanto segue:

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')

Qual è il punto nelle NN di fusione, in quali situazioni è utile? È una specie di modellazione di ensemble? Qual è la differenza tra le varie "modalità" (concat, avg, dot etc ...) nel senso della performance?

Risposte:


14

Viene utilizzato per diversi motivi, in sostanza viene utilizzato per unire più reti insieme. Un buon esempio potrebbe essere quello in cui hai due tipi di input, ad esempio tag e un'immagine. È possibile creare una rete che ad esempio abbia:

IMMAGINE -> Conv -> Max Pooling -> Conv -> Max Pooling -> Denso

TAG -> Incorporamento -> Livello denso

Per combinare queste reti in una previsione e formarle insieme, è possibile unire questi livelli Dense prima della classificazione finale.

Le reti in cui hai più input sono l'uso più 'ovvio' di loro, ecco un'immagine che combina parole e immagini all'interno di un RNN, la parte Multimodale è dove i due input sono uniti:

Rete neurale multimodale

Un altro esempio è il livello di Inception di Google in cui hai diverse convoluzioni che vengono aggiunte di nuovo prima di passare al livello successivo.

Per alimentare più input a Keras è possibile passare un elenco di array. Nell'esempio di parola / immagine avresti due elenchi:

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

Quindi puoi adattarti come segue:

model.fit(x=[x_input_image, x_input_word], y=y_output]

Siamo spiacenti, non riesco a capire il punto nella costruzione di reti separate sia per le istanze di formazione che per le etichette, mentre esiste la possibilità di alimentarle in un'unica rete nella fase di adattamento che fa comunque il lavoro. Vedo che la fusione è una possibilità ma non il suo vantaggio rispetto alla "non fusione".
Hendrik,

Come li nutri nella fase di adattamento? Gli input sono sempre separati, non è possibile utilizzare il livello di convoluzione sulle etichette, quindi questi livelli devono essere uniti in qualche modo.
Jan van der Vegt,

In Keras model.fit()accetta sia X che y per adattarsi e modelin questo caso può essere anche un modello "non unito". Praticamente come altri tipi di modello in Sklearn, ad esempio.
Hendrik,

3
Le etichette potrebbero essere un nome mal scelto dalla mia parte, diciamo che hai una foto e un'annotazione con quella foto e vuoi classificare se quella combinazione riguarda i gatti o no, quindi hai due tipi di input e un output binario . Per ottenere la sinergia tra di loro dovrai unire i livelli da qualche parte. Un altro esempio è dove hai due foto, una dall'alto e una dal basso che devi classificare insieme
Jan van der Vegt

3
@Hendrik: non ci sono "modelli di componenti", c'è solo un modello. È complesso, abilitato dalla funzionalità di fusione dei livelli. Lo valuti come fai per ogni singolo modello, ovvero con una metrica rispetto a un set di dati di test di controllo (nell'immagine / esempio di parole con dati che comprendono immagini, testo parziale associato e la parola successiva come etichetta da prevedere). Se lo desideri, puoi ispezionare i livelli all'interno del modello per vedere cosa stanno facendo, ad esempio l'analisi delle caratteristiche della CNN può ancora essere applicata ai livelli convoluzionali.
Neil Slater,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.