2016-02-21 10 views
7

इन लिंक से सिद्धांत दिखाता है कि कनवॉल्यूशनल नेटवर्क का क्रम है: Convolutional Layer - Non-liniear Activation - Pooling Layerपरत परत या संकल्पक परत के बाद सक्रियण समारोह?

  1. Neural networks and deep learning (equation (125)
  2. Deep learning book (page 304, 1st paragraph)
  3. Lenet (the equation)
  4. The source in this headline

लेकिन, उन साइट से पिछले कार्यान्वयन में, यह कहा है कि आदेश है: Convolutional Layer - Pooling Layer - Non-liniear Activation

  1. network3.py
  2. The sourcecode, LeNetConvPoolLayer class

मैं भी कोशिश की है एक Conv2D आपरेशन वाक्य रचना का पता लगाने के, लेकिन कोई सक्रियण समारोह देखते हैं, यह केवल फ़्लिप कर्नेल के साथ घुमाव है। क्या कोई मुझे यह बताने में मदद कर सकता है कि ऐसा क्यों होता है?

उत्तर

10

ठीक है, अधिकतम पूलिंग और गैर-रैखिकता में एकजुटता बढ़ रही है, इसलिए परिणाम उस मामले में समान है। तो सबसे पहले अधिकतम पूलिंग के माध्यम से सबस्कूल करना बेहतर होता है और फिर गैर-रैखिकता लागू होता है (यदि यह महंगा है, जैसे सिग्मोइड)।

conv2D के लिए, यह कर्नेल को फ़्लिप करता है। यह वास्तव में संकल्प की परिभाषा लागू करता है। यह एक रैखिक ऑपरेशन है, इसलिए आपको अगले चरण में गैर-रैखिकता स्वयं जोड़नी होगी, उदा। theano.tensor.nnet.relu

+0

आह सही है, परिणाम वही है (आज प्रयोग के बाद), और अनुमान के रूप में, यह इस तरह लागू किया जा सकता है क्योंकि लागत। धन्यवाद :) – malioboro

+0

संकल्प एक रैखिक ऑपरेशन नहीं है, इसलिए यदि आप अपने सभी गैर-रैखिकताओं जैसे रिल्लू, सिग्मोइड इत्यादि को हटाते हैं, तो आपके पास अभी भी एक कार्य नेटवर्क होगा। रूपांतरण आंदोलन प्रदर्शन एजेंडा के लिए एक सहसंबंध ऑपरेशन के रूप में लागू किया जाता है, और तंत्रिका नेटवर्क में, क्योंकि फ़िल्टर स्वचालित रूप से सीखे जाते हैं, अंत प्रभाव रूपांतरण फ़िल्टर के समान होता है। बीपी में इसके अलावा, संकल्प प्रकृति को ध्यान में रखा जाता है। इसके लिए यह वास्तव में एक संकल्प संचालन है, जगह ले रहा है और इस प्रकार एक गैर रैखिक है। – Breeze

+4

संकल्प * एक रैखिक ऑपरेशन है, जैसा पार-सहसंबंध है। डेटा और फ़िल्टर में दोनों रैखिक। – eickenberg

4

कई कागजात में लोग conv -> pooling -> non-linearity का उपयोग करते हैं। इसका मतलब यह नहीं है कि आप किसी अन्य आदेश का उपयोग नहीं कर सकते हैं और उचित परिणाम प्राप्त कर सकते हैं। अधिकतम-पूलिंग परत और Relu के मामले में आदेश कोई फर्क नहीं पड़ता (दोनों एक ही बात की गणना):

enter image description here

आप कर सकते हैं सबूत है कि यह याद है कि Relu एक तत्व के लिहाज से ऑपरेशन है द्वारा मामला है और एक गैर-घटते समारोह इतना

enter image description here

एक ही बात लगभग हर सक्रियण समारोह के लिए होता है (उनमें से ज्यादातर गैर घटते हैं)। लेकिन एक सामान्य पूलिंग परत (औसत-पूलिंग) के लिए काम नहीं करता है।


बहरहाल दोनों आदेश एक ही परिणाम का उत्पादन, Activation(MaxPool(x)) यह काफी तेजी से करता है आपरेशन की कम मात्रा करके। k आकार की पूलिंग परत के लिए, यह सक्रियण समारोह में k^2 गुना कम कॉल का उपयोग करता है।

अफसोस की बात यह है कि यह अनुकूलन सीएनएन के लिए नगण्य है, क्योंकि अधिकांश समय संकल्पक परतों में उपयोग किया जाता है।

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