{"id":36395,"date":"2024-11-01T09:48:09","date_gmt":"2024-11-01T09:48:09","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36395"},"modified":"2024-11-01T11:00:05","modified_gmt":"2024-11-01T11:00:05","slug":"using-pytorch-for-gan-deep-learning-first-gan","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36395\/","title":{"rendered":"Using PyTorch for GAN Deep Learning, First GAN"},"content":{"rendered":"<p><body><\/p>\n<p>\n        Generative Adversarial Networks (GANs) are an innovative deep learning model proposed by Ian Goodfellow in 2014, where two neural networks learn in opposition to each other. GANs are widely used in various fields such as image generation, text generation, and video generation. In this post, we will explain the basic concepts and implementation methods of GANs step by step using PyTorch.\n    <\/p>\n<h2>1. Basic Concepts of GAN<\/h2>\n<p>\n        GAN consists of two neural networks: the Generator and the Discriminator. The role of the Generator is to create data that looks real, and the Discriminator&#8217;s role is to determine whether the given data is real or fake data produced by the Generator. These two networks learn simultaneously; the Generator evolves to create increasingly sophisticated data to fool the Discriminator, while the Discriminator evolves to identify fake data more accurately.\n    <\/p>\n<h3>1.1 Structure of GAN<\/h3>\n<p>\n        The structure of GAN can be described simply as follows:\n    <\/p>\n<ul>\n<li>\n<strong>Generator<\/strong>: Accepts random noise as input and generates data that looks real.\n        <\/li>\n<li>\n<strong>Discriminator<\/strong>: Accepts real data and generated fake data as input and predicts whether each piece of data is real or not.\n        <\/li>\n<\/ul>\n<h3>1.2 Learning Process of GAN<\/h3>\n<p>\n        The learning process of GAN proceeds as follows:\n    <\/p>\n<ol>\n<li>Using real data and random noise, the Generator (G) creates fake data.<\/li>\n<li>The generated data and real data are input to the Discriminator (D), and predictions for each data are obtained.<\/li>\n<li>The loss function of the Generator is set to maximize the probability that the Discriminator judges fake data as real.<\/li>\n<li>The loss function of the Discriminator is set to maximize the probability that it judges real data as real and fake data as fake.<\/li>\n<li>This process is repeated so that both networks compete with each other, improving their performance.<\/li>\n<\/ol>\n<h2>2. Implementing GAN using PyTorch<\/h2>\n<p>\n        Now, let&#8217;s implement a simple GAN using PyTorch. Here, we will work on creating a GAN that generates images in numerical form using the MNIST dataset.\n    <\/p>\n<h3>2.1 Environment Setup<\/h3>\n<p>\n        First, we install and import the necessary libraries. We will use PyTorch and torchvision to load the dataset and build the model.\n    <\/p>\n<pre>\n    <code>\n    !pip install torch torchvision matplotlib\n    <\/code>\n    <\/pre>\n<h3>2.2 Preparing the Dataset<\/h3>\n<p>\n        We will load the MNIST dataset and perform data preprocessing. This will scale the image data between 0 and 1 and divide it into batches.\n    <\/p>\n<pre>\n    <code>\n    import torch\n    from torchvision import datasets, transforms\n    from torch.utils.data import DataLoader\n\n    # Load and preprocess the data\n    transform = transforms.Compose([\n        transforms.ToTensor(),\n        transforms.Normalize((0.5,), (0.5,))\n    ])\n\n    dataset = datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\n    dataloader = DataLoader(dataset, batch_size=64, shuffle=True)\n    <\/code>\n    <\/pre>\n<h3>2.3 Defining the Generator and Discriminator<\/h3>\n<p>\n        Next, we will define the two key components of GAN: the Generator and the Discriminator. Here, the Generator takes random noise as input to generate images, and the Discriminator takes images as input to determine whether they are real or fake.\n    <\/p>\n<pre>\n    <code>\n    import torch.nn as nn\n\n    class 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),\n                nn.Tanh()\n            )\n\n        def forward(self, z):\n            return self.model(z).view(-1, 1, 28, 28)\n\n    class 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()\n            )\n\n        def forward(self, img):\n            return self.model(img)\n    <\/code>\n    <\/pre>\n<h3>2.4 Initializing the Model and Setting Loss Function, Optimizer<\/h3>\n<p>\n        We will initialize the Generator and Discriminator and specify the loss function and optimizers. We will use CrossEntropyLoss and the Adam optimizer.\n    <\/p>\n<pre>\n    <code>\n    generator = Generator()\n    discriminator = Discriminator()\n\n    ad = torch.optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))\n    ag = torch.optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))\n\n    criterion = nn.BCELoss()\n    <\/code>\n    <\/pre>\n<h3>2.5 Training the GAN<\/h3>\n<p>\n        Now, let&#8217;s train the GAN. During each epoch, we train the Generator and Discriminator, and we can see the generated images.\n    <\/p>\n<pre>\n    <code>\n    import matplotlib.pyplot as plt\n    import numpy as np\n\n    def train_gan(generator, discriminator, criterion, ag, ad, dataloader, epochs=50):\n        for epoch in range(epochs):\n            for real_imgs, _ in dataloader:\n                batch_size = real_imgs.size(0)\n\n                # Generate real images and labels\n                real_labels = torch.ones(batch_size, 1)\n                noise = torch.randn(batch_size, 100)\n                fake_imgs = generator(noise)\n                fake_labels = torch.zeros(batch_size, 1)\n\n                # Train the Discriminator\n                discriminator.zero_grad()\n                real_loss = criterion(discriminator(real_imgs), real_labels)\n                fake_loss = criterion(discriminator(fake_imgs.detach()), fake_labels)\n                d_loss = real_loss + fake_loss\n                d_loss.backward()\n                ad.step()\n\n                # Train the Generator\n                generator.zero_grad()\n                g_loss = criterion(discriminator(fake_imgs), real_labels)\n                g_loss.backward()\n                ag.step()\n\n            print(f'Epoch [{epoch + 1}\/{epochs}], D Loss: {d_loss.item():.4f}, G Loss: {g_loss.item():.4f}')\n\n            # Save generated images\n            if (epoch + 1) % 10 == 0:\n                save_generated_images(generator, epoch + 1)\n\n    def save_generated_images(generator, epoch):\n        noise = torch.randn(64, 100)\n        generated_imgs = generator(noise)\n        generated_imgs = generated_imgs.detach().numpy()\n        generated_imgs = (generated_imgs + 1) \/ 2  # Rescale to [0, 1]\n\n        fig, axs = plt.subplots(8, 8, figsize=(8, 8))\n        for i, ax in enumerate(axs.flat):\n            ax.imshow(generated_imgs[i][0], cmap='gray')\n            ax.axis('off')\n        plt.savefig(f'generated_images_epoch_{epoch}.png')\n        plt.close()\n\n    train_gan(generator, discriminator, criterion, ag, ad, dataloader, epochs=50)\n    <\/code>\n    <\/pre>\n<h3>2.6 Checking the Results<\/h3>\n<p>\n        After training is completed, check the generated images. As GANs undergo iterative training, they become capable of generating data images that increasingly resemble real ones. Ultimately, the performance of GANs is evaluated by the quality of the generated images. If the training goes well, the generated images will have unfamiliar yet beautiful forms.\n    <\/p>\n<h2>3. Conclusion<\/h2>\n<p>\n        In this post, we explained how to implement GANs using PyTorch. I hope you were able to experience creating your own GAN along with the basic concepts of GANs and actual code. GANs are powerful tools, but building a robust model requires diverse and in-depth research. We invite you into the world of GANs that create beautiful and creative results!\n    <\/p>\n<h2>4. References<\/h2>\n<ul>\n<li>Ian Goodfellow et al. &#8220;Generative Adversarial Networks&#8221;. NIPS 2014.<\/li>\n<li>PyTorch Documentation: <a href=\"https:\/\/pytorch.org\/docs\/stable\/index.html\">https:\/\/pytorch.org\/docs\/stable\/index.html<\/a><\/li>\n<li>GANs in Action book<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Generative Adversarial Networks (GANs) are an innovative deep learning model proposed by Ian Goodfellow in 2014, where two neural networks learn in opposition to each other. GANs are widely used in various fields such as image generation, text generation, and video generation. In this post, we will explain the basic concepts and implementation methods of &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36395\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Using PyTorch for GAN Deep Learning, First GAN&#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-36395","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>Using PyTorch for GAN Deep Learning, First GAN - \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\/36395\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using PyTorch for GAN Deep Learning, First GAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Generative Adversarial Networks (GANs) are an innovative deep learning model proposed by Ian Goodfellow in 2014, where two neural networks learn in opposition to each other. GANs are widely used in various fields such as image generation, text generation, and video generation. In this post, we will explain the basic concepts and implementation methods of &hellip; \ub354 \ubcf4\uae30 &quot;Using PyTorch for GAN Deep Learning, First GAN&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36395\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:48:09+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:00:05+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\/36395\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36395\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Using PyTorch for GAN Deep Learning, First GAN\",\"datePublished\":\"2024-11-01T09:48:09+00:00\",\"dateModified\":\"2024-11-01T11:00:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36395\/\"},\"wordCount\":612,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"GAN deep learning course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36395\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36395\/\",\"name\":\"Using PyTorch for GAN Deep Learning, First GAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:48:09+00:00\",\"dateModified\":\"2024-11-01T11:00:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36395\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36395\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36395\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using PyTorch for GAN Deep Learning, First GAN\"}]},{\"@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":"Using PyTorch for GAN Deep Learning, First GAN - \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\/36395\/","og_locale":"ko_KR","og_type":"article","og_title":"Using PyTorch for GAN Deep Learning, First GAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Generative Adversarial Networks (GANs) are an innovative deep learning model proposed by Ian Goodfellow in 2014, where two neural networks learn in opposition to each other. GANs are widely used in various fields such as image generation, text generation, and video generation. In this post, we will explain the basic concepts and implementation methods of &hellip; \ub354 \ubcf4\uae30 \"Using PyTorch for GAN Deep Learning, First GAN\"","og_url":"https:\/\/atmokpo.com\/w\/36395\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:48:09+00:00","article_modified_time":"2024-11-01T11:00:05+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\/36395\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36395\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Using PyTorch for GAN Deep Learning, First GAN","datePublished":"2024-11-01T09:48:09+00:00","dateModified":"2024-11-01T11:00:05+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36395\/"},"wordCount":612,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["GAN deep learning course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36395\/","url":"https:\/\/atmokpo.com\/w\/36395\/","name":"Using PyTorch for GAN Deep Learning, First GAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:48:09+00:00","dateModified":"2024-11-01T11:00:05+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36395\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36395\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36395\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Using PyTorch for GAN Deep Learning, First GAN"}]},{"@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\/36395","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=36395"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36395\/revisions"}],"predecessor-version":[{"id":36396,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36395\/revisions\/36396"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}