import gradio as gr import torch import torch.nn as nn import numpy as np class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() self.main = nn.Sequential( nn.ConvTranspose2d(100, 64 * 8, 4, 1, 0, bias=False), nn.BatchNorm2d(64 * 8), nn.ReLU(True), nn.ConvTranspose2d(64 * 8, 64 * 4, 4, 2, 1, bias=False), nn.BatchNorm2d(64 * 4), nn.ReLU(True), nn.ConvTranspose2d(64 * 4, 64 * 2, 4, 2, 1, bias=False), nn.BatchNorm2d(64 * 2), nn.ReLU(True), nn.ConvTranspose2d(64 * 2, 64, 4, 2, 1, bias=False), nn.BatchNorm2d(64), nn.ReLU(True), nn.ConvTranspose2d(64, 3, 4, 2, 1, bias=False), nn.Tanh() ) def forward(self, input): return self.main(input) netG = Generator() device = "cuda" if torch.cuda.is_available() else "cpu" netG.load_state_dict(torch.load("dcgan.pth", map_location=device)) netG.eval() def generate_image(): with torch.no_grad(): noise = torch.randn(1, 100, 1, 1) fake_image = netG(noise) generated_image = fake_image.squeeze().cpu().numpy() generated_image = np.transpose(generated_image, (1, 2, 0)) generated_image = (generated_image + 1) / 2.0 generated_image = (generated_image * 255).astype(np.uint8) return generated_image title = "DCGAN Image Generator 🖌️🎨" description = "Generate non-existing images using DCGAN." iface = gr.Interface( fn=generate_image, inputs=None, outputs="image", title=title, description=description, theme="soft" ) iface.launch()