پولکاڈوٹ قیمت کا تجزیہ 13 ستمبر

Convolutional Neural Network - CIFAR-10 ڈیٹاسیٹ پر PyTorch کا نفاذ

ماخذ نوڈ: 1866263

اس مضمون کے ایک حصے کے طور پر شائع کیا گیا تھا۔ ڈیٹا سائنس بلاگتھون

تعارف

Cifar 10 | Convolutional Neural Networks pytorch
                                    تصویری 1

Convolutional عصبی نیٹ ورک، جسے ConvNets بھی کہا جاتا ہے، سب سے پہلے 1980 کی دہائی میں کمپیوٹر سائنس کے ایک محقق یان لی کیون نے متعارف کرایا تھا جس نے پس منظر میں کام کیا تھا۔ LeCun ایک جاپانی سائنسدان، Kunihiko Fukushima کے کام پر بنایا گیا، تصویر کی شناخت کے لیے ایک بنیادی نیٹ ورک۔

CNN کا پرانا ورژن، جسے LeNet کہا جاتا ہے (LeCun کے بعد)، ہاتھ سے لکھے ہوئے ہندسے دیکھ سکتا ہے۔ CNN پوسٹل سے پن کوڈ تلاش کرنے میں مدد کرتا ہے۔ لیکن اپنی مہارت کے باوجود، ConvNets کمپیوٹر ویژن اور مصنوعی ذہانت کے قریب رہے کیونکہ انہیں ایک بڑی پریشانی کا سامنا تھا: وہ زیادہ پیمانے پر نہیں پہنچ سکے۔ CNN کو بڑی تصاویر کے لیے اچھی طرح سے کام کرنے کے لیے بہت سارے ڈیٹا اور وسائل کو مربوط کرنے کی ضرورت ہوتی ہے۔

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

Convolutional Neural Networks pytorch
تصویری 2

مندرجہ بالا تصویر ہمیں ایک CNN ماڈل دکھاتی ہے جو 2 کے ہندسے جیسی تصویر لیتی ہے اور ہمیں اس کا نتیجہ دیتی ہے کہ تصویر میں نمبر کے طور پر کیا ہندسہ دکھایا گیا تھا۔ ہم اس مضمون میں یہ کیسے حاصل کرتے ہیں اس پر تفصیل سے بات کریں گے۔

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

PyTorch لائبریری کو درآمد کرنا 

numpy کو بطور np درآمد کریں پانڈا کو بطور pd درآمد کریں۔
ٹارچ درآمد کریں torch.nn. فنکشنل ٹارچ ویژن امپورٹ ڈیٹاسیٹس سے F کے طور پر، ٹارچ امپورٹ سے تبدیل کریں nn درآمد کریں matplotlib.pyplot plt امپورٹ numpy بطور np امپورٹ سیبورن بطور sns #from tqdm. نوٹ بک درآمد tqdm سے tqdm درآمد کریں

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

Pytorch میں ایک nn جزو ہے جو مشین لرننگ آپریشنز اور افعال کے تجرید کے لیے استعمال ہوتا ہے۔ اسے F کے طور پر درآمد کیا گیا ہے۔ ٹارچ ویژن لائبریری کا استعمال کیا جاتا ہے تاکہ ہم CIFAR-10 ڈیٹاسیٹ درآمد کر سکیں۔ اس لائبریری میں بہت سے امیج ڈیٹا سیٹس ہیں اور اسے تحقیق کے لیے وسیع پیمانے پر استعمال کیا جاتا ہے۔ ٹرانسفارمز کو امپورٹ کیا جا سکتا ہے تاکہ ہم تمام امیجز کے لیے امیج کا سائز برابر کر سکیں۔ tqdm استعمال کیا جاتا ہے تاکہ ہم تربیت کے دوران ہونے والی پیشرفت پر نظر رکھ سکیں اور اسے تصور کے لیے استعمال کیا جاتا ہے۔

مطلوبہ ڈیٹا سیٹ پڑھیں

trainData = pd.read_csv('cifar-10/trainLabels.csv') trainData.head()

ایک بار جب ہم ڈیٹا سیٹ کو پڑھ لیتے ہیں تو ہم مینڈک، ٹرک، ہرن، آٹوموبائل وغیرہ جیسے مختلف لیبل دیکھ سکتے ہیں۔

PyTorch کے ساتھ ڈیٹا کا تجزیہ کرنا

پرنٹ ("پوائنٹس کی تعداد:" ٹرین ڈیٹا شیپ ٹرین ڈیٹا میں col کے لیے منفرد قدریں: print(col,":",len(trainData[col].unique())) plt.figure(figsize=(0))

: پیداوار

پوائنٹس کی تعداد: 50000 خصوصیات کی تعداد: 2 خصوصیات: ['id' 'label'] منفرد اقدار کی تعداد id : 50000 label : 10

اس مرحلے میں، ہم ڈیٹاسیٹ کا تجزیہ کرتے ہیں اور دیکھتے ہیں کہ ہماری ٹرین کے ڈیٹا میں ان کی شناخت اور متعلقہ لیبل کے ساتھ لگ بھگ 50000 قطاریں ہیں۔ CIFAR-10 کے نام کی طرح کل 10 کلاسیں ہیں۔

PyTorch کا استعمال کرتے ہوئے توثیق کا سیٹ حاصل کرنا

torch.utils.data سے درآمد کریں random_split val_size = 5000 train_size = len(dataset) - val_size train_ds, val_ds = random_split(dataset, [train_size, val_size]) len(train_ds), len(val_ds)

یہ مرحلہ تربیتی مرحلہ جیسا ہی ہے، لیکن ہم ڈیٹا کو ٹرین اور توثیق کے سیٹوں میں تقسیم کرنا چاہتے ہیں۔

(45000، 5000)
torch.utils.data.dataloader سے ڈیٹا لوڈر درآمد کریں batch_size=64 train_dl = DataLoader(train_ds, batch_size, shuffle=True, num_workers=4, pin_memory=True) val_dl = DataLoader(val_dl=DataLoader(s_pin_works, batch_size=4, batch_size)

torch.utils میں ایک ڈیٹا لوڈر ہوتا ہے جو مختلف پیرامیوں جیسے کارکن نمبر یا بیچ سائز کو نظرانداز کرتے ہوئے مطلوبہ ڈیٹا لوڈ کرنے میں ہماری مدد کر سکتا ہے۔

مطلوبہ افعال کی وضاحت

@torch.no_grad() def accuracy(outputs, labels): _, preds = torch.max(outputs, dim=1) return torch.tensor(torch.sum(preds == labels).item() / len(preds )) class ImageClassificationBase(nn.Module): def training_step(self, batch): images, labels = batch out = self(images) # جنریٹ پیشین گوئی نقصان = F.cross_entropy(out, labels) # حساب لگائیں نقصان = درستگی (آؤٹ) ,labels) واپسی کا نقصان،accu def validation_step(self, batch): images, labels = batch out = self(images) # Generate predictions loss = F.cross_entropy(out, labels) # نقصان کا حساب لگائیں acc = accuracy(out, labels) # درستگی کی واپسی کا حساب لگائیں {'Loss': loss.detach(), 'Accuracy': acc} def validation_epoch_end(self, outputs): batch_losses = [x['Loss'] for x in outputs] epoch_loss = torch.stack(batch_losses) .mean() # کمبائن نقصانات batch_accs = [x['Accuracy'] for x in outputs] epoch_acc = torch.stack(batch_accs).mean() # یکجا درستگی واپسی {'Loss': epoch_loss.item(), ' درستگی': epoch_acc.item()} def epoch_end(self, epoch, result): pr int("Epoch :"epoch + 1) print(f'Train Accuracy:{result["train_accuracy"]*100:.2f}% توثیق کی درستگی:{نتیجہ["درستگی"]*100:.2f}%' ) پرنٹ کریں

جیسا کہ ہم یہاں دیکھ سکتے ہیں ہم نے امیج کلاسیفیکیشن کے کلاس نفاذ کا استعمال کیا ہے اور یہ ایک پیرامیٹر لیتا ہے جو کہ nn.Module ہے۔ اس کلاس کے اندر، ہم مختلف فنکشنز یا مختلف مراحل جیسے ٹریننگ، تصدیق وغیرہ کو نافذ کر سکتے ہیں۔ یہاں کے فنکشنز سادہ ازگر کے نفاذ ہیں۔

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

convolutional عصبی نیٹ ورک ماڈیول کا نفاذ

کلاس Cifar10CnnModel(ImageClassificationBase): def __init__(self): super().__init__() self.network = nn.Sequential( nn.Conv2d(3, 32, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(32, 64, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.MaxPool2d(2, 2), # آؤٹ پٹ: 64 x 16 x 16 nn.BatchNorm2d(64) , nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1), nn .ReLU(), nn.MaxPool2d(2, 2), # آؤٹ پٹ: 128 x 8 x 8 nn.BatchNorm2d(128), nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1), nn.ReLU(), nn.MaxPool2d(2, 2), # آؤٹ پٹ: 256 x 4 x 4 nn.BatchNorm2d(256), nn.Flatten(), nn.Linear(256*4*4, 1024), nn.ReLU(), nn.Linear(1024, 512), nn.ReLU(), nn.Linear (512، 10)) ڈیف فارورڈ (سیلف، ایکس بی): واپسی سیلف نیٹ ورک (ایکس بی)

یہ نیورل نیٹ ورک کے نفاذ کا سب سے اہم حصہ ہے۔ پورے وقت میں، ہم nn ماڈیول کا استعمال کرتے ہیں جسے ہم نے ٹارچ سے درآمد کیا تھا۔ جیسا کہ ہم پہلی سطر میں دیکھ سکتے ہیں، Conv2d ایک ماڈیول ہے جو ایک convolutional neural نیٹ ورک کو نافذ کرنے میں مدد کرتا ہے۔ یہاں پہلا پیرامیٹر 3 ظاہر کرتا ہے کہ تصویر رنگین ہے اور آر جی بی فارمیٹ میں ہے۔ اگر یہ گرے اسکیل امیج ہوتی تو ہم 1 کے لیے جاتے۔

32 ابتدائی آؤٹ پٹ چینل کا سائز ہے اور جب ہم اگلی conv2d پرت کے لیے جائیں گے تو ہمارے پاس یہ 32 بطور ان پٹ چینل اور 64 آؤٹ پٹ چینل کے طور پر ہوگا۔

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

convolution آپریشن ایک ایکٹیویشن لیئر سے منسلک ہے اور یہاں Relu۔ دو Conv2d تہوں کے بعد، ہمارے پاس سائز 2*2 کا زیادہ سے زیادہ پولنگ آپریشن ہے۔ اس سے نکلنے والی قدر کو استحکام کے لیے اور اندرونی کوویریٹ شفٹ سے بچنے کے لیے بیچ کو نارمل کیا جاتا ہے۔ نیٹ ورک کو گہرا کرنے اور سائز کو کم کرنے کے لیے ان کارروائیوں کو مزید تہوں کے ساتھ دہرایا جاتا ہے۔ آخر میں، ہم پرت کو چپٹا کرتے ہیں تاکہ ہم اقدار کو 10 اقدار پر نقشہ کرنے کے لیے ایک لکیری پرت بنا سکیں۔ ان 10 نیورونز میں سے ہر ایک نیوران کا امکان زیادہ سے زیادہ امکان کی بنیاد پر اس بات کا تعین کرے گا کہ ایک خاص تصویر کس طبقے سے تعلق رکھتی ہے۔

ماڈل کو تربیت دیں۔

@torch.no_grad() def evaluate(model, data_loader): model.eval() outputs = [model.validation_step(batch) data_loader میں بیچ کے لیے] model.validation_epoch_end(outputs) def fit(model, train_loader, val_loader,epochs) واپس =10,learning_rate=0.001): best_valid = None history = [] optimizer = torch.optim.Adam(model.parameters(), learning_rate,weight_decay=0.0005) epoch in range (epochs): # Training Phase model.train( ) train_losses = [] train_accuracy = [] بیچ کے لیے .zero_grad() # توثیق کے مرحلے کا نتیجہ = evaluate(ماڈل، val_loader) نتیجہ['train_loss'] = torch.stack(train_losses).mean().item() نتیجہ['train_accuracy'] = torch.stack(train_accuracy)۔ mean().item() model.epoch_end(epoch, result) if(best_valid == کوئی نہیں یا best_valid
تاریخ = فٹ (ماڈل، ٹرین_ڈی ایل، ویل_ڈی ایل)

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

دوسری طرف، evaluate فنکشن eval فنکشن کا استعمال کرتا ہے، اور ہر قدم کے لیے، ہم ڈیٹا لوڈر سے بھری ہوئی بیچ لیتے ہیں، اور آؤٹ پٹ کا حساب لگایا جاتا ہے۔ اس کے بعد قدر کو توثیق کے دور کے اختتام پر منتقل کیا جاتا ہے جس کی ہم نے پہلے وضاحت کی تھی اور متعلقہ قدر واپس کردی جاتی ہے۔

نتائج کی سازش

اس مرحلے میں، ہم ہر دور کے مقابلے میں درستگی کا تصور کریں گے۔ ہم مشاہدہ کر سکتے ہیں کہ جیسے جیسے عہد بڑھتا ہے نظام کی درستگی بڑھتی جاتی ہے اور اسی طرح نقصان میں بھی کمی آتی جاتی ہے۔ یہاں سرخ لکیر تربیتی ڈیٹا کی پیشرفت اور توثیق کے لیے نیلے رنگ کی نشاندہی کرتی ہے۔ ہم دیکھ سکتے ہیں کہ ہمارے نتائج میں کافی حد تک اوور فٹنگ ہوئی ہے کیونکہ تربیتی ڈیٹا توثیق کے نتائج سے کافی بہتر کارکردگی کا مظاہرہ کر رہا ہے اور اسی طرح نقصان کی صورت میں۔ 10 دوروں کے بعد، لگتا ہے کہ ٹرین کا ڈیٹا 90% درستگی کو نظرانداز کرتا ہے لیکن اس میں تقریباً 0.5 کا نقصان ہے۔ ٹیسٹ کا ڈیٹا تقریباً 81% آتا ہے اور نقصانات 0.2 کے قریب ہیں۔

def plot_accuracies(history): Validation_accuracies = [x['Accuracy'] تاریخ میں x کے لیے] Training_Accuracies = [x['train_accuracy'] تاریخ میں x کے لیے] plt.plot(Training_Accuracies, '-rx') plt.plot(Validation_acuracies) , '-bx') plt.xlabel('epoch') plt.ylabel('accuracy') plt.legend (['Training', 'Validation']) plt.title ('درستگی بمقابلہ عہدوں کی تعداد') ; پلاٹ_درستگی (تاریخ)
درستگی پلاٹ
def plot_losses(history): train_losses = [x.get('train_loss') تاریخ میں x کے لیے] val_losses = [x['Loss'] تاریخ میں x کے لیے] plt.plot(train_losses, '-bx') plt.plot (val_losses, '-rx') plt.xlabel('epoch') plt.ylabel('loss') plt.legend(['Training', 'Validation']) plt.title ('نقصان بمقابلہ عہدوں کی تعداد '); پلاٹ_نقصان (تاریخ)

test_dataset = ImageFolder(data_dir+'/test', transform=ToTensor()) test_loader = DeviceDataLoader(DataLoader(test_dataset, batch_size), device) نتیجہ = evaluate(final_model, test_loader) print(f'Test Accuracy:{ccuracy: ]*100:.2f}%')
ٹیسٹ کی درستگی: 81.07%

ہم دیکھ سکتے ہیں کہ ہم 81.07% کی درستگی کے ساتھ ختم ہوتے ہیں۔

نتیجہ:

تصویر:https://unsplash.com/photos/5L0R8ZqPZHk

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

تصویر ماخذ

  1. Image 1: https://becominghuman.ai/cifar-10-image-classification-fd2ace47c5e8
  2. تصویر 2: https://www.analyticsvidhya.com/blog/2021/05/convolutional-neural-networks-cnn/

بلا جھجھک مجھ سے اس پر جڑیں:

  1.  لنکڈ ان: https://www.linkedin.com/in/siddharth-m-426a9614a/
  2.  گیتوب: https://github.com/Siddharth1698

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

ماخذ: https://www.analyticsvidhya.com/blog/2021/09/convolutional-neural-network-pytorch-implementation-on-cifar10-dataset/

ٹائم اسٹیمپ:

سے زیادہ تجزیات ودھیا