Flatten() - TensorFlow اور Keras PlatoBlockchain ڈیٹا انٹیلی جنس کے ساتھ CNNs کے لیے گلوبل پولنگ کا استعمال نہ کریں۔ عمودی تلاش۔ عی

فلیٹن () کا استعمال نہ کریں - TensorFlow اور Keras کے ساتھ CNNs کے لیے گلوبل پولنگ

زیادہ تر پریکٹیشنرز، سب سے پہلے Convolutional Neural Network (CNN) کے فن تعمیر کے بارے میں سیکھتے ہوئے - یہ سیکھتے ہیں کہ یہ تین بنیادی حصوں پر مشتمل ہے:

  • Convolutional تہیں
  • پولنگ پرتیں۔
  • مکمل طور پر جڑی ہوئی پرتیں۔

زیادہ تر وسائل ہیں۔ کچھ اس سیگمنٹیشن میں تبدیلی، بشمول میری اپنی کتاب۔ خاص طور پر آن لائن - مکمل طور پر منسلک پرتیں a کا حوالہ دیتی ہیں۔ چپٹی پرت اور (عام طور پر) متعدد گھنی تہوں.

یہ معمول ہوا کرتا تھا، اور VGGNets جیسے معروف فن تعمیر نے اس نقطہ نظر کو استعمال کیا، اور اس کا اختتام اس میں ہوگا:

model = keras.Sequential([
    
    keras.layers.MaxPooling2D((2, 2), strides=(2, 2), padding='same'),
    keras.layers.Flatten(),
    keras.layers.Dropout(0.5),
    keras.layers.Dense(4096, activation='relu'), 
    keras.layers.Dropout(0.5),
    keras.layers.Dense(4096, activation='relu'),
    keras.layers.Dense(n_classes, activation='softmax')
])

اگرچہ، کسی وجہ سے - اکثر یہ بھول جاتا ہے کہ VGGNet اس نقطہ نظر کو استعمال کرنے کے لیے عملی طور پر آخری فن تعمیر تھا، اس کے پیدا ہونے والی واضح کمپیوٹیشنل رکاوٹ کی وجہ سے۔ جیسے ہی ResNets، VGGNets کے ٹھیک ایک سال بعد شائع ہوا (اور 7 سال پہلے)، تمام مرکزی دھارے کے فن تعمیر نے اپنے ماڈل کی تعریفیں اس کے ساتھ ختم کر دیں:

model = keras.Sequential([
    
    keras.layers.GlobalAveragePooling2D(),
    keras.layers.Dense(n_classes, activation='softmax')
])

CNNs میں فلیٹنگ 7 سالوں سے چپکی ہوئی ہے۔ 7 سال! اور ایسا لگتا ہے کہ کافی لوگ اس نقصان دہ اثر کے بارے میں بات نہیں کر رہے ہیں جو آپ کے سیکھنے کے تجربے اور آپ کے استعمال کیے جانے والے کمپیوٹیشنل وسائل دونوں پر پڑتے ہیں۔

گلوبل ایوریج پولنگ بہت سے اکاؤنٹس پر فلیٹننگ پر ترجیح دی جاتی ہے۔ اگر آپ چھوٹے CNN کی پروٹوٹی بنا رہے ہیں تو - گلوبل پولنگ کا استعمال کریں۔ اگر آپ کسی کو CNNs کے بارے میں تعلیم دے رہے ہیں تو - گلوبل پولنگ استعمال کریں۔ اگر آپ MVP بنا رہے ہیں - گلوبل پولنگ استعمال کریں۔ دیگر استعمال کے معاملات کے لیے چپٹی پرتوں کا استعمال کریں جہاں ان کی درحقیقت ضرورت ہو۔

کیس اسٹڈی - فلیٹننگ بمقابلہ گلوبل پولنگ

گلوبل پولنگ تمام فیچر نقشوں کو ایک سنگل میں گاڑھا کرتا ہے، تمام متعلقہ معلومات کو ایک ہی نقشے میں جمع کرتا ہے جسے متعدد پرتوں کی بجائے ایک گھنے درجہ بندی کی پرت سے آسانی سے سمجھا جا سکتا ہے۔ یہ عام طور پر اوسط پولنگ کے طور پر لاگو ہوتا ہے (GlobalAveragePooling2D) یا زیادہ سے زیادہ پولنگ (GlobalMaxPooling2D) اور 1D اور 3D ان پٹ کے لیے بھی کام کر سکتے ہیں۔

ایک خصوصیت کا نقشہ چپٹا کرنے کے بجائے جیسے (7, 7, 32) لمبائی 1536 کے ویکٹر میں اور اس لمبے ویکٹر سے پیٹرن کو سمجھنے کے لیے ایک یا ایک سے زیادہ تہوں کی تربیت: ہم اسے ایک میں گاڑھا کر سکتے ہیں۔ (7, 7) vector اور وہاں سے براہ راست درجہ بندی کریں۔ یہ اتنا آسان ہے!

نوٹ کریں کہ ResNets جیسے نیٹ ورکس کے لیے رکاوٹ کی پرتیں دسیوں ہزار فیچرز میں شمار ہوتی ہیں، نہ کہ محض 1536۔ چپٹا کرتے وقت، آپ اپنے نیٹ ورک کو انتہائی غیر موثر انداز میں عجیب و غریب شکل والے ویکٹرز سے سیکھنے کے لیے اذیت دے رہے ہیں۔ تصور کریں کہ ایک 2D تصویر کو ہر پکسل کی قطار پر کاٹا جا رہا ہے اور پھر ایک فلیٹ ویکٹر میں جوڑا جا رہا ہے۔ وہ دو پکسلز جو عمودی طور پر 0 پکسلز کے علاوہ ہوتے تھے۔ feature_map_width پکسلز افقی طور پر دور! اگرچہ یہ درجہ بندی کے الگورتھم کے لیے بہت زیادہ اہمیت نہیں رکھتا، جو کہ مقامی تبدیلی کے حق میں ہے - یہ کمپیوٹر ویژن کی دیگر ایپلی کیشنز کے لیے تصوراتی طور پر بھی اچھا نہیں ہوگا۔

آئیے ایک چھوٹے سے نمائشی نیٹ ورک کی وضاحت کرتے ہیں جو چند گھنے تہوں کے ساتھ چپٹی پرت کا استعمال کرتا ہے:

model = keras.Sequential([
    keras.layers.Input(shape=(224, 224, 3)),
    keras.layers.Conv2D(32, (3, 3), activation='relu'),
    keras.layers.Conv2D(32, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2), (2, 2)),
    keras.layers.BatchNormalization(),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2), (2, 2)),
    keras.layers.BatchNormalization(),
    keras.layers.Flatten(),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(64, activation='relu'),
    keras.layers.Dense(32, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])
model.summary()

خلاصہ کیسا لگتا ہے؟

...                                                              
 dense_6 (Dense)             (None, 10)                330       
                                                                 
=================================================================
Total params: 11,574,090
Trainable params: 11,573,898
Non-trainable params: 192
_________________________________________________________________

کھلونا نیٹ ورک کے لیے 11.5M پیرامیٹرز – اور بڑے ان پٹ کے ساتھ پیرامیٹرز کو پھٹتے ہوئے دیکھیں۔ 11.5M پیرامیٹرز. EfficientNets، بہترین کارکردگی کا مظاہرہ کرنے والے نیٹ ورکس میں سے ایک جو اب تک ~6M پیرامیٹرز پر کام کرتا ہے، اور ڈیٹا سے سیکھنے کی اصل کارکردگی اور صلاحیت کے لحاظ سے اس سادہ ماڈل سے موازنہ نہیں کیا جا سکتا۔

ہم نیٹ ورک کو گہرا بنا کر اس تعداد کو نمایاں طور پر کم کر سکتے ہیں، جس سے فیچر کے نقشوں کے چپٹے ہونے سے پہلے ان کو کم کرنے کے لیے زیادہ سے زیادہ پولنگ (اور ممکنہ طور پر سٹرائیڈ کنوولوشن) متعارف کرائے گی۔ تاہم، اس بات پر غور کریں کہ ہم نیٹ ورک کو زیادہ پیچیدہ بنا رہے ہیں تاکہ اسے کمپیوٹیشنل طور پر کم مہنگا بنایا جا سکے، یہ سب صرف ایک ہی پرت کی خاطر جو منصوبوں میں ایک رنچ پھینک رہی ہے۔

تہوں کے ساتھ گہرائی میں جانا ڈیٹا پوائنٹس کے درمیان زیادہ بامعنی، غیر لکیری تعلقات کو نکالنا چاہیے، نہ کہ چپٹی پرت کو پورا کرنے کے لیے ان پٹ کے سائز کو کم کرنا۔

یہاں گلوبل پولنگ کے ساتھ ایک نیٹ ورک ہے:

model = keras.Sequential([
    keras.layers.Input(shape=(224, 224, 3)),
    keras.layers.Conv2D(32, (3, 3), activation='relu'),
    keras.layers.Conv2D(32, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2), (2, 2)),
    keras.layers.BatchNormalization(),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.Conv2D(64, (3, 3), activation='relu'),
    keras.layers.MaxPooling2D((2, 2), (2, 2)),
    keras.layers.BatchNormalization(),
    keras.layers.GlobalAveragePooling2D(),
    keras.layers.Dropout(0.3),
    keras.layers.Dense(10, activation='softmax')
])

model.summary()

خلاصہ؟

 dense_8 (Dense)             (None, 10)                650       
                                                                 
=================================================================
Total params: 66,602
Trainable params: 66,410
Non-trainable params: 192
_________________________________________________________________

کافی بہتر! اگر ہم اس ماڈل کے ساتھ گہرائی میں جائیں تو پیرامیٹر کی تعداد بڑھ جائے گی، اور ہم نئی تہوں کے ساتھ ڈیٹا کے مزید پیچیدہ نمونوں کو حاصل کرنے کے قابل ہو سکتے ہیں۔ اگر بے تکلفی سے کیا جائے تو وہی مسائل پیدا ہوں گے جو VGGNets کو پابند کرتے ہیں۔

مزید جانا - ہاتھ سے پکڑے گئے اینڈ ٹو اینڈ پروجیکٹ

آپ کی جستجو کرنے والی فطرت آپ کو مزید آگے بڑھنا چاہتی ہے؟ ہم اپنے کو چیک کرنے کی تجویز کرتے ہیں۔ گائیڈڈ پروجیکٹ: "Convolutional Neural Networks - بنیادی فن تعمیر سے آگے".

بہترین طرز عمل، صنعت کے لیے منظور شدہ معیارات، اور چیٹ شیٹ کے ساتھ Git سیکھنے کے لیے ہمارے ہینڈ آن، عملی گائیڈ کو دیکھیں۔ گوگلنگ گٹ کمانڈز کو روکیں اور اصل میں سیکھ یہ!

میں آپ کو تھوڑا سا وقتی سفر پر لے جاؤں گا - 1998 سے 2022 تک، سالوں کے دوران تیار کیے گئے فن تعمیرات کو نمایاں کرتا ہوں، انہیں کس چیز نے منفرد بنایا، ان کی خامیاں کیا ہیں، اور قابل ذکر کو شروع سے لاگو کروں گا۔ جب ان کی بات آتی ہے تو آپ کے ہاتھوں پر کچھ گندگی رکھنے سے بہتر کوئی چیز نہیں ہے۔

آپ یہ جانے بغیر گاڑی چلا سکتے ہیں کہ انجن میں 4 یا 8 سلنڈر ہیں اور انجن کے اندر والوز کی جگہ کیا ہے۔ تاہم – اگر آپ انجن (کمپیوٹر وژن ماڈل) کو ڈیزائن اور اس کی تعریف کرنا چاہتے ہیں، تو آپ تھوڑا گہرائی میں جانا چاہیں گے۔ یہاں تک کہ اگر آپ فن تعمیرات کو ڈیزائن کرنے میں وقت نہیں لگانا چاہتے اور اس کے بجائے مصنوعات بنانا چاہتے ہیں، جو سب سے زیادہ کرنا چاہتے ہیں - آپ کو اس سبق میں اہم معلومات ملیں گی۔ آپ یہ سیکھیں گے کہ VGGNet جیسے فرسودہ فن تعمیرات کا استعمال آپ کے پروڈکٹ اور کارکردگی کو کیوں نقصان پہنچاتا ہے، اور اگر آپ کوئی بھی جدید تعمیر کر رہے ہیں تو آپ انہیں کیوں چھوڑ دیں، اور آپ سیکھیں گے کہ عملی مسائل کو حل کرنے کے لیے آپ کن فن تعمیرات پر جا سکتے ہیں اور کیا فوائد اور نقصان ہر ایک کے لئے ہیں.

اگر آپ اس سبق کے وسائل کو استعمال کرتے ہوئے اپنے فیلڈ میں کمپیوٹر ویژن کو لاگو کرنے کے خواہاں ہیں - تو آپ جدید ترین ماڈلز تلاش کرنے کے قابل ہو جائیں گے، یہ سمجھ سکیں گے کہ وہ کیسے کام کرتے ہیں اور کن معیاروں کے مطابق آپ ان کا موازنہ کر سکتے ہیں اور فیصلہ کر سکتے ہیں کہ استعمال کریں

تم کیا آرکیٹیکچرز اور ان کے نفاذ کے لیے گوگل کے پاس جانا پڑتا ہے - ان کی عام طور پر کاغذات میں بہت واضح طور پر وضاحت کی جاتی ہے، اور کیراس جیسے فریم ورک ان نفاذ کو پہلے سے کہیں زیادہ آسان بنا دیتے ہیں۔ اس گائیڈڈ پروجیکٹ کا اہم مقصد آپ کو یہ سکھانا ہے کہ فن تعمیرات اور کاغذات کو کیسے تلاش کرنا، پڑھنا، لاگو کرنا اور سمجھنا ہے۔ دنیا کا کوئی بھی وسیلہ ان تمام نئی پیشرفتوں کو برقرار رکھنے کے قابل نہیں ہوگا۔ میں نے یہاں تازہ ترین کاغذات شامل کیے ہیں - لیکن چند مہینوں میں، نئے پاپ اپ ہوں گے، اور یہ ناگزیر ہے۔ یہ جان کر کہ قابل بھروسہ نفاذ کہاں سے تلاش کرنا ہے، ان کا کاغذات سے موازنہ کرنا اور ان کو موافق بنانا آپ کو کمپیوٹر ویژن پروڈکٹس کے لیے درکار مسابقتی برتری فراہم کر سکتا ہے جو آپ بنانا چاہتے ہیں۔

نتیجہ

اس مختصر گائیڈ میں، ہم نے CNN فن تعمیر کے ڈیزائن میں چپٹا کرنے کے متبادل پر ایک نظر ڈالی ہے۔ مختصر ہونے کے باوجود - پروٹوٹائپس یا MVPs کو ڈیزائن کرتے وقت گائیڈ ایک عام مسئلہ کو حل کرتا ہے، اور آپ کو چپٹی کرنے کا ایک بہتر متبادل استعمال کرنے کا مشورہ دیتا ہے۔

کوئی بھی تجربہ کار کمپیوٹر وژن انجینئر اس اصول کو جانتا اور اس کا اطلاق کرے گا، اور اس پریکٹس کو قدر کی نگاہ سے دیکھا جاتا ہے۔ بدقسمتی سے، ایسا لگتا ہے کہ یہ نئے پریکٹیشنرز کے ساتھ مناسب طریقے سے منسلک نہیں ہوتا ہے جو ابھی ابھی فیلڈ میں داخل ہو رہے ہیں، اور ایسی چپچپا عادات پیدا کر سکتے ہیں جن سے چھٹکارا پانے میں کچھ وقت لگتا ہے۔

اگر آپ کمپیوٹر وژن میں داخل ہو رہے ہیں تو - اپنے آپ پر احسان کریں اور اپنے سیکھنے کے سفر میں درجہ بندی سے پہلے چپٹی پرتوں کا استعمال نہ کریں۔

ٹائم اسٹیمپ:

سے زیادہ Stackabuse