2015-01-30 6 views
28

मैं AlexNet या VGG Net के पैरामीटर की सही संख्या नहीं दे सकता।संक्रामक तंत्रिका नेटवर्क के मानकों की संख्या की गणना कैसे करें?

उदाहरण के लिए, वीजीजी नेट की conv3-256 परत के पैरामीटर की संख्या की गणना करने के लिए, उत्तर 0.5 9 एम = (3 * 3) * (256 * 256) है, जो (कर्नेल आकार) * है (दोनों का उत्पाद संयुक्त परतों में चैनलों की संख्या), हालांकि, इस तरह, मुझे 138M पैरामीटर नहीं मिल सकते हैं।

तो क्या आप कृपया मुझे दिखा सकते हैं कि मेरी गणना के साथ गलत कहां है, या मुझे सही गणना प्रक्रिया दिखाएं?

+1

सभी परतों का अपना पूरा गणना दे दें ताकि हम देख सकते हैं कि क्या गलत है। यह देखने के लिए एक प्रारंभिक बिंदु है कि कुल संख्या की गणना कैसे करें: http://learning.eng.cam.ac.uk/pub/Public/Turner/Teaching/ml-lecture-3-slides.pdf – runDOSrun

+0

'एस' क्या करता है व्याख्यान की 10 वीं स्लाइड में खड़े हो जाओ? Subsampling के लिए 'स्ट्राइड'? @runDOSrun – nn0p

+2

यहां एक समान प्रश्न का मेरा उत्तर यहां दिया गया है: http://stackoverflow.com/a/39687866/1621562। पैरामीटर की कुल संख्या की गणना करने के लिए आप एक साधारण पायथन लिपि लिख सकते हैं (यदि आप कैफे का उपयोग कर रहे हैं)। Https://gist.github.com/kaushikpavani/a6a32bd87fdfe5529f0e908ed743f779 –

उत्तर

40

आप 16-परत (तालिका 1, स्तंभ डी) के साथ VGG नेट का उल्लेख तो 138M मापदंडों के कुल संख्या इस नेटवर्क के, यानी सब convolutional परतों सहित को संदर्भित करता है, लेकिन यह भी पूरी तरह से जुड़ा हुआ वाले।

3 x conv3-256 परतों से बनी 3 convolutional चरण को देखते हुए:

  • पहले एक एन = 128 इनपुट विमानों और एफ = 256 उत्पादन विमानों,
  • दो अन्य लोगों
  • है एन = 256 है इनपुट विमान और एफ = 256 आउटपुट विमान।

इन परतों में से प्रत्येक के लिए संकल्प कर्नेल 3x3 है। मानकों के संदर्भ में इस देता है:

  • 128x3x3x256 (वजन) + 256 (पूर्वाग्रहों) = 1 एक के लिए 295,168 पैरामीटर,
  • 256x3x3x256 (वजन) दो अन्य लोगों के लिए + 256 (पूर्वाग्रहों) = 590,080 मानकों ।

जैसा कि ऊपर बताया गया है, आपको सभी परतों के लिए ऐसा करना है, लेकिन पूरी तरह से जुड़े हुए लोगों को भी अंतिम 138 एम नंबर प्राप्त करने के लिए इन मानों को जोड़ना है।

-

अद्यतन: परतों के बीच में टूटने दे:

conv3-64 x 2  : 38,720 
conv3-128 x 2  : 221,440 
conv3-256 x 3  : 1,475,328 
conv3-512 x 3  : 5,899,776 
conv3-512 x 3  : 7,079,424 
fc1     : 102,764,544 
fc2     : 16,781,312 
fc3     : 4,097,000 
TOTAL    : 138,357,544 
पूरी तरह से जुड़ा हुआ परतों (एफसी) के लिए विशेष रूप से

:

fc1 (x): (512x7x7)x4,096 (weights) + 4,096 (biases) 
fc2 : 4,096x4,096  (weights) + 4,096 (biases) 
fc3 : 4,096x1,000  (weights) + 1,000 (biases) 

(x) को देखने के लेख की धारा 3.2: पूरी तरह से जुड़े परतों को पहले संकल्पक परतों में परिवर्तित किया जाता है (पहला 7 × 7 रूपांतरण के लिए एफसी परत। परत, अंतिम दो एफसी परतें 1 × 1 रूपांतरण के लिए। परतों)।

fc1

सही पूरी तरह से जुड़ा हुआ परतों को खिलाने से पहले स्थानिक संकल्प ऊपर precised के रूप में के बारे में विवरण 7x7 पिक्सल है। के रूप में कागज की धारा 2.1 के भीतर विस्तृत इसका कारण यह है इस VGG नेट convolutions से पहले स्थानिक गद्दी का उपयोग करता है:

[...] रूपा के स्थानिक गद्दी। परत इनपुट ऐसा है कि स्थानिक संकल्प को दृढ़ता के बाद संरक्षित किया जाता है, यानी।पैडिंग 3 × 3 रूपांतरण के लिए 1 पिक्सेल है। परतों।

इस तरह के एक गद्दी के साथ

, और एक 224x224 पिक्सल इनपुट छवि के साथ काम कर, संकल्प के रूप में परतों में आगे बढ़ने के कम हो जाती है: 112x112, 56x56, 28x28, पिछले घुमाव/पूलिंग चरण जो 512 सुविधा नक्शे है के बाद 14x14 और 7x7।

यह एक फीचर वेक्टर fc1 को आयाम के साथ पास करता है: 512x7x7।

+0

मैंने एक ही धारणा का उपयोग करके मज़े के लिए संख्याएं खेलीं लेकिन मुझे 138 एम भी नहीं मिला। मान लीजिए कि मेरे पास कहीं टाइपो है क्योंकि यह एक लंबी अभिव्यक्ति है। – runDOSrun

+0

मुझे संकल्पक परतों के लिए 14,714,688 पैरामीटर और पूरी तरह से जुड़े हुए 123,642,856 मिले जो कुल मिलाकर 138 एम प्रदान करते हैं। – deltheil

+0

'fc1' पैडिंग चीज बिल्कुल ठीक है जहां मैं अटक गया था। बहुत विस्तृत व्याख्या के लिए धन्यवाद। आज के वास्तुकला में – Eric

25

वीजीजी -16 नेटवर्क के लिए गणना का एक बड़ा टूटना भी CS231n व्याख्यान नोट्स में दिया गया है।

INPUT:  [224x224x3] memory: 224*224*3=150K weights: 0 
CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*3)*64 = 1,728 
CONV3-64: [224x224x64] memory: 224*224*64=3.2M weights: (3*3*64)*64 = 36,864 
POOL2:  [112x112x64] memory: 112*112*64=800K weights: 0 
CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*64)*128 = 73,728 
CONV3-128: [112x112x128] memory: 112*112*128=1.6M weights: (3*3*128)*128 = 147,456 
POOL2:  [56x56x128] memory: 56*56*128=400K weights: 0 
CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*128)*256 = 294,912 
CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824 
CONV3-256: [56x56x256] memory: 56*56*256=800K weights: (3*3*256)*256 = 589,824 
POOL2:  [28x28x256] memory: 28*28*256=200K weights: 0 
CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*256)*512 = 1,179,648 
CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296 
CONV3-512: [28x28x512] memory: 28*28*512=400K weights: (3*3*512)*512 = 2,359,296 
POOL2:  [14x14x512] memory: 14*14*512=100K weights: 0 
CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 
CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 
CONV3-512: [14x14x512] memory: 14*14*512=100K weights: (3*3*512)*512 = 2,359,296 
POOL2:  [7x7x512]  memory: 7*7*512=25K  weights: 0 
FC:  [1x1x4096]  memory: 4096    weights: 7*7*512*4096 = 102,760,448 
FC:  [1x1x4096]  memory: 4096    weights: 4096*4096 = 16,777,216 
FC:  [1x1x1000]  memory: 1000    weights: 4096*1000 = 4,096,000 

TOTAL memory: 24M * 4 bytes ~= 93MB/image (only forward! ~*2 for bwd) 
TOTAL params: 138M parameters 
+1

@ रे: क्या हमारे पास इन कुल पैराम की गणना करने के लिए स्वचालित रूप से कोई पायथन/मैटलैब स्क्रिप्ट है? धन्यवाद – user8264

+0

सीएनएन की कम्प्यूटेशनल लागत सीधे पैरामीटर के लिए है? –

0

मुझे पता है कि यह एक पुरानी पोस्ट है, मुझे लगता है कि @deltheil द्वारा स्वीकृत उत्तर में एक गलती है। यदि नहीं, तो मुझे सही होने में खुशी होगी। संकल्प परत में पूर्वाग्रह नहीं होना चाहिए। अर्थात 128x3x3x256 (वजन) + 256 (पूर्वाग्रहों) = 295,168 128x3x3x256 (वजन) होना चाहिए = 294,9112

धन्यवाद

+0

आपको उत्तर में टिप्पणी जोड़नी चाहिए। –

+0

हां, मैं चाहता था लेकिन प्रतिष्ठा के कारण नहीं हो सका। – rav

+1

अगर मैं गलत हूं तो मुझे सही करें लेकिन डिफ़ॉल्ट रूप से कैफे क्रांतिकारी परतों [पूर्वाग्रह] [bias_term [डिफ़ॉल्ट सत्य]) के लिए पूर्वाग्रह का उपयोग करता है और आधिकारिक वीजीजी 16 प्री-प्रशिक्षित मॉडल [2] इस तरह के डिफ़ॉल्ट का उपयोग करता है (कोई bias_term नहीं है: झूठी परत परिभाषा)। [1]: http://caffe.berkeleyvision.org/tutorial/layers/convolution.html [1]: https://gist.githubusercontent.com/ksimonyan/211839e770f7b538e2d8/raw/0067c9b32f60362c74f4c445a080beed06b07eb3/VGG_ILSVRC_16_layers_deploy.prototxt – deltheil

संबंधित मुद्दे