{"id":36413,"date":"2024-11-01T09:48:17","date_gmt":"2024-11-01T09:48:17","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36413"},"modified":"2024-11-01T11:00:00","modified_gmt":"2024-11-01T11:00:00","slug":"deep-learning-with-gan-using-pytorch-environment-setup","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36413\/","title":{"rendered":"Deep Learning with GAN using PyTorch, Environment Setup"},"content":{"rendered":"<p><body><\/p>\n<p>In recent years, deep learning has made innovative advancements in various fields such as image generation, transformation, and segmentation. Among them, GAN (Generative Adversarial Network) has opened new possibilities for image generation. GAN consists of two networks, the Generator and the Discriminator, which compete against each other to improve performance. In this post, we will explore an overview of GAN and detail how to set up the environment to implement GAN using the PyTorch framework.<\/p>\n<h2>1. Overview of GAN<\/h2>\n<p>GAN is a model proposed by Ian Goodfellow in 2014, where two neural networks interact to be trained. The generator creates data that resembles real data, while the discriminator determines whether the generated data is real or not. These two networks continuously enhance each other.<\/p>\n<h3>1.1 Structure of GAN<\/h3>\n<p>GAN consists of the following two components:<\/p>\n<ul>\n<li><strong>Generator:<\/strong> Takes a random noise vector as input and generates fake data.<\/li>\n<li><strong>Discriminator:<\/strong> Determines whether the received data is real or fake.<\/li>\n<\/ul>\n<h3>1.2 Mathematical Definition of GAN<\/h3>\n<p>The goal of GAN can be expressed as a Minimax game. The generator has the following objective:<\/p>\n<pre><code>G^{*} = arg \\min_{G} \\max_{D} V(D, G) = E_{x \\sim pdata(x)}[\\log D(x)] + E_{z \\sim pz(z)}[\\log(1 - D(G(z)))]<\/code><\/pre>\n<p>Here, G represents the generator, D represents the discriminator, p<sub>data<\/sub>(x) is the distribution of real data, and p<sub>z<\/sub>(z) is the noise distribution used by the generator.<\/p>\n<h2>2. Setting Up the PyTorch Environment<\/h2>\n<p>PyTorch is an open-source machine learning library that provides various tools for tensor operations, automatic differentiation, and easily building deep learning models. The following outlines how to install PyTorch and set up the necessary libraries for implementing GAN.<\/p>\n<h3>2.1 Installing PyTorch<\/h3>\n<p>PyTorch supports CUDA, allowing it to operate efficiently on NVIDIA GPUs. You can install it using the following command:<\/p>\n<pre><code>pip install torch torchvision torchaudio<\/code><\/pre>\n<p>If you are using CUDA, please check the official PyTorch website for the installation commands that match your environment.<\/p>\n<h3>2.2 Installing Additional Libraries<\/h3>\n<p>You will also need to install additional libraries required for image processing. Install them using the command below:<\/p>\n<pre><code>pip install matplotlib numpy<\/code><\/pre>\n<h3>2.3 Setting Up the Basic Directory Structure<\/h3>\n<p>Create the project directory with the following structure:<\/p>\n<pre><code>\n    gan_project\/\n    \u251c\u2500\u2500 dataset\/\n    \u251c\u2500\u2500 models\/\n    \u251c\u2500\u2500 results\/\n    \u2514\u2500\u2500 train.py\n    <\/code><\/pre>\n<p>Each directory serves the purpose of storing datasets, models, and results. The <code>train.py<\/code> file contains the script for training and evaluating GAN.<\/p>\n<h2>3. Code Examples Needed to Implement GAN<\/h2>\n<p>Now, let&#8217;s write the basic code to implement GAN. This code defines the generator and discriminator and includes the process of training GAN.<\/p>\n<h3>3.1 Defining the Model<\/h3>\n<p>First, we define the generator and discriminator networks. The code below demonstrates an example of building the generator and discriminator using a simple CNN (Convolutional Neural Network):<\/p>\n<pre><code>import torch\nimport torch.nn as nn\n\n# Generator model\nclass Generator(nn.Module):\n    def __init__(self):\n        super(Generator, self).__init__()\n        self.model = 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),  # MNIST image size\n            nn.Tanh()  # Normalized to [-1, 1]\n        )\n    \n    def forward(self, z):\n        return self.model(z).view(-1, 1, 28, 28)\n\n# Discriminator model\nclass Discriminator(nn.Module):\n    def __init__(self):\n        super(Discriminator, self).__init__()\n        self.model = nn.Sequential(\n            nn.Flatten(),\n            nn.Linear(28 * 28, 512),\n            nn.LeakyReLU(0.2),\n            nn.Linear(512, 256),\n            nn.LeakyReLU(0.2),\n            nn.Linear(256, 1),\n            nn.Sigmoid()  # Normalized to [0, 1]\n        )\n    \n    def forward(self, img):\n        return self.model(img)\n    <\/code><\/pre>\n<h3>3.2 Preparing the Dataset<\/h3>\n<p>We load and preprocess the MNIST dataset. Using the torchvision library makes it easy to load the dataset.<\/p>\n<pre><code>from torchvision import datasets, transforms\n\n# Data preprocessing\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\n# Load MNIST dataset\ndataloader = torch.utils.data.DataLoader(\n    datasets.MNIST('dataset\/', download=True, transform=transform),\n    batch_size=64,\n    shuffle=True\n)  \n    <\/code><\/pre>\n<h3>3.3 GAN Training Code<\/h3>\n<p>Now, let&#8217;s create a loop that can train the generator and discriminator.<\/p>\n<pre><code>import torch.optim as optim\n\n# Initialize models\ngenerator = Generator()\ndiscriminator = Discriminator()\n\n# Loss function and optimizer\ncriterion = nn.BCELoss()\noptimizer_g = optim.Adam(generator.parameters(), lr=0.0002)\noptimizer_d = optim.Adam(discriminator.parameters(), lr=0.0002)\n\nnum_epochs = 50\nfor epoch in range(num_epochs):\n    for i, (imgs, _) in enumerate(dataloader):\n        batch_size = imgs.size(0)\n        imgs = imgs.view(batch_size, -1)\n\n        # Generate real and fake labels\n        real_labels = torch.ones(batch_size, 1)\n        fake_labels = torch.zeros(batch_size, 1)\n\n        # Train the discriminator\n        optimizer_d.zero_grad()\n        \n        outputs = discriminator(imgs)\n        d_loss_real = criterion(outputs, real_labels)\n        d_loss_real.backward()\n        \n        z = torch.randn(batch_size, 100)\n        fake_images = generator(z)\n        outputs = discriminator(fake_images)\n        d_loss_fake = criterion(outputs, fake_labels)\n        d_loss_fake.backward()\n        \n        optimizer_d.step()\n\n        # Train the generator\n        optimizer_g.zero_grad()\n        z = torch.randn(batch_size, 100)\n        fake_images = generator(z)\n        outputs = discriminator(fake_images)\n        g_loss = criterion(outputs, real_labels)\n        g_loss.backward()\n        \n        optimizer_g.step()\n\n        if i % 100 == 0:\n            print(f\"[Epoch {epoch}\/{num_epochs}] [Batch {i}\/{len(dataloader)}] \"\n                  f\"[D loss: {d_loss_real.item() + d_loss_fake.item()}] \"\n                  f\"[G loss: {g_loss.item()}]\")\n    <\/code><\/pre>\n<h2>4. Visualizing Results<\/h2>\n<p>After training is complete, it is also important to visualize the generated images. You can output the generated images using matplotlib.<\/p>\n<pre><code>import matplotlib.pyplot as plt\n\ndef generate_and_plot_images(generator, n_samples=25):\n    z = torch.randn(n_samples, 100)\n    generated_images = generator(z).detach().numpy()\n\n    plt.figure(figsize=(5, 5))\n    for i in range(n_samples):\n        plt.subplot(5, 5, i + 1)\n        plt.imshow(generated_images[i][0], cmap='gray')\n        plt.axis('off')\n    plt.show()\n\ngenerate_and_plot_images(generator)\n    <\/code><\/pre>\n<h2>5. Conclusion<\/h2>\n<p>In this post, we explained the principles and basic structure of GAN, as well as provided the setup and code examples needed to implement GAN using PyTorch. GAN is a very powerful generative model with various applications. We encourage you to try various projects utilizing GAN in the future.<\/p>\n<h2>References<\/h2>\n<ul>\n<li><a href=\"https:\/\/pytorch.org\/\">Official PyTorch Website<\/a><\/li>\n<li><a href=\"https:\/\/arxiv.org\/abs\/1406.2661\">GAN Paper<\/a><\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In recent years, deep learning has made innovative advancements in various fields such as image generation, transformation, and segmentation. Among them, GAN (Generative Adversarial Network) has opened new possibilities for image generation. GAN consists of two networks, the Generator and the Discriminator, which compete against each other to improve performance. In this post, we will &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36413\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning with GAN using PyTorch, Environment Setup&#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-36413","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, Environment Setup - \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\/36413\/\" \/>\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, Environment Setup - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In recent years, deep learning has made innovative advancements in various fields such as image generation, transformation, and segmentation. Among them, GAN (Generative Adversarial Network) has opened new possibilities for image generation. GAN consists of two networks, the Generator and the Discriminator, which compete against each other to improve performance. In this post, we will &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning with GAN using PyTorch, Environment Setup&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36413\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:48:17+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:00:00+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=\"5\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/36413\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36413\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning with GAN using PyTorch, Environment Setup\",\"datePublished\":\"2024-11-01T09:48:17+00:00\",\"dateModified\":\"2024-11-01T11:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36413\/\"},\"wordCount\":526,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"GAN deep learning course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36413\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36413\/\",\"name\":\"Deep Learning with GAN using PyTorch, Environment Setup - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:48:17+00:00\",\"dateModified\":\"2024-11-01T11:00:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36413\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36413\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36413\/#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, Environment Setup\"}]},{\"@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, Environment Setup - \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\/36413\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning with GAN using PyTorch, Environment Setup - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In recent years, deep learning has made innovative advancements in various fields such as image generation, transformation, and segmentation. Among them, GAN (Generative Adversarial Network) has opened new possibilities for image generation. GAN consists of two networks, the Generator and the Discriminator, which compete against each other to improve performance. In this post, we will &hellip; \ub354 \ubcf4\uae30 \"Deep Learning with GAN using PyTorch, Environment Setup\"","og_url":"https:\/\/atmokpo.com\/w\/36413\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:48:17+00:00","article_modified_time":"2024-11-01T11:00:00+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":"5\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/36413\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36413\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning with GAN using PyTorch, Environment Setup","datePublished":"2024-11-01T09:48:17+00:00","dateModified":"2024-11-01T11:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36413\/"},"wordCount":526,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["GAN deep learning course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36413\/","url":"https:\/\/atmokpo.com\/w\/36413\/","name":"Deep Learning with GAN using PyTorch, Environment Setup - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:48:17+00:00","dateModified":"2024-11-01T11:00:00+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36413\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36413\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36413\/#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, Environment Setup"}]},{"@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\/36413","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=36413"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36413\/revisions"}],"predecessor-version":[{"id":36414,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36413\/revisions\/36414"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36413"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36413"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36413"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}