मैं 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), तो मुझे इसे और समतल करने की आवश्यकता क्यों है?
Dense(16, input_shape=(5,3)
16 के सेट से प्रत्येक आउटपुट न्यूरॉन (और, इन न्यूरॉन्स के सभी 5 सेटों के लिए), सभी (3 x 5 = 15) इनपुट न्यूरॉन्स से जुड़ा होगा? या 16 के पहले सेट में प्रत्येक न्यूरॉन केवल 5 इनपुट न्यूरॉन्स के पहले सेट में 3 न्यूरॉन्स से जुड़ा होगा, और फिर 16 के दूसरे सेट में प्रत्येक न्यूरॉन केवल 5 इनपुट के दूसरे सेट में 3 न्यूरॉन्स से जुड़ा होता है न्यूरॉन्स, आदि .... मैं उलझन में हूँ जो यह है!