def evaluate_iwbo(model, eval_loader):
    model = model.eval()
    with torch.no_grad():
        loss_sum = 0.0
        count = 0
        for i, x in enumerate(eval_loader):
            x = x.to(args.device)
            loss_sum += -iwbo_nats(model, x, k=args.iwbo_k, kbs=args.iwbo_kbs
                                   ).cpu().item() * len(x) / 50
            count += len(x)
            print('IWBO({}), Iter: {}/{}, PPLL: {:.3f}'.format(
                args.iwbo_k, i + 1, len(eval_loader), loss_sum / count),
                  end='\r')
    return loss_sum / count
Esempio n. 2
0
        loss = -model.log_prob(x.to(device)).mean()
        loss.backward()
        optimizer.step()
        l += loss.detach().cpu().item()
        print('Epoch: {}/{}, Iter: {}/{}, Nats: {:.3f}'.format(epoch+1, epochs, i+1, len(train_loader), l/(i+1)), end='\r')
    print('')

##########
## Test ##
##########

print('Testing...')
with torch.no_grad():
    l = 0.0
    for i, x in enumerate(test_loader):
        loss = iwbo_nats(model, x.to(device), k=10)
        l += loss.detach().cpu().item()
        print('Iter: {}/{}, Nats: {:.3f}'.format(i+1, len(test_loader), l/(i+1)), end='\r')
    print('')

############
## Sample ##
############

print('Sampling...')
img = next(iter(test_loader))[:64]
samples = model.sample(64)

vutils.save_image(img.cpu().float(), './examples/results/mnist_data.png', nrow=8)
vutils.save_image(samples.cpu().float(), './examples/results/mnist_ndp_392.png', nrow=8)
Esempio n. 3
0
        print('Epoch: {}/{}, Iter: {}/{}, Nats: {:.3f}'.format(
            epoch + 1, args.epochs, i + 1, len(train_loader),
            loss_sum / (i + 1)),
              end='\r')
    print('')
final_train_bpd = loss_sum / len(train_loader)

#############
## Testing ##
#############

print('Testing...')
with torch.no_grad():
    loss_sum = 0.0
    for i, x in enumerate(test_loader):
        loss = iwbo_nats(model, x.to(args.device), k=args.k, kbs=args.kbs)
        loss_sum += loss.detach().cpu().item()
        print('Iter: {}/{}, Nats: {:.3f}'.format(i + 1, len(test_loader),
                                                 loss_sum / (i + 1)),
              end='\r')
    print('')
final_test_nats = loss_sum / len(test_loader)

##############
## Sampling ##
##############

print('Sampling...')
if args.dataset == 'face_einstein':
    bounds = [[0, 1], [0, 1]]
else: