{"id":36401,"date":"2024-11-01T09:48:12","date_gmt":"2024-11-01T09:48:12","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36401"},"modified":"2024-11-01T11:00:04","modified_gmt":"2024-11-01T11:00:04","slug":"deep-learning-with-gan-using-pytorch-first-deep-neural-network","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36401\/","title":{"rendered":"Deep Learning with GAN Using PyTorch, First Deep Neural Network"},"content":{"rendered":"<p><body><\/p>\n<h2>1. What is GAN?<\/h2>\n<p>\n        Generative Adversarial Networks (GAN) is one of the fundamental deep learning models proposed by Ian Goodfellow in 2014. GAN consists of two neural networks:<br \/>\n        <strong>Generator<\/strong> and <strong>Discriminator<\/strong>. The generator tries to create fake data, while the discriminator attempts to determine whether the data is real or fake.<br \/>\n        These two networks compete against each other during training, hence the term &#8220;Adversarial.&#8221; This process is unsupervised, allowing the generator to produce data that increasingly resembles real data.\n    <\/p>\n<h2>2. Structure of GAN<\/h2>\n<p>\n        The structure of GAN operates as follows:\n    <\/p>\n<ul>\n<li><strong>Generator Network<\/strong>: Takes a random noise vector as input and generates fake images.<\/li>\n<li><strong>Discriminator Network<\/strong>: Responsible for distinguishing between real and fake images.<\/li>\n<li>During the training process, the generator learns to produce images that the discriminator cannot easily classify. This causes both networks to improve and compete with each other.<\/li>\n<\/ul>\n<h2>3. How GAN Works<\/h2>\n<p>\n        The training process of GAN consists of the following iterative steps:\n    <\/p>\n<ol>\n<li>Training the Discriminator: The discriminator receives real images and fake images produced by the generator as input and updates its parameters to classify these images correctly.<\/li>\n<li>Training the Generator: The generator evaluates the quality of images produced through the trained discriminator, updating its parameters to prevent the discriminator from recognizing its images as fake.<\/li>\n<li>This process is repeated, allowing both networks to become progressively stronger against each other.<\/li>\n<\/ol>\n<h2>4. Implementing GAN in PyTorch<\/h2>\n<p>\n        Now, let&#8217;s implement GAN in PyTorch. Our goal is to generate digit images using the MNIST dataset.\n    <\/p>\n<h3>4.1 Installing Required Libraries<\/h3>\n<pre>\n        <code>pip install torch torchvision matplotlib<\/code>\n    <\/pre>\n<h3>4.2 Preparing the Dataset<\/h3>\n<p>\n        The MNIST dataset can be easily retrieved through PyTorch&#8217;s torchvision library. The code below shows how to load and preprocess the data.\n    <\/p>\n<pre>\n        <code>\nimport torch\nfrom torchvision import datasets, transforms\nfrom torch.utils.data import DataLoader\n\n# Data transformation settings\ntransform = transforms.Compose([\n    transforms.ToTensor(),\n    transforms.Normalize((0.5,), (0.5,))\n])\n\n# Load MNIST dataset\ntrain_dataset = datasets.MNIST(root='.\/data', train=True, download=True, transform=transform)\ntrain_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)\n        <\/code>\n        <\/pre>\n<h3>4.3 Defining the Generator and Discriminator Networks<\/h3>\n<p>\n        Now we define the two networks of GAN. We will create the generator and discriminator using a simple neural network structure.\n    <\/p>\n<pre>\n        <code>\nimport torch.nn as nn\n\n# Define Generator Network\nclass 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# Define Discriminator Network\nclass 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>4.4 Setting Loss Function and Optimization Algorithm<\/h3>\n<p>\n        The loss function used for both the generator and discriminator is binary cross-entropy loss. We adopt the Adam optimization algorithm.\n    <\/p>\n<pre>\n        <code>\nimport torch.optim as optim\n\n# Define loss function and optimization algorithm\ncriterion = nn.BCELoss()\ngenerator = Generator()\ndiscriminator = Discriminator()\noptimizer_G = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999))\noptimizer_D = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999))\n        <\/code>\n    <\/pre>\n<h3>4.5 Implementing the Training Process<\/h3>\n<p>\n        Training proceeds as follows:\n    <\/p>\n<pre>\n        <code>\nimport numpy as np\n\nnum_epochs = 50\nfor epoch in range(num_epochs):\n    for i, (images, _) in enumerate(train_loader):\n        batch_size = images.size(0)\n        \n        # Set real and fake labels\n        real_labels = torch.ones(batch_size, 1)\n        fake_labels = torch.zeros(batch_size, 1)\n\n        # Train Discriminator\n        outputs = discriminator(images)\n        d_loss_real = criterion(outputs, real_labels)\n\n        noise = torch.randn(batch_size, 100)\n        fake_images = generator(noise)\n        outputs = discriminator(fake_images.detach())\n        d_loss_fake = criterion(outputs, fake_labels)\n\n        d_loss = d_loss_real + d_loss_fake\n        optimizer_D.zero_grad()\n        d_loss.backward()\n        optimizer_D.step()\n\n        # Train Generator\n        outputs = discriminator(fake_images)\n        g_loss = criterion(outputs, real_labels)\n\n        optimizer_G.zero_grad()\n        g_loss.backward()\n        optimizer_G.step()\n\n        # Output training status\n        if (i + 1) % 100 == 0:\n            print(f'Epoch [{epoch + 1}\/{num_epochs}], Step [{i + 1}\/{len(train_loader)}], d_loss: {d_loss.item():.4f}, g_loss: {g_loss.item():.4f}')\n        <\/code>\n    <\/pre>\n<h3>4.6 Visualizing Generated Images<\/h3>\n<p>\n        After training is complete, we visualize the images generated.\n    <\/p>\n<pre>\n        <code>\nimport matplotlib.pyplot as plt\n\ndef visualize_generator(num_images):\n    noise = torch.randn(num_images, 100)\n    with torch.no_grad():\n        generated_images = generator(noise)\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].cpu().numpy(), cmap='gray')\n        plt.axis('off')\n    plt.show()\n\nvisualize_generator(25)\n        <\/code>\n    <\/pre>\n<h2>5. Applications of GAN<\/h2>\n<p>\n        GANs can be used in various fields beyond image generation. For example, they are employed in style transfer, image restoration, video generation, and have garnered significant attention in the field of artificial intelligence.<br \/>\n        The development of GANs is revealing new possibilities through generative models.\n    <\/p>\n<h2>6. Conclusion<\/h2>\n<p>\n        In this tutorial, we learned the basics of implementing GANs using PyTorch and understood how GAN operates through actual code. GAN is a technology that will continue to evolve and holds great potential in various applications.<br \/>\n        I recommend exploring various modified models based on GAN in the future.\n    <\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. What is GAN? Generative Adversarial Networks (GAN) is one of the fundamental deep learning models proposed by Ian Goodfellow in 2014. GAN consists of two neural networks: Generator and Discriminator. The generator tries to create fake data, while the discriminator attempts to determine whether the data is real or fake. These two networks compete &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36401\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning with GAN Using PyTorch, First Deep Neural Network&#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-36401","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, First Deep Neural Network - \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\/36401\/\" \/>\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, First Deep Neural Network - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"1. What is GAN? Generative Adversarial Networks (GAN) is one of the fundamental deep learning models proposed by Ian Goodfellow in 2014. GAN consists of two neural networks: Generator and Discriminator. The generator tries to create fake data, while the discriminator attempts to determine whether the data is real or fake. These two networks compete &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning with GAN Using PyTorch, First Deep Neural Network&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36401\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:48:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:00:04+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\/36401\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36401\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning with GAN Using PyTorch, First Deep Neural Network\",\"datePublished\":\"2024-11-01T09:48:12+00:00\",\"dateModified\":\"2024-11-01T11:00:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36401\/\"},\"wordCount\":449,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"GAN deep learning course\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36401\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36401\/\",\"name\":\"Deep Learning with GAN Using PyTorch, First Deep Neural Network - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:48:12+00:00\",\"dateModified\":\"2024-11-01T11:00:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36401\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36401\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36401\/#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, First Deep Neural Network\"}]},{\"@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, First Deep Neural Network - \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\/36401\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning with GAN Using PyTorch, First Deep Neural Network - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"1. What is GAN? Generative Adversarial Networks (GAN) is one of the fundamental deep learning models proposed by Ian Goodfellow in 2014. GAN consists of two neural networks: Generator and Discriminator. The generator tries to create fake data, while the discriminator attempts to determine whether the data is real or fake. These two networks compete &hellip; \ub354 \ubcf4\uae30 \"Deep Learning with GAN Using PyTorch, First Deep Neural Network\"","og_url":"https:\/\/atmokpo.com\/w\/36401\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:48:12+00:00","article_modified_time":"2024-11-01T11:00:04+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\/36401\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36401\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning with GAN Using PyTorch, First Deep Neural Network","datePublished":"2024-11-01T09:48:12+00:00","dateModified":"2024-11-01T11:00:04+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36401\/"},"wordCount":449,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["GAN deep learning course"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36401\/","url":"https:\/\/atmokpo.com\/w\/36401\/","name":"Deep Learning with GAN Using PyTorch, First Deep Neural Network - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:48:12+00:00","dateModified":"2024-11-01T11:00:04+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36401\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36401\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36401\/#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, First Deep Neural Network"}]},{"@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\/36401","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=36401"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36401\/revisions"}],"predecessor-version":[{"id":36402,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36401\/revisions\/36402"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36401"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36401"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36401"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}