{"id":36463,"date":"2024-11-01T09:48:41","date_gmt":"2024-11-01T09:48:41","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=36463"},"modified":"2024-11-01T11:53:05","modified_gmt":"2024-11-01T11:53:05","slug":"deep-learning-pytorch-course-resnet","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/36463\/","title":{"rendered":"Deep Learning PyTorch Course, ResNet"},"content":{"rendered":"<p><body><\/p>\n<p>In the field of deep learning, Residual Network, abbreviated as ResNet, has become a very important architecture. ResNet was proposed by Kaiming He in 2015 and provides a way to effectively increase the depth of deep learning models. In various modern computer vision problems, ResNet is considered one of the main reasons for performance improvement.<\/p>\n<h2>1. Overview of ResNet<\/h2>\n<p>ResNet is a neural network based on the &#8220;Residual Learning&#8221; framework. Traditionally, deep neural networks (DNNs) tend to suffer from performance degradation as they become deeper. This is primarily due to the vanishing gradient problem, where the gradients diminish during the backpropagation process as the depth of the neural network increases.<\/p>\n<p>To address this issue, ResNet introduced residual connections. Residual connections directly pass information from previous layers to a layer by adding the network&#8217;s input to the output. This approach allows for the effective training of deeper networks.<\/p>\n<h2>2. Structure of ResNet<\/h2>\n<p>ResNet can be composed of models with various depths, typically denoted as &#8220;ResNet50&#8221;, &#8220;ResNet101&#8221;, &#8220;ResNet152&#8221;, and so on. These numbers indicate the total number of layers in the network.<\/p>\n<h3>2.1 Basic Block Composition<\/h3>\n<p>The basic components of ResNet are composed of the following blocks:<\/p>\n<ul>\n<li>Convolution Layer<\/li>\n<li>Batch Normalization<\/li>\n<li>ReLU Activation Function<\/li>\n<li>Residual Connection<\/li>\n<\/ul>\n<p>The structure of a typical ResNet block is as follows:<\/p>\n<pre><code>\ndef resnet_block(input_tensor, filters, kernel_size=3, stride=1):\n    x = Conv2D(filters, kernel_size=kernel_size, strides=stride, padding='same')(input_tensor)\n    x = BatchNormalization()(x)\n    x = ReLU()(x)\n    x = Conv2D(filters, kernel_size=kernel_size, strides=stride, padding='same')(x)\n    x = BatchNormalization()(x)\n    \n    shortcut = Conv2D(filters, kernel_size=1, strides=stride, padding='same')(input_tensor)\n    x = Add()([x, shortcut])\n    x = ReLU()(x)\n    \n    return x\n<\/code><\/pre>\n<h2>3. Implementing ResNet with PyTorch<\/h2>\n<p>Now, let&#8217;s implement ResNet using PyTorch. First, we need to install the required libraries:<\/p>\n<pre><code>pip install torch torchvision<\/code><\/pre>\n<p>Next, we will implement the basic ResNet model:<\/p>\n<pre><code>\nimport torch\nimport torch.nn as nn\nimport torchvision.transforms as transforms\nimport torchvision.datasets as datasets\nimport torchvision.models as models\n\nclass BasicBlock(nn.Module):\n    expansion = 1\n\n    def __init__(self, in_channels, out_channels, stride=1, downsample=None):\n        super(BasicBlock, self).__init__()\n        self.conv1 = nn.Conv2d(in_channels, out_channels, kernel_size=3, stride=stride, padding=1, bias=False)\n        self.bn1 = nn.BatchNorm2d(out_channels)\n        self.relu = nn.ReLU(inplace=True)\n        self.conv2 = nn.Conv2d(out_channels, out_channels, kernel_size=3, stride=1, padding=1, bias=False)\n        self.bn2 = nn.BatchNorm2d(out_channels)\n        self.downsample = downsample\n\n    def forward(self, x):\n        identity = x\n        out = self.conv1(x)\n        out = self.bn1(out)\n        out = self.relu(out)\n        out = self.conv2(out)\n        out = self.bn2(out)\n\n        if self.downsample is not None:\n            identity = self.downsample(x)\n\n        out += identity\n        out = self.relu(out)\n\n        return out\n\nclass ResNet(nn.Module):\n    def __init__(self, block, layers, num_classes=1000):\n        super(ResNet, self).__init__()\n        self.in_channels = 64\n        self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3, bias=False)\n        self.bn1 = nn.BatchNorm2d(64)\n        self.relu = nn.ReLU(inplace=True)\n        self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1)\n        self.layer1 = self._make_layer(block, 64, layers[0])\n        self.layer2 = self._make_layer(block, 128, layers[1], stride=2)\n        self.layer3 = self._make_layer(block, 256, layers[2], stride=2)\n        self.layer4 = self._make_layer(block, 512, layers[3], stride=2)\n        self.avgpool = nn.AdaptiveAvgPool2d((1, 1))\n        self.fc = nn.Linear(512 * block.expansion, num_classes)\n\n    def _make_layer(self, block, out_channels, blocks, stride=1):\n        downsample = None\n        if stride != 1 or self.in_channels != out_channels * block.expansion:\n            downsample = nn.Sequential(\n                nn.Conv2d(self.in_channels, out_channels * block.expansion, kernel_size=1, stride=stride, bias=False),\n                nn.BatchNorm2d(out_channels * block.expansion),\n            )\n        layers = []\n        layers.append(block(self.in_channels, out_channels, stride, downsample))\n        self.in_channels = out_channels * block.expansion\n        for _ in range(1, blocks):\n            layers.append(block(self.in_channels, out_channels))\n\n        return nn.Sequential(*layers)\n\n    def forward(self, x):\n        x = self.conv1(x)\n        x = self.bn1(x)\n        x = self.relu(x)\n        x = self.maxpool(x)\n\n        x = self.layer1(x)\n        x = self.layer2(x)\n        x = self.layer3(x)\n        x = self.layer4(x)\n\n        x = self.avgpool(x)\n        x = torch.flatten(x, 1)\n        x = self.fc(x)\n\n        return x\n\ndef resnet18(num_classes=1000):\n    return ResNet(BasicBlock, [2, 2, 2, 2], num_classes)\n<\/code><\/pre>\n<h3>3.1 Preparing to Train the Model<\/h3>\n<p>To train the ResNet model, we need to prepare the dataset and set up the optimizer and loss function.<\/p>\n<pre><code>\n# Preparing the dataset\ntransform = transforms.Compose([\n    transforms.Resize((224, 224)),\n    transforms.ToTensor(),\n])\n\ntrain_dataset = datasets.CIFAR10(root='.\/data', train=True, download=True, transform=transform)\ntrain_loader = torch.utils.data.DataLoader(train_dataset, batch_size=64, shuffle=True)\n\n# Initializing the model\nmodel = resnet18(num_classes=10)\ncriterion = nn.CrossEntropyLoss()\noptimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n<\/code><\/pre>\n<h3>3.2 Training Phase<\/h3>\n<p>Now we are ready to train the model:<\/p>\n<pre><code>\nfor epoch in range(10): # Setting epochs\n    model.train()  # Switching the model to training mode\n    for images, labels in train_loader:\n        optimizer.zero_grad()  # Resetting gradients\n        outputs = model(images)  # Model prediction\n        loss = criterion(outputs, labels)  # Calculating loss\n        loss.backward()  # Backpropagation\n        optimizer.step()  # Updating parameters\n\n    print(f'Epoch [{epoch+1}\/10], Loss: {loss.item():.4f}')\n<\/code><\/pre>\n<h2>4. Applications of ResNet<\/h2>\n<p>ResNet can be used for various computer vision tasks. For example, it is widely applied in image classification, object detection, segmentation, and more complex vision problems. Several image and video tasks used by companies like Google and Facebook incorporate ResNet architecture.<\/p>\n<h2>5. Conclusion<\/h2>\n<p>In this tutorial, we learned the basic concepts and architecture of ResNet and how to implement a basic ResNet model using PyTorch. ResNet offers flexible ways to build deeper deep learning models and the opportunity to achieve better performance by leveraging residual learning, inspiring many researchers and developers.<\/p>\n<p>Now, you can study more advanced ResNet structures and various parameter tuning techniques, as well as data augmentation methods to improve the model.<\/p>\n<h2>6. References<\/h2>\n<ul>\n<li><a href=\"https:\/\/arxiv.org\/abs\/1512.03385\">Deep Residual Learning for Image Recognition (Kaiming He et al.)<\/a><\/li>\n<li><a href=\"https:\/\/pytorch.org\/docs\/stable\/index.html\">PyTorch Documentation<\/a><\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the field of deep learning, Residual Network, abbreviated as ResNet, has become a very important architecture. ResNet was proposed by Kaiming He in 2015 and provides a way to effectively increase the depth of deep learning models. In various modern computer vision problems, ResNet is considered one of the main reasons for performance improvement. &hellip; <a href=\"https:\/\/atmokpo.com\/w\/36463\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;Deep Learning PyTorch Course, ResNet&#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-36463","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, ResNet - \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\/36463\/\" \/>\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, ResNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"In the field of deep learning, Residual Network, abbreviated as ResNet, has become a very important architecture. ResNet was proposed by Kaiming He in 2015 and provides a way to effectively increase the depth of deep learning models. In various modern computer vision problems, ResNet is considered one of the main reasons for performance improvement. &hellip; \ub354 \ubcf4\uae30 &quot;Deep Learning PyTorch Course, ResNet&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/36463\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:48:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T11:53:05+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\/36463\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36463\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"Deep Learning PyTorch Course, ResNet\",\"datePublished\":\"2024-11-01T09:48:41+00:00\",\"dateModified\":\"2024-11-01T11:53:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36463\/\"},\"wordCount\":406,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"articleSection\":[\"PyTorch Study\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/36463\/\",\"url\":\"https:\/\/atmokpo.com\/w\/36463\/\",\"name\":\"Deep Learning PyTorch Course, ResNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:48:41+00:00\",\"dateModified\":\"2024-11-01T11:53:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/36463\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/36463\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/36463\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deep Learning PyTorch Course, ResNet\"}]},{\"@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, ResNet - \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\/36463\/","og_locale":"ko_KR","og_type":"article","og_title":"Deep Learning PyTorch Course, ResNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"In the field of deep learning, Residual Network, abbreviated as ResNet, has become a very important architecture. ResNet was proposed by Kaiming He in 2015 and provides a way to effectively increase the depth of deep learning models. In various modern computer vision problems, ResNet is considered one of the main reasons for performance improvement. &hellip; \ub354 \ubcf4\uae30 \"Deep Learning PyTorch Course, ResNet\"","og_url":"https:\/\/atmokpo.com\/w\/36463\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:48:41+00:00","article_modified_time":"2024-11-01T11:53:05+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\/36463\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/36463\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"Deep Learning PyTorch Course, ResNet","datePublished":"2024-11-01T09:48:41+00:00","dateModified":"2024-11-01T11:53:05+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/36463\/"},"wordCount":406,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"articleSection":["PyTorch Study"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/36463\/","url":"https:\/\/atmokpo.com\/w\/36463\/","name":"Deep Learning PyTorch Course, ResNet - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:48:41+00:00","dateModified":"2024-11-01T11:53:05+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/36463\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/36463\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/36463\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"Deep Learning PyTorch Course, ResNet"}]},{"@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\/36463","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=36463"}],"version-history":[{"count":1,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36463\/revisions"}],"predecessor-version":[{"id":36464,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/36463\/revisions\/36464"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=36463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=36463"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=36463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}