Updates models
Browse files- src/model.py +14 -6
src/model.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
import lightning as L
|
2 |
import torch
|
3 |
from torch import nn
|
4 |
-
from torchmetrics.functional import accuracy
|
5 |
from torchvision import models
|
6 |
|
7 |
|
@@ -19,15 +19,15 @@ class DRModel(L.LightningModule):
|
|
19 |
self.model = models.densenet169(weights=models.DenseNet169_Weights.DEFAULT)
|
20 |
# self.model = models.vit_b_16(weights=models.ViT_B_16_Weights.DEFAULT)
|
21 |
# freeze the feature extractor
|
22 |
-
for param in self.model.parameters():
|
23 |
-
|
24 |
# Change the output layer to have the number of classes
|
25 |
in_features = self.model.classifier.in_features
|
26 |
# in_features = 768
|
27 |
self.model.classifier = nn.Sequential(
|
28 |
nn.Linear(in_features, in_features // 2),
|
29 |
nn.ReLU(),
|
30 |
-
nn.Dropout(0.
|
31 |
nn.Linear(in_features // 2, num_classes),
|
32 |
)
|
33 |
|
@@ -50,14 +50,22 @@ class DRModel(L.LightningModule):
|
|
50 |
loss = self.criterion(logits, y)
|
51 |
preds = torch.argmax(logits, dim=1)
|
52 |
acc = accuracy(preds, y, task="multiclass", num_classes=self.num_classes)
|
|
|
53 |
self.log("val_loss", loss, prog_bar=True)
|
54 |
self.log("val_acc", acc, prog_bar=True)
|
|
|
55 |
|
56 |
def configure_optimizers(self):
|
57 |
-
optimizer = torch.optim.Adam(
|
|
|
|
|
|
|
|
|
|
|
58 |
self.parameters(), lr=self.learning_rate, weight_decay=1e-4
|
59 |
)
|
60 |
-
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=
|
|
|
61 |
return {
|
62 |
"optimizer": optimizer,
|
63 |
"lr_scheduler": {
|
|
|
1 |
import lightning as L
|
2 |
import torch
|
3 |
from torch import nn
|
4 |
+
from torchmetrics.functional import accuracy, cohen_kappa
|
5 |
from torchvision import models
|
6 |
|
7 |
|
|
|
19 |
self.model = models.densenet169(weights=models.DenseNet169_Weights.DEFAULT)
|
20 |
# self.model = models.vit_b_16(weights=models.ViT_B_16_Weights.DEFAULT)
|
21 |
# freeze the feature extractor
|
22 |
+
# for param in self.model.parameters():
|
23 |
+
# param.requires_grad = False
|
24 |
# Change the output layer to have the number of classes
|
25 |
in_features = self.model.classifier.in_features
|
26 |
# in_features = 768
|
27 |
self.model.classifier = nn.Sequential(
|
28 |
nn.Linear(in_features, in_features // 2),
|
29 |
nn.ReLU(),
|
30 |
+
nn.Dropout(0.5),
|
31 |
nn.Linear(in_features // 2, num_classes),
|
32 |
)
|
33 |
|
|
|
50 |
loss = self.criterion(logits, y)
|
51 |
preds = torch.argmax(logits, dim=1)
|
52 |
acc = accuracy(preds, y, task="multiclass", num_classes=self.num_classes)
|
53 |
+
kappa = cohen_kappa(preds, y, task="multiclass", num_classes=self.num_classes, weights="quadratic")
|
54 |
self.log("val_loss", loss, prog_bar=True)
|
55 |
self.log("val_acc", acc, prog_bar=True)
|
56 |
+
self.log("val_kappa", kappa, prog_bar=True)
|
57 |
|
58 |
def configure_optimizers(self):
|
59 |
+
# optimizer = torch.optim.Adam(
|
60 |
+
# self.parameters(), lr=self.learning_rate, weight_decay=1e-4
|
61 |
+
# )
|
62 |
+
# scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode="min", factor=0.1, patience=3, verbose=True)
|
63 |
+
|
64 |
+
optimizer = torch.optim.AdamW(
|
65 |
self.parameters(), lr=self.learning_rate, weight_decay=1e-4
|
66 |
)
|
67 |
+
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=20)
|
68 |
+
# scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, mode="min", factor=0.1, patience=3, verbose=True)
|
69 |
return {
|
70 |
"optimizer": optimizer,
|
71 |
"lr_scheduler": {
|