¿Cuál es el significado de la fusión de modelos en Keras?

10

He aprendido que Keras tiene una funcionalidad para "fusionar" dos modelos de acuerdo con lo siguiente:

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

¿Cuál es el punto en mergint NNs, en qué situaciones es útil? ¿Es una especie de modelado de conjunto? ¿Cuál es la diferencia entre los varios "modos" (concat, avg, dot, etc.) en el sentido del rendimiento?

Hendrik
fuente

Respuestas:

14

Se usa por varias razones, básicamente se usa para unir múltiples redes. Un buen ejemplo sería donde tiene dos tipos de entrada, por ejemplo, etiquetas y una imagen. Podría construir una red que, por ejemplo, tenga:

IMAGEN -> Conv -> Agrupación máxima -> Conv -> Agrupación máxima -> Denso

TAG -> Incrustación -> Capa densa

Para combinar estas redes en una predicción y entrenarlas juntas, podría fusionar estas capas densas antes de la clasificación final.

Las redes donde tiene múltiples entradas son el uso más 'obvio' de ellas, aquí hay una imagen que combina palabras con imágenes dentro de un RNN, la parte multimodal es donde se fusionan las dos entradas:

Red neuronal multimodal

Otro ejemplo es la capa de inicio de Google, donde tiene diferentes convoluciones que se vuelven a agregar antes de pasar a la siguiente capa.

Para alimentar múltiples entradas a Keras, puede pasar una lista de matrices. En el ejemplo de palabra / imagen, tendría dos listas:

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

Entonces puede caber de la siguiente manera:

model.fit(x=[x_input_image, x_input_word], y=y_output]
Jan van der Vegt
fuente
Lo sentimos, no veo el punto de construir redes separadas tanto para las instancias de capacitación como para las etiquetas, mientras que existe la posibilidad de alimentarlas en una sola red en la fase de adaptación que de todos modos hace el trabajo. Puedo ver que la fusión es una posibilidad, pero no su ventaja sobre la "no fusión".
Hendrik
¿Cómo los alimentas en la fase de adaptación? Las entradas siempre están separadas, no puede usar su capa de convolución en sus etiquetas, por lo que estas capas deben fusionarse de alguna manera.
Jan van der Vegt
En Keras model.fit()acepta X e y para el ajuste y modelen este caso puede ser un modelo "no fusionado" también. Al igual que otros tipos de modelos en Sklearn, por ejemplo.
Hendrik
3
Las etiquetas pueden ser un nombre mal elegido de mi lado, digamos que tiene una imagen y la anotación con esa imagen, y desea clasificar si esa combinación es sobre gatos o no, entonces tiene dos tipos de entrada y una salida binaria . Para obtener la sinergia entre ellos, tendrá que fusionar las capas en algún lugar. Otro ejemplo es donde tienes dos imágenes, una desde arriba y otra desde abajo que tienes que clasificar juntas
Jan van der Vegt
3
@Hendrik: No hay "modelos de componentes", solo hay un modelo. Es complejo, habilitado por la función de fusión de capas. Lo evalúa como lo hace para cualquier modelo individual, es decir, con una métrica contra un conjunto de datos de prueba de retención (en el ejemplo de imagen / palabras con datos que comprenden imágenes, texto parcial asociado y la siguiente palabra como la etiqueta para predecir). Si lo desea, puede inspeccionar las capas dentro del modelo para ver lo que están haciendo, por ejemplo, el análisis de las características de CNN todavía se puede aplicar a las capas convolucionales.
Neil Slater