{"id":8472,"date":"2020-01-30T08:57:21","date_gmt":"2020-01-29T23:57:21","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=8472"},"modified":"2020-05-28T09:44:59","modified_gmt":"2020-05-28T00:44:59","slug":"%ed%8a%b9%ec%84%b1%ea%b0%92-2%ea%b0%9c%eb%a5%bc-%ec%9e%85%eb%a0%a5%ed%95%98%ec%97%ac-3%ea%b0%80%ec%a7%80%eb%a1%9c-%eb%b6%84%eb%a5%98%ed%95%98%eb%8a%94-%ec%8b%a0%ea%b2%bd%eb%a7%9d","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=8472","title":{"rendered":"\ud2b9\uc131\uac12 2\uac1c\ub97c \uc785\ub825\ud558\uc5ec 3\uac00\uc9c0\ub85c \ubd84\ub958\ud558\ub294 \uc2e0\uacbd\ub9dd"},"content":{"rendered":"<p>\uc774 \uae00\uc5d0\uc11c \uc18c\uac1c\ud558\uace0 \uc788\ub294 \uc18c\uc2a4\ucf54\ub4dc\ub294 \uc0ac\uc774\ud1a0 \uace0\ud0a4\uac00 \uc800\uc220\ud55c &#8220;Deep Learning from Scratch&#8221;\uc758 \uccab\uc7a5\uc5d0\uc11c \uc18c\uac1c\ud558\uace0 \uc788\ub294 \uc2e0\uacbd\ub9dd\uc785\ub2c8\ub2e4. \ud55c\uad6d\uc5b4\ud310\uc73c\ub85c\ub294 \ud55c\ube5b\ubbf8\ub514\uc5b4\uc758 &#8220;\ubc11\ubc14\ub2e5\ubd80\ud130 \uc2dc\uc791\ud558\ub294 \ub525\ub7ec\ub2dd2&#8243;\ub85c\ub3c4 \ubcf4\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \ub3c4\uc11c\uc758 \uc6d0\uc800\uc790\uc758 \ud5c8\ub77d \ud558\uc5d0 \uae00\uc744 \uc62c\ub9bd\ub2c8\ub2e4. \ud2b9\ud788 \uacf5\uac04\uc0c1\uc758 \uc88c\ud45c\uc640 \uc18d\uc131\uac12\ub4e4\uc5d0 \ub300\ud55c \ubd84\ub958\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc778\uc9c0\ub77c GIS \ubd84\uc57c\uc5d0\uc11c \ud754\ud558\uac8c \ud65c\uc6a9\ub420 \uc218 \uc788\ub294 \ub0b4\uc6a9\uc774\ub77c\uace0 \uc0dd\uac01\ub429\ub2c8\ub2e4. \ubcf4\ub2e4 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ud574\ub2f9\ub3c4\uc11c\ub97c \ucd94\ucc9c\ub4dc\ub9bd\ub2c8\ub2e4.<\/p>\n<p>\uacf5\uac04 \uc0c1\uc758 (x,y)\uc5d0 \ub300\ud55c \ud558\ub098\uc758 \uc9c0\uc810\uc5d0 \ub300\ud574\uc11c.. \uac00\uc7ac, \ubb3c\ubc29\uac1c, \uc62c\ucc59\uc774\uc778 3\uac00\uc9c0 \uc885\ub958\uc758 \uc2dd\uc0dd\uc774 \ubd84\ud3ec\ud558\uace0 \uc788\ub294 \uc0dd\ud0dc\uacc4\uac00 \uc788\ub2e4\uace0 \ud569\uc2dc\ub2e4. \uc989, \uc785\ub825\ub418\ub294 \ud2b9\uc131\uac12\uc740 2\uac1c\uc77c\ub54c 3\uac1c \uc911 \ud55c\uac1c\ub97c \uacb0\uc815\ud574\uc57c \ud569\ub2c8\ub2e4. \ub2e4\uc2dc \ub9d0\ud574, \uc774\ubbf8 \ucc44\uc9d1\ud55c \ub370\uc774\ud130\uac00 \uc788\uace0, \uc774 \ub370\uc774\ud130\ub97c \uc774\uc6a9\ud574 \uc608\uce21 \ubaa8\ub378\uc744 \ud6c8\ub828\uc2dc\ud0ac \uac83\uc774\uba70, \ud6c8\ub828\ub41c \ubaa8\ub378\uc744 \uc774\uc6a9\ud558\uba74 \uc784\uc774\uc758 (x,y) \uc704\uce58\uc5d0 \ub300\ud574 \uc874\uc7ac\ud558\ub294 \uc2dd\uc0dd\uc774 \ubb34\uc5c7\uc778\uc9c0\ub97c \uc608\uce21\ud558\uace0\uc790 \ud569\ub2c8\ub2e4. \uadf8\ub7fc \uba3c\uc800 \uc608\uce21 \ubaa8\ub378\uc744 \ud6c8\ub828\ud560\ub54c \uc0ac\uc6a9\ud560 \ucc44\uc9d1 \ub370\uc774\ud130\uac00 \ud544\uc694\ud55c\ub370, \uc544\ub798\uc758 load_spiral_data \ud568\uc218\uac00 \uc774\ub7ec\ud55c \ucc44\uc9d1 \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud574 \uc90d\ub2c8\ub2e4. \uc544\ub798\uc758 \ucf54\ub4dc\ub294 load_spiral_data \ud568\uc218\ub97c \uc774\uc6a9\ud574 \ucc44\uc9d1 \ub370\uc774\ud130\ub97c \uc0dd\uc131\ud558\uace0 \uc2dc\uac01\ud654\ud569\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nimport numpy as np\r\nimport matplotlib.pyplot as plt\r\n\r\ndef load_spiral_data(seed=7777):\r\n    np.random.seed(seed)\r\n    DIM = 2  # \uc785\ub825 \ub370\uc774\ud130 \ud2b9\uc131 \uc218\r\n    CLS_NUM = 3  # \ubd84\ub958\ud560 \ud074\ub798\uc2a4 \uc218\r\n    N = 100  # \ud074\ub798\uc2a4 \ud558\ub098 \ub2f9 \uc0d8\ud50c \ub370\uc774\ud130 \uc218\r\n\r\n    x = np.zeros((N*CLS_NUM, DIM))\r\n    t = np.zeros((N*CLS_NUM, CLS_NUM), dtype=np.int)\r\n\r\n    for j in range(CLS_NUM):\r\n        for i in range(N): # N*j, N*(j+1)):\r\n            rate = i \/ N\r\n            radius = 1.0*rate\r\n            theta = j*4.0 + 4.0*rate + np.random.randn()*0.2\r\n\r\n            ix = N*j + i\r\n            x[ix] = np.array([radius*np.sin(theta),\r\n                              radius*np.cos(theta)]).flatten()\r\n            t[ix, j] = 1\r\n\r\n    return x, t\r\n\r\nx, t = load_spiral_data()\r\nN = 100\r\nCLS_NUM = 3\r\nmarkers = ['o', 'x', '^']\r\nfor i in range(CLS_NUM):\r\n    plt.scatter(x[i*N:(i+1)*N, 0], x[i*N:(i+1)*N, 1], s=40, marker=markers[i])\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\/2019\/11\/spiral.png\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-8475\" \/><\/p>\n<p>\ud6c8\ub828\uc6a9 \ub370\uc774\ud130\uac00 \uc900\ube44\ub418\uc5c8\uc73c\ubbc0\ub85c, \uc774\uc81c \uc608\uce21 \ubaa8\ub378\uc5d0 \ub300\ud55c \uc2e0\uacbd\ub9dd\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uc544\ub798\ub294 \uc740\ub2c9\uce35\uc774 1\uac1c\uc778 \uc2e0\uacbd\ub9dd\uc5d0 \ub300\ud55c \ud074\ub798\uc2a4\uc785\ub2c8\ub2e4. \uc740\ub2c9\uce35\uc774 1\uac1c\uc774\uad6c\uc694. \uc774 \ud074\ub798\uc2a4\uc758 \uc0dd\uc131\uc790\uc5d0 \ub300\ud55c \uc778\uc790\ub294 \uc785\ub825\ub418\ub294 \ud2b9\uc131\uac12\uc758 \uac1c\uc218(input_size)\uc640 \uc740\ub2c9\uce35\uc758 \ub274\ub7f0 \uac1c\uc218(hidden_size) \uadf8\ub9ac\uace0 \ubd84\ub958 \uacb0\uacfc \uac1c\uc218(output_size)\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nclass Net:\r\n    def __init__(self, input_size, hidden_size, output_size):\r\n        I, H, O = input_size, hidden_size, output_size\r\n\r\n        W1 = 0.01 * np.random.randn(I, H)\r\n        b1 = np.zeros(H)\r\n        W2 = 0.01 * np.random.randn(H, O)\r\n        b2 = np.zeros(O)\r\n\r\n        self.layers = [\r\n            Affine(W1, b1),\r\n            Sigmoid(),\r\n            Affine(W2, b2)\r\n        ]\r\n        self.loss_layer = SoftmaxWithLoss()\r\n\r\n        self.params, self.grads = [], []\r\n        for layer in self.layers:\r\n            self.params += layer.params\r\n            self.grads += layer.grads\r\n\r\n    def predict(self, x):\r\n        for layer in self.layers:\r\n            x = layer.forward(x)\r\n        return x\r\n\r\n    def forward(self, x, t):\r\n        score = self.predict(x)\r\n        loss = self.loss_layer.forward(score, t)\r\n        return loss\r\n\r\n    def backward(self, dout=1):\r\n        dout = self.loss_layer.backward(dout)\r\n        for layer in reversed(self.layers):\r\n            dout = layer.backward(dout)\r\n        return dout\r\n<\/pre>\n<p>\uc2e0\uacbd\ub9dd\uc758 \ub274\ub7f0\uac12\uacfc \uac00\uc911\uce58 \uadf8\ub9ac\uace0 \ud3b8\ud5a5\uc5d0 \ub300\ud55c \uc5f0\uc0b0\uc744 \uc704\ud574 Affine \ud074\ub798\uc2a4\uac00 \uc0ac\uc6a9\ub42c\uc73c\uba70, \uc2e0\uacbd\ub9dd\uc758 \uae30\ubc18\uc774 \ub418\ub294 \uc120\ud615 \ud68c\uadc0\uc5d0 \ube44\uc120\ud615 \ud68c\uadc0 \ud2b9\uc131\uc744 \ubd80\uc5ec\ud558\ub294 \ud65c\uc131\ud654\ud568\uc218\ub85c Sigmoid \ud074\ub798\uc2a4\uac00 \uc0ac\uc6a9\ub418\uc5c8\uc2b5\ub2c8\ub2e4. \uc544\uc6b8\ub7ec 3\uac1c \uc774\uc0c1\uc758 \ucd9c\ub825\uacb0\uacfc\ub97c \ud655\ub960\ub85c \ud574\uc11d\ud558\uace0 \uc774\ub97c \uae30\ubc18\uc73c\ub85c \uc190\uc2e4\uac12\uc744 \uacc4\uc0b0\ud560 \uc218 \uc788\ub294 Softmax\uc640 Cross Entropy Error\ub97c \ud558\ub098\uc758 \ud569\uce5c SoftmaxWithLoss \ud074\ub798\uc2a4\uac00 \uc0ac\uc6a9\ub418\uc5c8\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 Affine, Sigmoid \ud074\ub798\uc2a4\uc758 \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4. <\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nclass Affine:\r\n    def __init__(self, W, b):\r\n        self.params = [W, b]\r\n        self.grads = [np.zeros_like(W), np.zeros_like(b)]\r\n        self.x = None\r\n\r\n    def forward(self, x):\r\n        W, b = self.params\r\n        out = np.dot(x, W) + b\r\n        self.x = x\r\n        return out\r\n\r\n    def backward(self, dout):\r\n        W, b = self.params\r\n        dx = np.dot(dout, W.T)\r\n        dW = np.dot(self.x.T, dout)\r\n        db = np.sum(dout, axis=0)\r\n\r\n        self.grads[0][...] = dW\r\n        self.grads[1][...] = db\r\n        return dx\r\n\r\nclass Sigmoid:\r\n    def __init__(self):\r\n        self.params, self.grads = [], []\r\n        self.out = None\r\n\r\n    def forward(self, x):\r\n        out = 1 \/ (1 + np.exp(-x))\r\n        self.out = out\r\n        return out\r\n\r\n    def backward(self, dout):\r\n        dx = dout * (1.0 - self.out) * self.out\r\n        return dx\r\n<\/pre>\n<p>\uadf8\ub9ac\uace0 SoftmaxWithLoss \ud074\ub798\uc2a4\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nclass SoftmaxWithLoss:\r\n    def __init__(self):\r\n        self.params, self.grads = [], []\r\n        self.y = None  # Softmax\uc758 \ucd9c\ub825\r\n        self.t = None  # \uc815\ub2f5 \ub808\uc774\ube14\r\n\r\n    def forward(self, x, t):\r\n        self.t = t\r\n        self.y = softmax(x)\r\n\r\n        # \uc815\ub2f5 \ub808\uc774\ube14\uc774 \uc6d0\ud56b \ubca1\ud130\uc77c \uacbd\uc6b0 \uc815\ub2f5\uc758 \uc778\ub371\uc2a4\ub85c \ubcc0\ud658\r\n        if self.t.size == self.y.size:\r\n            self.t = self.t.argmax(axis=1)\r\n\r\n        loss = cross_entropy_error(self.y, self.t)\r\n        return loss\r\n\r\n    def backward(self, dout=1):\r\n        batch_size = self.t.shape[0]\r\n\r\n        dx = self.y.copy()\r\n        dx[np.arange(batch_size), self.t] -= 1\r\n        dx *= dout\r\n        dx = dx \/ batch_size\r\n\r\n        return dx\r\n<\/pre>\n<p>\uc6b0\uc758 \ud074\ub798\uc2a4\ub294 Softmax \uc5f0\uc0b0\uacfc Cross Entropy Error \uc5f0\uc0b0\uc744 \uac01\uac01 softmax\uc640 cross_entropy_error \ud568\uc218\ub97c \ud1b5\ud574 \ucc98\ub9ac\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \ub450 \ud568\uc218\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\ndef softmax(x):\r\n    if x.ndim == 2:\r\n        x = x - x.max(axis=1, keepdims=True)\r\n        x = np.exp(x)\r\n        x \/= x.sum(axis=1, keepdims=True)\r\n    elif x.ndim == 1:\r\n        x = x - np.max(x)\r\n        x = np.exp(x) \/ np.sum(np.exp(x))\r\n\r\n    return x\r\n\r\ndef cross_entropy_error(y, t):\r\n    if y.ndim == 1:\r\n        t = t.reshape(1, t.size)\r\n        y = y.reshape(1, y.size)\r\n        \r\n    # \uc815\ub2f5 \ub370\uc774\ud130\uac00 \uc6d0\ud56b \ubca1\ud130\uc77c \uacbd\uc6b0 \uc815\ub2f5 \ub808\uc774\ube14 \uc778\ub371\uc2a4\ub85c \ubcc0\ud658\r\n    if t.size == y.size:\r\n        t = t.argmax(axis=1)\r\n             \r\n    batch_size = y.shape[0]\r\n\r\n    return -np.sum(np.log(y[np.arange(batch_size), t] + 1e-7)) \/ batch_size\r\n<\/pre>\n<p>\ud559\uc2b5 \ub370\uc774\ud130\uc640 \ubaa8\ub378\uae4c\uc9c0 \uc900\ube44\ub418\uc5c8\uc73c\ubbc0\ub85c, \uc774\uc81c \uc2e4\uc81c \ud559\uc2b5\uc5d0 \ub300\ud55c \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uba3c\uc800 \ud559\uc2b5\uc744 \uc704\ud55c \ud558\uc774\ud37c\ud30c\ub77c\uba54\ud130 \ubc0f \ubaa8\ub378\uc0dd\uc131 \uadf8\ub9ac\uace0 \uae30\ud0c0 \ubcc0\uc218\uac12\ub4e4\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\n# \ud558\uc774\ud37c\ud30c\ub77c\ubbf8\ud130\r\nmax_epoch = 300\r\nbatch_size = 30\r\nhidden_size = 10\r\nlearning_rate = 1.0\r\n\r\n# \ubaa8\ub378\r\nmodel = Net(input_size=2, hidden_size=hidden_size, output_size=3)\r\n\r\n# \uac00\uc911\uce58 \ucd5c\uc801\ud654\ub97c \uc704\ud55c \uc635\ud2f0\ub9c8\uc774\uc800\r\noptimizer = SGD(lr=learning_rate)\r\n\r\n# \ud559\uc2b5\uc5d0 \uc0ac\uc6a9\ud558\ub294 \ubcc0\uc218\r\ndata_size = len(x)\r\nmax_iters = data_size \/\/ batch_size\r\ntotal_loss = 0\r\nloss_count = 0\r\nloss_list = []\r\n<\/pre>\n<p>\ub2e4\uc74c\uc740 \uc2e4\uc81c \ud559\uc2b5 \uc218\ud589 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nfor epoch in range(max_epoch):\r\n    # \ub370\uc774\ud130 \ub4a4\uc11e\uae30\r\n    idx = np.random.permutation(data_size)\r\n    x = x[idx]\r\n    t = t[idx]\r\n\r\n    for iters in range(max_iters):\r\n        batch_x = x[iters*batch_size:(iters+1)*batch_size]\r\n        batch_t = t[iters*batch_size:(iters+1)*batch_size]\r\n\r\n        # \uae30\uc6b8\uae30\ub97c \uad6c\ud574 \ub9e4\uac1c\ubcc0\uc218 \uac31\uc2e0\r\n        loss = model.forward(batch_x, batch_t)\r\n        model.backward()\r\n        optimizer.update(model.params, model.grads)\r\n\r\n        total_loss += loss\r\n        loss_count += 1\r\n\r\n        # \uc815\uae30\uc801\uc73c\ub85c \ud559\uc2b5 \uacbd\uacfc \ucd9c\ub825\r\n        if (iters+1) % 10 == 0:\r\n            avg_loss = total_loss \/ loss_count\r\n            print('| \uc5d0\ud3ed %d |  \ubc18\ubcf5 %d \/ %d | \uc190\uc2e4 %.2f'\r\n                  % (epoch + 1, iters + 1, max_iters, avg_loss))\r\n            loss_list.append(avg_loss)\r\n            total_loss, loss_count = 0, 0\r\n<\/pre>\n<p>\ucd9c\ub825\uac12\uc73c\ub85c\uc368 \ub9e4 \ud559\uc2b5 \ub2e8\uacc4\ub9c8\ub2e4 \uc190\uc2e4\uac12\uc774 \uc904\uc5b4\ub4dc\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc544\ub798\ub294 \uc704\uc758 \ud559\uc2b5\uc774 \uc644\ub8cc\ub418\uba74 \uadf8 \uacb0\uacfc\ub97c \uc2dc\uac01\ud654\ud574\uc8fc\ub294 \ucf54\ub4dc\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\nplt.plot(np.arange(len(loss_list)), loss_list, label='train')\r\nplt.xlabel('Loop (x10)')\r\nplt.ylabel('Loss')\r\nplt.show()\r\n<\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/2019\/11\/spiral2.png\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-8476\" \/><\/p>\n<p>\uc774\uc81c \uc774 \ud559\uc2b5\ub41c \ubaa8\ub378\uc744 \uc774\uc6a9\ud574 \uc0c8\ub85c\uc6b4 \uc785\ub825 \ub370\uc774\ud130\ub97c \ubd84\ub958\ud558\uace0 \uc774\uc5d0 \ub300\ud55c \uacb0\uacfc\ub97c \ud6a8\uacfc\uc801\uc73c\ub85c \uc2dc\uac01\ud574 \uc8fc\ub294 \ucf54\ub4dc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"python\">\r\n# \uacbd\uacc4 \uc601\uc5ed \ud50c\ub86f\r\nh = 0.001\r\nx_min, x_max = x[:, 0].min() - .1, x[:, 0].max() + .1\r\ny_min, y_max = x[:, 1].min() - .1, x[:, 1].max() + .1\r\nxx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))\r\nX = np.c_[xx.ravel(), yy.ravel()]\r\nscore = model.predict(X)\r\npredict_cls = np.argmax(score, axis=1)\r\nZ = predict_cls.reshape(xx.shape)\r\nplt.contourf(xx, yy, Z)\r\nplt.axis('off')\r\n\r\n# \ub370\uc774\ud130\uc810 \ud50c\ub86f\r\nx, t = load_spiral_data()\r\nN = 100\r\nCLS_NUM = 3\r\nmarkers = ['o', 'x', '^']\r\nfor i in range(CLS_NUM):\r\n    plt.scatter(x[i*N:(i+1)*N, 0], x[i*N:(i+1)*N, 1], s=40, marker=markers[i])\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\/2019\/11\/spiral3.png\" alt=\"\" width=\"640\" height=\"480\" class=\"aligncenter size-full wp-image-8477\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uc774 \uae00\uc5d0\uc11c \uc18c\uac1c\ud558\uace0 \uc788\ub294 \uc18c\uc2a4\ucf54\ub4dc\ub294 \uc0ac\uc774\ud1a0 \uace0\ud0a4\uac00 \uc800\uc220\ud55c &#8220;Deep Learning from Scratch&#8221;\uc758 \uccab\uc7a5\uc5d0\uc11c \uc18c\uac1c\ud558\uace0 \uc788\ub294 \uc2e0\uacbd\ub9dd\uc785\ub2c8\ub2e4. \ud55c\uad6d\uc5b4\ud310\uc73c\ub85c\ub294 \ud55c\ube5b\ubbf8\ub514\uc5b4\uc758 &#8220;\ubc11\ubc14\ub2e5\ubd80\ud130 \uc2dc\uc791\ud558\ub294 \ub525\ub7ec\ub2dd2&#8243;\ub85c\ub3c4 \ubcf4\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ud574\ub2f9 \ub3c4\uc11c\uc758 \uc6d0\uc800\uc790\uc758 \ud5c8\ub77d \ud558\uc5d0 \uae00\uc744 \uc62c\ub9bd\ub2c8\ub2e4. \ud2b9\ud788 \uacf5\uac04\uc0c1\uc758 \uc88c\ud45c\uc640 \uc18d\uc131\uac12\ub4e4\uc5d0 \ub300\ud55c \ubd84\ub958\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc778\uc9c0\ub77c GIS \ubd84\uc57c\uc5d0\uc11c \ud754\ud558\uac8c \ud65c\uc6a9\ub420 \uc218 \uc788\ub294 \ub0b4\uc6a9\uc774\ub77c\uace0 \uc0dd\uac01\ub429\ub2c8\ub2e4. \ubcf4\ub2e4 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \ud574\ub2f9\ub3c4\uc11c\ub97c \ucd94\ucc9c\ub4dc\ub9bd\ub2c8\ub2e4. \uacf5\uac04 \uc0c1\uc758 (x,y)\uc5d0 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=8472\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;\ud2b9\uc131\uac12 2\uac1c\ub97c \uc785\ub825\ud558\uc5ec 3\uac00\uc9c0\ub85c \ubd84\ub958\ud558\ub294 \uc2e0\uacbd\ub9dd&#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":[131,132,1],"tags":[],"class_list":["post-8472","post","type-post","status-publish","format-standard","hentry","category-python","category-deep-machine-learning","category-uncategorized"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8472","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=8472"}],"version-history":[{"count":7,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8472\/revisions"}],"predecessor-version":[{"id":9340,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/8472\/revisions\/9340"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8472"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8472"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8472"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}