Exemple #1
0
def validate(model, val_loader, epoch, callback=None, **kwargs):
    model.eval()
    global writer
    loss = AverageMeter()
    metrics = AverageMeter()
    data_time = time.time()
    val_bar = tqdm(val_loader)
    devices = 'cuda:0' if 'devices' not in kwargs.keys(
    ) else 'cuda:' + kwargs['devices'][0]
    with torch.no_grad():
        for idx, (data, target) in enumerate(val_bar):
            data = data.to(devices)
            target = target.to(devices)
            data_time = time.time() - data_time
            # forward
            batch_time = time.time()
            pred = model(data)
            batch_time = time.time() - batch_time
            batch_loss = model.loss(pred, target, mode=kwargs['mode'])
            metrics.update(accuracy(pred, target), data.size(0))

            loss.update(batch_loss.item(), data.size(0))

            val_bar.set_description(
                'Eval epoch {}/{}, data_time: {:.4f}, batch_time: {:.4f}, loss: {:.4f}, accuracy: {:.4f}'
                .format(idx, epoch, data_time, batch_time, loss.avg,
                        metrics.avg.item()))
            data_time = time.time()

    return loss.avg, metrics.avg.item()
Exemple #2
0
def train_epoch(model,
                optimizer,
                train_loader,
                epoch,
                callback=None,
                **kwargs):
    global writer

    loss = AverageMeter()
    metrics = AverageMeter()
    data_time = time.time()
    train_bar = tqdm(train_loader)
    devices = 'cuda:0' if 'devices' not in kwargs.keys(
    ) else 'cuda:' + kwargs['devices'][0]

    for idx, (data, target) in enumerate(train_bar):
        data = data.to(devices)
        target = target.to(devices)
        data_time = time.time() - data_time
        # forward
        batch_time = time.time()
        pred = model(data)
        batch_time = time.time() - batch_time
        batch_loss = model.loss(pred, target, mode=kwargs['mode'])
        metrics.update(accuracy(pred, target), data.size(0))

        loss.update(batch_loss.item(), data.size(0))
        # backward
        optimizer.zero_grad()
        batch_loss.backward()
        optimizer.step()
        # print(metrics.avg,loss.avg,type(loss.avg))
        train_bar.set_description(
            'Epoch {}/{}, data_time: {:.4f}, batch_time: {:.4f}, loss: {:.4f}, accuracy: {:.4f}'
            .format(idx, epoch, data_time, batch_time, loss.avg,
                    metrics.avg.item()))
        data_time = time.time()

    return loss.avg, metrics.avg.item()