def _before_task(self, train_loader, val_loader): if self._task != 0: self._network = self._first_model.copy() self._nb_inc_classes += self._task_size utils.add_new_weights(self._network, "basic", self._n_classes, self._nb_inc_classes, self.inc_dataset) else: utils.add_new_weights(self._network, "basic", self._n_classes, self._task_size, self.inc_dataset) self._network.classifier.reset_weights() self._n_classes += self._task_size logger.info("Now {} examplars per class.".format( self._memory_per_class)) logger.info( f"Nb classes in classifier {len(self._network.classifier.weights)}" ) if self._groupwise_factors and isinstance(self._groupwise_factors, dict): if self._groupwise_factors_bis and self._task > 0: logger.info("Using second set of groupwise lr.") groupwise_factor = self._groupwise_factors_bis else: groupwise_factor = self._groupwise_factors params = [] for group_name, group_params in self._network.get_group_parameters( ).items(): if group_params is None or group_name == "last_block": continue factor = groupwise_factor.get(group_name, 1.0) if factor == 0.: continue params.append({ "params": group_params, "lr": self._lr * factor }) print(f"Group: {group_name}, lr: {self._lr * factor}.") else: params = self._network.parameters() self._optimizer = factory.get_optimizer(params, self._opt_name, self._lr, self.weight_decay) self._scheduler = factory.get_lr_scheduler(self._scheduling, self._optimizer, nb_epochs=self._n_epochs, lr_decay=self._lr_decay, task=self._task)
def _before_task(self, train_loader, val_loader): utils.add_new_weights(self._network, {"type": "basic"}, self._n_classes, self._task_size, self.inc_dataset) self._n_classes += self._task_size self._optimizer = factory.get_optimizer( [{ "params": self._network.convnet.parameters(), }], self.unsupervised_training["optimizer"], self.unsupervised_training["lr"], self._weight_decay) self._scheduler = factory.get_lr_scheduler( self.unsupervised_training["scheduling"], self._optimizer, nb_epochs=self.unsupervised_training["epochs"], lr_decay=self.unsupervised_training.get("lr_decay", 0.1), task=self._task)
def _gen_weights(self): if self._weight_generation: utils.add_new_weights( self._network, self._weight_generation if self._task != 0 else "basic", self._n_classes, self._task_size, self.inc_dataset)