{"id":8900,"date":"2020-02-08T09:59:54","date_gmt":"2020-02-08T00:59:54","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=8900"},"modified":"2020-06-14T10:35:49","modified_gmt":"2020-06-14T01:35:49","slug":"autoencoder","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=8900","title":{"rendered":"AutoEncoder"},"content":{"rendered":"<p>AutoEncoder\ub294 \ud559\uc2b5 \ub370\uc774\ud130\uc5d0 \ub808\uc774\ube14 \ub370\uc774\ud130\ub97c \ubcc4\ub3c4\ub85c \uad6c\ucd95\ud560 \ud544\uc694\uac00 \uc5c6\ub294, \uc8fc\uc5b4\uc9c4 \ub370\uc774\ud130\ub9cc\uc73c\ub85c \ud559\uc2b5\uc774 \uac00\ub2a5\ud55c \ube44\uc9c0\ub3c4 \ud559\uc2b5 \uc2e0\uacbd\ub9dd\uc785\ub2c8\ub2e4. \uc5c4\ubc00\ud788 \ub9d0\ud574 \uc785\ub825 \ub370\uc774\ud130\uac00 \uace7 \ub808\uc774\ube14 \ub370\uc774\ud130\uac00 \ub429\ub2c8\ub2e4. AutoEncoder \uc2e0\uacbd\ub9dd\uc740 Encoder\uc640 Decoder\ub77c\ub294 2\uac1c\uc758 \uc2e0\uacbd\ub9dd\uc73c\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. Encoder\ub294 \uc785\ub825 \ub370\uc774\ud130\uc5d0\uc11c \uc911\uc694\ud55c \uc815\ubcf4\ub9cc\uc744 \ub0a8\uae30\uace0 \uc2e0\uacbd\ub9dd\uc758 \uc785\uc7a5\uc5d0\uc11c \ud559\uc2b5\uc2dc\uc5d0 \uc911\uc694\ud558\uc9c0 \uc54a\ub2e4\uace0 \ud310\ub2e8\ub418\ub294 \uc815\ubcf4\ub294 \uc81c\uac70\ud568\uc73c\ub85c\uc368 \ucc98\uc74c \uc785\ub825 \ub370\uc774\ud130\uc758 \ud06c\uae30\ubcf4\ub2e4 \ub354 \uc791\uc740 \ud06c\uae30\uc758 \ub370\uc774\ud130(z)\ub97c \uc0dd\uc131\ud574 \uc8fc\ub294 \uc2e0\uacbd\ub9dd\uc785\ub2c8\ub2e4. Decoder\ub294 Encoder\uac00 \uc0dd\uc131\ud55c z\ub97c \uac00\uc9c0\uace0 \ub2e4\uc2dc \ucc98\uc74c\uc758 \uc785\ub825 \uc774\ubbf8\uc9c0\ub85c \ubcf5\uc6d0\ud558\ub294 \uc2e0\uacbd\ub9dd\uc785\ub2c8\ub2e4.<\/p>\n<p>Encoder\uac00 \uc0dd\uc131\ud574 \uc8fc\ub294 \ubcf4\ub2e4 \ub354 \uc791\uc740 \ud06c\uae30\uc758 \ub370\uc774\ud130\ub97c \uc7a0\uc7ac \ubca1\ud130(Latent Vector)\uc774\ub77c\uace0 \ud558\uba70, z\ub77c\uace0 \ud754\ud788 \ud45c\uae30\ud569\ub2c8\ub2e4. \uc774 z\ub294 GAN\uc758 Generator\uc758 \uc785\ub825 \ub370\uc774\ud130\uc778 z\uc640 \uadf8 \uc758\ubbf8\uac00 \ub3d9\uc77c\uc120\uc0c1\uc5d0 \ub193\uc5ec \uc788\uc2b5\ub2c8\ub2e4. \uc7a0\uc7ac \ubca1\ud130\ub77c\uace0 \ud558\ub294 \uc774\uc720\ub294 \uc5b4\ub5a4 \uc911\uc694\ud55c &#8216;\uc758\ubbf8&#8217;\uac00 \uc7a0\uc7ac\ub418\uc5b4 \uc788\ub294 \ub370\uc774\ud130(\ubca1\ud130)\uc774\uae30 \ub54c\ubb38\uc785\ub2c8\ub2e4. \uacb0\uad6d \uc774 z\uc5d0\ub294 \ucc98\uc74c \uc785\ub825 \ub370\uc774\ud130\uc5d0\uc11c \uc911\uc694\ud55c \uc758\ubbf8\ub9cc\uc744 \ub0a8\uaca8 \ub193\uc740 \uac83, \uc555\ucd95\ub41c \uac83\uc774\ub77c\uace0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uc774 z\uc5d0\ub294 \ubcc4\ub85c \uc911\uc694\ud558\uc9c0 \uc54a\uac70\ub098 \uc7a1\uc74c\uac19\uc740 \uac83\ub4e4\uc774 \uc81c\uac70\ub41c \ub370\uc774\ud130\ub77c\uace0 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc555\ucd95 \ucc28\uc6d0\uc5d0\uc11c \ubcf4\uc790\uba74 \uc190\uc2e4 \uc555\ucd95\uc785\ub2c8\ub2e4. \uc774\ub7ec\ud55c AutoEncoder \uc2e0\uacbd\ub9dd\uc758 \uc6a9\ub3c4\ub294 \ucc28\uc6d0\uac10\uc18c, \uc911\uc694\ud55c \uc758\ubbf8 \ucd94\ucd9c, \uc7a0\uc7ac\ubca1\ud130\ub97c \ud1b5\ud55c \ubcf5\uc7a1\ud55c \ub370\uc774\ud130\uc758 \uacf5\uac04\uc0c1 \uc2dc\uac01\ud654, \uc774\ubbf8\uc9c0 \uac80\uc0c9, Segmentation, Super Resolution \ub4f1 \ub9e4\uc6b0 \ub2e4\uc591\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\ub7ec\ud55c AutoEncoder\ub97c \uc774\ubbf8\uc9c0 \uc555\ucd95\uacfc \ubcf5\uc6d0\uc758 \uad00\uc810\uc5d0\uc11c CNN \ub808\uc774\uc5b4\ub97c \uc0ac\uc6a9\ud574 \uad6c\ud604\ud568\uc73c\ub85c\uc368 \ub354\uc6b1 \uad6c\uccb4\uc801\uc778 \ub0b4\uc6a9\uc744 \uc815\ub9ac\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \ub525\ub7ec\ub2dd \ub77c\uc774\ube0c\ub7ec\ub9ac\ub294 PyTorch\ub97c \uc0ac\uc6a9\ud558\uc600\uc2b5\ub2c8\ub2e4. TensorFlow \uc5ed\uc2dc \uc2e0\uacbd\ub9dd \uad6c\uc131 \ub808\uc774\uc5b4\ub294 \ub3d9\uc77c\ud558\ub2c8 \uc5b4\ub835\uc9c0 \uc54a\uac8c \ubcc0\ud658\uc774 \uac00\ub2a5\ud560 \uac83\uc785\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 \ud544\uc694\ud55c \ud328\ud0a4\uc9c0\ub4e4\uc744 Import \ud574 \ub461\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport torch\r\nimport torch.nn as nn\r\nimport torch.optim as optim\r\nfrom torch.optim import lr_scheduler\r\nimport torchvision.datasets as dset\r\nimport torchvision.transforms as transforms\r\nimport matplotlib.pyplot as plt\r\nimport random\r\nfrom torch.utils.data import DataLoader\r\n<\/pre>\n<p>\uc555\ucd95\uacfc \ubcf5\uc6d0 \ub300\uc0c1\uc774 \ub418\ub294 \uc774\ubbf8\uc9c0\ub294 Fashion MNIST\ub97c \uc0ac\uc6a9\ud558\uaca0\uc2b5\ub2c8\ub2e4. <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nbatch_size = 1024\r\nroot = '.\/MNIST_Fashion'\r\ntransform = transforms.Compose([transforms.ToTensor()])\r\ntrain_data = dset.FashionMNIST(root=root, train=True, transform=transform, download=True)\r\ntest_data = dset.FashionMNIST(root=root, train=False, transform=transform, download=True)\r\n\r\ntrain_loader = DataLoader(train_data, batch_size=batch_size, shuffle=True, drop_last=True)\r\ntest_loader = DataLoader(test_data, batch_size=batch_size, shuffle=False, drop_last=True)\r\n<\/pre>\n<p>AutoEncoder\uc758 \uc2e0\uacbd\ub9dd\uc5d0 \ub300\ud55c \ud074\ub798\uc2a4\ub97c \uc815\uc758\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nz_size = 314\r\n\r\nclass AutoEncoder(nn.Module):\r\n    def __init__(self):\r\n        super(AutoEncoder, self).__init__()\r\n\r\n        self.encoder = nn.Sequential(\r\n            nn.Conv2d(in_channels=1, out_channels=32, kernel_size=2, stride=2, bias=False),\r\n            nn.LeakyReLU(),\r\n            nn.Conv2d(in_channels=32, out_channels=64, kernel_size=2, stride=2, bias=False),\r\n            nn.LeakyReLU(),\r\n            Reshape((-1,7*7*64)),\r\n            nn.Linear(7*7*64, z_size),\r\n            nn.LeakyReLU(),\r\n        )\r\n\r\n        self.decoder = nn.Sequential(\r\n            nn.Linear(z_size, 7*7*64),\r\n            nn.LeakyReLU(),\r\n            Reshape((-1,64,7,7)),\r\n            nn.ConvTranspose2d(in_channels=64, out_channels=32, kernel_size=2, stride=2, bias=False),\r\n            nn.LeakyReLU(),\r\n            nn.ConvTranspose2d(in_channels=32, out_channels=1, kernel_size=2, stride=2, bias=False),\r\n            nn.Sigmoid()\r\n        )\r\n\r\n    def forward(self, x):\r\n        out = self.encoder(x)\r\n        out = self.decoder(out)\r\n        return out\r\n<\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc\uac00 \uae30\uc220\ud558\ub294 \uc2e0\uacbd\ub9dd\uc758 \uad6c\uc131 \ub808\uc774\uc5b4\ub4e4 \uc0ac\uc774\ub85c \uc804\ub2ec\ub418\ub294 Tensor\uc758 \ud06c\uae30\ub97c \ud45c\uae30\ud55c \uadf8\ub9bc\uc740 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/02\/AutoEncoder_D.png\" alt=\"\" width=\"2417\" height=\"1375\" class=\"aligncenter size-full wp-image-8904\" \/><\/p>\n<p>AutoEncoder \ud074\ub798\uc2a4\ub294 encoder\uc640 decoder\ub85c \ub808\uc774\uc5b4\ub4e4\uc744 \ubd84\ub9ac\ud574 \uad6c\uc131\ud558\uace0 \uc788\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub807\uac8c \ud574\ub450\uba74 \ucd94\ud6c4\uc5d0 encoder \ub9cc\uc744 \uc774\uc6a9\ud574 \uc7a0\uc7ac \ubca1\ud130\ub9cc\uc744 \uc27d\uac8c \uc5bb\uc5b4\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ubcf4\uc2dc\uba74 encoder\uc640 decoder\ub294 \ub808\uc774\uc5b4\uc758 \uad6c\uc131\uc774 \uc131\ud638 \ub300\uce6d\uc131\uc774 \uc788\ub294 \uac83\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \uc55e\uc11c \uc5b8\uae09 \ud588\ub4ef\uc774 AutoEncoder\ub294 \uc785\ub825 \ub370\uc774\ud130\uac00 \ub808\uc774\ube14 \ub370\uc774\ud130\ub85c \uc0ac\uc6a9\ub418\ubbc0\ub85c \ucd9c\ub825 \ub370\uc774\ud130\uac00 \uc785\ub825 \ub370\uc774\ud130\uc758 \ud150\uc11c \ud06c\uae30\uc640 \ub3d9\uc77c\ud569\ub2c8\ub2e4. \uc911\uc694\ud55c \uc810\uc740 z\uc758 \ud06c\uae30\uc778 z_size\ub97c 314\ub85c \ud574\ub450\uc5c8\ub294\ub370, \uc774\ub294 \uc6d0\ubcf8 \uc774\ubbf8\uc9c0\uc758 \ud06c\uae30 28&#215;28\uc778 784\uac00 \uc57d 40%\uc758 \ud06c\uae30\ub85c \uc555\ucd95\ub41c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ub2e4\uc2dc \uc0c1\uae30\ud558\uba74 \uc774 40% \ud06c\uae30\ub85c \uc555\ucd95\ub41c z\uc5d0\ub294 \uc6d0\ubcf8 \uc774\ubbf8\uc9c0\uc758 \uc911\uc694\ud55c \ud2b9\uc9d5\uac12\ub4e4\uc774 \uc7a0\uc7ac\ub418\uc5b4 \uc788\uace0 \ubd88\ud544\uc694\ud55c \uac83\uc774\ub77c\uace0 \ud310\ub2e8\ub418\ub294 \uac83\ub4e4\uc740 \uc81c\uac70\ub418\uc5b4 \uc788\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ubb3c\ub860 \uc774\ub7ec\ud55c \ud310\ub2e8\uc740 \uc2e0\uacbd\ub9dd\uc774 \ub370\uc774\ud130\ub97c \ud1b5\ud574 \uc2a4\uc2a4\ub85c \ud310\ub2e8\ud569\ub2c8\ub2e4.<\/p>\n<p><p>\ucd94\uac00\uc801\uc73c\ub85c \uc704\uc758 \uc2e0\uacbd\ub9dd \ud074\ub798\uc2a4\uc758 \uad6c\uc131 \ub808\uc774\uc5b4 \uc911 Reshape\ub77c\ub294 Tensor\uc758 \ud06c\uae30\ub97c \ubcc0\uacbd\ud574 \uc8fc\ub294 \ub808\uc774\uc5b4\uc758 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nclass Reshape(nn.Module):\r\n    def __init__(self, shape):\r\n        super(Reshape, self).__init__()\r\n        self.shape = shape\r\n\r\n    def forward(self, x):\r\n        return x.view(*self.shape)\r\n<\/pre>\n<p>\ub2e4\uc74c\uc740 \ud559\uc2b5 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nnum_epochs = 15\r\n\r\ndevice = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\r\nmodel = AutoEncoder().to(device)\r\nloss_func = nn.MSELoss().to(device)\r\noptimizer = optim.Adam(model.parameters())\r\nscheduler = lr_scheduler.ReduceLROnPlateau(optimizer,threshold=0.1, patience=1, mode='min')    \r\n\r\nfor i in range(num_epochs):\r\n    for _, [image, _] in enumerate(train_loader):\r\n        x = image.to(device)\r\n        y_= image.to(device)\r\n        \r\n        optimizer.zero_grad()\r\n        output = model(x)\r\n        loss = loss_func(output, y_)\r\n        loss.backward()\r\n        optimizer.step()\r\n \r\n    scheduler.step(loss)      \r\n    print('Epoch: {}, Loss: {}, LR: {}'.format(i, loss.item(), scheduler.optimizer.state_dict()['param_groups'][0]['lr']))\r\n<\/pre>\n<p>\uba87\ucc28\ub840 \uc2e4\ud589\uc744 \ud574\ubcf4\ub2c8 15 Epoch \uc815\ub3c4\uc5d0\uc11c \uc190\uc2e4\uac12\uc774 \ub354 \uc774\uc0c1 \uac10\uc18c\ud558\uc9c0 \uc54a\ub294 \uac83\uc744 \ud655\uc778\ud588\uace0 Overfitting\uc744 \ubc29\uc9c0\ud558\uae30 \uc704\ud574 \ucd5c\uc885\uc801\uc73c\ub85c \ubc18\ubcf5 \ud559\uc2b5\uc218\ub97c 15\ub85c \uc9c0\uc815\ud588\uc2b5\ub2c8\ub2e4. \ubb3c\ub860 \uc5b4\ub5a4 \uc2e0\uacbd\ub9dd\uc740 \ud559\uc2b5\uc2dc\uc5d0 \uc190\uc2e4\uac12\uc774 \ud55c\ub3d9\uc548 \uc77c\uc815\uac12\uc5d0\uc11c \uc815\uccb4 \ud558\ub2e4\uac00 \ub2e4\uc2dc \uac10\uc18c\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc73c\ubbc0\ub85c \uc9c0\uc18d\uc801\uc774\uace0 \uc138\ubc00\ud55c \uad00\ucc30\uc774 \ud544\uc694\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud559\uc2b5\uc774 \uc644\ub8cc\ub418\uc5c8\ub2e4\uba74, \uadf8 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nmodel.eval()\r\n\r\nrows = 4\r\nfor c in range(rows):\r\n    plt.subplot(rows, 2, c*2+1)\r\n    rand_idx = random.randint(0, test_data.data.shape[0])\r\n    plt.imshow(test_data.data[rand_idx].view(28,28), cmap='gray')\r\n    plt.axis('off')\r\n\r\n    plt.subplot(rows, 2, c*2+2)\r\n    inp = transform(test_data.data[rand_idx].numpy().reshape(28,28)).reshape(1,1,28,28).to(device)\r\n    img = model(inp)\r\n    plt.imshow(img.view(28,28).detach().cpu().numpy(), cmap='gray')\r\n    plt.axis('off')\r\n\r\n    print(test_data.targets[rand_idx])\r\n\r\nplt.show()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2020\/02\/AutoEncoder_R.png\" alt=\"\" width=\"2086\" height=\"1800\" class=\"aligncenter size-full wp-image-8901\" \/><\/p>\n<p>\ucd1d 4\uc904\uc758 \uc774\ubbf8\uc9c0\ub4e4\uc774 \ud45c\uc2dc\ub418\ub294\ub370, \uc67c\ucabd\uc740 \uc785\ub825 \uc774\ubbf8\uc9c0\uc774\uace0 \uc624\ub978\ucabd\uc740 AutoEncoder\uc758 Decoder\uac00 \uc0dd\uc131\ud574\ub0b8 \uc774\ubbf8\uc9c0\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>AutoEncoder\ub294 \ud559\uc2b5 \ub370\uc774\ud130\uc5d0 \ub808\uc774\ube14 \ub370\uc774\ud130\ub97c \ubcc4\ub3c4\ub85c \uad6c\ucd95\ud560 \ud544\uc694\uac00 \uc5c6\ub294, \uc8fc\uc5b4\uc9c4 \ub370\uc774\ud130\ub9cc\uc73c\ub85c \ud559\uc2b5\uc774 \uac00\ub2a5\ud55c \ube44\uc9c0\ub3c4 \ud559\uc2b5 \uc2e0\uacbd\ub9dd\uc785\ub2c8\ub2e4. \uc5c4\ubc00\ud788 \ub9d0\ud574 \uc785\ub825 \ub370\uc774\ud130\uac00 \uace7 \ub808\uc774\ube14 \ub370\uc774\ud130\uac00 \ub429\ub2c8\ub2e4. AutoEncoder \uc2e0\uacbd\ub9dd\uc740 Encoder\uc640 Decoder\ub77c\ub294 2\uac1c\uc758 \uc2e0\uacbd\ub9dd\uc73c\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. Encoder\ub294 \uc785\ub825 \ub370\uc774\ud130\uc5d0\uc11c \uc911\uc694\ud55c \uc815\ubcf4\ub9cc\uc744 \ub0a8\uae30\uace0 \uc2e0\uacbd\ub9dd\uc758 \uc785\uc7a5\uc5d0\uc11c \ud559\uc2b5\uc2dc\uc5d0 \uc911\uc694\ud558\uc9c0 \uc54a\ub2e4\uace0 \ud310\ub2e8\ub418\ub294 \uc815\ubcf4\ub294 \uc81c\uac70\ud568\uc73c\ub85c\uc368 \ucc98\uc74c \uc785\ub825 \ub370\uc774\ud130\uc758 \ud06c\uae30\ubcf4\ub2e4 \ub354 \uc791\uc740 \ud06c\uae30\uc758 \ub370\uc774\ud130(z)\ub97c \uc0dd\uc131\ud574 \uc8fc\ub294 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=8900\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;AutoEncoder&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[132],"tags":[],"class_list":["post-8900","post","type-post","status-publish","format-standard","hentry","category-deep-machine-learning"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8900","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8900"}],"version-history":[{"count":8,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8900\/revisions"}],"predecessor-version":[{"id":9783,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8900\/revisions\/9783"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8900"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8900"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8900"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}