{"id":36483,"date":"2024-11-01T09:48:50","date_gmt":"2024-11-01T09:48:50","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36483"},"modified":"2024-11-01T11:53:00","modified_gmt":"2024-11-01T11:53:00","slug":"deep-learning-pytorch-course-dcgan","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36483\/","title":{"rendered":"Deep Learning PyTorch Course, DCGAN"},"content":{"rendered":"<p><body><\/p>\n<p>\n        In this course, we will take a closer look at DCGAN (Deep Convolutional GAN), a type of Generative Adversarial Networks (GAN), which is a field of deep learning. DCGAN is a model specialized for image generation and transformation tasks, particularly excelling in high-resolution image generation.\n    <\/p>\n<h2>1. Understanding GAN<\/h2>\n<p>\n        GAN consists of two neural networks: a Generator and a Discriminator. The Generator generates fake data that resembles real data, while the Discriminator distinguishes between real and fake data. These two networks compete and learn from each other, with the Generator increasingly generating more realistic data.\n    <\/p>\n<h3>1.1 Basic Concept of GAN<\/h3>\n<p>\n        The learning process of GAN occurs as follows:\n    <\/p>\n<ul>\n<li>1. The Generator G takes a random noise vector z as input and generates a fake image G(z).<\/li>\n<li>2. The Discriminator D takes both a real image x and the generated image G(z) as input and outputs the probabilities of each being real\/fake.<\/li>\n<li>3. The Generator learns to mislead D into thinking the fake image is real, while the Discriminator learns to accurately distinguish real images.<\/li>\n<\/ul>\n<h2>2. Concept of DCGAN<\/h2>\n<p>\n        DCGAN extends GAN to deep convolutional networks. DCGAN uses convolutional layers to learn a spatial hierarchy for better performance in image generation tasks. DCGAN has the following structural features:\n    <\/p>\n<ul>\n<li>Uses stride for downsampling instead of traditional pooling layers.<\/li>\n<li>Applies Batch Normalization to stabilize learning.<\/li>\n<li>Uses ReLU activation function, and Tanh activation function in the output layer of the Generator.<\/li>\n<\/ul>\n<h3>2.1 Structure of DCGAN<\/h3>\n<p>\n        The structure of DCGAN is as follows:\n    <\/p>\n<ul>\n<li>Generator G:\n<ul>\n<li>Input: Random noise vector z<\/li>\n<li>Layers: Several transposed convolution layers with batch normalization and ReLU activation function<\/li>\n<li>Output: Generated image<\/li>\n<\/ul>\n<\/li>\n<li>Discriminator D:\n<ul>\n<li>Input: Image (real or generated)<\/li>\n<li>Layers: Several convolution layers with batch normalization and Leaky ReLU activation function<\/li>\n<li>Output: Probability of being real\/fake<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h2>3. Python Implementation of DCGAN<\/h2>\n<p>\n        Now, we will implement DCGAN in Python. Using PyTorch, we can train the model at high speed utilizing various supported GPUs. The following code establishes the basic structure of DCGAN.\n    <\/p>\n<h3>3.1 Installing Required Libraries<\/h3>\n<pre><code>!pip install torch torchvision<\/code><\/pre>\n<h3>3.2 Loading the Dataset<\/h3>\n<p>\n        In this example, we will use the MNIST dataset to generate handwritten digits. We will proceed to load and preprocess the data.\n    <\/p>\n<pre><code>\nimport torch\nimport torchvision\nimport torchvision.transforms as transforms\n\n# Dataset transformation definition: Normalize images to 0-1 and convert to tensor\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\n# Load MNIST dataset\ntrain_dataset = torchvision.datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\ntrain_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)\n    <\/code><\/pre>\n<h3>3.3 Defining the Generator and Discriminator<\/h3>\n<p>\n        Now we will implement the Generator and Discriminator models. As explained earlier, the Generator uses transposed convolution layers to generate images, while the Discriminator uses convolution layers to discriminate images.\n    <\/p>\n<pre><code>\nimport torch.nn as nn\n\nclass Generator(nn.Module):\n    def __init__(self):\n        super(Generator, self).__init__()\n        self.model = nn.Sequential(\n            nn.ConvTranspose2d(100, 256, 4, 1, 0, bias=False),\n            nn.BatchNorm2d(256),\n            nn.ReLU(True),\n            nn.ConvTranspose2d(256, 128, 4, 2, 1, bias=False),\n            nn.BatchNorm2d(128),\n            nn.ReLU(True),\n            nn.ConvTranspose2d(128, 1, 4, 2, 1, bias=False),\n            nn.Tanh()\n        )\n\n    def forward(self, input):\n        return self.model(input)\n\nclass Discriminator(nn.Module):\n    def __init__(self):\n        super(Discriminator, self).__init__()\n        self.model = nn.Sequential(\n            nn.Conv2d(1, 128, 4, 2, 1, bias=False),\n            nn.LeakyReLU(0.2),\n            nn.Conv2d(128, 256, 4, 2, 1, bias=False),\n            nn.BatchNorm2d(256),\n            nn.LeakyReLU(0.2),\n            nn.Conv2d(256, 1, 4, 1, 0, bias=False),\n            nn.Sigmoid()\n        )\n\n    def forward(self, input):\n        return self.model(input)\n    <\/code><\/pre>\n<h3>3.4 Model Initialization<\/h3>\n<p>\n        We will instantiate the Generator and Discriminator models and define the loss function and optimization algorithm. Here, we will use binary cross-entropy loss and the Adam optimizer.\n    <\/p>\n<pre><code>\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n\n# Instantiate models\ngenerator = Generator().to(device)\ndiscriminator = Discriminator().to(device)\n\n# Define loss function and optimizer\ncriterion = nn.BCELoss()\noptimizerG = torch.optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))\noptimizerD = torch.optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))\n    <\/code><\/pre>\n<h3>3.5 Training Loop<\/h3>\n<p>\n        We will proceed with the training of DCGAN. In each iteration, we will log the loss of the Generator and Discriminator, and output some sample images to verify that the model is learning correctly.\n    <\/p>\n<pre><code>\nnum_epochs = 50\nfor epoch in range(num_epochs):\n    for i, (images, _) in enumerate(train_loader):\n        # Prepare training data\n        images = images.to(device)\n\n        # Define labels\n        batch_size = images.size(0)\n        labels = torch.full((batch_size,), 1, device=device)  # Labels for real images\n        noise = torch.randn(batch_size, 100, 1, 1, device=device)  # Input noise for the Generator\n\n        # ------------------- Discriminator Training -------------------\n        optimizerD.zero_grad()\n\n        # Loss for real images\n        output = discriminator(images).view(-1)\n        lossD_real = criterion(output, labels)\n        lossD_real.backward()\n\n        # Generate fake images and calculate loss\n        fake_images = generator(noise)\n        labels.fill_(0)  # Labels for fake images\n        output = discriminator(fake_images.detach()).view(-1)\n        lossD_fake = criterion(output, labels)\n        lossD_fake.backward()\n\n        # Optimize Discriminator\n        optimizerD.step()\n\n        # ------------------- Generator Training -------------------\n        optimizerG.zero_grad()\n        labels.fill_(1)  # The Generator wants to classify fake images as real\n        output = discriminator(fake_images).view(-1)\n        lossG = criterion(output, labels)\n        lossG.backward()\n        optimizerG.step()\n\n    # Output results\n    print(f'Epoch [{epoch+1}\/{num_epochs}], Loss D: {lossD_real.item() + lossD_fake.item()}, Loss G: {lossG.item()}')\n    <\/code><\/pre>\n<h3>3.6 Visualizing Results<\/h3>\n<p>\n        After the training, generated images can be visualized to check the results. For example, we can use matplotlib to output some sample images.\n    <\/p>\n<pre><code>\nimport matplotlib.pyplot as plt\n\ndef show_generated_images(num_images=25):\n    noise = torch.randn(num_images, 100, 1, 1, device=device)\n    with torch.no_grad():\n        generated_images = generator(noise).cpu().detach().numpy()\n    generated_images = (generated_images + 1) \/ 2  # Convert to [0, 1] range\n\n    plt.figure(figsize=(10, 10))\n    for i in range(num_images):\n        plt.subplot(5, 5, i + 1)\n        plt.imshow(generated_images[i][0], cmap='gray')\n        plt.axis('off')\n    plt.show()\n\nshow_generated_images()\n    <\/code><\/pre>\n<h2>4. Conclusion<\/h2>\n<p>\n        In this course, we explored the theory and implementation process of DCGAN. GAN holds great potential in generative modeling, and DCGAN demonstrates particularly strong performance in the field of image generation. We encourage you to apply real cases to directly experience the model training process.\n    <\/p>\n<p>Challenge yourself with various image generation tasks using DCGAN!<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this course, we will take a closer look at DCGAN (Deep Convolutional GAN), a type of Generative Adversarial Networks (GAN), which is a field of deep learning. DCGAN is a model specialized for image generation and transformation tasks, particularly excelling in high-resolution image generation. 1. Understanding GAN GAN consists of two neural networks: a &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36483\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning PyTorch Course, DCGAN&#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":[149],"tags":[],"class_list":["post-36483","post","type-post","status-publish","format-standard","hentry","category-pytorch-study"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Deep Learning PyTorch Course, DCGAN - \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\/36483\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deep Learning PyTorch Course, DCGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this course, we will take a closer look at DCGAN (Deep Convolutional GAN), a type of Generative Adversarial Networks (GAN), which is a field of deep learning. DCGAN is a model specialized for image generation and transformation tasks, particularly excelling in high-resolution image generation. 1. Understanding GAN GAN consists of two neural networks: a &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning PyTorch Course, DCGAN&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36483\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:48:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:53: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\/36483\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36483\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning PyTorch Course, DCGAN\",\"datePublished\":\"2024-11-01T09:48:50+00:00\",\"dateModified\":\"2024-11-01T11:53:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36483\/\"},\"wordCount\":537,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"PyTorch Study\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36483\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36483\/\",\"name\":\"Deep Learning PyTorch Course, DCGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:48:50+00:00\",\"dateModified\":\"2024-11-01T11:53:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36483\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36483\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36483\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deep Learning PyTorch Course, DCGAN\"}]},{\"@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 PyTorch Course, DCGAN - \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\/36483\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning PyTorch Course, DCGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this course, we will take a closer look at DCGAN (Deep Convolutional GAN), a type of Generative Adversarial Networks (GAN), which is a field of deep learning. DCGAN is a model specialized for image generation and transformation tasks, particularly excelling in high-resolution image generation. 1. Understanding GAN GAN consists of two neural networks: a &hellip; \ub354 \ubcf4\uae30 \"Deep Learning PyTorch Course, DCGAN\"","og_url":"https:\/\/atmokpo.com\/w\/36483\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:48:50+00:00","article_modified_time":"2024-11-01T11:53: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\/36483\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36483\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning PyTorch Course, DCGAN","datePublished":"2024-11-01T09:48:50+00:00","dateModified":"2024-11-01T11:53:00+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36483\/"},"wordCount":537,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["PyTorch Study"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36483\/","url":"https:\/\/atmokpo.com\/w\/36483\/","name":"Deep Learning PyTorch Course, DCGAN - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:48:50+00:00","dateModified":"2024-11-01T11:53:00+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36483\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36483\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36483\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Deep Learning PyTorch Course, DCGAN"}]},{"@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\/36483","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=36483"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36483\/revisions"}],"predecessor-version":[{"id":36484,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36483\/revisions\/36484"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36483"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36483"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36483"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}