Krizhevsky'nin 12 CNN'i ilk katmanda 253,440 nöronu nasıl elde eder?


24

Gelen Alex Krizhevsky, ve diğ. Derin evrişimli sinir ağları ile Imagenet sınıflandırması , her katmandaki nöron sayısını numaralandırır (aşağıdaki şemaya bakınız).

Ağın girişi 150.528 boyutludur ve ağın kalan katmanlarındaki nöron sayısı 253,440–186,624–64,896–64,896–43,264– 4096–4096–1000 arasında verilir.

CNN

3B Görünüm

İlk kattan sonraki tüm katmanlar için nöronların sayısı açıktır. Nöronları hesaplamanın basit bir yolu, o katmanın ( planes X width X height) üç boyutunu basitçe çarpmaktır :

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

Ancak, ilk katmana bakmak:

  • 1. Katman: 55x55x48 * 2 = 290400

Bunun kağıtta belirtildiği gibi olmadığına dikkat edin 253,440!

Çıktı Boyutunu Hesapla

Bir evrişimin çıktı tensörünü hesaplamanın diğer yolu:

Giriş görüntü 3 boyutlu bir tensör ise nInputPlane x height x width, çıkış görüntü boyutu olacaktır nOutputPlane x owidth x oheightnerede

owidth = (width - kW) / dW + 1

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

( Torch SpatialConvolution Dokümantasyonundan )

Giriş görüntüsü:

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

Ve evrişim katmanı:

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

(örneğin, çekirdek büyüklüğü 11, adım 4)

Bu sayıları takarak aldığımız:

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

Bu yüzden 55x55, kağıtla eşleştirmemiz gereken boyutlardan birisini kısaldık. Dolgu olabilirler (ancak cuda-convnet2model açıkça dolguyu 0'a ayarlar)

Büyük 54boyutları alırsak 96x54x54 = 279,936nöronlar alırız - hala çok fazla.

İşte benim sorum bu:

İlk evrişim tabakası için 253,440 nöronu nasıl elde ederler? Neyi kaçırıyorum?


Bunu hiç çözdün mü? Sadece hesaplamalarınızda bilge davranmak için: owidth ve oheight aslında 54.25 olurdu. Bunu anlamaya çalıştım ve ilk adım olarak, sözde 253440 nöronu, filtre başına 2640 nöron veren 96 filtreye böldüm. Bu kare bir sayı değil. Öyleyse ikimiz de burada bir yanlış anlaşılma var ya da yazarların bir yanlışlığı olabilir ... Onlarla iletişim kurdun mu?
anderas

benimle aynı, bu çok kafamı karıştırıyor. btw, girişin 224x224x3 olduğu doğru mu? 227x227x3 olması gerektiğini düşünüyorum. Bakalım görelim ki, 227x227, ilk solda 5 hücre ve son sağda 5 hücre, 11x11 boyutundaki çekirdek evrişiminin merkezi olamaz. Böylece, ilk çekirdeğin merkezi hücredir (6,6) ve ilk sırada merkez çekirdeğin sonuncusu hücredir (6x222). Stride-4 ile altıncı sıradaki çekirdeğin merkezini alacağız: sütun üstündeki hücre: 6,10,14, ..., 222 ve çekirdek-k merkezinin basit formülasyonu sütun = 6+ üzerinde (k -1) * 4, böylece sütun 222, k-inci merkezi = (222-6) / 4 + 1 = 55'tir.

4
48 * 48 * 55 * 2 = 253440 olduğuna dikkat edin, bu yüzden ilk katmandaki nöronların sayısını hesaplarken yazım hataları olabilir (55 yerine 48 ile çarpılır).
tsiki 19:15


@Firebug Bu [referanslar] etiketinin ilginç bir kullanımıdır. Ben sadece sorular için kullanmak düşündüm sormak referanslar için. Ama belki de yanılmışım. Farklı mı kullanıyorsun?
amip diyor Reinstate Monica

Yanıtlar:


8

NN'deki stanfords notundan:

Gerçek dünya örneği. Krizhevsky ve diğ. 2012'de ImageNet yarışmasını kazanan mimari, büyüklükteki görüntüleri kabul etti [227x227x3]. İlk Katlamalı Katmanda, alıcı alan büyüklüğü F = 11, adım S = 4 ve sıfır doldurma P = 0 olmayan nöronlar kullanıldı. (227 - 11) / 4 + 1 = 55'ten beri ve Conv katmanı K = 96 derinliğine sahip olduğundan, Conv katmanı çıkış hacminin büyüklüğü [55x55x96] idi. Bu hacimdeki 55 x 55 x 96 nöronun her biri, giriş hacmindeki büyüklükteki bir bölgeye [11x11x3] bağlandı. Ayrıca, her bir derinlik sütunundaki 96 nöronun hepsi girişin aynı [11x11x3] bölgesine bağlanır, fakat elbette farklı ağırlıklara sahiptir. Eğlenceli bir kenara, asıl kağıdı okursanız, giriş görüntülerinin 224x224 olduğunu iddia eder, ki bu kesinlikle yanlıştır, çünkü (224 - 11) / 4 + 1 kesinlikle bir tamsayı değildir. Bu ConvNets tarihinde birçok insanı karıştı ve ne olduğu hakkında çok az şey biliniyor. En iyi tahminim Alex'in gazetede bahsetmediği 3 ekstra pikselden oluşan sıfır dolgu kullanıyordu.

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

Bu notlar Stanford CS sınıf CS231n: Görsel Tanıma için Konvolüsyonel Sinir Ağları ile eşlik eder. Ödevlerle ilgili sorularınız / endişeleriniz / hata raporlarınız için Justin Johnson ile görüşün ya da ders notları için Andrej Karpathy ile iletişime geçin.


Bu notların yazarını adlandırarak kredi vermek mümkün müdür?
Silverfish,

Yazarlar notlarda açıkça belirtilmişlerdir, bkz. Cs231n.github.io
Bacon

2
Bağlantıyı izlerseniz açıkça başvuruda bulunmalarına rağmen, teklif burada da görünür, bu yüzden burada verilen kredi de olmalıdır. Bu kısmen nezaket, fakat aynı zamanda bağlantı çalışmayı durdurabildiğinden (örneğin, malzeme kaldırılırsa / duvardan çıkarılırsa / yeni bir adrese taşınırsa). Maalesef, bu sitede "bağlantı çürüklüğü" konusunda ciddi bir sorunumuz var - istatistiksel sorulara yüksek kaliteli cevapların uzun vadeli bir havuzu olarak hizmet etmeyi düşünürken, eski cevaplarımızın çoğu artık çalışmayan bağlantılar tarafından kullanılmıyor . Bu nedenle, cevapları olabildiğince bağımsız bir şekilde yapmaya çalışmak genellikle daha güvenlidir.
Silverfish,

0

Bu yazı gerçekten kafa karıştırıcı. Öncelikle, görüntülerin giriş boyutu yanlış 224x224, 55 çıktısını vermez. Bu nöronlar sadece bir grup halinde gruplanmış pikseller gibidir, bu yüzden çıktı rastgele değerlerin 2B görüntüsüdür (nöron değerleri). Yani temelde nöronların sayısı = genişlikxsinlikxdepth, bunu çözecek sırlar yok.

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.