Пример #1
0
 def test_GatedPixelCNN(self):
     model = models.GatedPixelCNN(in_channels=3,
                                  out_channels=3,
                                  n_gated=1,
                                  gated_channels=1,
                                  head_channels=1)
     self._smoke_test(model, in_channels=3)
Пример #2
0
 def test_GatedPixelCNN(self):
     model = models.GatedPixelCNN(in_channels=3,
                                  out_channels=3,
                                  n_gated=1,
                                  gated_channels=1,
                                  head_channels=1)
     self._test_multiple_channels(model, conditional_sample=True)
Пример #3
0
def reproduce(n_epochs=427,
              batch_size=128,
              log_dir="/tmp/run",
              device="cuda",
              debug_loader=None):
    """Training script with defaults to reproduce results.

    The code inside this function is self contained and can be used as a top level
    training script, e.g. by copy/pasting it into a Jupyter notebook.

    Args:
        n_epochs: Number of epochs to train for.
        batch_size: Batch size to use for training and evaluation.
        log_dir: Directory where to log trainer state and TensorBoard summaries.
        device: Device to train on (either 'cuda' or 'cpu').
        debug_loader: Debug DataLoader which replaces the default training and
            evaluation loaders if not 'None'. Do not use unless you're writing unit
            tests.
    """
    from torch import optim
    from torch.nn import functional as F
    from torch.optim import lr_scheduler

    from pytorch_generative import datasets
    from pytorch_generative import models
    from pytorch_generative import trainer

    train_loader, test_loader = debug_loader, debug_loader
    if train_loader is None:
        train_loader, test_loader = datasets.get_mnist_loaders(
            batch_size, dynamically_binarize=True)

    model = models.GatedPixelCNN(in_channels=1,
                                 out_channels=1,
                                 n_gated=10,
                                 gated_channels=128,
                                 head_channels=32)
    optimizer = optim.Adam(model.parameters(), lr=1e-3)
    scheduler = lr_scheduler.MultiplicativeLR(optimizer,
                                              lr_lambda=lambda _: 0.9999)

    def loss_fn(x, _, preds):
        batch_size = x.shape[0]
        x, preds = x.view((batch_size, -1)), preds.view((batch_size, -1))
        loss = F.binary_cross_entropy_with_logits(preds, x, reduction="none")
        return loss.sum(dim=1).mean()

    model_trainer = trainer.Trainer(
        model=model,
        loss_fn=loss_fn,
        optimizer=optimizer,
        train_loader=train_loader,
        eval_loader=test_loader,
        lr_scheduler=scheduler,
        log_dir=log_dir,
        device=device,
    )
    model_trainer.interleaved_train_and_eval(n_epochs)