Ejemplo n.º 1
0
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(),
    )
Ejemplo n.º 2
0
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()