Keras

2016-07-26 17 views
5
में सिआमीज़ एनएन को लागू करने

तो मैं एक स्याम देश तंत्रिका नेटवर्क के बारे में this कागज को लागू करने की कोशिश कर रहा हूँ । मैं इसके बजाय CIFAR10 dataset का उपयोग कर रहा हूं, हालांकि, 10 कक्षाओं के साथ।Keras

पैरों में से एक के विनिर्देश सुविधा के लिए पुन: उत्पन्न किए जाते हैं। नोटेशन: सी_एक्स एक संकल्प परत है, एस_एक्स एक सबमप्लिंग परत है और एफ_एक्स पूरी तरह से जुड़ा हुआ परत है;

  1. सी 1: सुविधा नक्शे: 15, गिरी आकार = (7, 7)
  2. S2: सुविधा नक्शे: 15, क्षेत्र के देखने = (2, 2)
  3. एक साझा सूचकांक एक्स के साथ
  4. सी 3: सुविधा नक्शे: 45, गिरी आकार = (6, 6)
  5. एस 4: सुविधा नक्शे: 45, क्षेत्र के देखने = (4, 3)
  6. सी 5: सुविधा नक्शे: 250, गिरी आकार = (5, 5)
  7. एफ 6 (पूरी तरह से जुड़े परत): नहीं। इकाइयों के = 50

क्या मैं

model = Sequential() 

#C1 
model.add(Convolution2D(15, 7, 7, 
activation='relu', 
border_mode='same', 
input_shape=input_img_shape)) 
print("C1 shape: ", model.output_shape) 

#S2 
model.add(MaxPooling2D((2,2), border_mode='same')) 
print("S2 shape: ", model.output_shape) 
#... 

#C5 
model.add(Convolution2D(250, 5, 5, 
activation='relu', 
border_mode='same')) 
print("C5 shape: ", model.output_shape) 

#F6 
model.add(Dense(50)) 

यह एक लंबे त्रुटि संदेश है, जो मेरा मानना ​​है कि एक आकृति बदलें त्रुटि है फेंकता कोशिश की है। त्रुटि का एक स्निपेट:

Exception: Input 0 is incompatible with layer dense_13: expected 
ndim=2, found ndim=4 

मुझे पता है कि समस्या यह है कि अंतिम घने परत में अलग है क्योंकि कोड सुचारू रूप से आगे बढ़ती है, तो मैं इसे टिप्पणी बाहर। लेकिन मुझे यकीन नहीं है कि मुझे अपनी अंतिम पूरी तरह से जुड़े परत को आकार/निर्दिष्ट करना चाहिए ताकि यह पूर्व रूपांतरण परत के साथ संगत हो?

कुछ स्थान जहां मैं देखा है

This किसी समस्या से जूझ, हालांकि कार्यान्वयन थोड़ा अलग है है (ऐसा लगता है वहाँ एक 'स्याम देश' कोर इस लेखन के समय पर keras में परत नहीं है कि)। मुझे पता है कि implementations in Theano भी हैं, जो मुझे दिमाग में लगेगा अगर मैं इसे कैमरे में करने में सक्षम नहीं हूं।

धन्यवाद!

उत्तर

3

जैसा कि मतिस वाल्डेनेग्रो ने उल्लेख किया है, केरास में पहले से ही Siamese network का उदाहरण है। उदाहरण केवल घने परतों का उपयोग करता है, हालांकि।

आपकी समस्या यह है कि आप घुमाव के परतों और घने परतों के बीच एक Flatten परत जोड़ने सही आकार के लिए, को देखने के this Keras CNN example

इन 2 उदाहरण की मदद करनी चाहिए आप अपने स्याम देश नेटवर्क का निर्माण करने की जरूरत है।

+0

संकल्पनात्मक रूप से, क्या मैं पूछ सकता हूं कि आपको "फ़्लैटन" परत क्यों चाहिए? यह मेरे लिए नया है क्योंकि मैंने इसे पेपर में उल्लेख नहीं किया है। धन्यवाद! – AndreyIto

+1

@AndreyIto यह एक कार्यान्वयन विस्तार से अधिक है: केरास में, परत 'कनवॉल्यूशन 2 डी' के आउटपुट में 4 आयाम होते हैं [(स्रोत देखें)] (https://github.com/fchollet/keras/blob/master/keras/layers /convolutional.py#L248) जबकि 'डेन्स' परत का इनपुट आयाम 2 होना चाहिए [(स्रोत देखें)] (https://github.com/fchollet/keras/blob/master/keras/layers/core.py # L567)। इसलिए आपको 'डेटा' परत से गुज़रने से पहले अपने डेटा को 'फ़्लैटन' परत के साथ फ़्लैट करना होगा। – sytrus

1

आपको सियामीज़ परत की आवश्यकता नहीं है, तो आपको दो इनपुट और एक आउटपुट के साथ मॉडल बनाने के लिए केवल केरास functional API का उपयोग करने की आवश्यकता है।

लगता है कि केरा उदाहरण already contain एक मॉडल है जो आप लागू कर रहे हैं के समान ही है।

+0

आपके इनपुट के लिए धन्यवाद!हाँ, मैं इस उदाहरण में आया था, और यह सामान्य संरचना को एक साथ रखने में मेरी मदद करता था, लेकिन यह परतों के बीच आकार के प्रबंधन की विशिष्ट समस्या का समाधान नहीं करता था। लेकिन फिर भी धन्यवाद! – AndreyIto

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