Keras'ta model birleştirmenin önemi nedir?


10

Keras'ın iki modeli aşağıdakilere göre "birleştirmek" için bir işlevi olduğunu öğrendim:

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

Yeni NN'lerin anlamı nedir, hangi durumlarda yararlıdır? Bir çeşit topluluk modellemesi mi? Performans anlamında birkaç "mod" (concat, avg, dot vb ...) arasındaki fark nedir?

Yanıtlar:


14

Birkaç nedenden dolayı kullanılır, temel olarak birden fazla ağa birlikte katılmak için kullanılır. Bunun iyi bir örneği, etiketler ve bir resim gibi iki tür girişinizin olduğu yerlerdir. Örneğin aşağıdakileri içeren bir ağ oluşturabilirsiniz:

GÖRÜNTÜ -> Dönş. -> Maks. Havuzlama -> Dönş. -> Maks. Havuzlama -> Yoğun

TAG -> Gömme -> Yoğun katman

Bu ağları tek bir tahminde birleştirmek ve birlikte eğitmek için bu yoğun katmanları son sınıflandırmadan önce birleştirebilirsiniz.

Birden fazla girişinizin olduğu ağlar, bunların en 'belirgin' kullanımıdır, burada kelimeleri bir RNN içindeki görüntülerle birleştiren bir resim, Multimodal kısmı iki girişin birleştirildiği yerdir:

Multimodal Sinir Ağı

Başka bir örnek, bir sonraki katmana geçmeden önce tekrar eklenen farklı kıvrımların bulunduğu Google'ın Başlangıç ​​katmanıdır.

Keras'a birden çok giriş beslemek için dizilerin bir listesini iletebilirsiniz. Kelime / resim örneğinde iki listeniz olur:

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

Sonra aşağıdaki gibi sığabilirsiniz:

model.fit(x=[x_input_image, x_input_word], y=y_output]

Maalesef, hem eğitim örnekleri hem de etiketler için ayrı ağlar oluşturma noktasını göremiyorum, ancak bunları yine de işi yapan montaj aşamasında tek bir ağda besleme imkanı var. Birleşmenin bir olasılık olduğunu, ancak "birleşmeme" ye göre avantaj olmadığını görebiliyorum.
Hendrik

Bunları montaj aşamasında nasıl beslersiniz? Girişler her zaman ayrıdır, katlama katmanınızı etiketlerinizde kullanamazsınız, bu nedenle bu katmanların bir şekilde birleştirilmesi gerekir.
Jan van der Vegt

Keras'ta model.fit()montaj için hem X hem de y kabul edilir ve modelbu durumda da "birleştirilmemiş" bir model olabilir. Örneğin Sklearn'deki diğer model türlerine çok benzer.
Hendrik

3
Etiketler benim tarafımdan kötü seçilmiş bir ad olabilir, diyelim ki bir resminiz ve bu resimle ek açıklama var ve bu kombinasyonun kedilerle ilgili olup olmadığını sınıflandırmak istiyorsunuz, o zaman iki tür girişiniz ve bir ikili çıktınız var . Aralarındaki sinerjiyi elde etmek için katmanları bir yerde birleştirmeniz gerekecek. Başka bir örnek, biri üstten ve alttan birlikte sınıflandırmak zorunda olduğunuz iki
resminizin olduğu yerdir

3
@Hendrik: "Bileşen modelleri" yok, sadece bir model var. Katman birleştirme özelliği tarafından etkinleştirilen karmaşık bir yöntemdir. Bunu herhangi bir tek model için yaptığınız gibi değerlendirirsiniz - yani, bir uzatma testi veri kümesine karşı bir metrikle (resim / kelimeler örneğinde resim içeren veriler, ilişkili kısmi metin ve tahmin edilecek etiket olarak bir sonraki kelime). İsterseniz, modeldeki katmanları ne yaptıklarını görmek için inceleyebilirsiniz - örneğin CNN özelliklerinin analizi hala evrişimli katmanlara uygulanabilir.
Neil Slater
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.