def run_catalyst(irunner: dl.IRunner, idx: int, device: str = "cuda", num_epochs: int = 10): utils.set_global_seed(idx) loader = irunner.get_loaders()["train"] model = irunner.get_model().to(device) criterion = irunner.get_criterion() optimizer = irunner.get_optimizer(model) runner = dl.SupervisedRunner() runner.train( engine=dl.GPUEngine() if device == "cuda" else dl.CPUEngine(), model=model, criterion=criterion, optimizer=optimizer, loaders={"train": loader}, num_epochs=num_epochs, verbose=False, callbacks=[ dl.AccuracyCallback( input_key=runner._output_key, target_key=runner._target_key, topk=(1, ), ) ], ) return ( runner.epoch_metrics["train"]["accuracy01"], runner.epoch_metrics["train"]["loss"], _get_used_memory(), )
def run_pytorch(irunner: dl.IRunner, idx: int, device: str = "cuda", num_epochs: int = 10): device = torch.device(device) utils.set_global_seed(idx) loader = irunner.get_loaders()["train"] model = irunner.get_model().to(device) criterion = irunner.get_criterion() optimizer = irunner.get_optimizer(model) epoch_scores = [] epoch_losses = [] for i in range(num_epochs): epoch_score = 0 epoch_loss = 0 for features, targets in loader: features = features.to(device) targets = targets.to(device) logits = model(features) loss = criterion(logits, targets) epoch_loss += loss.item() pred = logits.argmax(dim=1, keepdim=True) epoch_score += pred.eq(targets.view_as(pred)).sum().item() self.engine.backward(loss) optimizer.step() optimizer.zero_grad() epoch_score /= len(loader.dataset) epoch_loss /= len(loader) print(f"Epoch {i} \t Score: {epoch_score} \t Loss: {epoch_loss}") epoch_scores.append(epoch_score) epoch_losses.append(epoch_loss) return epoch_scores[-1], epoch_losses[-1], _get_used_memory()