FabianGroeger's picture
SkinMap: 12-teacher ensemble + predict_meta (validated release)
4fc0ad6
Raw
History Blame Contribute Delete
1.09 kB
import torch.nn as nn
import torch.nn.functional as F
from ..encoders.utils import get_encoder_class
from ..utils import ModelType
class ResNetSimCLR(nn.Module):
def __init__(self, base_model: str, out_dim: int, **kwargs):
super(ResNetSimCLR, self).__init__()
encoder_cls, model_type = get_encoder_class(base_model)
if model_type is ModelType.VIT:
self.backbone = encoder_cls(**kwargs)
n_feat = self.backbone.embed_dim
elif model_type is ModelType.CNN:
encoder = encoder_cls(**kwargs)
n_feat = encoder.fc.in_features
self.backbone = nn.Sequential(*list(encoder.children())[:-1])
else:
raise ValueError(f"Unknown model type: {model_type}")
# projection MLP
self.dense1 = nn.Linear(n_feat, n_feat)
self.dense2 = nn.Linear(n_feat, out_dim)
def forward(self, z):
# embed
e = self.backbone(z)
e = e.squeeze()
# project
z = self.dense1(e)
z = F.relu(z)
z = self.dense2(z)
return e, z