Bagaimana K12 'CNN Krizhevsky mendapatkan 253.440 neuron di lapisan pertama?

24

Dalam Alex Krizhevsky, et al. Klasifikasi imagenet dengan jaringan saraf convolutional yang mendalam mereka menyebutkan jumlah neuron di setiap lapisan (lihat diagram di bawah).

Input jaringan adalah 150.528-dimensi, dan jumlah neuron dalam lapisan jaringan yang tersisa diberikan oleh 253.440–186.624–64.889–64.889–43.264–4096–4096–1000.

CNN

Tampilan 3D

Jumlah neuron untuk semua lapisan setelah yang pertama jelas. Salah satu cara sederhana untuk menghitung neuron adalah dengan hanya mengalikan tiga dimensi dari lapisan itu ( planes X width X height):

  • Layer 2: 27x27x128 * 2 = 186,624
  • Layer 3: 13x13x192 * 2 = 64,896
  • dll.

Namun, melihat lapisan pertama:

  • Lapisan 1: 55x55x48 * 2 = 290400

Perhatikan bahwa ini tidak 253,440 seperti yang ditentukan di koran!

Hitung Ukuran Output

Cara lain untuk menghitung tensor keluaran konvolusi adalah:

Jika gambar input adalah tensor 3D nInputPlane x height x width, ukuran gambar output akan berada di nOutputPlane x owidth x oheighttempat

owidth = (width - kW) / dW + 1

oheight = (height - kH) / dH + 1 .

(dari Dokumentasi SpatialConvolution Torch )

Gambar input adalah:

  • nInputPlane = 3
  • height = 224
  • width = 224

Dan lapisan konvolusi adalah:

  • nOutputPlane = 96
  • kW = 11
  • kH = 11
  • dW = 4
  • dW = 4

(mis. ukuran kernel 11, langkah 4)

Memasukkan angka-angka itu kita dapatkan:

owidth = (224 - 11) / 4 + 1 = 54 oheight = (224 - 11) / 4 + 1 = 54

Jadi kita kekurangan 55x55dimensi yang kita butuhkan untuk mencocokkan kertas. Mereka mungkin padding (tetapi cuda-convnet2model secara eksplisit menetapkan padding ke 0)

Jika kita mengambil 54dimensi -ukuran kita mendapatkan 96x54x54 = 279,936neuron - masih terlalu banyak.

Jadi pertanyaan saya adalah ini:

Bagaimana mereka mendapatkan 253.440 neuron untuk lapisan konvolusional pertama? Apa yang saya lewatkan?

R. Girard
sumber
Pernahkah Anda memecahkan ini? Hanya untuk menjadi gagah dengan perhitungan Anda: owidth dan oight sebenarnya akan menjadi 54,25. Saya mencoba mencari tahu ini, dan sebagai langkah pertama membagi 253440 neuron yang seharusnya di antara 96 ​​filter, yang menghasilkan 2640 neuron per filter. Ini bukan angka kuadrat. Jadi kita berdua memiliki kesalahpahaman di sini, atau mungkin ada kesalahan oleh penulis ... Apakah Anda menghubungi mereka?
anderas
sama dengan saya, ini sangat membingungkan saya. btw memang benar inputnya adalah 224x224x3? saya pikir itu harus 227x227x3. mari kita lihat apakah kita memiliki 227x227, 5 sel di kiri pertama dan 5 sel di kanan terakhir tidak bisa menjadi pusat konvolusi kernel dengan ukuran 11x11. Jadi pusat kernel pertama adalah sel (6,6) dan kernel center tengah di baris pertama adalah sel (6x222). Dengan langkah-4 kita akan mendapatkan pusat kernel pada baris keenam adalah: sel pada kolom: 6,10,14, ..., 222 dan formulasi sederhana untuk pusat kernel-k ada pada kolom = 6+ (k -1) * 4 sehingga kolom 222 adalah pusat k-th = (222-6) / 4 +1 = 55.
4
Perhatikan bahwa 48 * 48 * 55 * 2 = 253440, jadi mungkin mereka memiliki kesalahan ketik saat menghitung jumlah neuron di lapisan pertama (dikalikan dengan 48 bukannya 55).
tsiki
@ Firebug Ini adalah penggunaan tag [referensi] yang menarik. Saya pikir kami menggunakannya hanya untuk pertanyaan yang meminta referensi. Tapi mungkin saya salah. Apakah Anda menggunakannya secara berbeda?
Amoeba berkata Reinstate Monica

Jawaban:

8

Dari catatan Stanford di NN:

Contoh dunia nyata. Krizhevsky et al. arsitektur yang memenangkan tantangan ImageNet pada 2012 menerima gambar dengan ukuran [227x227x3]. Pada Lapisan Konvolusional pertama, ia menggunakan neuron dengan ukuran bidang reseptif F = 11, melangkah S = 4 dan tidak ada bantalan nol P = 0. Karena (227 - 11) / 4 + 1 = 55, dan karena layer Conv memiliki kedalaman K = 96, volume output layer Conv memiliki ukuran [55x55x96]. Masing-masing neuron 55 * 55 * 96 dalam volume ini terhubung ke wilayah ukuran [11x11x3] dalam volume input. Selain itu, semua 96 neuron di setiap kolom kedalaman terhubung ke wilayah input [11x11x3] yang sama, tetapi tentu saja dengan bobot yang berbeda. Selain menyenangkan, jika Anda membaca makalah yang sebenarnya itu mengklaim bahwa gambar input 224x224, yang pasti salah karena (224 - 11) / 4 + 1 jelas bukan bilangan bulat. Ini telah membingungkan banyak orang dalam sejarah ConvNets dan sedikit yang diketahui tentang apa yang terjadi. Tebakan terbaik saya sendiri adalah bahwa Alex menggunakan zero-padding 3 piksel tambahan yang tidak ia sebutkan di koran.

ref: http://cs231n.github.io/convolutional-networks/

Catatan ini menyertai kelas Stanford CS CS231n: Jaringan Syaraf Konvolusional untuk Pengakuan Visual. Untuk pertanyaan / masalah / laporan bug tentang kontak Justin Johnson mengenai tugas, atau hubungi Andrej Karpathy mengenai catatan kursus

Daging babi asap
sumber
Apakah mungkin memberi kredit dengan memberi nama penulis catatan itu?
Silverfish
Penulis jelas dirujuk sendiri dalam catatan, lihat cs231n.github.io
Bacon
2
Meskipun mereka jelas direferensikan jika Anda mengikuti tautan, penawaran juga muncul di sini, jadi harus ada kredit yang diberikan di sini juga. Itu sebagian dari kesopanan, tetapi juga karena tautannya mungkin berhenti berfungsi (mis. Jika materi dihapus / paywalled / dipindahkan ke alamat baru). Sayangnya kami memiliki masalah parah dengan "tautan busuk" di situs ini - sementara kami bermaksud untuk melayani sebagai penyimpanan jangka panjang dari jawaban berkualitas tinggi untuk pertanyaan statistik, banyak dari jawaban lama kami telah dianggap usang oleh tautan yang tidak lagi berfungsi . Jadi, umumnya lebih aman untuk mencoba membuat jawaban sebisa mungkin mandiri.
Silverfish
0

Makalah ini benar-benar membingungkan. Pertama, ukuran input gambar salah 224x224 tidak memberikan output 55. Neuron itu hanya seperti piksel yang dikelompokkan dalam satu, jadi outputnya adalah gambar 2D dari nilai acak (nilai neuron). Jadi pada dasarnya jumlah neuron = widthxheightxdepth, tidak ada rahasia untuk mencari tahu.

Moe
sumber