readme: ---
  library_name: pytorch
  tags:
  - dcgan
  ---
  # cryptopunks-gan
  
  A DCGAN trained to generate novel Cryptopunks.
  
  Check out the code by Teddy Koker [here](https://github.com/teddykoker/cryptopunks-gan).
  
  ## Generated Punks
  
  Here are some punks generated by this model:
  
  ![](fake_samples_epoch_999.png)
  
  ## Usage
  
  You can try it out yourself, or you can play with the [demo](https://huggingface.co/spaces/nateraw/cryptopunks-generator).
  
  To use it yourself - make sure you have `torch`, `torchvision`, and `huggingface_hub` installed. Then, run the following to generate a grid of 64 random punks:
  
  ```python
  import torch
  from huggingface_hub import hf_hub_download
  from torch import nn
  from torchvision.utils import save_image
  
  
  class Generator(nn.Module):
      def __init__(self, nc=4, nz=100, ngf=64):
          super(Generator, self).__init__()
          self.network = nn.Sequential(
              nn.ConvTranspose2d(nz, ngf * 4, 3, 1, 0, bias=False),
              nn.BatchNorm2d(ngf * 4),
              nn.ReLU(True),
              nn.ConvTranspose2d(ngf * 4, ngf * 2, 3, 2, 1, bias=False),
              nn.BatchNorm2d(ngf * 2),
              nn.ReLU(True),
              nn.ConvTranspose2d(ngf * 2, ngf, 4, 2, 0, bias=False),
              nn.BatchNorm2d(ngf),
              nn.ReLU(True),
              nn.ConvTranspose2d(ngf, nc, 4, 2, 1, bias=False),
              nn.Tanh(),
          )
  
      def forward(self, input):
          output = self.network(input)
          return output
  
  
  model = Generator()
  weights_path = hf_hub_download('nateraw/cryptopunks-gan', 'generator.pth')
  model.load_state_dict(torch.load(weights_path, map_location=torch.device('cpu')))
  
  out = model(torch.randn(64, 100, 1, 1))
  save_image(out, "punks.png", normalize=True)
  ```
  