def adapt(self, inputs, targets): params = None results = { 'inner_losses': np.zeros((self.num_adaptation_steps, ), dtype=np.float32) } for step in range(self.num_adaptation_steps): logits = self.model(inputs, params=params) inner_loss = self.loss_function(logits, targets) results['inner_losses'][step] = inner_loss.item() if (step == 0): if self.is_classification_task: accuracy_before = compute_accuracy(logits, targets) results["accuracy_before"] = accuracy_before else: mse_before = inner_loss results["mse_before"] = mse_before self.model.zero_grad() params = update_parameters( self.model, inner_loss, step_size=self.step_size, params=params, first_order=(not self.model.training) or self.first_order, freeze_visual_features=self.freeze_visual_features, no_meta_learning=self.no_meta_learning) return params, results
def adapt(self, inputs, targets): results = {'inner_losses': np.zeros( (self.num_adaptation_steps,), dtype=np.float32)} params, params_masked, masks_logits, masks = self.init_params() for step in range(self.num_adaptation_steps): params_masked, masks_logits, reg = self.apply_masks(params, params_masked, masks_logits, masks, regularize=True) logits = self.model(inputs, params=params_masked) inner_loss = self.loss_function(logits, targets) + reg results['inner_losses'][step] = inner_loss.item() if (step == 0) and self.is_classification_task: results['accuracy_before'] = compute_accuracy(logits, targets) self.model.zero_grad() masks_logits = update_parameters(self.model, inner_loss, step_size=self.step_size, params=masks_logits, first_order=(not self.model.training) or self.first_order, freeze_visual_features = self.freeze_visual_features, no_meta_learning=self.no_meta_learning) self.current_mask_stats = masks_logits # final masking params_masked, _ = self.apply_masks(params, params_masked, masks_logits, masks, regularize=False, evaluate=(not self.model.training)) return params_masked, results