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)