File size: 920 Bytes
cfbb05a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import torch.nn as nn
import torchvision.models as models

class SwinTClassifier(nn.Module):
    def __init__(self, num_classes, transfer_learning=True):
        super(SwinTClassifier, self).__init__()
        if transfer_learning:
            self.swin_transformer = models.swin_b(
                weights=models.Swin_B_Weights.IMAGENET1K_V1
            )
        else:
            self.swin_transformer = models.swin_b(weights=None)

        # Modify the classifier head
        self.swin_transformer.head = nn.Sequential(
            nn.Linear(self.swin_transformer.head.in_features, 1024),
            nn.ReLU(),
            nn.BatchNorm1d(1024),
            nn.Dropout(p=0.4),
            nn.Linear(1024, 256),
            nn.ReLU(),
            nn.BatchNorm1d(256),
            nn.Dropout(p=0.2),
            nn.Linear(256, num_classes),
        )

    def forward(self, x):
        return self.swin_transformer(x)