Apakah filter default yang digunakan oleh Keras Convolution2d ()?


18

Saya cukup baru di jaringan saraf, tapi saya mengerti aljabar linier dan matematika konvolusi dengan cukup baik.

Saya mencoba memahami kode contoh yang saya temukan di berbagai tempat di internet untuk melatih NN konvolusional yang Keras dengan data MNIST untuk mengenali angka. Harapan saya adalah ketika saya membuat layer convolutional, saya harus menentukan filter atau set filter untuk diterapkan pada input. Tetapi tiga sampel yang saya temukan semua membuat lapisan convolutional seperti ini:

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

Ini tampaknya menerapkan total 32 filter 3x3 untuk gambar yang diproses oleh CNN. Tapi apa saringan itu? Bagaimana saya menggambarkannya secara matematis? Dokumentasi yang keras tidak membantu.

Terima kasih sebelumnya,


2
Ini berasal dari memahami bagian konvolusi dari CNN. Anda dapat membaca di sini: cs231n.github.io/convolutional-networks
Christian Safka

Jawaban:


15

Secara default, filter W diinisialisasi secara acak menggunakan glorot_uniformmetode, yang mengambil nilai dari distribusi yang seragam dengan batas positif dan negatif yang dijelaskan sebagai berikut:

WU(6nsayan+nHaikamut,-6nsayan+nHaikamut),

di mana nsayan adalah jumlah unit yang dimasukkan ke dalam unit ini, dannHaikamut adalah jumlah unit hasil ini diumpankan ke.

Saat Anda menggunakan jaringan untuk membuat prediksi, filter ini diterapkan pada setiap lapisan jaringan. Yaitu, konvolusi diskrit dilakukan untuk setiap filter pada setiap gambar input, dan hasil konvolusi ini diumpankan ke lapisan konvolusi berikutnya (atau lapisan yang terhubung penuh, atau apa pun yang mungkin Anda miliki).

Selama pelatihan, nilai-nilai dalam filter dioptimalkan dengan backpropogation sehubungan dengan fungsi kerugian. Untuk tugas klasifikasi seperti mengenali angka, biasanya cross entropy loss digunakan. Berikut ini visualisasi dari beberapa filter yang dipelajari di lapisan pertama (atas) dan filter yang dipelajari di lapisan kedua (bawah) dari jaringan convolutional:

filter visualisasi konv netto

Seperti yang Anda lihat, filter lapisan pertama pada dasarnya semua bertindak sebagai pendeteksi tepi sederhana, sedangkan filter lapisan kedua lebih kompleks. Saat Anda masuk lebih dalam ke jaringan, filter dapat mendeteksi bentuk yang lebih kompleks. Akan sedikit sulit untuk memvisualisasikan, karena filter ini bekerja pada gambar yang telah berulang kali berbelit-belit, dan mungkin tidak terlalu mirip dengan gambar alami asli.


5
glorot_uniformtidak menggunakan distribusi normal. Saya pikir Anda sedang menggambarkan glorot_normal. Saya tidak berpikir itu sangat penting untuk jawabannya - poin kuncinya adalah inisialisasi acak diikuti oleh efek pelatihan. Mungkin perlu dijelaskan bagaimana filter yang dilatih berakhir seperti filter tepi / sudut dll (mungkin dengan salah satu gambar klasik sebelum / sesudah pelatihan pencitraan filter lapisan pertama).
Neil Slater

Tim, terima kasih sudah menyediakan matematika. @Neil Slater - wawasan Anda bahwa filter, setelah pelatihan dengan backpropagation, mungkin berakhir seperti deteksi tepi, dll., Cukup membantu. Jika saya memiliki lebih banyak reputasi, saya akan memberi +1 pada kedua kontribusi Anda.
ChrisFal

@ NeilSlater Terima kasih atas komentar Anda - Anda benar, saya bingung glorot_normaldan glorot_uniform, dan saya telah memperbarui jawaban untuk mencerminkan ini. Saya juga menambahkan sedikit info tambahan tentang bagaimana filter berakhir, seperti yang Anda sarankan.
timleathart

6

SEBUAHFkBk(saya,j)

Bk(saya,j)=(FkSEBUAH)(saya,j)=l=0,1,2m=0,1,2Fk(l,m)SEBUAH(saya-l,j-m)

masukkan deskripsi gambar di sini

Model traned akan melatih kernel sesuai dengan fungsi biaya Anda, dan pada akhirnya kernel ini adalah filter dari model Anda.


Saya memahami matematika ini, tetapi saya yakin banyak pembaca utas ini akan menganggap diagram ini bermanfaat. Jadi terima kasih!
ChrisFal

imghost.in/images/2018/03/06/XvatD.jpg mungkin gambar harus dengan koordinat (0,0) pada B?
vinnitu

@vinnitu ya, memang. Sebenarnya saya juga perlu memodifikasi B menjadi Bk (i, j), (i = 0,1,2, j = 0,1,2).
lucky6qi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.