گہری سیکھنے کے لیے تصویری ڈیٹا کو بڑھانا

سمجھیں کہ تصویری ڈیٹا میں اضافہ کیا ہے اور اسے اپنے گہرے سیکھنے کے منصوبوں کے لیے Keras کا استعمال کرتے ہوئے کیسے استعمال کیا جائے۔

کی طرف سے تصویر کرس لاٹن on Unsplash سے

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

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

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

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

تصویری ڈیٹا کو بڑھانے کی اقسام

تصویری اضافہ کئی شکلوں میں آتا ہے، یہاں کچھ عام ہیں — عمودی شفٹ، افقی شفٹ، عمودی پلٹائیں، افقی پلٹائیں، گردش، چمک ایڈجسٹمنٹ، اور زوم ان/آؤٹ۔

میں پہلے Python اور Keras کا استعمال کرتے ہوئے تصویر بڑھانے کی مختلف تکنیکوں کا مظاہرہ کروں گا۔ اگر آپ کوشش کرنا چاہتے ہیں تو یقینی بنائیں کہ آپ کے پاس درج ذیل سافٹ ویئر اور پیکجز انسٹال ہیں:

ایناکونڈا اور ٹینسر فلو انسٹال ہونے کے بعد، ایک نئی Jupyter نوٹ بک بنائیں۔

عمودی شفٹ

پہلی تصویر بڑھانے کی تکنیک جو میں دکھانا چاہتا ہوں وہ ہے۔ عمودی شفٹ. عمودی شفٹ تصادفی طور پر تصویر کو عمودی طور پر اوپر یا نیچے شفٹ کرتا ہے۔ اس مثال کے لیے، میں نام کی ایک تصویر استعمال کرنے جا رہا ہوں۔ 747.jpg، میری Jupyter نوٹ بک کے اسی فولڈر میں واقع ہے۔

تصویری ذریعہ: https://commons.wikimedia.org/wiki/File:Qantas_Boeing_747-438ER_VH-OEI_at_LAX.jpg. یہ فائل کے تحت لائسنس یافتہ ہے۔ تخلیقی العام انتساب - اشتراک ایک جیسے 2.0 جنرک لائسنس

درج ذیل کوڈ کا ٹکڑا استعمال کرتا ہے۔ ImageDataGenerator تصویر کو عمودی طور پر شفٹ کرنے کے لیے کیراس میں کلاس۔

۔ ImageDataGenerator کیراس کی کلاس ریئل ٹائم ڈیٹا بڑھانے کے ساتھ امیج ڈیٹا کے بیچز تیار کرتی ہے۔

#--- ماڈیولز درآمد کریں---
بطور این پی پی درآمد کریں
matplotlib.pyplot بطور plt درآمد کریں۔
tensorflow.keras.preprocessing.image سے load_img درآمد کریں۔
tensorflow.keras.preprocessing.image img_to_array سے درآمد کریں۔
tensorflow.keras.preprocessing.image امپورٹ امیج ڈیٹا جنریٹر سے
#---تصویر لوڈ کریں---
image_filename = '747.jpg'
img = load_img(تصویر_فائل کا نام)
#--- تصویر کو 3D صف میں تبدیل کریں---
image_data = img_to_array(img)
#--- نمائندگی کرنے والے 4D سرنی کے 1 عنصر کی 3-D صف میں تبدیل کریں۔
# تصویر---
images_data = np.expand_dims(image_data, axis=0)
#--- تصویری ڈیٹا کو بڑھانے والا جنریٹر بنائیں---
ڈیٹاجن = امیج ڈیٹا جنریٹر(چوڑائی_شفٹ_رینج=0.2)
#--- تکرار کرنے والا تیار کریں؛ flow() 4D صف میں لیتا ہے اور واپس آتا ہے۔
# ایک تکرار کنندہ جس میں امیجز کا ایک بیچ ہوتا ہے---
train_generator = datagen.flow(images_data, batch_size=1)
قطاریں = 5
کالم = 4
#---پلاٹ 5 قطاریں اور 4 کالم---
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
#--- بیچ میں اگلی تصویر حاصل کریں (بیچ کے بعد سے ایک تصویر
# سائز 1 ہے)---
image_batch = train_generator.next()

#---دیکھنے کے لیے غیر دستخط شدہ عدد میں تبدیل کریں---
image = image_batch[0].astype('uint8')

#--- تصویر دکھائیں---
axes[r,c].imshow(تصویر)
#--- اعداد و شمار کا سائز مقرر کریں---
fig.set_size_inches(15,10)

مندرجہ بالا کوڈ کا ٹکڑا درج ذیل آؤٹ پٹ تیار کرتا ہے:

جیسا کہ آپ اوپر والے آؤٹ پٹ سے دیکھ سکتے ہیں، ہر بار جب آپ کال کرتے ہیں۔ next() سے طریقہ train_generator اعتراض، آپ کو ایک تصویر ملتی ہے جس میں قدرے تبدیلی کی گئی ہے۔ مندرجہ بالا کوڈ کے ٹکڑوں میں، ایک نئی تصویر جو اس کی اصل تصویر کی اونچائی کی بنیاد پر 20 فیصد تک شفٹ ہوتی ہے جب بھی آپ کال کرتے ہیں واپس آ جاتی ہے۔ next() طریقہ:

ڈیٹاجن = امیج ڈیٹا جنریٹرwidth_shift_range=0.2)

دلچسپ بات یہ ہے کہ کے اس ورژن کے لیے ImageDataGenerator (tensorflow.keras.preprocessing.image) کلاس، کی وضاحت width_shift_range پیرامیٹر تصویر کو افقی کے بجائے عمودی طور پر شفٹ کرتا ہے (جو پرانے کا طرز عمل ہےImageDataGeneratorسے keras.preprocessing.image ماڈیول)۔ اسی طرح، اگر آپ چاہتے ہیں کہ تصویر کو افقی طور پر منتقل کیا جائے، تو آپ کو استعمال کرنے کی ضرورت ہے۔ height_shift_range پیرامیٹر (اگلا حصہ دیکھیں)۔

یاد رکھیں کہ next() طریقہ آپ جتنی بار چاہیں ایک بڑھا ہوا امیج واپس کر دے گا۔ اوپر دیے گئے کوڈ کے ٹکڑوں میں، ہم نے اسے 20 بار کہا (5 قطاروں کے اوقات 4 کالم)۔

افقی شفٹ

اب آپ تصویر کو افقی طور پر تبدیل کرنے کی کوشش کر سکتے ہیں۔ height_shift_range پیرامیٹر:

ڈیٹاجن = امیج ڈیٹا جنریٹرheight_shift_range=0.2)
train_generator = datagen.flow(images_data, batch_size=1)
قطاریں = 5
کالم = 4
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(تصویر)
fig.set_size_inches(15,10)

مندرجہ بالا کوڈ کا ٹکڑا درج ذیل آؤٹ پٹ تیار کرتا ہے:

افقی پلٹائیں

کبھی کبھی تصویر کو افقی طور پر پلٹنا سمجھ میں آتا ہے۔ ہوائی جہاز کی صورت میں، ہوائی جہاز کا اگلا حصہ بائیں یا دائیں طرف ہو سکتا ہے:

ڈیٹاجن = امیج ڈیٹا جنریٹرhorizontal_flip=True)
train_generator = datagen.flow(images_data, batch_size=1)
قطاریں = 2
کالم = 2
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(تصویر)
fig.set_size_inches(15,10)

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

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

عمودی پلٹائیں

افقی پلٹنے کی طرح، آپ عمودی پلٹنا بھی انجام دے سکتے ہیں:

ڈیٹاجن = امیج ڈیٹا جنریٹرvertical_flip=True)
train_generator = datagen.flow(images_data, batch_size=1)
قطاریں = 2
کالم = 2
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(تصویر)
fig.set_size_inches(15,10)

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

گھماؤ

گردش، جیسا کہ نام سے ظاہر ہے، آپ کی تصویر کو گھماتا ہے۔ یہ ہمارے ہوائی جہاز کی تصویر کے لیے بہت مفید ہوگا۔ درج ذیل کوڈ کے ٹکڑے تصویر کو 50 ڈگری تک تصادفی طور پر گھماتے ہیں:

ڈیٹاجن = امیج ڈیٹا جنریٹرگردش_رینج=50)
train_generator = datagen.flow(images_data)
قطاریں = 5
کالم = 4
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(تصویر)
fig.set_size_inches(15,10)

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

چمک

ایک اور بڑھانے کی تکنیک تصویر کی چمک کو ایڈجسٹ کر رہی ہے. درج ذیل کوڈ کا ٹکڑا برائٹنیس شفٹ ویلیوز کی ایک رینج سیٹ کرتا ہے۔

ڈیٹاجن = امیج ڈیٹا جنریٹرچمک_رینج=[0.15,2.0])
train_generator = datagen.flow(images_data, batch_size=1)
قطاریں = 5
کالم = 4
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(تصویر)
fig.set_size_inches(15,10)

آؤٹ پٹ مختلف چمک کی تصاویر کی ایک سیریز پر مشتمل ہے:

زومنگ

آپ تصاویر کو زوم ان یا آؤٹ بھی کر سکتے ہیں:

ڈیٹاجن = امیج ڈیٹا جنریٹرزوم_رینج=[5,0.5])
train_generator = datagen.flow(images_data, batch_size=1)
قطاریں = 5
کالم = 4
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(تصویر)
fig.set_size_inches(15,10)

آؤٹ پٹ تصویر کو مختلف زوم ریشوز میں دکھاتا ہے:

نوٹ کریں کہ تصاویر کو زوم کرنے سے امیجز کے اسپیکٹ ریشوز بدل جائیں گے۔

تمام اضافہ کو یکجا کرنا

بلاشبہ، میں نے اب تک جن مختلف تکنیکوں پر تبادلہ خیال کیا ہے، ان کو ملایا جا سکتا ہے:

ڈیٹاجن = امیج ڈیٹا جنریٹرwidth_shift_range=0.2,
height_shift_range=0.2,
horizontal_flip=True،
گردش_رینج=50،
چمک_رینج=[0.15,2.0]،
زوم_رینج=[5,0.5]
)
train_generator = datagen.flow(images_data, batch_size=1)قطاریں = 8
کالم = 8
انجیر، محور = plt. ذیلی پلاٹ (قطاریں، کالم)
رینج میں r کے لیے (قطاریں):
رینج میں c کے لیے (کالم):
image_batch = train_generator.next()
image = image_batch[0].astype('uint8')
axes[r,c].imshow(تصویر)
fig.set_size_inches(15,10)

نوٹ کریں کہ میں نے عمودی فلپ کو چھوڑ دیا ہے کیونکہ یہ ہماری مثال کے لئے معنی نہیں رکھتا ہے۔

آؤٹ پٹ اب تصویر کو مختلف اضافہ کے ساتھ دکھاتا ہے:

پچھلے حصوں میں تصویری ڈیٹا کو بڑھانے کی بنیادی باتیں اور اسے ایک تصویر پر کیسے لاگو کیا جا سکتا ہے دکھایا گیا ہے۔ گہرائی سے سیکھنے میں، ہم اکثر تصاویر کے ایک سیٹ سے نمٹتے ہیں۔ تو آئیے اب دیکھتے ہیں کہ تصویروں کے سیٹ پر تصویری اضافہ کیسے کیا جا سکتا ہے۔ مثالوں کے لیے، میں یہ فرض کرنے جا رہا ہوں کہ اس فولڈر میں جس میں آپ کی Jupyter Notebook ہے، آپ کے پاس ایک پھل فولڈر اور درج ذیل ذیلی فولڈرز:

پھل
|__کیلا
|__banana1.jpg
|__banana2.jpg
|__banana3.jpg
|__...
|__ڈورین فروٹ
|__durian1.jpg
|__durian2.jpg
|__durian3.jpg
|__...
|__کینو
|__orange1.jpg
|__orange2.jpg
|__orange3.jpg
|__...
|__اسٹرابیری
|__strawberry1.jpg
|__strawberry2.jpg
|__strawberry3.jpg
|__...

ہر ذیلی فولڈر میں تصاویر کا ایک سیٹ ہوتا ہے۔ مثال کے طور پر، the کیلے فولڈر میں متعدد تصاویر کا نام ہے۔ banana1.jpg, banana2.jpg، اور اسی طرح. ذیلی فولڈرز کا نام مختلف امیجز کے لیبل کے طور پر کام کرے گا۔ اس کا مطلب یہ ہے کہ کے تحت تمام فائلوں کیلے فولڈر میں کیلے وغیرہ کی تصاویر شامل ہیں۔

ڈسک سے تصاویر کی ایک سیریز لوڈ کرنے کے لیے، اب آپ کال کریں۔ flow_from_directory() کا طریقہ ImageDataGenerator مثال کے بجائے flow() طریقہ (میموری سے تصاویر لوڈ کرنے کے لیے):

ٹرین_ڈیٹاجن = امیج ڈیٹا جنریٹر
horizontal_flip=True،
vertical_flip=True،
گردش_رینج=50،
)
batch_size = 8۔ٹرین_جنریٹر = train_datagen.flow_from_directory(
'./پھل'،
target_size=(224,224)،
color_mode='rgb'،
بیچ_سائز=بیچ_سائز،
class_mode='categorical'،
شفل = سچ)

مشاہدہ کریں کہ میں اب سیٹ کرتا ہوں۔ batch_size 8 تک۔ آپ جلد ہی بیچ سائز کا استعمال دیکھیں گے۔

آئیٹریٹر کا استعمال کرتے ہوئے، میں مختلف پھلوں (کیلا، ڈورین، اورنج، اور اسٹرابیری) کے لیبل تلاش کر سکتا ہوں:

class_dictionary = train_generator.class_index#---لیبلوں کی ایک لغت بنائیں---
class_dictionary = { قدر: کلید کے لیے کلید، قدر میں
class_dictionary.items()}
#--- لغت کو فہرست میں تبدیل کریں---
class_list = [value for _, value in class_dictionary.items()]
پرنٹ (کلاس_لسٹ)

آپ کو درج ذیل آؤٹ پٹ نظر آئے گا:

54 کلاسوں سے تعلق رکھنے والی 4 تصاویر ملی ہیں۔
['کیلا'، 'ڈورین'، 'سنتری'، 'اسٹرابیری']

مجموعی طور پر، 54 فولڈرز میں کل 4 تصاویر ہیں۔ اس کے علاوہ، class_list متغیر پھلوں کی فہرست پر مشتمل ہے۔

میں اب بڑھا ہوا امیجز کے سیٹ کو پرنٹ کروں گا جو کہ کی طرف سے بنائی گئی ہیں۔ ImageDataGenerator کلاس میں من مانی طور پر قطاروں کو 10 پر سیٹ کروں گا، اور ہر قطار کے لیے، میں واپس کی گئی تصاویر کے بیچ کو پرنٹ کرنا چاہتا ہوں (جو اس مثال میں 8 ہے):

قطاریں = 10انجیر، محور = plt.subplots(قطاریں، بیچ_سائز)رینج میں r کے لیے (قطاریں):    
#--- بڑھی ہوئی تصاویر کا بیچ حاصل کریں---
image_batch = train_generator.next()
#--- واپس کی گئی تصاویر کی تعداد حاصل کریں---
images_count = image_batch[0].shape[0]

رینج میں c کے لیے (تصاویر کا شمار):
#---دیکھنے کے لیے غیر دستخط شدہ عدد میں تبدیل کریں---
image = image_batch[0][c].astype('uint8')

#--- تصویر دکھائیں---
axes[r,c].imshow(تصویر)

#---تصویر کا لیبل دکھائیں---
axes[r,c].title.set_text(
class_list[np.argmax(image_batch[1][c])])
#---x اور y-ticks کو چھپاتا ہے---
axes[r,c].set_xticks([])
axes[r,c].set_yticks([])
fig.set_size_inches(15,18)

چونکہ batch_size اب 8 پر سیٹ ہے (اور اب 1 نہیں)، train_generator.next() طریقہ آپ کو واپس کرے گا a بیچ جب بھی آپ اسے کال کریں تو آٹھ بڑھی ہوئی تصاویر میں سے۔ واپس کی گئی تصاویر کی تعداد پر مبنی ہے۔ batch_size جسے آپ نے پہلے سیٹ کیا تھا۔ flow_from_directory() طریقہ:

train_generator = train_datagen.flow_from_directory(
'./پھل'،
target_size=(224,224)،
color_mode='rgb'،
بیچ_سائز=بیچ_سائز، # بیچ_سائز = 8
class_mode='categorical'،
شفل = سچ)

کی قیمت image_batch متغیر (کی طرف سے واپس next() طریقہ) دو عناصر کا مجموعہ ہے:

  • پہلا عنصر (image_batch[0]) کی ایک صف ہے۔ بیچ_سائز تصاویر (4D صف)
  • دوسرا عنصر (image_batch[1]) تصاویر کے لیبل پر مشتمل ہے۔

مندرجہ بالا کوڈ کا ٹکڑا درج ذیل آؤٹ پٹ تیار کرتا ہے:

غور کریں کہ ساتویں قطار میں دو خالی چارٹ ہیں جن پر کوئی تصویر نہیں ہے۔ یاد رکھیں کہ امیجز سیٹ میں کل 54 امیجز ہیں، اور چونکہ ہر بیچ 8 امیجز (فی قطار) دیتا ہے، پہلی سات قطاریں کل 54 امیجز (8×6 + 6) دکھائے گی۔ مندرجہ ذیل اعداد و شمار یہ واضح کرتا ہے:

نوٹ کریں کہ آپ سیٹ کر سکتے ہیں۔ rows کسی بھی نمبر اور ImageDataGenerator کلاس آپ کے لیے نئی بڑھی ہوئی تصاویر تیار کرتی رہے گی۔

ٹرانسفر لرننگ کا استعمال کرتے ہوئے ماڈل بنانا

اب آپ جانتے ہیں کہ کس طرح استعمال کرنا ہے۔ ImageDataGenerator اضافہ کے لیے ڈسک سے تصاویر کے سیٹ لوڈ کرنے کے لیے۔ لیکن آپ اسے تربیت کے لیے کیسے استعمال کرتے ہیں؟ درج ذیل کوڈ کا ٹکڑا دکھاتا ہے کہ کس طرح استعمال کرتے ہوئے ایک گہری سیکھنے کا ماڈل بنایا جائے۔ منتقلی سیکھنے.

ٹرانسفر لرننگ ایک مشین لرننگ طریقہ ہے جہاں کسی ٹاسک کے لیے تیار کردہ ماڈل کو دوسرے ٹاسک پر ماڈل کے نقطہ آغاز کے طور پر دوبارہ استعمال کیا جاتا ہے۔ ٹرانسفر لرننگ اس وقت کی مقدار کو کم کرتی ہے جو آپ کو تربیت پر خرچ کرنے کی ضرورت ہے۔

tensorflow.keras.models سے ماڈل درآمد کریں۔
tensorflow.keras.applications سے VGG16 درآمد کریں۔
tensorflow.keras.layers سے Dense، GlobalAveragePooling2D درآمد کریں۔
#---پھلوں کی تعداد---
NO_CLASSES = زیادہ سے زیادہ(train_generator.class_indices.values()) + 1
#--- تربیت کے لیے VGG16 ماڈل کو بیس ماڈل کے طور پر لوڈ کریں---
base_model = VGG16(include_top=False, input_shape=(224, 224, 3))
#---ہماری اپنی پرتیں شامل کریں---
x = base_model.output
x = GlobalAveragePooling2D()(x)
x = Dense(1024,activation='relu')(x) # گھنی تہوں کو شامل کریں
# جو ماڈل کر سکتا ہے۔
# مزید پیچیدہ سیکھیں۔
# فنکشنز اور
# بہتر کے لیے درجہ بندی کریں۔
# نتائج۔
x = Dense(1024,activation='relu')(x) # گھنی تہہ 2
x = Dense(512,activation='relu')(x) # گھنی تہہ 3
preds = گھنا (NO_CLASSES،
ایکٹیویشن = 'softmax')(x) # آخری پرت کے ساتھ
# سافٹ میکس ایکٹیویشن
#---بیس ماڈل کے اصل کے ساتھ ایک نیا ماڈل بنائیں
# ان پٹ اور نئے ماڈل کا آؤٹ پٹ---
ماڈل = ماڈل(ان پٹ = base_model.input، outputs = preds)
#---پہلی 19 تہوں کو تربیت نہ دیں - 0..18---
model.layers میں پرت کے لیے[:19]:
layer.trainable=غلط
#---بقیہ پرتوں کو تربیت دیں - 19 آگے---
model.layers میں پرت کے لیے[19:]:
layer.trainable=True

#---ماڈل مرتب کریں---
model.compile(optimizer='Adam',
loss='categorical_crossentropy'،
میٹرکس = ['درستیت'])

یہ بتانا کہ ٹرانسفر لرننگ کیسے کام کرتی ہے اس مضمون کے دائرہ کار سے باہر ہے۔ میں اسے کسی اور مضمون کے لیے چھوڑ دوں گا۔

تربیت کے لیے تیار کردہ تصاویر کا استعمال

تربیت کے لیے بڑھی ہوئی تصاویر استعمال کرنے کے لیے، پاس کریں۔ train_generator میں fit() ماڈل کا طریقہ:

#--- ماڈل کو تربیت دیں---
step_size_train = train_generator.n // train_generator.batch_size
model.fit(ٹرین_جنریٹر,
steps_per_epoch=step_size_train،
عہد = 15)

۔ steps_per_epoch بنیادی طور پر پیرامیٹر کا مطلب ہے کہ ایک عہد میں کتنے مراحل ہوتے ہیں - یہ آپ کے پاس موجود تصاویر کی تعداد اور بیچ سائز پر منحصر ہے جس کی پہلے وضاحت کی گئی تھی۔ اگر آپ اسے زیادہ تعداد پر سیٹ کرتے ہیں، تو آپ بار بار تربیت کر رہے ہیں۔ آپ کو اسے اس فارمولے کی بنیاد پر ترتیب دینا چاہئے:

تصاویر کی تعداد / بیچ سائز

ہماری مثال میں، ہمارے پاس کل 54 تصاویر ہیں۔ اور اسی طرح ہر دور میں، ImageDataGenerator کلاس ٹریننگ کے لیے تمام 54 امیجز کو تبدیل کر دے گی۔ ہر دور میں ماڈل کو تصاویر کے مختلف تغیرات ملیں گے۔ اگر آپ کے پاس 15 عہد ہیں، تو تصاویر کی کل 15×54 مختلف حالتیں تیار کی جائیں گی اور تربیتی ماڈل میں کھلائی جائیں گی۔

۔ ImageDataGenerator کلاس آپ کے ماڈل کو ہر دور میں تصاویر کے نئے تغیرات حاصل کرنے کی اجازت دیتی ہے۔ لیکن یاد رکھیں کہ یہ صرف تبدیل شدہ تصاویر کو واپس کرتا ہے اور اسے آپ کے پاس موجود تصاویر کے سیٹ میں شامل نہیں کرتا ہے۔

مجھے امید ہے کہ اس مضمون سے آپ کو اچھی طرح سے اندازہ ہو گیا ہے کہ امیج ڈیٹا میں اضافہ کیا ہے اور آپ کو اپنے گہرے سیکھنے کے ماڈلز کی تربیت میں ان کی ضرورت کیوں ہے۔ خاص طور پر، میں نے اسے TensorFlow لائبریری میں Keras ماڈیول کا استعمال کرتے ہوئے دکھایا ہے۔

ماخذ https://towardsdatascience.com/image-data-augmentation-for-deep-learning-77a87fabd2bf?source=rss—-7f60cf5620c9—4 سے https://towardsdatascience.com/feed کے ذریعے دوبارہ شائع کردہ ڈیپ لرننگ کے لیے امیج ڈیٹا اگمنٹیشن

<!–

->

ٹائم اسٹیمپ:

سے زیادہ بلاکچین کنسلٹنٹس