{"id":36335,"date":"2024-11-01T09:47:37","date_gmt":"2024-11-01T09:47:37","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36335"},"modified":"2024-11-01T11:00:20","modified_gmt":"2024-11-01T11:00:20","slug":"deep-learning-with-gan-using-pytorch-musegan-generator","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36335\/","title":{"rendered":"Deep Learning with GAN using PyTorch, MuseGAN Generator"},"content":{"rendered":"<p><body><\/p>\n<p>In this post, we will explore MuseGAN, which generates music using Generative Adversarial Networks (GAN). MuseGAN is primarily designed for multi-track music generation and operates with two main components: the Generator and the Discriminator. This article will utilize PyTorch to implement MuseGAN, providing step-by-step explanations and code examples.<\/p>\n<h2>1. Overview of GAN<\/h2>\n<p>GAN is a framework proposed by Ian Goodfellow and his colleagues in 2014, where two neural networks compete against each other to generate data. The Generator takes random noise as input to create data, and the Discriminator determines whether the received data is real (actual data) or fake (generated data). The goal of GAN is to train the Generator to produce increasingly realistic data.<\/p>\n<h3>1.1 Components of GAN<\/h3>\n<ul>\n<li><strong>Generator<\/strong>: Generates fake data from a given input (usually random noise).<\/li>\n<li><strong>Discriminator<\/strong>: Determines if the given data is real (actual data) or fake (generated data).<\/li>\n<\/ul>\n<h2>2. Concept of MuseGAN<\/h2>\n<p>MuseGAN is a type of GAN that generates multi-track music using two or more instruments. MuseGAN creates music based on bitmap representations, learning the melodies and chord progressions of each track to produce music that resembles real compositions. The main components of MuseGAN are as follows:<\/p>\n<ul>\n<li><strong>Multi-track Structure<\/strong>: Uses multiple instruments to create complex music.<\/li>\n<li><strong>Temporal Correlation<\/strong>: Models the temporal relationships between each track.<\/li>\n<li><strong>Functional Loss<\/strong>: A loss function is designed to assess the functionality of the generated music tracks.<\/li>\n<\/ul>\n<h2>3. Setting Up the Environment<\/h2>\n<p>We need to install the necessary libraries to implement MuseGAN. Install PyTorch, NumPy, matplotlib, and other required packages. You can use the following code to install these packages.<\/p>\n<pre><code>pip install torch torchvision matplotlib numpy<\/code><\/pre>\n<h2>4. Implementing MuseGAN<\/h2>\n<p>Now let&#8217;s look at code examples to implement MuseGAN. The architecture of MuseGAN consists of the following main classes:<\/p>\n<ul>\n<li><strong>Generator<\/strong>: Responsible for generating music data.<\/li>\n<li><strong>Discriminator<\/strong>: Responsible for differentiating generated music data.<\/li>\n<li><strong>Trainer<\/strong>: Responsible for training the Generator and Discriminator.<\/li>\n<\/ul>\n<h3>4.1 Generator<\/h3>\n<pre><code>import torch\nimport torch.nn as nn\n\nclass Generator(nn.Module):\n    def __init__(self, input_size, output_size):\n        super(Generator, self).__init__()\n        self.fc = nn.Sequential(\n            nn.Linear(input_size, 128),\n            nn.ReLU(),\n            nn.Linear(128, 256),\n            nn.ReLU(),\n            nn.Linear(256, output_size),\n            nn.Tanh()  # Output range is [-1, 1]\n        )\n\n    def forward(self, x):\n        return self.fc(x)\n<\/code><\/pre>\n<p>In the above code, the <code>Generator<\/code> class defines a neural network and initializes the generator using input and output sizes. It introduces non-linearity using the ReLU activation function, and the final output layer uses the <code>Tanh<\/code> function to constrain the output values between -1 and 1.<\/p>\n<h3>4.2 Discriminator<\/h3>\n<pre><code>class Discriminator(nn.Module):\n    def __init__(self, input_size):\n        super(Discriminator, self).__init__()\n        self.fc = nn.Sequential(\n            nn.Linear(input_size, 256),\n            nn.LeakyReLU(0.2),\n            nn.Linear(256, 128),\n            nn.LeakyReLU(0.2),\n            nn.Linear(128, 1),\n            nn.Sigmoid()  # Output is between [0, 1]\n        )\n\n    def forward(self, x):\n        return self.fc(x)\n<\/code><\/pre>\n<p>The Discriminator receives input data and determines whether this data is real or generated. It uses the <code>LeakyReLU<\/code> activation function to alleviate the gradient vanishing issue and applies the <code>Sigmoid<\/code> function at the end.<\/p>\n<h3>4.3 Trainer<\/h3>\n<p>Now let&#8217;s define the <code>Trainer<\/code> class, which will be responsible for training the Generator and Discriminator.<\/p>\n<pre><code>class Trainer:\n    def __init__(self, generator, discriminator, lr=0.0002):\n        self.generator = generator\n        self.discriminator = discriminator\n        \n        self.optim_g = torch.optim.Adam(self.generator.parameters(), lr=lr)\n        self.optim_d = torch.optim.Adam(self.discriminator.parameters(), lr=lr)\n        self.criterion = nn.BCELoss()\n\n    def train(self, data_loader, epochs):\n        for epoch in range(epochs):\n            for real_data in data_loader:\n                batch_size = real_data.size(0)\n\n                # Create labels\n                real_labels = torch.ones(batch_size, 1)\n                fake_labels = torch.zeros(batch_size, 1)\n\n                # Train Discriminator\n                self.optim_d.zero_grad()\n                outputs = self.discriminator(real_data)\n                d_loss_real = self.criterion(outputs, real_labels)\n\n                noise = torch.randn(batch_size, 100)\n                fake_data = self.generator(noise)\n                outputs = self.discriminator(fake_data.detach())\n                d_loss_fake = self.criterion(outputs, fake_labels)\n\n                d_loss = d_loss_real + d_loss_fake\n                d_loss.backward()\n                self.optim_d.step()\n\n                # Train Generator\n                self.optim_g.zero_grad()\n                outputs = self.discriminator(fake_data)\n                g_loss = self.criterion(outputs, real_labels)\n                g_loss.backward()\n                self.optim_g.step()\n\n            print(f'Epoch [{epoch+1}\/{epochs}], d_loss: {d_loss.item()}, g_loss: {g_loss.item()}')\n<\/code><\/pre>\n<p>The Trainer class initializes the Generator, Discriminator, and learning rate. The <code>train<\/code> method takes a training data loader and the number of epochs as input to train the GAN. The Discriminator is trained first, followed by the Generator, to enhance the quality of the generated fake data.<\/p>\n<h2>5. Preparing the Dataset<\/h2>\n<p>To train MuseGAN, a suitable music dataset must be prepared. MIDI file format music data can be used, and the <strong>mido<\/strong> package can be utilized in Python to process MIDI files.<\/p>\n<pre><code>pip install mido\n<\/code><\/pre>\n<p>Prepare the dataset using the downloaded MIDI files.<\/p>\n<h2>6. Running MuseGAN<\/h2>\n<p>Now we will run the entire pipeline of MuseGAN. Load the dataset, initialize the Generator and Discriminator, and proceed with training.<\/p>\n<pre><code># Load the dataset\nfrom torch.utils.data import DataLoader\nfrom custom_dataset import CustomDataset  # The dataset class needs to be customized\n\n# Prepare dataset and data loader\ndataset = CustomDataset('path_to_midi_files');\ndata_loader = DataLoader(dataset, batch_size=32, shuffle=True)\n\n# Initialize Generator and Discriminator\ngenerator = Generator(input_size=100, output_size=12*64)  # 12 is the standard number of MIDI notes\ndiscriminator = Discriminator(input_size=12*64)\n\n# Initialize Trainer and train\ntrainer = Trainer(generator, discriminator)\ntrainer.train(data_loader, epochs=100)\n<\/code><\/pre>\n<h2>7. Results and Evaluation<\/h2>\n<p>Once training is complete, the generated music should be evaluated. Generally, the quality of the generated compositions can be assessed through the Discriminator, and listening to several generated samples can be helpful.<\/p>\n<h3>7.1 Visualizing Generation Results<\/h3>\n<pre><code>import matplotlib.pyplot as plt\n\ndef visualize_generated_data(generated_data):\n    plt.figure(figsize=(10, 4))\n    plt.imshow(generated_data.reshape(-1, 64), aspect='auto', cmap='Greys')\n    plt.title(\"Generated Music\")\n    plt.xlabel(\"Timesteps\")\n    plt.ylabel(\"MIDI Note Pitch\")\n    plt.show()\n\n# Visualizing the generated data\nnoise = torch.randn(1, 100)\ngenerated_data = generator(noise)\nvisualize_generated_data(generated_data.detach().numpy())\n<\/code><\/pre>\n<h2>8. Conclusion<\/h2>\n<p>We implemented a music generation model based on PyTorch using MuseGAN. We learned about the fundamental concepts of GAN and the architecture of MuseGAN, as well as the implementation method and key points to consider when using PyTorch. The quality of the dataset being used greatly affects the performance of GAN, so this must be taken into account when evaluating results.<\/p>\n<p>Furthermore, various techniques or the latest research can be applied to improve MuseGAN. The potential for advancements in GAN is limitless, and MuseGAN is just one example, so in-depth learning is recommended.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In this post, we will explore MuseGAN, which generates music using Generative Adversarial Networks (GAN). MuseGAN is primarily designed for multi-track music generation and operates with two main components: the Generator and the Discriminator. This article will utilize PyTorch to implement MuseGAN, providing step-by-step explanations and code examples. 1. Overview of GAN GAN is a &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36335\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning with GAN using PyTorch, MuseGAN Generator&#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-36335","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, MuseGAN Generator - \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\/36335\/\" \/>\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, MuseGAN Generator - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In this post, we will explore MuseGAN, which generates music using Generative Adversarial Networks (GAN). MuseGAN is primarily designed for multi-track music generation and operates with two main components: the Generator and the Discriminator. This article will utilize PyTorch to implement MuseGAN, providing step-by-step explanations and code examples. 1. Overview of GAN GAN is a &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning with GAN using PyTorch, MuseGAN Generator&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36335\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:47:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:00:20+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\/36335\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36335\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning with GAN using PyTorch, MuseGAN Generator\",\"datePublished\":\"2024-11-01T09:47:37+00:00\",\"dateModified\":\"2024-11-01T11:00:20+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36335\/\"},\"wordCount\":645,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"GAN deep learning course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36335\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36335\/\",\"name\":\"Deep Learning with GAN using PyTorch, MuseGAN Generator - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:47:37+00:00\",\"dateModified\":\"2024-11-01T11:00:20+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36335\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36335\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36335\/#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, MuseGAN Generator\"}]},{\"@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, MuseGAN Generator - \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\/36335\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning with GAN using PyTorch, MuseGAN Generator - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In this post, we will explore MuseGAN, which generates music using Generative Adversarial Networks (GAN). MuseGAN is primarily designed for multi-track music generation and operates with two main components: the Generator and the Discriminator. This article will utilize PyTorch to implement MuseGAN, providing step-by-step explanations and code examples. 1. Overview of GAN GAN is a &hellip; \ub354 \ubcf4\uae30 \"Deep Learning with GAN using PyTorch, MuseGAN Generator\"","og_url":"https:\/\/atmokpo.com\/w\/36335\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:47:37+00:00","article_modified_time":"2024-11-01T11:00:20+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\/36335\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36335\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning with GAN using PyTorch, MuseGAN Generator","datePublished":"2024-11-01T09:47:37+00:00","dateModified":"2024-11-01T11:00:20+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36335\/"},"wordCount":645,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["GAN deep learning course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36335\/","url":"https:\/\/atmokpo.com\/w\/36335\/","name":"Deep Learning with GAN using PyTorch, MuseGAN Generator - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:47:37+00:00","dateModified":"2024-11-01T11:00:20+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36335\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36335\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36335\/#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, MuseGAN Generator"}]},{"@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\/36335","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=36335"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36335\/revisions"}],"predecessor-version":[{"id":36336,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36335\/revisions\/36336"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36335"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}