আমি Flatten
কেরাসে এই অনুষ্ঠানের ভূমিকা বোঝার চেষ্টা করছি । নীচে আমার কোডটি, যা একটি সাধারণ দ্বি-স্তর নেটওয়ার্ক। এটি আকারের ত্রিমাত্রিক ডেটা নেয় (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 টি নিউরনের সাথে সংযুক্ত থাকবে? নিউরন, ইত্যাদি .... আমি এটি সম্পর্কে বিভ্রান্ত!