{"id":36363,"date":"2024-11-01T09:47:50","date_gmt":"2024-11-01T09:47:50","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36363"},"modified":"2024-11-01T11:00:13","modified_gmt":"2024-11-01T11:00:13","slug":"deep-learning-with-gan-using-pytorch-improving-model-performance","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36363\/","title":{"rendered":"Deep Learning with GAN using PyTorch, Improving Model Performance"},"content":{"rendered":"<p>Generative Adversarial Networks (GANs) are an innovative deep learning model proposed in 2014 by Ian Goodfellow and his colleagues. GAN consists of two neural networks: the Generator and the Discriminator. The Generator aims to create new data, while the Discriminator attempts to distinguish whether the data is real or generated. These two models compete with each other, and as a result, the Generator gradually produces more realistic data.<\/p>\n<h2>1. Basic Concept of GAN<\/h2>\n<p>The basic idea of GAN is adversarial training of the two neural networks. The Generator takes random noise vectors as input and generates new data based on them. In contrast, the Discriminator learns how to distinguish between real data and generated data.<\/p>\n<ul>\n<li><strong>Generator<\/strong>: Receives random noise as input to generate new data.<\/li>\n<li><strong>Discriminator<\/strong>: Determines whether the received data is real data or generated data.<\/li>\n<\/ul>\n<h2>2. Installing PyTorch<\/h2>\n<p>First, you need to install PyTorch. PyTorch can be installed via pip or conda. Use the command below to install PyTorch.<\/p>\n<pre><code>pip install torch torchvision<\/code><\/pre>\n<h2>3. Implementing GAN Model<\/h2>\n<p>Below is an example of implementing a basic GAN structure using PyTorch. We will create a GAN that generates digit images using the MNIST dataset.<\/p>\n<h3>3.1 Loading Dataset<\/h3>\n<pre><code>import torch\nimport torchvision.transforms as transforms\nfrom torchvision import datasets\n\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\ntrain_dataset = datasets.MNIST(root='.\/data', train=True, transform=transform, download=True)\ntrain_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)\n<\/code><\/pre>\n<h3>3.2 Defining Generator and Discriminator Models<\/h3>\n<pre><code>import torch.nn as nn\n\nclass Generator(nn.Module):\n    def __init__(self):\n        super(Generator, self).__init__()\n        self.fc = nn.Sequential(\n            nn.Linear(100, 256),\n            nn.ReLU(),\n            nn.Linear(256, 512),\n            nn.ReLU(),\n            nn.Linear(512, 1024),\n            nn.ReLU(),\n            nn.Linear(1024, 28 * 28),\n            nn.Tanh()\n        )\n\n    def forward(self, z):\n        return self.fc(z).reshape(-1, 1, 28, 28)\n\nclass Discriminator(nn.Module):\n    def __init__(self):\n        super(Discriminator, self).__init__()\n        self.fc = nn.Sequential(\n            nn.Linear(28 * 28, 1024),\n            nn.LeakyReLU(0.2),\n            nn.Linear(1024, 512),\n            nn.LeakyReLU(0.2),\n            nn.Linear(512, 256),\n            nn.LeakyReLU(0.2),\n            nn.Linear(256, 1),\n            nn.Sigmoid()\n        )\n\n    def forward(self, x):\n        return self.fc(x.view(-1, 28 * 28))\n<\/code><\/pre>\n<h3>3.3 Training the Model<\/h3>\n<pre><code>import torch.optim as optim\n\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n\ngenerator = Generator().to(device)\ndiscriminator = Discriminator().to(device)\n\ncriterion = nn.BCELoss()\noptimizer_g = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))\noptimizer_d = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))\n\nnum_epochs = 50\nfor epoch in range(num_epochs):\n    for i, (images, _) in enumerate(train_loader):\n        images = images.to(device)\n        batch_size = images.size(0)\n\n        # Generate real and fake labels\n        real_labels = torch.ones(batch_size, 1).to(device)\n        fake_labels = torch.zeros(batch_size, 1).to(device)\n\n        # Train Discriminator\n        optimizer_d.zero_grad()\n        outputs = discriminator(images)\n        d_loss_real = criterion(outputs, real_labels)\n        d_loss_real.backward()\n\n        z = torch.randn(batch_size, 100).to(device)\n        fake_images = generator(z)\n        outputs = discriminator(fake_images.detach())\n        d_loss_fake = criterion(outputs, fake_labels)\n        d_loss_fake.backward()\n\n        optimizer_d.step()\n\n        # Train Generator\n        optimizer_g.zero_grad()\n        outputs = discriminator(fake_images)\n        g_loss = criterion(outputs, real_labels)\n        g_loss.backward()\n\n        optimizer_g.step()\n\n    print(f'Epoch [{epoch+1}\/{num_epochs}], d_loss: {d_loss_real.item() + d_loss_fake.item()}, g_loss: {g_loss.item()}')\n<\/code><\/pre>\n<h2>4. Improving Model Performance<\/h2>\n<p>There are several ways to improve the performance of GAN models. These include data augmentation, model modification, normalization techniques, etc.<\/p>\n<h3>4.1 Data Augmentation<\/h3>\n<p>You can use methods like rotation, translation, and scaling to increase the amount of data. You can easily transform data through the <code>torchvision.transforms<\/code> module of PyTorch.<\/p>\n<pre><code>transform = transforms.Compose([\n    transforms.RandomHorizontalFlip(),\n    transforms.RandomVerticalFlip(),\n    transforms.RandomRotation(10),\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n<\/code><\/pre>\n<h3>4.2 Improving Model Architecture<\/h3>\n<p>You can enhance the performance of the model by improving the architecture of the Generator and the Discriminator. For example, you can use deeper networks or Convolutional Neural Networks (CNNs).<\/p>\n<h3>4.3 Adjusting Learning Rate<\/h3>\n<p>The learning rate plays a crucial role in model training. You can dynamically adjust the learning rate using a learning rate scheduler.<\/p>\n<pre><code>scheduler_g = optim.lr_scheduler.StepLR(optimizer_g, step_size=30, gamma=0.1)\nscheduler_d = optim.lr_scheduler.StepLR(optimizer_d, step_size=30, gamma=0.1)\n<\/code><\/pre>\n<h3>4.4 Using Different Loss Functions<\/h3>\n<p>Instead of basic BCELoss, you can consider using Wasserstein Loss or Least Squares Loss. Using these loss functions can help improve the stability of GANs.<\/p>\n<h2>5. Conclusion<\/h2>\n<p>GANs are powerful image generation models that can be utilized in various applications. Implementing GANs using PyTorch is relatively straightforward, and there are several ways to enhance performance. Interest in future GAN research and functionality improvements is expected to grow.<\/p>\n<h2>6. References<\/h2>\n<ul>\n<li>Ian Goodfellow et al. (2014). Generative Adversarial Networks.<\/li>\n<li>Pytorch Documentation: https:\/\/pytorch.org\/docs\/stable\/index.html<\/li>\n<li>Deep Learning for Computer Vision with Python by Adrian Rosebrock.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Generative Adversarial Networks (GANs) are an innovative deep learning model proposed in 2014 by Ian Goodfellow and his colleagues. GAN consists of two neural networks: the Generator and the Discriminator. The Generator aims to create new data, while the Discriminator attempts to distinguish whether the data is real or generated. These two models compete with &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36363\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning with GAN using PyTorch, Improving Model Performance&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[113],"tags":[],"class_list":["post-36363","post","type-post","status-publish","format-standard","hentry","category-gan-deep-learning-course"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Deep Learning with GAN using PyTorch, Improving Model Performance - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/36363\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deep Learning with GAN using PyTorch, Improving Model Performance - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Generative Adversarial Networks (GANs) are an innovative deep learning model proposed in 2014 by Ian Goodfellow and his colleagues. GAN consists of two neural networks: the Generator and the Discriminator. The Generator aims to create new data, while the Discriminator attempts to distinguish whether the data is real or generated. These two models compete with &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning with GAN using PyTorch, Improving Model Performance&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36363\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:47:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:00:13+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/36363\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36363\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning with GAN using PyTorch, Improving Model Performance\",\"datePublished\":\"2024-11-01T09:47:50+00:00\",\"dateModified\":\"2024-11-01T11:00:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36363\/\"},\"wordCount\":410,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"GAN deep learning course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36363\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36363\/\",\"name\":\"Deep Learning with GAN using PyTorch, Improving Model Performance - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:47:50+00:00\",\"dateModified\":\"2024-11-01T11:00:13+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36363\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36363\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36363\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deep Learning with GAN using PyTorch, Improving Model Performance\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Deep Learning with GAN using PyTorch, Improving Model Performance - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/36363\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning with GAN using PyTorch, Improving Model Performance - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Generative Adversarial Networks (GANs) are an innovative deep learning model proposed in 2014 by Ian Goodfellow and his colleagues. GAN consists of two neural networks: the Generator and the Discriminator. The Generator aims to create new data, while the Discriminator attempts to distinguish whether the data is real or generated. These two models compete with &hellip; \ub354 \ubcf4\uae30 \"Deep Learning with GAN using PyTorch, Improving Model Performance\"","og_url":"https:\/\/atmokpo.com\/w\/36363\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:47:50+00:00","article_modified_time":"2024-11-01T11:00:13+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/36363\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36363\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning with GAN using PyTorch, Improving Model Performance","datePublished":"2024-11-01T09:47:50+00:00","dateModified":"2024-11-01T11:00:13+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36363\/"},"wordCount":410,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["GAN deep learning course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36363\/","url":"https:\/\/atmokpo.com\/w\/36363\/","name":"Deep Learning with GAN using PyTorch, Improving Model Performance - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:47:50+00:00","dateModified":"2024-11-01T11:00:13+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36363\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36363\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36363\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Deep Learning with GAN using PyTorch, Improving Model Performance"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36363","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=36363"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36363\/revisions"}],"predecessor-version":[{"id":36364,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36363\/revisions\/36364"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36363"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36363"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36363"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}