{"id":36317,"date":"2024-11-01T09:47:29","date_gmt":"2024-11-01T09:47:29","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36317"},"modified":"2024-11-01T11:00:25","modified_gmt":"2024-11-01T11:00:25","slug":"deep-learning-with-gan-using-pytorch-ae-autoencoder","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36317\/","title":{"rendered":"Deep Learning with GAN using PyTorch, AE &#8211; Autoencoder"},"content":{"rendered":"<p><body><\/p>\n<h2>1. GAN (Generative Adversarial Network)<\/h2>\n<p>\n        GAN is a model proposed by Ian Goodfellow in 2014, consisting of two neural networks: the generator and the discriminator, that compete with each other. Through this competition, the generator produces data that looks real.\n    <\/p>\n<h3>1.1 Structure of GAN<\/h3>\n<p>\n        GAN consists of two neural networks. The generator takes a random noise vector as input and generates fake data, while the discriminator distinguishes whether the input data is real or generated. The generator and discriminator are trained with their respective objectives.\n    <\/p>\n<h3>1.2 Loss Function of GAN<\/h3>\n<p>\n        The loss function of GAN is used to evaluate the performance of the generator and the discriminator. The generator tries to fool the discriminator, and the discriminator works to distinguish between the two.<br \/>\n        \\[<br \/>\n        \\text{Loss}_D = &#8211; \\mathbb{E}_{x \\sim p_{data}(x)}[\\log(D(x))] &#8211; \\mathbb{E}_{z \\sim p_z(z)}[\\log(1 &#8211; D(G(z)))]<br \/>\n        \\]<br \/>\n        \\[<br \/>\n        \\text{Loss}_G = &#8211; \\mathbb{E}_{z \\sim p_z(z)}[\\log(D(G(z)))]<br \/>\n        \\]\n    <\/p>\n<h3>1.3 GAN Example Code<\/h3>\n<p>The following is a simple GAN implemented using PyTorch:<\/p>\n<pre>\n        <code>\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\n\n# Define hyperparameters\nlatent_size = 100\nbatch_size = 64\nnum_epochs = 200\nlearning_rate = 0.0002\n\n# Load dataset\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\ndataset = datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\ndata_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True)\n\n# Define generator\nclass Generator(nn.Module):\n    def __init__(self):\n        super(Generator, self).__init__()\n        self.model = nn.Sequential(\n            nn.Linear(latent_size, 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# Define discriminator\nclass Discriminator(nn.Module):\n    def __init__(self):\n        super(Discriminator, self).__init__()\n        self.model = 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, img):\n        return self.model(img.view(-1, 28*28))\n\n# Initialize models\ngenerator = Generator()\ndiscriminator = Discriminator()\n\n# Define loss function and optimizers\ncriterion = nn.BCELoss()\noptimizer_G = optim.Adam(generator.parameters(), lr=learning_rate)\noptimizer_D = optim.Adam(discriminator.parameters(), lr=learning_rate)\n\n# Training process\nfor epoch in range(num_epochs):\n    for i, (imgs, _) in enumerate(data_loader):\n        # Real and fake image labels\n        real_imgs = imgs\n        real_labels = torch.ones(imgs.size(0), 1)  # Real labels\n        fake_labels = torch.zeros(imgs.size(0), 1)  # Fake labels\n\n        # Train discriminator\n        optimizer_D.zero_grad()\n        outputs = discriminator(real_imgs)\n        d_loss_real = criterion(outputs, real_labels)\n\n        z = torch.randn(imgs.size(0), latent_size)\n        fake_imgs = generator(z)\n        outputs = discriminator(fake_imgs.detach())\n        d_loss_fake = criterion(outputs, fake_labels)\n\n        d_loss = d_loss_real + d_loss_fake\n        d_loss.backward()\n        optimizer_D.step()\n\n        # Train generator\n        optimizer_G.zero_grad()\n        outputs = discriminator(fake_imgs)\n        g_loss = criterion(outputs, real_labels)\n        g_loss.backward()\n        optimizer_G.step()\n\n    print(f\"Epoch [{epoch}\/{num_epochs}], d_loss: {d_loss.item()}, g_loss: {g_loss.item()}\")\n        <\/code>\n    <\/pre>\n<h2>2. Autoencoder<\/h2>\n<p>\n        Autoencoders are an unsupervised learning method that compresses and reconstructs input data. They aim to produce outputs that are the same as the inputs while learning features to compress the data.\n    <\/p>\n<h3>2.1 Structure of Autoencoder<\/h3>\n<p>\n        An autoencoder is divided into two parts: an encoder and a decoder. The encoder transforms the input into a low-dimensional latent representation, while the decoder uses this latent representation to reconstruct the original input.\n    <\/p>\n<h3>2.2 Loss Function of Autoencoder<\/h3>\n<p>Autoencoders mainly use Mean Squared Error (MSE) as the loss function to minimize the difference between the inputs and outputs.<br \/>\n        \\[<br \/>\n        \\text{Loss} = \\frac{1}{N} \\sum_{i=1}^N (x_i &#8211; \\hat{x}_i)^2<br \/>\n        \\]\n    <\/p>\n<h3>2.3 Autoencoder Example Code<\/h3>\n<p>The following is a simple implementation of an autoencoder using PyTorch:<\/p>\n<pre>\n        <code>\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torchvision import datasets, transforms\n\n# Define hyperparameters\nbatch_size = 64\nnum_epochs = 20\nlearning_rate = 0.001\n\n# Load dataset\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\ndataset = datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\ndata_loader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True)\n\n# Define autoencoder\nclass Autoencoder(nn.Module):\n    def __init__(self):\n        super(Autoencoder, self).__init__()\n        self.encoder = nn.Sequential(\n            nn.Linear(28*28, 128),\n            nn.ReLU(),\n            nn.Linear(128, 64),\n            nn.ReLU()\n        )\n        self.decoder = nn.Sequential(\n            nn.Linear(64, 128),\n            nn.ReLU(),\n            nn.Linear(128, 28*28),\n            nn.Sigmoid()\n        )\n\n    def forward(self, x):\n        x = x.view(-1, 28*28)\n        encoded = self.encoder(x)\n        reconstructed = self.decoder(encoded)\n        return reconstructed.view(-1, 1, 28, 28)\n\n# Initialize model\nautoencoder = Autoencoder()\n\n# Define loss function and optimizer\ncriterion = nn.MSELoss()\noptimizer = optim.Adam(autoencoder.parameters(), lr=learning_rate)\n\n# Training process\nfor epoch in range(num_epochs):\n    for imgs, _ in data_loader:\n        optimizer.zero_grad()\n        outputs = autoencoder(imgs)\n        loss = criterion(outputs, imgs)\n        loss.backward()\n        optimizer.step()\n\n    print(f\"Epoch [{epoch}\/{num_epochs}], Loss: {loss.item()}\")\n        <\/code>\n    <\/pre>\n<h2>3. Conclusion<\/h2>\n<p>\n        GANs and autoencoders are powerful deep learning techniques for image generation, data representation, and compression. By understanding and practicing their structures and training methods, one can build a higher level of deep learning knowledge.<br \/>\n        These models can be applied to various fields and can yield better results with customized architectures.\n    <\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. GAN (Generative Adversarial Network) GAN is a model proposed by Ian Goodfellow in 2014, consisting of two neural networks: the generator and the discriminator, that compete with each other. Through this competition, the generator produces data that looks real. 1.1 Structure of GAN GAN consists of two neural networks. The generator takes a random &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36317\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning with GAN using PyTorch, AE &#8211; Autoencoder&#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-36317","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, AE - Autoencoder - \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\/36317\/\" \/>\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, AE - Autoencoder - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"1. GAN (Generative Adversarial Network) GAN is a model proposed by Ian Goodfellow in 2014, consisting of two neural networks: the generator and the discriminator, that compete with each other. Through this competition, the generator produces data that looks real. 1.1 Structure of GAN GAN consists of two neural networks. The generator takes a random &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning with GAN using PyTorch, AE &#8211; Autoencoder&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36317\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:47:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:00:25+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\/36317\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36317\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning with GAN using PyTorch, AE &#8211; Autoencoder\",\"datePublished\":\"2024-11-01T09:47:29+00:00\",\"dateModified\":\"2024-11-01T11:00:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36317\/\"},\"wordCount\":353,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"GAN deep learning course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36317\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36317\/\",\"name\":\"Deep Learning with GAN using PyTorch, AE - Autoencoder - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:47:29+00:00\",\"dateModified\":\"2024-11-01T11:00:25+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36317\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36317\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36317\/#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, AE &#8211; Autoencoder\"}]},{\"@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, AE - Autoencoder - \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\/36317\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning with GAN using PyTorch, AE - Autoencoder - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"1. GAN (Generative Adversarial Network) GAN is a model proposed by Ian Goodfellow in 2014, consisting of two neural networks: the generator and the discriminator, that compete with each other. Through this competition, the generator produces data that looks real. 1.1 Structure of GAN GAN consists of two neural networks. The generator takes a random &hellip; \ub354 \ubcf4\uae30 \"Deep Learning with GAN using PyTorch, AE &#8211; Autoencoder\"","og_url":"https:\/\/atmokpo.com\/w\/36317\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:47:29+00:00","article_modified_time":"2024-11-01T11:00:25+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\/36317\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36317\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning with GAN using PyTorch, AE &#8211; Autoencoder","datePublished":"2024-11-01T09:47:29+00:00","dateModified":"2024-11-01T11:00:25+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36317\/"},"wordCount":353,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["GAN deep learning course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36317\/","url":"https:\/\/atmokpo.com\/w\/36317\/","name":"Deep Learning with GAN using PyTorch, AE - Autoencoder - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:47:29+00:00","dateModified":"2024-11-01T11:00:25+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36317\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36317\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36317\/#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, AE &#8211; Autoencoder"}]},{"@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\/36317","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=36317"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36317\/revisions"}],"predecessor-version":[{"id":36318,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36317\/revisions\/36318"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}