in uimnet/algorithms/due.py [0:0]
def construct_networks(self, dataset=None):
self.likelihood = gpytorch.likelihoods.SoftmaxLikelihood(
num_classes=self.num_classes, mixing_weights=False)
featurizer = torchvision.models.__dict__[self.arch](
num_classes=self.num_classes,
pretrained=False,
zero_init_residual=True)
num_features = featurizer.fc.in_features
featurizer.fc = utils.Identity()
if dataset is not None:
loader = torch.utils.data.DataLoader(
dataset, batch_size=32, shuffle=True)
some_features = []
with torch.no_grad():
for i, datum in enumerate(loader):
some_features.append(featurizer(datum['x']).cpu())
if i == 30:
break
some_features = torch.cat(some_features)
self.dataset_length = len(dataset)
else:
# else not executed for training, following are placeholders
# that should be replaced when doing classifier.load_state_dict()
some_features = torch.randn(
self.hparams["num_inducing_points"],
num_features)
self.dataset_length = 240000
self.classifier = GP(
self.num_classes,
some_features,
self.hparams["kernel"],
self.hparams["num_inducing_points"])
self.loss = gpytorch.mlls.VariationalELBO(
self.likelihood, self.classifier, num_data=self.dataset_length)
return dict(featurizer=featurizer)