Keras'da çoklu görev öğrenimi


12

Keras'ta paylaşılan katmanları uygulamaya çalışıyorum. Keras'ın sahip olduğunu görüyorum keras.layers.concatenate, ancak kullanımı ile ilgili belgelerden emin değilim. Birden çok paylaşılan katman oluşturmak için kullanabilir miyim? Keras kullanarak aşağıda gösterildiği gibi basit bir ortak sinir ağını uygulamanın en iyi yolu ne olabilir?Paylaşılan Sinir ağı

3 NN'nin tümü için giriş, çıkış ve paylaşılan katmanların tüm şekillerinin aynı olduğunu unutmayın. Üç NN'de birden çok paylaşılan katman (ve paylaşılmayan katman) vardır. Renkli katmanlar her NN'ye özgüdür ve aynı şekle sahiptir.

Temel olarak, şekil birden çok paylaşılan gizli katmana sahip 3 özdeş NN'yi ve ardından birden fazla paylaşılmamış gizli katmanı temsil eder.

Twitter örneğinde olduğu gibi birden çok katmanı nasıl paylaşacağımdan emin değilim, sadece bir paylaşılan katman (API belgesinde örnek) vardı.

Yanıtlar:


10

İşlevsel API'yi kullanarak, ağınızın farklı bölümleri arasındaki ağırlıkları kolayca paylaşabilirsiniz. Sizin durumunuzda bizim olan bir var , o zaman paylaşılan adlı bir katmanımız olacak . Sonra sub1, sub2 ve sub3 adında üç farklı katmanımız olacak ve sonra out1, out2 ve out3 adında üç çıkış katmanımız olacak.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)

Modelimizi şimdi şu şekilde tanımlayabiliriz:

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

Şimdi her çıktı için bir tane olmak üzere üç elemandan oluşan bir grup / liste beklenmektedir.

Bu kavramlarla daha da ileri gidebilirsiniz. Kişi katmanları için bireysel ağırlıkları öğrenmek istediğimizi, ancak yine de çıktı katmanına doğru doğrusal kombinasyon için aynı ağırlıklara sahip olmak istediğimizi, bunu yaparak başarabiliriz:

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

EDIT: Birleştirme temelde yapmak istediğinizin tersidir, ağınızın farklı bölümlerinin çıktılarını yeni bir katmana yapıştırır. Aslında birden fazla farklı parçaya bölünmek istiyorsunuz.


Çok teşekkürler. Bir yaptığımızda model.fit([data1, data2], [labels1, labels2]), bu tek bir model olarak (geri yayılma) eğitilecek, değil mi?
Aditya

1
Evet, sadece bir şey olacak, eğer etiketlerin farklı kayıpları varsa, biraz daha fazla iş yapmanız gerekecek, Keras'ta süper kolay değil ama imkansız değil, aynı kayıp fonksiyonunu yeniden sarmadan paylaşıyorlarsa sadece kutudan çıkar
Jan van der Vegt

Bu, birleşik modelin yeniden eğitilmesini gerektirecektir. Alt modeller için egzersiz ağırlıklarınız varsa ne olacak? Birleştirilen model için wieghts oluşturmak için bu ağırlıkları kullanmanın bir yolu var mı?
shahar_m

@shahar_m Üzgünüm kullanım durumunun ne olduğundan emin değilim. birleştirilmiş modelin eğitim ağırlıkları sabitse, bu katmanları yükleyebilir ve dondurabilirsiniz.
Aditya
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.