Wielozadaniowe uczenie się w Keras


12

Próbuję zaimplementować współdzielone warstwy w Keras. Widzę, że Keras ma keras.layers.concatenate, ale nie jestem pewien z dokumentacji dotyczącej jego użycia. Czy mogę go używać do tworzenia wielu współdzielonych warstw? Jaki byłby najlepszy sposób na wdrożenie prostej wspólnej sieci neuronowej, jak pokazano poniżej przy użyciu Keras?Wspólna sieć neuronowa

Zauważ, że wszystkie kształty warstw wejściowych, wyjściowych i współdzielonych dla wszystkich 3 NN są takie same. Istnieje wiele współdzielonych warstw (i nieudostępnionych warstw) w trzech NN. Kolorowe warstwy są unikalne dla każdego NN i mają ten sam kształt.

Zasadniczo rysunek przedstawia 3 identyczne NN z wieloma współdzielonymi ukrytymi warstwami, a następnie z wieloma nieudostępnionymi ukrytymi warstwami.

Nie jestem pewien, jak udostępniać wiele warstw, ponieważ w przykładzie na Twitterze była tylko jedna udostępniona warstwa (przykład w dokumencie API).

Odpowiedzi:


10

Input xDenseDense

x = Input(shape=(n, ))
shared = Dense(32)(x)
sub1 = Dense(16)(shared)
sub2 = Dense(16)(shared)
sub3 = Dense(16)(shared)
out1 = Dense(1)(sub1)
out2 = Dense(1)(sub2)
out3 = Dense(1)(sub3)

Możemy teraz zdefiniować nasz model w następujący sposób:

model = Model(inputs=x, outputs=[out1, out2, out3])

Oczekuje teraz krotki / listy trzech elementów, po jednym dla każdego wyjścia.

Dzięki tym koncepcjom możesz pójść znacznie dalej. Powiedzmy, że chcielibyśmy nauczyć się indywidualnych wag dla warstw osoby, ale nadal chcemy mieć takie same wagi dla kombinacji liniowej w kierunku warstwy wyjściowej, możemy to osiągnąć, wykonując to:

out = Dense(1)
out1 = out(sub1)
out2 = out(sub2)
out3 = out(sub3)

EDYCJA: Łączenie jest w zasadzie przeciwieństwem tego, co chcesz zrobić, to wklejanie (pośrednich) wyników różnych części sieci do nowej warstwy. Naprawdę chcesz podzielić na wiele różnych części.


Wielkie dzięki. Kiedy to zrobimy model.fit([data1, data2], [labels1, labels2]), zostanie to wyuczone (propagacja wsteczna) jako pojedynczy model, prawda?
Aditya

1
Tak, to będzie tylko jedna rzecz, jeśli etykiety mają różne straty, będziesz musiał wykonać trochę więcej pracy, nie jest to bardzo łatwe w Keras, ale nie niemożliwe, jeśli mają tę samą funkcję utraty bez ponownego ważenia, po prostu działa po wyjęciu z pudełka
Jan van der Vegt,

Wymagałoby to ponownego przeszkolenia zunifikowanego modelu. Co jeśli masz już ciężary treningowe dla podmodeli? Czy istnieje sposób na wykorzystanie tych wag do stworzenia wag dla scalonego modelu?
shahar_m

@shahar_m przepraszam nie jestem pewien, jaki jest przypadek użycia. jeśli wagi treningowe ujednoliconego modelu są stałe, można ładować i zamrażać te warstwy.
Aditya
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.