कैरस में "फ्लैटन" की भूमिका क्या है?


108

मैं Flattenकैरस में समारोह की भूमिका को समझने की कोशिश कर रहा हूं । नीचे मेरा कोड है, जो एक सरल दो-परत नेटवर्क है। यह आकार के 2-आयामी डेटा (3, 2) में लेता है, और आकार के 1-आयामी डेटा (1, 4) को आउटपुट करता है:

model = Sequential()
model.add(Dense(16, input_shape=(3, 2)))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(4))
model.compile(loss='mean_squared_error', optimizer='SGD')

x = np.array([[[1, 2], [3, 4], [5, 6]]])

y = model.predict(x)

print y.shape

यह प्रिंट करता है yजिसका आकार (1, 4) है। हालांकि, अगर मैं Flattenलाइन को हटाता हूं , तो यह प्रिंट करता है yजिसमें आकार (1, 3, 4) है।

मुझे यह समझ में नहीं आता है। तंत्रिका नेटवर्क की मेरी समझ से, model.add(Dense(16, input_shape=(3, 2)))फ़ंक्शन एक छिपा हुआ पूरी तरह से जुड़ा हुआ परत बना रहा है, जिसमें 16 नोड हैं। इन नोड्स में से प्रत्येक 3x2 इनपुट तत्वों में से प्रत्येक से जुड़ा हुआ है। इसलिए, इस पहली परत के आउटपुट में 16 नोड्स पहले से ही "फ्लैट" हैं। तो, पहली परत का आउटपुट आकार (1, 16) होना चाहिए। फिर, दूसरी परत इसे एक इनपुट के रूप में लेती है, और आकार (1, 4) के डेटा को आउटपुट करती है।

तो अगर पहली परत का आउटपुट पहले से ही "सपाट" और आकार का है (1, 16), तो मुझे इसे और समतल करने की आवश्यकता क्यों है?

जवाबों:


123

यदि आप केरेस प्रलेखन प्रविष्टि के लिए पढ़ते हैं Dense, तो आप देखेंगे कि यह कॉल:

Dense(16, input_shape=(5,3))

Dense3 इनपुट और 16 आउटपुट के साथ एक नेटवर्क में परिणाम होगा जो 5 चरणों में से प्रत्येक के लिए स्वतंत्र रूप से लागू किया जाएगा। तो, यदि आप D(x)3 आयामी वेक्टर को 16-डी वेक्टर में बदल देते हैं, तो आपको अपनी परत से आउटपुट के रूप में जो मिलेगा वह वैक्टर का एक क्रम होगा: [D(x[0,:]), D(x[1,:]),..., D(x[4,:])]आकार के साथ (5, 16)। आपके द्वारा निर्दिष्ट व्यवहार करने के लिए, आप पहले Flattenअपने इनपुट को 15-d वेक्टर पर ले सकते हैं और फिर लागू कर सकते हैं Dense:

model = Sequential()
model.add(Flatten(input_shape=(3, 2)))
model.add(Dense(16))
model.add(Activation('relu'))
model.add(Dense(4))
model.compile(loss='mean_squared_error', optimizer='SGD')

संपादित करें: जैसा कि कुछ लोगों ने समझने के लिए संघर्ष किया - यहां आपकी एक व्याख्या करने वाली छवि है:

यहां छवि विवरण दर्ज करें


आपके व्याख्या के लिये धन्यवाद। हालांकि स्पष्ट करने के लिए: Dense(16, input_shape=(5,3)16 के सेट से प्रत्येक आउटपुट न्यूरॉन (और, इन न्यूरॉन्स के सभी 5 सेटों के लिए), सभी (3 x 5 = 15) इनपुट न्यूरॉन्स से जुड़ा होगा? या 16 के पहले सेट में प्रत्येक न्यूरॉन केवल 5 इनपुट न्यूरॉन्स के पहले सेट में 3 न्यूरॉन्स से जुड़ा होगा, और फिर 16 के दूसरे सेट में प्रत्येक न्यूरॉन केवल 5 इनपुट के दूसरे सेट में 3 न्यूरॉन्स से जुड़ा होता है न्यूरॉन्स, आदि .... मैं उलझन में हूँ जो यह है!
कर्निवासोरस

1
आपके पास एक घने परत है जो 3 न्यूरॉन्स और आउटपुट 16 प्राप्त करता है जो 3 न्यूरॉन्स के 5 सेटों में से प्रत्येक पर लागू होता है।
मार्सिन मोजेको

1
आह अच्छा। मैं जो करने की कोशिश कर रहा हूं वह इनपुट के रूप में 5 रंगीन पिक्सेल की सूची ले रहा है, और मैं चाहता हूं कि वे पूरी तरह से जुड़े परत से गुजरें। तो input_shape=(5,3)इसका मतलब है कि 5 पिक्सेल हैं, और प्रत्येक पिक्सेल में तीन चैनल (आर, जी, बी) हैं। लेकिन आप जो कह रहे हैं, उसके अनुसार प्रत्येक चैनल को व्यक्तिगत रूप से संसाधित किया जाएगा, जबकि मैं चाहता हूं कि सभी तीन चैनल पहली परत में सभी न्यूरॉन्स द्वारा संसाधित किए जाएं। तो Flattenशुरू में तुरंत लेयर लगाने से मुझे वो मिलेगा जो मुझे चाहिए?
कर्निवासॉरस

8
साथ और बिना थोड़ा सा ड्राइंग Flattenसमझने में मदद कर सकता है।
Xvolks

2
ठीक है, दोस्तों - मैंने आपको एक छवि प्रदान की है। अब आप अपने डाउनवोट्स को हटा सकते हैं।
मार्सिन मोजेको

52

यहां छवि विवरण दर्ज करें इसी तरह से फ्लैटन मैट्रिक्स को एकल सरणी में बदलने का काम करता है।


4
इस आदमी को और अधिक चित्र बनाने की आवश्यकता है। यह मुझे पंसद है। यह समझ में आता है।
अल्फग्रान

10
हां, लेकिन इसकी आवश्यकता क्यों है, यह वास्तविक प्रश्न है जो मुझे लगता है।
हेलेन - नीचे

35

छोटा पाठ:

एक टेंसर को समतल करने का मतलब एक को छोड़कर सभी आयामों को हटाना है। यह वास्तव में फ्लैटन परत क्या है।

लंबे समय से पढ़ा:

यदि हम मूल मॉडल (फ्लैटन परत के साथ) को ध्यान में रखते हुए लेते हैं, तो हम निम्नलिखित मॉडल सारांश प्राप्त कर सकते हैं:

Layer (type)                 Output Shape              Param #   
=================================================================
D16 (Dense)                  (None, 3, 16)             48        
_________________________________________________________________
A (Activation)               (None, 3, 16)             0         
_________________________________________________________________
F (Flatten)                  (None, 48)                0         
_________________________________________________________________
D4 (Dense)                   (None, 4)                 196       
=================================================================
Total params: 244
Trainable params: 244
Non-trainable params: 0

इस सारांश के लिए अगली छवि उम्मीद है कि प्रत्येक परत के लिए इनपुट और आउटपुट आकारों पर थोड़ा और अधिक अर्थ प्रदान करेगी।

Flatten लेयर के लिए आउटपुट शेप जैसा कि आप पढ़ सकते हैं (None, 48)। यहाँ टिप है। आप इसे पढ़ना चाहिए (1, 48)या (2, 48)या ... या (16, 48)... या (32, 48)...

वास्तव में, Noneउस स्थिति का मतलब है किसी भी बैच का आकार। रिकॉल करने के लिए इनपुट के लिए पहला आयाम बैच आकार और दूसरा मतलब इनपुट सुविधाओं की संख्या है।

केरस में परत परत की भूमिका सुपर सरल है:

एक टेंसर पर एक समतल ऑपरेशन टेंसर को आकार देने के लिए फिर से आकार देता है जो बैच आयाम सहित टेंसर गैर में निहित तत्वों की संख्या के बराबर होता है ।

यहां छवि विवरण दर्ज करें


नोट: मैंने model.summary()आउटपुट आकृति और पैरामीटर विवरण प्रदान करने के लिए विधि का उपयोग किया ।


1
बहुत ही आनंदमय आरेख।
श्रेय जोशी

1
चित्र के लिए धन्यवाद। यह मुझे एक स्पष्ट तस्वीर देता है।
सुल्तान अहमद सगोर

0

समतल करें स्पष्ट करें कि आप एक बहुआयामी टेंसर को कैसे क्रमबद्ध करते हैं (टिपिकल इनपुट एक)। यह (समतल) इनपुट टेंसर और पहली छिपी परत के बीच मानचित्रण की अनुमति देता है। यदि पहली छिपी हुई परत "सघन" है, तो प्रत्येक तत्व (क्रमबद्ध) इनपुट टेंसर छिपे हुए सरणी के प्रत्येक तत्व से जुड़ा होगा। यदि आप Flatten का उपयोग नहीं करते हैं, तो जिस तरह से पहली छुपी हुई परत पर इनपुट टेंसर को मैप किया जाता है, वह अस्पष्ट होगा।


0

मुझे यह हाल ही में पता चला, इससे मुझे निश्चित रूप से समझने में मदद मिली: https://www.cs.ryerson.ca/~aharley/vis/conv/

तो एक इनपुट है, एक Conv2D, MaxPooling2D आदि, समतल परत अंत में हैं और दिखाते हैं कि वे कैसे बनते हैं और वे अंतिम वर्गीकरण (0-9) को कैसे परिभाषित करते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.