Keras Convolution2d () tarafından kullanılan varsayılan filtreler nedir / nelerdir?


18

Sinir ağları için oldukça yeniyim, ama doğrusal cebiri ve evrişimin matematiğini gayet iyi anlıyorum.

Ben rakamları tanımak için MNIST verileri ile bir Keras evrişimsel NN eğitimi için net çeşitli yerlerde buldum örnek kod anlamaya çalışıyorum. Beklentim, kıvrımlı bir katman oluşturduğumda, girdiye uygulanacak bir filtre veya filtre kümesi belirtmem gerektiğiydi. Ama bulduğum üç örneğin hepsi böyle bir evrişim katmanı yaratıyor:

model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
                        border_mode='valid',
                        input_shape=input_shape))

Bu, CNN tarafından işlenen görüntülere toplam 32 3x3 filtre uyguluyor gibi görünüyor. Peki bu filtreler nedir? Onları matematiksel olarak nasıl tarif ederim? Keras dokümantasyonu yardımcı değildir.

Şimdiden teşekkürler,


2
Bu CNN'lerin evrişim kısmını anlamaktan kaynaklanıyor. Burada okuyabilirsiniz: cs231n.github.io/convolutional-networks
Christian Safka

Yanıtlar:


15

Varsayılan olarak, filtreleri, şekilde tanımlanan pozitif ve negatif sınırlar ile düzgün bir dağılımdan değerler çeken yöntem kullanılarak rastgele başlatılır : Wglorot_uniform

W~U(6nbenn+nÖut,-6nbenn+nÖut),

burada , bu birime beslenen birim sayısı ve , bu sonucun beslendiği birim sayısıdır.nbennnÖut

Bir tahmin yapmak için ağı kullandığınızda, bu filtreler ağın her katmanına uygulanır. Yani, her girdi görüntüsü üzerindeki her filtre için ayrı bir kıvrım gerçekleştirilir ve bu kıvrımların sonuçları bir sonraki kıvrım katmanına (veya tam olarak bağlı katmana veya sahip olabileceğiniz başka bir şeye) beslenir.

Egzersiz sırasında, filtrelerdeki değerler bir kayıp fonksiyonuna göre geriye doğru hareketle optimize edilir. Rakamları tanıma gibi sınıflandırma görevleri için genellikle çapraz entropi kaybı kullanılır. Aşağıda, birinci katmanda (üstte) öğrenilen bazı filtrelerin ve kıvrımlı bir ağın ikinci katında (altta) öğrenilen filtrelerin bir görselleştirmesi vardır:

dönel ağ filtreleri görselleştirme

Gördüğünüz gibi, ilk katman filtreleri temel olarak basit kenar detektörleri olarak işlev görürken, ikinci katman filtreleri daha karmaşıktır. Bir ağın derinliğine ilerledikçe, filtreler daha karmaşık şekilleri algılayabilir. Bu filtreler zaten birçok kez kıvrılmış görüntüler üzerinde etkili olduğundan ve muhtemelen orijinal doğal görüntüye çok benzemediğinden, görselleştirmek biraz zorlaşıyor.


5
glorot_uniformnormal dağılımı kullanmaz. Bence tarif ediyorsun glorot_normal. Bunun cevap için çok önemli olduğunu düşünmüyorum - kilit noktalar rastgele başlatma ve ardından eğitimin etkileri. Eğitimli filtrelerin uç / köşe vb filtreleri gibi görünmesini açıklamaya değer olabilir (belki de ilk katman filtrelerini görüntülemeden önce / sonra klasik görüntülerinden biri ile).
Neil Slater

Tim, matematiği verdiğin için teşekkürler. @Neil Slater - filtrelerin, geri yayılımla eğitimden sonra, kenar tespiti vb. Daha fazla itibarım olsaydı, her iki katkınızı da + 1'leyebilirdim.
ChrisFal

@NeilSlater Yorumunuz için teşekkürler - haklısın, kafam karışmıştı glorot_normalve glorot_uniformcevabı bunu yansıtacak şekilde güncelledim. Ayrıca, önerdiğiniz gibi filtrelerin nasıl sonuçlandığı hakkında biraz ek bilgi ekledim.
timleathart

6

birFkBk(ben,j)

Bk(ben,j)=(Fk*bir)(ben,j)=Σl=0,1,2Σm=0,1,2Fk(l,m)bir(ben-l,j-m)

resim açıklamasını buraya girin

Traned modeli, maliyet fonksiyonunuza göre çekirdekleri eğitecek ve sonunda bu çekirdekler modelinizin filtreleridir.


Bu matematiği anladım, ancak eminim ki bu konunun birçok okuyucusu diyagramı yararlı bulacaktır. Çok teşekkürler!
ChrisFal


@vinnitu evet, gerçekten. Aslında B'yi de Bk (i, j) olarak değiştirmem gerekiyor (i = 0,1,2, j = 0,1,2).
lucky6qi
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.