इमेज क्लासिफायर्स का मूल्यांकन

इंटरमीडिएट Deep Learning with PyTorch

Michal Oleszak

Machine Learning Engineer

टेस्ट समय पर डेटा ऑगमेंटेशन

ट्रेनिंग डेटा के लिए डेटा ऑगमेंटेशन:

train_transforms = transforms.Compose([
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(45),
    transforms.RandomAutocontrast(),
    transforms.ToTensor(),
    transforms.Resize((64, 64)),
])

dataset_train = ImageFolder(
  "clouds_train", 
  transform=train_transforms,
)

टेस्ट डेटा के लिए डेटा ऑगमेंटेशन:

test_transforms = transforms.Compose([
    #
    # NO DATA AUGMENTATION AT TEST TIME
    #
    transforms.ToTensor(),
    transforms.Resize((64, 64)),
])

dataset_test = ImageFolder(
  "clouds_test", 
  transform=test_transforms,
)
इंटरमीडिएट Deep Learning with PyTorch

Precision और Recall: बाइनरी क्लासिफिकेशन

बाइनरी क्लासिफिकेशन में:

  • Precision: सही पॉजिटिव प्रेडिक्शंस का भाग
  • Recall: सभी पॉजिटिव उदाहरणों में से सही पहचाने गए का भाग

4-सेल का एक कन्फ्यूजन मैट्रिक्स, हर सेल अलग रंग में; बगल में उन्हीं रंगों के आधार पर recall और precision के फॉर्मूले।

इंटरमीडिएट Deep Learning with PyTorch

Precision और Recall: मल्टी-क्लास क्लासिफिकेशन

मल्टी-क्लास क्लासिफिकेशन में: हर क्लास के लिए अलग precision और recall

  • Precision: सही निकली cumulus-प्रेडिक्शंस का भाग
  • Recall: सभी cumulus उदाहरणों में से सही पहचाने गए का भाग

 

क्यूम्यलस बादल की तस्वीर

इंटरमीडिएट Deep Learning with PyTorch

मल्टी-क्लास मेट्रिक्स का एवरेजिंग

  • 7 क्लास होने पर 7 precision और 7 recall स्कोर होंगे
  • इन्हें प्रति-क्लास देखें, या समेकित करें:
    • Micro average: ग्लोबल कैलकुलेशन
    • Macro average: प्रति-क्लास मेट्रिक्स का औसत
    • Weighted average: प्रति-क्लास मेट्रिक्स का वेटेड औसत
इंटरमीडिएट Deep Learning with PyTorch

मल्टी-क्लास मेट्रिक्स का एवरेजिंग

from torchmetrics import Recall

recall_per_class = Recall(task="multiclass", num_classes=7, average=None)
recall_micro = Recall(task="multiclass", num_classes=7, average="micro")
recall_macro = Recall(task="multiclass", num_classes=7, average="macro")
recall_weighted = Recall(task="multiclass", num_classes=7, average="weighted")

कब क्या उपयोग करें:

  • Micro: imbalanced डेटासेट्स
  • Macro: छोटी क्लासेज के परफॉर्मेंस की परवाह हो
  • Weighted: बड़ी क्लासेज की गलतियों को ज्यादा महत्व दें
इंटरमीडिएट Deep Learning with PyTorch

इवैल्यूएशन लूप

from torchmetrics import Precision, Recall

metric_precision = Precision(
  task="multiclass", num_classes=7, average="macro"
)
metric_recall = Recall(
  task="multiclass", num_classes=7, average="macro"
)

net.eval() with torch.no_grad(): for images, labels in dataloader_test:
outputs = net(images) _, preds = torch.max(outputs, 1) metric_precision(preds, labels) metric_recall(preds, labels)
precision = metric_precision.compute() recall = metric_recall.compute()
  • Precision और recall मेट्रिक्स इम्पोर्ट करें और डिफाइन करें
  • ग्रेडिएंट के बिना टेस्ट उदाहरणों पर इटरेट करें
  • हर टेस्ट बैच पर मॉडल आउटपुट लें, सबसे संभावित क्लास चुनें, और लेबल्स संग मेट्रिक फंक्शंस को पास करें
  • मेट्रिक्स कंप्यूट करें
print(f"Precision: {precision}")
print(f"Recall: {recall}")
Precision: 0.7284010648727417
Recall: 0.763038694858551
इंटरमीडिएट Deep Learning with PyTorch

प्रति-क्लास परफॉर्मेंस का विश्लेषण

metric_recall = Recall(
  task="multiclass", num_classes=7, average=None
)
net.eval()
with torch.no_grad():
    for images, labels in dataloader_test:
        outputs = net(images)
        _, preds = torch.max(outputs, 1)
        metric_recall(preds, labels)
recall = metric_recall.compute()
print(recall)
tensor([0.6364, 1.0000, 0.9091, 0.7917, 
        0.5049, 0.9500, 0.5493],
       dtype=torch.float32)
  • average=None के साथ मेट्रिक कंप्यूट करें
  • इससे हर क्लास के लिए एक स्कोर मिलता है
  • Dataset का .class_to_idx एट्रिब्यूट क्लास नामों को इंडेक्स से मैप करता है
dataset_test.class_to_idx
{'cirriform clouds': 0,
 'clear sky': 1,
 'cumulonimbus clouds': 2,
 'cumulus clouds': 3,
 'high cumuliform clouds': 4,
 'stratiform clouds': 5,
 'stratocumulus clouds': 6}
इंटरमीडिएट Deep Learning with PyTorch

प्रति-क्लास परफॉर्मेंस का विश्लेषण

{
  k: recall[v].item() 
  for k, v 
  in dataset_test.class_to_idx.items()
}
{'cirriform clouds': 0.6363636255264282,
 'clear sky': 1.0,
 'cumulonimbus clouds': 0.9090909361839294,
 'cumulus clouds': 0.7916666865348816,
 'high cumuliform clouds': 0.5048543810844421,
 'stratiform clouds': 0.949999988079071,
 'stratocumulus clouds': 0.5492957830429077}
  • k = क्लास नाम, जैसे cirriform clouds
  • v = क्लास इंडेक्स, जैसे 0
  • recall[v] = tensor(0.6364, dtype=torch.float32)
  • recall[v].item() = 0.6364
इंटरमीडिएट Deep Learning with PyTorch

अभ्यास करते हैं!

इंटरमीडिएट Deep Learning with PyTorch

Preparing Video For Download...