class Configs(MNISTConfigs, TrainValidConfigs): """ ## Configurable Experiment Definition """ optimizer: torch.optim.Adam model: nn.Module set_seed = SeedConfigs() device: torch.device = DeviceConfigs() epochs: int = 10 is_save_models = True model: nn.Module inner_iterations = 10 accuracy_func = Accuracy() loss_func = nn.CrossEntropyLoss() def init(self): tracker.set_queue("loss.*", 20, True) tracker.set_scalar("accuracy.*", True) hook_model_outputs(self.mode, self.model, 'model') self.state_modules = [self.accuracy_func] def step(self, batch: any, batch_idx: BatchIndex): # Get the batch data, target = batch[0].to(self.device), batch[1].to(self.device) # Add global step if we are in training mode if self.mode.is_train: tracker.add_global_step(len(data)) # Run the model and specify whether to log the activations with self.mode.update(is_log_activations=batch_idx.is_last): output = self.model(data) # Calculate the loss loss = self.loss_func(output, target) # Calculate the accuracy self.accuracy_func(output, target) # Log the loss tracker.add("loss.", loss) # Optimize if we are in training mode if self.mode.is_train: # Calculate the gradients loss.backward() # Take optimizer step self.optimizer.step() # Log the parameter and gradient L2 norms once per epoch if batch_idx.is_last: tracker.add('model', self.model) tracker.add('optimizer', (self.optimizer, { 'model': self.model })) # Clear the gradients self.optimizer.zero_grad() # Save logs tracker.save()
class Configs(MNISTConfigs, TrainValidConfigs): seed = SeedConfigs() device: torch.device = DeviceConfigs() epochs: int = 10 train_batch_size = 1 valid_batch_size = 1 is_save_models = True model: nn.Module loss_func = nn.CrossEntropyLoss() accuracy_func = SimpleAccuracy()
class Configs(MNISTConfigs, TrainValidConfigs): seed = SeedConfigs() device: torch.device = DeviceConfigs() epochs: int = 10 is_save_models = True model: nn.Module learning_rate: float = 2.5e-4 momentum: float = 0.5 loss_func = 'cross_entropy_loss' accuracy_func = 'simple_accuracy'
class Configs(MNISTConfigs, TrainValidConfigs): optimizer: torch.optim.Adam model: nn.Module set_seed = SeedConfigs() device: torch.device = DeviceConfigs() epochs: int = 10 is_save_models = True model: nn.Module inner_iterations = 10 accuracy_func = Accuracy() loss_func = nn.CrossEntropyLoss() def init(self): tracker.set_queue("loss.*", 20, True) tracker.set_scalar("accuracy.*", True) hook_model_outputs(self.mode, self.model, 'model') self.state_modules = [self.accuracy_func] def step(self, batch: any, batch_idx: BatchIndex): data, target = batch[0].to(self.device), batch[1].to(self.device) if self.mode.is_train: tracker.add_global_step(len(data)) with self.mode.update(is_log_activations=batch_idx.is_last): output = self.model(data) loss = self.loss_func(output, target) self.accuracy_func(output, target) tracker.add("loss.", loss) if self.mode.is_train: loss.backward() self.optimizer.step() if batch_idx.is_last: tracker.add('model', self.model) self.optimizer.zero_grad() tracker.save()