{"id":299,"date":"2020-08-06T10:07:11","date_gmt":"2020-08-06T01:07:11","guid":{"rendered":"http:\/\/cedartrees.co.kr\/?p=299"},"modified":"2021-04-03T19:17:21","modified_gmt":"2021-04-03T10:17:21","slug":"deep-learning-classification","status":"publish","type":"post","link":"http:\/\/blog.cedartrees.co.kr\/index.php\/2020\/08\/06\/deep-learning-classification\/","title":{"rendered":"\uc778\uacf5\uc2e0\uacbd\ub9dd\uc744 \uc774\uc6a9\ud55c \ubd84\ub958"},"content":{"rendered":"\n<p>\uc778\uacf5\uc2e0\uacbd\ub9dd\uc744 \uc774\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \ubd84\ub958\ud558\ub294 \ubb38\uc81c\ub97c \ud14c\uc2a4\ud2b8\ud574\ubcf4\uace0\uc790\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \ub85c\ub4dc\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import numpy as np\n\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim<\/pre>\n\n\n\n<p>\ubd84\ub958 \ubb38\uc81c \ud574\uacb0\uc744 \uc704\ud574 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\ub294 zoo \ub370\uc774\ud130\uc14b\uc785\ub2c8\ub2e4. \ud574\ub2f9 \ub370\uc774\ud130\ub294 \ub3d9\ubb3c\uc758 16\uac00\uc9c0 \ud2b9\uc9d5 \uc815\ubcf4\ub4e4 \uc608\ub97c \ub4e4\uc5b4 \uae43\ud138\uc774 \uc788\ub294\uc9c0 \uc54c\uc744 \ub0b3\ub294\uc9c0 \ube44\ud589\uc774 \uac00\ub2a5\ud55c\uc9c0 \ub4f1\uc744 \uccb4\ud06c\ud574\uc11c \uc774 \ub3d9\ubb3c\uc774 \uc5b4\ub290 \ubd84\ub958\uc5d0 \ub4e4\uc5b4\uac00\ub294\uc9c0\ub97c 0-7\uae4c\uc9c0\uc758 \uc911\uc5d0 \ud558\ub098\ub85c \ubd84\ub958\ud55c \ub370\uc774\ud130 \uc14b\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">xy = np.loadtxt('.\/zoo.csv', delimiter=',', dtype=np.float32)<\/pre>\n\n\n\n<p>\ud574\ub2f9 \ub370\uc774\ud130\uc758 shape\uc744 \ubcf4\uba74 (101,17)\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ucd1d 16\uac1c\uc758 \ud2b9\uc9d5(1\uc740 \ubd84\ub958)\uc744 \uac00\uc9c4 101\uac1c\uc758 \ub370\uc774\ud130\ub77c\ub294 \uc758\ubbf8\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">x_data = xy[:,0:-1]\ny_data = xy[:,-1]\n\nx_data = torch.Tensor(x_data)\ny_data = torch.Tensor(y_data).long()\nx_data.size(), y_data.size() # (torch.Size([101, 16]), torch.Size([101]))\n\ndata_length = len(xy)<\/pre>\n\n\n\n<p>101\uac1c\uc758 \ub370\uc774\ud130\ub97c \ubaa8\ub450 \ud559\uc2b5\ud558\uc9c0 \uc54a\uace0 \uc57d 8\/2\uc815\ub3c4\ub85c \ub098\ub220\uc11c \ud6c8\ub828\uc6a9 \ub370\uc774\ud130\uc640 \uac80\uc99d\uc6a9 \ub370\uc774\ud130\ub97c \ub9cc\ub4ed\ub2c8\ub2e4. \ud6c8\ub828\uc6a9 \ub370\uc774\ud130\ub97c \ub9cc\ub4e4\uae30 \uc804\uc5d0 \ub370\uc774\ud130\ub97c \ub79c\ub364\ud558\uac8c \uc11e\uc5b4\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">batch_size = .8\n\ntrain_cnt = int(data_length * batch_size)\nvalid_cnt = data_length - train_cnt\n\nidx = torch.randperm(data_length)\nx = torch.index_select(x_data, dim=0, index=idx).split([train_cnt, valid_cnt], dim=0)\ny = torch.index_select(y_data, dim=0, index=idx).split([train_cnt, valid_cnt], dim=0)<\/pre>\n\n\n\n<p>\ud559\uc2b5\uc744 \uc704\ud55c \ubaa8\ub378\uc744 \ub9cc\ub4e4\uc5b4\uc90d\ub2c8\ub2e4. \ubaa8\ub378\uc740 16\uac1c \ub370\uc774\ud130\ub97c \uc785\ub825 \ubc1b\uc544\uc11c \ucd5c\uc885\uc801\uc73c\ub85c 7\uac1c\uc758 \ub370\uc774\ud130\uc14b\uc744 \ucd9c\ub825\ud558\ub294 \ud615\ud0dc\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class ANN(nn.Module):\n    \n    def __init__(self, D_in, H, D_out):\n        super().__init__()\n        self.layers = nn.Sequential(\n            nn.Linear(D_in, H),\n            nn.ReLU(),\n            nn.Linear(H, D_out),\n        )\n    \n    def forward(self, x):\n        return self.layers(x)\n\nD_in, H, D_out = x_data.size(dim=-1), 100, torch.unique(y_data).size(dim=0)\nmodel = ANN(D_in, H, D_out)<\/pre>\n\n\n\n<p>loss\uc640 \ucd5c\uc801\ud654\ub97c \uc704\ud574 \ud568\uc218\ub97c \uc120\uc5b8\ud569\ub2c8\ub2e4. \ub610 \uc5b4\ub5bb\uac8c loss\uac00 \ubcc0\ud654\ud558\uace0 \uadf8\uc5d0\ub530\ub77c \uc815\ud655\ub3c4\uac00 \uc62c\ub77c\uac00\ub294\uc9c0\ub97c \ud45c\uc2dc\ud558\uae30 \uc704\ud574\uc11c hist_loss, hist_accr\uc744 \uc120\uc5b8\ud558\uace0 \ud559\uc2b5\uc774 \uc644\ub8cc\ub420 \ub54c\ub9c8\ub2e4 \ub370\uc774\ud130\ub97c \uc785\ub825\ud574\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">criterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters())\n\nhist_loss = []\nhist_accr = []\n\nepochs = 501\n\nfor epoch in range(epochs):\n    model.train()\n    # loss\n    y_pred = model(x[0])\n    loss = criterion(y_pred, y[0])\n    \n    # accuracy\n    predict = torch.argmax(y_pred, dim=-1).data == y[0]\n    accr = predict.float().mean().item()\n    \n    optimizer.zero_grad()\n    loss.backward()\n    optimizer.step()\n    \n    hist_loss.append(loss.item())\n    hist_accr.append(accr)\n    \n    if epoch%10==0:\n        #print(y_pred)\n        print('Epoch {:4d}\/{} Cost: {:.6f} Accuracy:{}'.format(\n            epoch, epochs, loss.item(), accr\n        ))<\/pre>\n\n\n\n<p>\ud559\uc2b5\uc774 \ubc18\ubcf5\ub420\ub54c\ub9c8\ub2e4 loss\uac00 \ub0ae\uc544\uc9c0\uace0 \uc815\ud655\ub3c4\uac00 \uc62c\ub77c\uac00\ub294 \ubaa8\uc2b5\uc744 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. loss\ub3c4 \uc644\ub9cc\ud558\uac8c \ub0b4\ub824\uac00\ub294 \uac83\uc744 \ubcf4\ub2c8 learning_rate\uac00 \uc801\uc808\ud788 \uc120\uc5b8\ub41c\uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import matplotlib.pyplot as plt\n\nplt.plot(hist_loss)\nplt.plot(hist_accr)\nplt.legend(['Loss','Accuracy'])\nplt.title('Loss\/Legend')\nplt.xlabel('Epoch')\nplt.show()<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"377\" height=\"268\" src=\"http:\/\/cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-08-06-\u110b\u1169\u110c\u1165\u11ab-10.06.47.png\" alt=\"\" class=\"wp-image-301\" srcset=\"http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-08-06-\u110b\u1169\u110c\u1165\u11ab-10.06.47.png 377w, http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-08-06-\u110b\u1169\u110c\u1165\u11ab-10.06.47-300x213.png 300w\" sizes=\"(max-width: 377px) 100vw, 377px\" \/><\/figure>\n\n\n\n<p>\uc774\uc81c \ud559\uc2b5\uc774 \uc644\ub8cc\ub418\uc5c8\uace0 \ud14c\uc2a4\ud2b8\uc6a9 \ub370\uc774\ud130\uc14b\uc744 \ud65c\uc6a9\ud574\uc11c \ubaa8\ub378\uc758 \uc815\ud655\ub3c4\ub97c \uac80\uc99d\ud574\ubcf8\uacb0\uacfc  Accuracy: 0.95238 \ub370\uc774\ud130\ub97c \uc5bb\uc5c8\uc2b5\ub2c8\ub2e4. \ud559\uc2b5\uc744 \ub354 \ub9ce\uc774 \uc9c4\ud589\ud55c\ub2e4\uba74 \ub354 \ub192\uc740 \uc815\ud655\ub3c4\ub97c \uc5bb\uc744 \uc218 \uc788\uc744 \uac70\ub77c\uace0 \uc0dd\uac01\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">model.eval()\n\nwith torch.no_grad():\n    predict = model(x[1])\n    \n    # accuracy\n    predict = torch.argmax(predict, dim=-1).data == y[1]\n    accr = predict.float().mean().item()\n    \n    print(\"Accuracy: %.5f\" % accr)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\uc778\uacf5\uc2e0\uacbd\ub9dd\uc744 \uc774\uc6a9\ud558\uc5ec \ub370\uc774\ud130\ub97c \ubd84\ub958\ud558\ub294 \ubb38\uc81c\ub97c \ud14c\uc2a4\ud2b8\ud574\ubcf4\uace0\uc790\ud569\ub2c8\ub2e4. \ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub4e4\uc744 \ub2e4\uc74c\uacfc \uac19\uc774 \ub85c\ub4dc\ud569\ub2c8\ub2e4. \ubd84\ub958 \ubb38\uc81c \ud574\uacb0\uc744 \uc704\ud574 \uc0ac\uc6a9\ud55c \ub370\uc774\ud130\ub294 zoo \ub370\uc774\ud130\uc14b\uc785\ub2c8\ub2e4. \ud574\ub2f9 \ub370\uc774\ud130\ub294 \ub3d9\ubb3c\uc758 16\uac00\uc9c0 \ud2b9\uc9d5 \uc815\ubcf4\ub4e4 \uc608\ub97c \ub4e4\uc5b4 \uae43\ud138\uc774 \uc788\ub294\uc9c0 \uc54c\uc744 \ub0b3\ub294\uc9c0 \ube44\ud589\uc774 \uac00\ub2a5\ud55c\uc9c0 \ub4f1\uc744 \uccb4\ud06c\ud574\uc11c \uc774 \ub3d9\ubb3c\uc774 \uc5b4\ub290 \ubd84\ub958\uc5d0 \ub4e4\uc5b4\uac00\ub294\uc9c0\ub97c 0-7\uae4c\uc9c0\uc758 \uc911\uc5d0 \ud558\ub098\ub85c \ubd84\ub958\ud55c \ub370\uc774\ud130 \uc14b\uc785\ub2c8\ub2e4. \ud574\ub2f9 \ub370\uc774\ud130\uc758 shape\uc744 \ubcf4\uba74 (101,17)\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ucd1d 16\uac1c\uc758 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.cedartrees.co.kr\/index.php\/2020\/08\/06\/deep-learning-classification\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;\uc778\uacf5\uc2e0\uacbd\ub9dd\uc744 \uc774\uc6a9\ud55c \ubd84\ub958&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14],"tags":[61,56,125],"_links":{"self":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/299"}],"collection":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/comments?post=299"}],"version-history":[{"count":3,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/299\/revisions"}],"predecessor-version":[{"id":305,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/299\/revisions\/305"}],"wp:attachment":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/media?parent=299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/categories?post=299"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/tags?post=299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}