Jakie jest znaczenie łączenia modeli w Keras?

10

Dowiedziałem się, że Keras ma funkcję „scalania” dwóch modeli zgodnie z następującymi zasadami:

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

Jaki jest sens łączenia NN, w jakich sytuacjach jest to przydatne? Czy to rodzaj modelowania zespołowego? Jaka jest różnica między kilkoma „trybami” (konkat, śr, kropka itp.) W sensie wydajności?

Hendrik
źródło

Odpowiedzi:

14

Jest używany z kilku powodów, w zasadzie służy do łączenia wielu sieci razem. Dobrym przykładem mogą być dwa typy danych wejściowych, na przykład tagi i obraz. Możesz zbudować sieć, która na przykład ma:

OBRAZ -> Konw. -> Maksymalne zbieranie -> Konw. -> Maksymalne zbieranie -> Gęsty

TAG -> Osadzanie -> Gęsta warstwa

Aby połączyć te sieci w jedną prognozę i trenować je razem, możesz scalić te Gęste warstwy przed ostateczną klasyfikacją.

Sieci, w których masz wiele danych wejściowych, są najbardziej „oczywistym” zastosowaniem, oto zdjęcie, które łączy słowa z obrazami wewnątrz RNN, część Multimodalna polega na połączeniu dwóch danych wejściowych:

Multimodalna sieć neuronowa

Innym przykładem jest warstwa początkowa Google, w której masz różne sploty, które są dodawane z powrotem przed przejściem do następnej warstwy.

Aby podać wiele danych wejściowych do Keras, możesz przekazać listę tablic. W przykładzie słowo / obraz masz dwie listy:

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

Następnie możesz dopasować w następujący sposób:

model.fit(x=[x_input_image, x_input_word], y=y_output]
Jan van der Vegt
źródło
Niestety nie widzę sensu w budowaniu oddzielnych sieci zarówno dla instancji szkoleniowych, jak i etykiet, podczas gdy istnieje możliwość karmienia ich w jednej sieci w fazie dopasowywania, która i tak działa. Widzę, że łączenie jest możliwe, ale nie ma przewagi nad „nie łączeniem”.
Hendrik,
Jak je karmić w fazie dopasowania? Dane wejściowe są zawsze osobne, nie można użyć warstwy splotu na etykietach, więc warstwy te należy jakoś scalić.
Jan van der Vegt
W Keras model.fit()przyjmuje zarówno X jak i Y dla dopasowania, modelw tym przypadku może to być również model „niepołączony”. Na przykład prawie jak inne typy modeli w Sklearn.
Hendrik
3
Etykiety mogą być źle wybraną nazwą z mojej strony, powiedzmy, że masz zdjęcie i adnotację z tym obrazem, i chcesz sklasyfikować, czy ta kombinacja dotyczy kotów, czy nie, to masz dwa rodzaje danych wejściowych i jedno wyjście binarne . Aby uzyskać synergię między nimi, będziesz musiał gdzieś scalić warstwy. Innym przykładem są dwa zdjęcia, jeden od góry i jeden od dołu, które należy sklasyfikować razem
Jan van der Vegt
3
@Hendrik: Nie ma „modeli składowych”, jest tylko jeden model. Jest to złożony, umożliwiany przez funkcję scalania warstw. Oceniasz go tak, jak w przypadku każdego pojedynczego modelu - tj. Za pomocą metryki w stosunku do zestawu danych testowych wstrzymania (w przykładzie obraz / słowa z danymi zawierającymi obrazy, powiązany tekst częściowy i następne słowo jako przewidywaną etykietę). Jeśli chcesz, możesz sprawdzić warstwy w modelu, aby zobaczyć, co robią - np. Analizę cech CNN można nadal zastosować do warstw splotowych.
Neil Slater,