2016-08-25 12 views
13

मेरी समझ से, आम तौर पर एक ऑटो-एन्कोडर एन्कोडिंग और डिकोडिंग नेटवर्क में बंधे वजन का उपयोग करता है?कैफे में बंधे वजन वाले ऑटो-एन्कोडर्स

मैंने Caffe's auto-encoder example पर एक नज़र डाली, लेकिन मैंने नहीं देखा कि वजन कैसे बंधे हैं। मैंने देखा कि एन्कोडिंग और डिकोडिंग नेटवर्क समान ब्लॉब्स साझा करते हैं, लेकिन यह कैसे गारंटी है कि वजन सही ढंग से अपडेट किया गया है?

कैफे में बंधे वजन ऑटो-एन्कोडर्स को कैसे कार्यान्वित करें?

उत्तर

5

जबकि ऑटो-एन्कोडर्स में बंधे वजन का उपयोग करने का इतिहास है, आजकल इसका शायद ही कभी उपयोग किया जाता है (मेरे ज्ञान के सर्वोत्तम में), जो मुझे विश्वास है कि यह कैफे उदाहरण बंधे वजन का उपयोग क्यों नहीं करता है।

फिर भी, Caffe बंधे वजन के साथ समर्थन ऑटो एनकोडर करता है, और यह दो सुविधाओं का उपयोग कर possilbe है: पैरामीटर परतों और पक्षांतरित झंडा पूरी तरह से जुड़ा हुआ परत की (Caffe में InnerProduct) के बीच साझा करने। विशेष रूप से, दो पैरामीटर Caffe में साझा कर रहे हैं, तो उनके नाम एक ही है, जो इतनी तरह परम क्षेत्र के तहत निर्दिष्ट किया जा सकता है: "encode1_matrix

layer { 
    name: "encode1" 
    type: "InnerProduct" 
    bottom: "data" 
    top: "encode1" 
    param { 
    name: "encode1_matrix" 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    name: "encode1_bias" 
    lr_mult: 1 
    decay_mult: 0 
    } 
    inner_product_param { 
    num_output: 128 
    weight_filler { 
     type: "gaussian" 
     std: 1 
     sparse: 15 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 

एक और पूरी तरह से जुड़ा हुआ परत (मिलान आयामों के साथ) के नाम का इस्तेमाल किया है "और" एन्कोड 1_बायस "तो ये पैरामीटर हमेशा समान होंगे, और कैफे समेकित ग्रेडियेंट का ख्याल रखेगा और पैरामीटर को सही तरीके से अद्यतन करेगा। दूसरा भाग पूरी तरह से जुड़े परत के ट्रांसपोज़ झंडा का उपयोग कर रहा है, ताकि साझा मैट्रिक्स को इसके इनपुट के गुणा से पहले स्थानांतरित किया जा सके। तो, ऊपर के उदाहरण का विस्तार, अगर हम डिकोडिंग प्रक्रिया के हिस्से के रूप में के रूप में "encode1_matrix" एक ही वजन मैट्रिक्स के साथ एक पूरी तरह से जुड़ा हुआ परत करना चाहते थे, तो हम यह इतना तरह परिभाषित करेगा:

layer { 
    name: "decode1" 
    type: "InnerProduct" 
    bottom: "encode1" 
    top: "decode1" 
    param { 
    name: "encode1_matrix" 
    lr_mult: 1 
    decay_mult: 1 
    } 
    param { 
    name: "decode1_bias" 
    lr_mult: 1 
    decay_mult: 0 
    } 
    inner_product_param { 
    num_output: 784 
    transpose: true 
    weight_filler { 
     type: "gaussian" 
     std: 1 
     sparse: 15 
    } 
    bias_filler { 
     type: "constant" 
     value: 0 
    } 
    } 
} 

सूचना है कि पूर्वाग्रह पैरामीटर साझा नहीं किए जाते हैं (विभिन्न आउटपुट आयामों के कारण नहीं हो सकते हैं), जबकि मैट्रिक्स साझा किए जाते हैं और डिकोडर परत ट्रांस्ड फ्लैग का उपयोग करती है जो बंधे ऑटो-एन्कोडर आर्किटेक्चर को पूरा करती है। https://gist.github.com/orsharir/beb479d9ad5d8e389800c47c9ec42840

+0

धन्यवाद, कि एक बहुत मदद करता है:

Caffe का उपयोग कर एक बंधे ऑटो एनकोडर का एक पूरा काम कर उदाहरण के लिए यहाँ देखें – dontloo

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