{"id":36375,"date":"2024-11-01T09:47:58","date_gmt":"2024-11-01T09:47:58","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36375"},"modified":"2024-11-01T11:00:10","modified_gmt":"2024-11-01T11:00:10","slug":"gan-deep-learning-using-pytorch-what-is-generative-modeling","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36375\/","title":{"rendered":"GAN Deep Learning Using PyTorch, What is Generative Modeling?"},"content":{"rendered":"<p><body><\/p>\n<p>The advancement of deep learning is impacting various fields, and especially generative modeling is opening new horizons for data generation. Generative Adversarial Networks (GANs) are one of the most famous models in generative modeling, excelling in the ability to generate new data from raw data. This article aims to explain the main concepts of GAN, the implementation methods using PyTorch, and provide practical examples.<\/p>\n<h2>1. Basics of GAN<\/h2>\n<p>GAN consists of two neural networks that serve the roles of a generator and a discriminator. These two networks are in an adversarial relationship and learn simultaneously.<\/p>\n<h3>1.1 Generator<\/h3>\n<p>The generator&#8217;s role is to generate data that resembles real data from random noise (input noise). This involves learning the distribution of the data to create new data, with the goal of deceiving the discriminator.<\/p>\n<h3>1.2 Discriminator<\/h3>\n<p>The discriminator&#8217;s role is to determine whether the input data is real or generated by the generator. This is also implemented as a neural network, and the discriminator&#8217;s goal is to accurately distinguish between real and fake data as much as possible.<\/p>\n<h3>1.3 Adversarial Learning Process<\/h3>\n<p>The learning process of GAN consists of the following steps:<\/p>\n<ol>\n<li>The generator produces data from random noise.<\/li>\n<li>The discriminator receives real data and the fake data created by the generator and tries to distinguish between them.<\/li>\n<li>The generator is optimized to trick the discriminator into misjudging fake data as real.<\/li>\n<li>The discriminator is optimized to accurately distinguish fake data.<\/li>\n<\/ol>\n<p>This process is repeated many times, gradually leading the generator to produce better data and the discriminator to make more refined judgments.<\/p>\n<h2>2. Structure of GAN<\/h2>\n<p>GAN has the following structure.<\/p>\n<ul>\n<li><strong>Input Noise:<\/strong> Typically, a noise vector following a normal distribution is input.<\/li>\n<li><strong>Generator Network:<\/strong> Accepts input noise and generates fake samples from it.<\/li>\n<li><strong>Discriminator Network:<\/strong> Accepts generated fake samples and real samples to determine whether they are real or fake.<\/li>\n<\/ul>\n<h2>3. Implementing GAN Using PyTorch<\/h2>\n<p>Now, let&#8217;s implement GAN using PyTorch. PyTorch is a very useful library for building and training deep learning models.<\/p>\n<h3>3.1 Installing Required Libraries<\/h3>\n<pre><code>\n!pip install torch torchvision matplotlib\n    <\/code><\/pre>\n<h3>3.2 Defining the Generator and Discriminator Networks<\/h3>\n<p>First, we define the generator and discriminator networks. These are designed based on their respective properties.<\/p>\n<pre><code>\nimport torch\nimport torch.nn as nn\n\n# Define the generator\nclass Generator(nn.Module):\n    def __init__(self, input_size, output_size):\n        super(Generator, self).__init__()\n        self.model = 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()  # Limit output values between -1 and 1\n        )\n    \n    def forward(self, z):\n        return self.model(z)\n\n# Define the discriminator\nclass Discriminator(nn.Module):\n    def __init__(self, input_size):\n        super(Discriminator, self).__init__()\n        self.model = 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()  # Limit output values between 0 and 1\n        )\n    \n    def forward(self, x):\n        return self.model(x)\n    <\/code><\/pre>\n<h3>3.3 Data Preparation<\/h3>\n<p>We will use the MNIST dataset to train the generative model. MNIST is a dataset of handwritten digit images, containing digits from 0 to 9.<\/p>\n<pre><code>\nfrom torchvision import datasets, transforms\n\n# Download and transform the dataset\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))  # Normalization\n])\n\nmnist = datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\ndataloader = torch.utils.data.DataLoader(mnist, batch_size=64, shuffle=True)\n    <\/code><\/pre>\n<h3>3.4 Defining Loss Functions and Optimization Techniques<\/h3>\n<p>Since GAN comprises a generator and a discriminator competing against each other, we define a loss function for each. We will use binary cross-entropy loss.<\/p>\n<pre><code>\n# Set loss function and optimization techniques\ncriterion = nn.BCELoss()\nlr = 0.0002\nbeta1 = 0.5\n\ngenerator = Generator(input_size=100, output_size=784).cuda()\ndiscriminator = Discriminator(input_size=784).cuda()\n\noptimizer_G = torch.optim.Adam(generator.parameters(), lr=lr, betas=(beta1, 0.999))\noptimizer_D = torch.optim.Adam(discriminator.parameters(), lr=lr, betas=(beta1, 0.999))\n    <\/code><\/pre>\n<h3>3.5 Implementing the GAN Training Process<\/h3>\n<p>Now, let&#8217;s implement the training process of GAN. This includes how to update the generator and discriminator for each batch.<\/p>\n<pre><code>\nnum_epochs = 50\n\nfor epoch in range(num_epochs):\n    for i, (imgs, _) in enumerate(dataloader):\n        # Labels for real images (1)\n        real_imgs = imgs.view(imgs.size(0), -1).cuda()\n        real_labels = torch.ones((imgs.size(0), 1)).cuda()\n\n        # Labels for fake images (0)\n        noise = torch.randn((imgs.size(0), 100)).cuda()\n        fake_imgs = generator(noise)\n        fake_labels = torch.zeros((imgs.size(0), 1)).cuda()\n\n        # Update the discriminator\n        optimizer_D.zero_grad()\n        outputs = discriminator(real_imgs)\n        d_loss_real = criterion(outputs, real_labels)\n        d_loss_real.backward()\n\n        outputs = discriminator(fake_imgs.detach())\n        d_loss_fake = criterion(outputs, fake_labels)\n        d_loss_fake.backward()\n\n        optimizer_D.step()\n        \n        # Update the 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+1}\/{num_epochs}], d_loss: {d_loss_real.item() + d_loss_fake.item()}, g_loss: {g_loss.item()}')\n    <\/code><\/pre>\n<h3>3.6 Visualizing Generated Images<\/h3>\n<p>After the training is complete, we will visualize the images generated by the generator.<\/p>\n<pre><code>\nimport matplotlib.pyplot as plt\n\n# Generate images\nnoise = torch.randn(16, 100).cuda()\nfake_imgs = generator(noise).view(-1, 1, 28, 28).cpu().data\n\n# Visualize images\nplt.figure(figsize=(10, 10))\nfor i in range(16):\n    plt.subplot(4, 4, i+1)\n    plt.imshow(fake_imgs[i].squeeze(), cmap='gray')\n    plt.axis('off')\nplt.show()\n    <\/code><\/pre>\n<h2>4. Conclusion<\/h2>\n<p>In this post, we explored the theoretical background of GAN as well as the basic implementation process of a GAN model using PyTorch. GAN has brought many innovations to the field of generative modeling, and future advancements are highly anticipated. I hope this example helped in understanding the basic principles of GAN and how to implement it in PyTorch.<\/p>\n<p>The advancement of GANs will change the way we generate and process data. I look forward to seeing more active research in generative models like GAN.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The advancement of deep learning is impacting various fields, and especially generative modeling is opening new horizons for data generation. Generative Adversarial Networks (GANs) are one of the most famous models in generative modeling, excelling in the ability to generate new data from raw data. This article aims to explain the main concepts of GAN, &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36375\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;GAN Deep Learning Using PyTorch, What is Generative Modeling?&#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-36375","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>GAN Deep Learning Using PyTorch, What is Generative Modeling? - \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\/36375\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GAN Deep Learning Using PyTorch, What is Generative Modeling? - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"The advancement of deep learning is impacting various fields, and especially generative modeling is opening new horizons for data generation. Generative Adversarial Networks (GANs) are one of the most famous models in generative modeling, excelling in the ability to generate new data from raw data. This article aims to explain the main concepts of GAN, &hellip; \ub354 \ubcf4\uae30 &quot;GAN Deep Learning Using PyTorch, What is Generative Modeling?&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36375\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:47:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:00:10+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\/36375\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36375\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"GAN Deep Learning Using PyTorch, What is Generative Modeling?\",\"datePublished\":\"2024-11-01T09:47:58+00:00\",\"dateModified\":\"2024-11-01T11:00:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36375\/\"},\"wordCount\":551,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"GAN deep learning course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36375\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36375\/\",\"name\":\"GAN Deep Learning Using PyTorch, What is Generative Modeling? - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:47:58+00:00\",\"dateModified\":\"2024-11-01T11:00:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36375\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36375\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36375\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GAN Deep Learning Using PyTorch, What is Generative Modeling?\"}]},{\"@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":"GAN Deep Learning Using PyTorch, What is Generative Modeling? - \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\/36375\/","og_locale":"ko_KR","og_type":"article","og_title":"GAN Deep Learning Using PyTorch, What is Generative Modeling? - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"The advancement of deep learning is impacting various fields, and especially generative modeling is opening new horizons for data generation. Generative Adversarial Networks (GANs) are one of the most famous models in generative modeling, excelling in the ability to generate new data from raw data. This article aims to explain the main concepts of GAN, &hellip; \ub354 \ubcf4\uae30 \"GAN Deep Learning Using PyTorch, What is Generative Modeling?\"","og_url":"https:\/\/atmokpo.com\/w\/36375\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:47:58+00:00","article_modified_time":"2024-11-01T11:00:10+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\/36375\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36375\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"GAN Deep Learning Using PyTorch, What is Generative Modeling?","datePublished":"2024-11-01T09:47:58+00:00","dateModified":"2024-11-01T11:00:10+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36375\/"},"wordCount":551,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["GAN deep learning course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36375\/","url":"https:\/\/atmokpo.com\/w\/36375\/","name":"GAN Deep Learning Using PyTorch, What is Generative Modeling? - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:47:58+00:00","dateModified":"2024-11-01T11:00:10+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36375\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36375\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36375\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"GAN Deep Learning Using PyTorch, What is Generative Modeling?"}]},{"@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\/36375","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=36375"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36375\/revisions"}],"predecessor-version":[{"id":36376,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36375\/revisions\/36376"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36375"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36375"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36375"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}