Qual é o significado da fusão de modelos no Keras?

10

Aprendi que o Keras tem uma funcionalidade para "mesclar" dois modelos de acordo com o seguinte:

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 é o ponto em NNs de fusão, em quais situações é útil? É uma espécie de modelagem de conjunto? Qual é a diferença entre os vários "modos" (concat, avg, dot etc ...) no sentido de desempenho?

Hendrik
fonte

Respostas:

14

É usado por várias razões, basicamente é usado para unir várias redes. Um bom exemplo seria onde você tem dois tipos de entrada, por exemplo, tags e uma imagem. Você pode construir uma rede que, por exemplo, tenha:

IMAGEM -> Conv -> Max Pooling -> Conv -> Max Pooling -> Denso

TAG -> Incorporação -> Camada densa

Para combinar essas redes em uma previsão e treiná-las, você pode mesclar essas camadas densas antes da classificação final.

Redes nas quais você tem várias entradas são o uso mais 'óbvio' delas, eis uma figura que combina palavras com imagens dentro de uma RNN; a parte multimodal é onde as duas entradas são mescladas:

Rede neural multimodal

Outro exemplo é a camada de criação do Google, na qual você tem diferentes convoluções que são adicionadas novamente antes de chegar à próxima camada.

Para alimentar várias entradas no Keras, você pode passar uma lista de matrizes. No exemplo da palavra / imagem, você teria duas listas:

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

Em seguida, você pode ajustar da seguinte maneira:

model.fit(x=[x_input_image, x_input_word], y=y_output]
Jan van der Vegt
fonte
Desculpe, não consigo entender o motivo de criar redes separadas para as instâncias de treinamento e os rótulos, enquanto existe a possibilidade de alimentá-las em uma única rede na fase de ajuste, que faz o trabalho de qualquer maneira. Percebo que a mesclagem é uma possibilidade, mas não sua vantagem sobre a "não mesclagem".
Hendrik
Como você os alimenta na fase de adaptação? As entradas são sempre separadas, você não pode usar sua camada de convolução em seus rótulos, portanto essas camadas precisam ser mescladas de alguma forma.
Jan van der Vegt 16/08/16
No Keras model.fit()aceita X e y para montagem e model, neste caso, também pode ser um modelo "não mesclado". Praticamente como outros tipos de modelo no Sklearn, por exemplo.
Hendrik
3
Os rótulos podem ser um nome mal escolhido do meu lado, digamos que você tenha uma foto e a anotação dessa foto e queira classificar se essa combinação é sobre gatos ou não, então você tem dois tipos de entrada e uma saída binária . Para obter a sinergia entre eles, você precisará mesclar as camadas em algum lugar. Outro exemplo é o lugar onde você tem duas imagens, uma da parte superior e um na parte inferior que você tem que classificar juntos
Jan van der Vegt
3
@ Hendrik: Não há "modelos de componentes", existe apenas um modelo. É complexo, ativado pelo recurso de mesclagem de camadas. Você o avalia como faz para qualquer modelo único - ou seja, com uma métrica em relação a um conjunto de dados de teste de espera (no exemplo de imagem / palavras com dados que compreendem imagens, texto parcial associado e a próxima palavra como o rótulo a prever). Se desejar, você pode inspecionar as camadas dentro do modelo para ver o que elas estão fazendo - por exemplo, a análise dos recursos da CNN ainda pode ser aplicada às camadas convolucionais.
Neil Slater