| import torch.nn as nn |
| import torch |
| import torch.nn.functional as F |
| from transformers import AutoFeatureExtractor, AutoModel |
| from transformers.modeling_outputs import ImageClassifierOutput |
|
|
| class ResNetFN(nn.Module): |
| def __init__(self): |
| super(ResNetFN, self).__init__() |
| self.resnet = AutoModel.from_pretrained('microsoft/resnet-50') |
| self.fc1 = nn.Linear(2048, 512) |
| self.fc2 = nn.Linear(512, 2) |
| |
| def forward(self, pixel_values, labels=None): |
| x1 = self.resnet(pixel_values=pixel_values) |
| x2 = F.relu(self.fc1(x1.pooler_output.squeeze(-1).squeeze(-1))) |
| x3 = self.fc2(x2) |
| loss_func = nn.BCEWithLogitsLoss() |
| loss = None |
| if labels != None: |
| onehot_labels = F.one_hot(labels, num_classes=2) |
| loss = loss_func(x3, onehot_labels.float()) |
| return ImageClassifierOutput(loss=loss, logits=x3) |