{"id":347,"date":"2020-08-11T11:04:26","date_gmt":"2020-08-11T02:04:26","guid":{"rendered":"http:\/\/cedartrees.co.kr\/?p=347"},"modified":"2021-04-03T19:16:02","modified_gmt":"2021-04-03T10:16:02","slug":"cnn-mnist-dataset","status":"publish","type":"post","link":"http:\/\/blog.cedartrees.co.kr\/index.php\/2020\/08\/11\/cnn-mnist-dataset\/","title":{"rendered":"CNN MNIST \ud14c\uc2a4\ud2b8 (PyTorch)"},"content":{"rendered":"\n<p>CNN \uc54c\uace0\ub9ac\uc998\uc744 MNIST \ub370\uc774\ud130\uc14b\uc744 \ud65c\uc6a9\ud574\uc11c \ud14c\uc2a4\ud2b8\ud574\ubd05\ub2c8\ub2e4.<\/p>\n\n\n\n<p>CNN \uc54c\uace0\ub9ac\uc998\uc5d0 \ub300\ud55c \ub2e4\uc591\ud55c \ub9ce\uc740 \uc124\uba85\uc774 \uc788\uc73c\ub2c8 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc544\ub798\uc758 \uac15\uc758\ub97c \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4. \ube44\ub85d \uc791\uc740 \ubd80\ubd84\uc758 \ucc28\uc774\ub4e4\uc740 \uc788\uc744 \uc218 \uc788\uc9c0\ub9cc \ubcf8 \uc608\uc81c \uc5ed\uc2dc \uc778\ud130\ub137\uc5d0 \ub9ce\uc740 \uc18c\uc2a4 \ucf54\ub4dc\uc640 \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. <br><span class=\"has-inline-color has-vivid-cyan-blue-color\">\ub2e8, \uc544\ub798\uc758 \uc601\uc0c1\uc740 \ud150\uc11c\ud50c\ub85c\uc6b0\ub85c \uc124\uba85\ud558\ub294 \uc601\uc0c1\uc774\uc9c0\ub9cc \ubcf8 \uc608\uc81c\ub294 \ud30c\uc774\ud1a0\uce58\ub85c \uad6c\ud604\ub418\uc5b4 \uc788\uc73c\uba70 \ud559\uc2b5\ub3c4 \uc804\uccb4 \ub370\uc774\ud130\ub97c \ub300\uc0c1\uc73c\ub85c \ud558\uc9c0 \uc54a\uace0 \uccab\ubc88\uc9f8 \ubbf8\ub2c8\ubc30\uce58\ub9cc \ud559\uc2b5\ud558\ub294 \uac83\uc73c\ub85c \uc791\uc131\ud588\uc2b5\ub2c8\ub2e4. <\/span><\/p>\n\n\n\n<figure class=\"wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-4-3 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"lec11-1 ConvNet\uc758 Conv \ub808\uc774\uc5b4 \ub9cc\ub4e4\uae30\" width=\"525\" height=\"394\" src=\"https:\/\/www.youtube.com\/embed\/Em63mknbtWo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>\ud544\uc694\ud55c \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc784\ud3ec\ud2b8\ud558\uace0 GPU \uc0ac\uc6a9 \uc124\uc815\ud558\ub294 \ubd80\ubd84\uacfc MNIST \ub370\uc774\ud130\ub97c \ub85c\ub4dc\ud558\ub294 \ubd80\ubd84\uc5d0 \ub300\ud574\uc11c\ub294 \uc790\uc138\ud55c \uc124\uba85\uc744 \ud558\uc9c0 \uc54a\uace0 \uc9c0\ub098\uac00\uaca0\uc2b5\ub2c8\ub2e4. GPU \uc124\uc815\uc774 \ud544\uc694 \uc5c6\ub294 CPU \uc0c1\uc5d0\uc11c \uc608\uc81c\ub97c \uad6c\ub3d9\ud558\ub294 \uacbd\uc6b0\ub294 device \uc124\uc815\uc744 \ud558\uc9c0 \uc54a\uace0 \ub118\uc5b4\uac00\uc154\ub3c4 \ubb34\ubc29\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>GPU \uc11c\ubc84\uac00 \uc5c6\ub294 \uacbd\uc6b0\ub294 \ubb34\ub8cc\ub85c Colab\uc744 \uc774\uc6a9\ud558\uc2dc\ub294 \uac83\ub3c4 \ucd94\ucc9c\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 torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torchvision import transforms, datasets\n\nimport matplotlib.pyplot as plt\n\nUSE_CUDA = torch.cuda.is_available()\nDEVICE = torch.device(\"cuda\" if USE_CUDA else \"cpu\")\n\nBATCH_SIZE = 128\n\ntrain_loader = torch.utils.data.DataLoader(\n    datasets.MNIST('..\/data',\n                   train=True,\n                   download=True,\n                   transform=transforms.Compose([\n                       transforms.ToTensor(),\n                       transforms.Normalize((0.1307,), (0.3081,))\n                   ])),\n    batch_size=BATCH_SIZE, shuffle=True)\ntest_loader = torch.utils.data.DataLoader(\n    datasets.MNIST('..\/data',\n                   train=False, \n                   transform=transforms.Compose([\n                       transforms.ToTensor(),\n                       transforms.Normalize((0.1307,), (0.3081,))\n                   ])),\n    batch_size=BATCH_SIZE, shuffle=True)<\/pre>\n\n\n\n<p>MNIST \ub370\uc774\ud130\ub294 DataLoader\ub85c \ubd88\ub7ec\uc654\uc2b5\ub2c8\ub2e4. \ub370\uc774\ud130\ub294 (128,1,28,28) \ud615\ud0dc\ub85c 149\uac1c\ub85c \ubd84\ub9ac\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \ud14c\uc2a4\ud2b8 \ub370\uc774\ud130 \uc5ed\uc2dc \ub9c8\ucc2c\uac00\uc9c0\uc785\ub2c8\ub2e4. 128\uc740 \ubc30\uce58\uc0ac\uc774\uc988, 1\uc740 \ucc44\ub110 \uc0ac\uc774\uc988, (28*28)\uc740 \uc774\ubbf8\uc9c0\uc758 \ud06c\uae30\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ubcf8 \ud14c\uc2a4\ud2b8\uc5d0\uc11c\ub294 \uc804\uccb4 149\uac1c \ub370\uc774\ud130\ub97c \ubaa8\ub450 \ud559\uc2b5\ud558\uc9c0 \uc54a\uace0 1\uc138\ud2b8\ub9cc 301\ud68c \ud559\uc2b5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \ub354 \ub192\uc740 \uc815\ud655\ub3c4 \uc5bb\uace0\uc790 \ud558\uc2dc\ub294 \ubd84\uc740 \uc804\uccb4 \ub370\uc774\ud130\ub97c \ud1b5\ud574 \ub354 \ub9ce\uc740 \ud559\uc2b5\uc744 \ud574\ubcf4\uc2dc\uae30 \ubc14\ub78d\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=\"\">dataset = next(iter(train_loader)) # \ud559\uc2b5 \ub370\uc774\ud130\nx_data = dataset[0] # x \ub370\uc774\ud130\ny_data = dataset[1] # label \ub370\uc774\ud130\n\ndataset = next(iter(test_loader)) # \uac80\uc99d \ub370\uc774\ud130\nx_test = dataset[0].to(DEVICE) # x \ub370\uc774\ud130\ny_test = dataset[1].to(DEVICE) # label \ub370\uc774\ud130<\/pre>\n\n\n\n<p>\uac01 \ub370\uc774\ud130 \uc14b\uc5d0 \uc5b4\ub5a4 \uc774\ubbf8\uc9c0\uac00 \uc788\ub294\uc9c0 \ud655\uc778\ud574\ubcf4\uae30 \uc704\ud574\uc11c \uc544\ub798\uc640 \uac19\uc740 \ucf54\ub4dc\ub97c \uc218\ud589\ud569\ub2c8\ub2e4. MNIST \ub370\uc774\ud130 \uc14b\uc740 \ub3d9\uc77c\ud55c \ud06c\uae30\uc758 \uc190\uae00\uc528 \uc774\ubbf8\uc9c0\uac00 \ub4e4\uc5b4\uc788\uae30 \ub54c\ubb38\uc5d0 \uac01\uac01\uc758 \uc774\ubbf8\uc9c0\ub97c \ud45c\uc2dc\ud574\ubcf4\uba74 0-9\uae4c\uc9c0\uc758 \uc190\uae00\uc528 \uc774\ubbf8\uc9c0\uac00 \uc800\uc7a5\ub418\uc5b4 \uc788\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<br>\uc544\ub798\uc640 \uac19\uc774 0\ubc88\uc9f8 \ubc30\uc5f4\uc5d0 \uc22b\uc790 5\uac00 \uc788\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\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=\"\">plt.imshow(x_data[0,0,:])<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"251\" height=\"248\" src=\"http:\/\/cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/download.png\" alt=\"\" class=\"wp-image-353\" srcset=\"http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/download.png 251w, http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/download-100x100.png 100w\" sizes=\"(max-width: 251px) 100vw, 251px\" \/><\/figure>\n\n\n\n<p>\ucc38\uace0\ub85c CNN\uc758 \uc785\ub825 \ub370\uc774\ud130\uc758 Shape\uc740 \uc544\ub798\uc758 \uadf8\ub9bc\uacfc \uac19\uc2b5\ub2c8\ub2e4. \uc785\ub825 \ub370\uc774\ud130\ub294 4\uac1c\uc758 \ucc28\uc6d0\uc73c\ub85c \uad6c\uc131\ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. \uac00\uc7a5 \uba3c\uc800\ub294 Batch_Size\ub85c \ud574\ub2f9 \uc774\ubbf8\uc9c0\uc758 \uac2f\uc218\ub97c \uc758\ubbf8\ud569\ub2c8\ub2e4. \ub2e4\uc74c\uc5d0 \ub098\uc624\ub294 \uac83\uc740 \uc774\ubbf8\uc9c0\uc758 Channel\uc785\ub2c8\ub2e4. 3\uc778\uacbd\uc6b0\ub294 RGB \uac12\uc744 \uac00\uc9c0\uace0 1\uc778 \uacbd\uc6b0\ub294 \ub300\ubd80\ubd84 \ub2e8\uc77c \uc0c9\uc0c1\uc73c\ub85c \ud45c\ud604\ud558\ub294 \uac12\uc785\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub098\uc624\ub294 \uac12\uc740 Height, Width \uac12\uc785\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub7f0 \uc0c1\ud0dc\uc5d0\uc11c [0,0,:]\uc758 \uc758\ubbf8\ub294 0\ubc88\uc9f8 \uc774\ubbf8\uc9c0\uc5d0\uc11c \uccab\ubc88\uc9f8 \ucc44\ub110\uc758 \uc774\ubbf8\uc9c0 \ub370\uc774\ud130\ub97c \uac00\uc9c0\uace0 \uc628\ub2e4\ub294 \uc758\ubbf8\uac00 \ub429\ub2c8\ub2e4.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"1024\" height=\"885\" src=\"http:\/\/cedartrees.co.kr\/wp-content\/uploads\/2021\/02\/KakaoTalk_Photo_2021-02-08-22-54-52-1024x885.jpeg\" alt=\"\" class=\"wp-image-844\" srcset=\"http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2021\/02\/KakaoTalk_Photo_2021-02-08-22-54-52-1024x885.jpeg 1024w, http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2021\/02\/KakaoTalk_Photo_2021-02-08-22-54-52-300x259.jpeg 300w, http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2021\/02\/KakaoTalk_Photo_2021-02-08-22-54-52-768x664.jpeg 768w, http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2021\/02\/KakaoTalk_Photo_2021-02-08-22-54-52.jpeg 1089w\" sizes=\"(max-width: 706px) 89vw, (max-width: 767px) 82vw, 740px\" \/><\/figure><\/div>\n\n\n\n<p>\uc774\uc81c \ud559\uc2b5\uc744 \uc704\ud55c \ubaa8\ub378\uc744 \uad6c\uc131\ud569\ub2c8\ub2e4. \ubcf8 \ubaa8\ub378\uc744 \ud06c\uac8c \ub450\ubd80\ubd84\uc73c\ub85c \ub418\uc5b4 \uc788\uc2b5\ub2c8\ub2e4. self.convs\ub294 convolution\uc744 \uc218\ud589\ud558\ub294 \ubd80\ubd84\uc73c\ub85c \uc6d0\ubcf8 \uc774\ubbf8\uc9c0\uc5d0\uc11c \ud2b9\uc9d5\uc815\ubcf4\ub97c \ucd94\ucd9c\ud558\ub294 \ubd80\ubd84\uc785\ub2c8\ub2e4. \uc774\ub54c \uc911\uc694\ud55c \uac83\uc740 \uac01 Conv2d\ub97c \uc218\ud589\ud558\uba70 \uc5b4\ub5a4 \ud615\ud0dc\uc758 \uc544\uc6c3\ud48b\uc774 \ub098\uc624\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774 \uc911\uc694\ud569\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc608\ub97c \ub4e4\uc5b4 28*28 \uc774\ubbf8\uc9c0\ub97c kernel_size 3\uc73c\ub85c \uacc4\uc0b0\ud558\uba74 \ucd9c\ub825\ub418\ub294 \uc774\ubbf8\uc9c0 \uc0ac\uc774\uc988\ub294 (26*26)\uc785\ub2c8\ub2e4. \uc5b4\ub5bb\uac8c \uc774\ub807\uac8c \ub098\uc624\ub294\uc9c0\ub294 \uc544\ub798 \uc2dd\uc5d0\uc11c \ud655\uc778\ud558\uc2e4 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"717\" height=\"267\" src=\"http:\/\/cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-08-11-\u110b\u1169\u1112\u116e-12.10.49.png\" alt=\"\" class=\"wp-image-357\" srcset=\"http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-08-11-\u110b\u1169\u1112\u116e-12.10.49.png 717w, http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/\u1109\u1173\u110f\u1173\u1105\u1175\u11ab\u1109\u1163\u11ba-2020-08-11-\u110b\u1169\u1112\u116e-12.10.49-300x112.png 300w\" sizes=\"(max-width: 717px) 100vw, 717px\" \/><figcaption><a href=\"https:\/\/pytorch.org\/docs\/stable\/generated\/torch.nn.Conv2d.html\">https:\/\/pytorch.org\/docs\/stable\/generated\/torch.nn.Conv2d.html<\/a><\/figcaption><\/figure>\n\n\n\n<p>\ud558\uc9c0\ub9cc \ub9e4\ubc88 \uc704\uc758 \uc2dd\uc744 \ud1b5\ud574\uc11c \uacc4\uc0b0\ud558\ub294 \uac83\uc740 \uc880 \uadc0\ucc2e\uace0 \ud798\ub4e0 \uc785\ub2c8\ub2e4. \uc704\uc758 \uacf5\uc2dd\uc744 \uac04\ub2e8\ud55c \ud568\uc218\ub85c \uad6c\ud604\ud55c \ub0b4\uc6a9\uc744 \uacf5\uc720\ud574\ub4dc\ub9bd\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=\"\">def conv_output_shape(h_w, kernel_size=1, stride=1, pad=0, dilation=1):\n    from math import floor\n    if type(kernel_size) is not tuple:\n        kernel_size = (kernel_size, kernel_size)\n    h = floor( ((h_w[0] + (2 * pad) - ( dilation * (kernel_size[0] - 1) ) - 1 )\/ stride) + 1)\n    w = floor( ((h_w[1] + (2 * pad) - ( dilation * (kernel_size[1] - 1) ) - 1 )\/ stride) + 1)\n    return h, w<\/pre>\n\n\n\n<p>\uc704\uc640 \uac19\uc740 \uc2dd\uc744 \uac70\uccd0\uc11c self.convs \ub808\uc774\uc5b4\uc758 \ucd5c\uc885 output_shape\uc740 \ucd1d 5*5 \uc774\ubbf8\uc9c0 \uc0ac\uc774\uc988\ub97c \uac00\uc9c4 40\uc7a5\uc758 \uc774\ubbf8\uc9c0 \ub370\uc774\ud130\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uc774\ub807\uac8c \uc5bb\uc740 \ub370\uc774\ud130\ub294 self.layers\ub97c \uac70\uce58\ub2e4 \ubcf4\uba74 \ucd5c\uc885 0~9\uae4c\uc9c0\uc758 \uc22b\uc790 \uc815\ubcf4\ub97c \uc5bb\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p><span class=\"has-inline-color has-vivid-cyan-blue-color\">PyTorch\uc758 Conv2d \ud328\ud0a4\uc9c0\ub294 \ud504\ub85c\uadf8\ub798\uba38\uac00 \uac04\ub2e8\ud788 Convolution Layer\ub97c \uad6c\uc131\ud560 \uc218 \uc788\ub3c4\ub85d \ud574\uc90d\ub2c8\ub2e4. \ud504\ub85c\uadf8\ub798\uba38\ub294 \uac04\ub2e8\ud788 \uc785\ub825 \ucc44\ub110\uc758 \uc218\uc640 \ucd9c\ub825 \ucc44\ub110\uc758 \uc218 \uadf8\ub9ac\uace0 \ucee4\ub110 \uc0ac\uc774\uc988\uc640 \uc2a4\ud2b8\ub77c\uc774\ub4dc \uc815\ubcf4\ub9cc \ub9de\ucdb0\uc8fc\uba74 \uc790\ub3d9\uc73c\ub85c \uc774\ubbf8\uc9c0\ub97c \uad6c\uc131\ud574\uc90d\ub2c8\ub2e4. <\/span><\/p>\n\n\n\n<p><span class=\"has-inline-color has-vivid-cyan-blue-color\">\uc544\ub798\uc758 \uacbd\uc6b0\ub294 \ucd5c\ucd08 28\u00d728 \uc774\ubbf8\uc9c0\ub97c \uc785\ub825\ud558\uace0 \ucee4\ub110\uc744 3\uc73c\ub85c \ub9de\ucdb0\uc11c \uc55e\uc120 \ud568\uc218\ub97c \ud1b5\ud574\uc11c \ucd9c\ub825 shape\uc744 \ubcf4\uba74 26\u00d726\uc758 \uc774\ubbf8\uc9c0\ub97c \ucd9c\ub825\ud55c\ub2e4\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610 \ub2e4\uc74c \ub808\uc774\uc5b4\ub294 \ucee4\ub110\uc744 3, \uc2a4\ud2b8\ub77c\uc774\ub4dc\ub97c 2\ub85c \uc815\uc758\ud558\uace0 \uc774\uc804\uc5d0 \uc785\ub825\ub41c \uc774\ubbf8\uc9c0\uc758 \ud06c\uae30\ub97c \uc785\ub825\ud558\uba74 \ucd9c\ub825 \uc774\ubbf8\uc9c0\ub294 12\u00d712\ub85c \ud45c\uc2dc\ub418\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \ubc29\ubc95\uc73c\ub85c \ub9c8\uc9c0\ub9c9 \uc774\ubbf8\uc9c0\uac00 \ucd9c\ub825\ub418\ub294 \ud06c\uae30\ub294 5\u00d75\uc758 \uc774\ubbf8\uc9c0\uac00 \ub429\ub2c8\ub2e4.<\/span><\/p>\n\n\n\n<p><span class=\"has-inline-color has-vivid-cyan-blue-color\">\uadf8\ub807\uac8c \ub418\uba74 \ub9c8\uc9c0\ub9c9\uc758 fully-connected layer\uc5d0 \ub4e4\uc5b4\uac00\ub294 \uac12\uc740 40\u00d75\u00d75\uc758 \uc785\ub825 \uac12\uc774 \ub429\ub2c8\ub2e4. \uadf8\ub9ac\uace0 \ub9e8 \ub9c8\uc9c0\ub9c9\uae4c\uc9c0 Linear Layer\ub97c \uac70\uce58\uac8c \ub418\uba74 10\uac1c\uc758 \uac12\uc73c\ub85c \ucd9c\ub825\ub418\uace0 \uc774\uc5d0 Softmax\ub97c \ucde8\ud558\uba74 0-9 \uc911\uc5d0 \ud558\ub098\uc758 \uac12\uc744 \uc608\uce21\ud558\uac8c \ub429\ub2c8\ub2e4.<\/span><\/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 Net(nn.Module):\n    def __init__(self):\n        super(Net, self).__init__()\n        \n        self.convs = nn.Sequential(\n            nn.Conv2d(1, 10, kernel_size=3), # input_channel, output_channel, kernel_size\n            nn.ReLU(),\n            nn.BatchNorm2d(10),\n            nn.Conv2d(10, 20, kernel_size=3, stride=2),\n            nn.ReLU(),\n            nn.BatchNorm2d(20),\n            nn.Conv2d(20, 40, kernel_size=3, stride=2)\n        )\n        \n        self.layers = nn.Sequential(\n            nn.Linear(40*5*5, 500),\n            nn.ReLU(),\n            nn.BatchNorm1d(500),\n            nn.Linear(500,250),\n            nn.Linear(250,100),\n            nn.ReLU(),\n            nn.BatchNorm1d(100),\n            nn.Linear(100,50),\n            nn.Linear(50, 10),\n            nn.Softmax(dim=-1)\n        )\n\n    def forward(self, x):\n        x = self.convs(x)\n        x = x.view(-1, 40*5*5)\n        return self.layers(x)\n    \ncnn = Net().to(DEVICE)<\/pre>\n\n\n\n<p>\uc774\uc81c \ud559\uc2b5\uc744 \uc704\ud55c \ubaa8\ub4e0 \uc900\ube44\uac00 \uc644\ub8cc\ub418\uc5c8\uace0 \uc544\ub798\uc640 \uac19\uc774 \ud559\uc2b5\uc744 \uc218\ud589\ud569\ub2c8\ub2e4. \uc608\uc81c\uc5d0\uc11c\ub294 \uac04\ub2e8\ud788 301\ud68c \ud559\uc2b5\uc744 \uc218\ud589\ud588\uc2b5\ub2c8\ub2e4. \ud559\uc2b5\uc774 \uc9c4\ud589\ub418\uba74\uc11c loss\uc640 accuracy \uc815\ubcf4\uc758 \ubcc0\ud654\ub97c \uae30\ub85d\ud558\uae30 \uc704\ud574\uc11c list \ubcc0\uc218\ub97c \uac01\uac01 \uc120\uc5b8\ud574\uc90d\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\ub610 100\ud68c \ud559\uc2b5\uc774 \uc644\ub8cc\ub420 \ub54c\ub9c8\ub2e4 \ubcc0\ud654\ub418\ub294 loss\uc640 accuracy \uac12\uc744 \ud654\uba74\uc5d0 \ucd9c\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=\"\">optimizer = optim.Adam(cnn.parameters())\ncriterion = nn.CrossEntropyLoss()\n\nhist_loss = []\nhist_accr = []\n\nepochs = 301\nfor epoch in range(epochs):\n    cnn.train()\n    output = cnn(x_data)\n    loss = criterion(output, y_data)\n    \n    predict = torch.argmax(output, dim=-1) == y_data\n    accuracy = predict.float().mean().item()\n    \n    optimizer.zero_grad()\n    loss.backward()\n    optimizer.step()\n    \n    hist_loss.append(loss)\n    hist_accr.append(accuracy)\n    \n    if epoch % 100 == 0:\n        print('epoch{}, {:.5f}, {:.5f}'.format(epoch, loss.item(), accuracy))<\/pre>\n\n\n\n<p>\ud559\uc2b5\uc774 \uc644\ub8cc\ub418\uace0 loss\uc640 accuracy \uac12\uc744 \uadf8\ub798\ud504\ub85c \uadf8\ub824\uc90d\ub2c8\ub2e4.<br>\uadf8\ub798\ud504\ub97c \ubcf4\ub2c8 \ud559\uc2b5\uc758 \uace1\uc120\uc774 \uc644\ub9cc\ud558\uac8c \ub0b4\ub824\uac00\uace0 \uc815\ud655\ub3c4\ub294 1\uc5d0 \uac00\uae4c\uc6b4 \uac12\uc744 \ub098\ud0c0\ub0b4\uc5b4 \ud559\uc2b5\uc774 \uc798\uc774\ub904\uc9c0\ub294 \uac83\uc744 \ud655\uc778\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<p>\uadf8\ub7ec\ub098 training \ub370\uc774\ud130\ub97c \ud1b5\ud55c \ud559\uc2b5\uc815\ud655\ub3c4\uc774\uae30 \ub54c\ubb38\uc5d0 \uac80\uc99d\uc6a9 \ub370\uc774\ud130\ub97c \ud1b5\ud574\uc11c \uc815\ud655\ub3c4 \uacc4\uc0b0\uc744 \ub2e4\uc2dc \ud560 \ud544\uc694\uac00 \uc788\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=\"\">fig, ax = plt.subplots(2,1)\nfig.set_size_inches((12,8))\n\nax[0].set_title('Loss')\nax[0].plot(hist_loss, color='red')\nax[0].set_ylabel('Loss')\nax[1].set_title('Accuracy')\nax[1].plot(hist_accr, color='blue')\nax[1].set_ylabel('Accuracy')\nax[1].set_xlabel('Epochs')<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"721\" height=\"496\" src=\"http:\/\/cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/download-1.png\" alt=\"\" class=\"wp-image-354\" srcset=\"http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/download-1.png 721w, http:\/\/blog.cedartrees.co.kr\/wp-content\/uploads\/2020\/08\/download-1-300x206.png 300w\" sizes=\"(max-width: 721px) 100vw, 721px\" \/><\/figure>\n\n\n\n<p>\uac80\uc99d\uc6a9 \ub370\uc774\ud130\uc14b(test_dataloader)\ub97c \ud1b5\ud574\uc11c \ud55c \ubc30\uce58 \uc815\ubcf4\ub97c \uc5bb\uc5b4\uc11c \ubc29\uae08 \uc218\ud589\ud55c \ubaa8\ub378\uc758 \uc815\ud655\ub3c4\ub97c \ud14c\uc2a4\ud2b8\ud574\ubd05\ub2c8\ub2e4. \ud14c\uc2a4\ud2b8 \uacb0\uacfc 0.7109375 \uac12\uc744 \uc5bb\uc744 \uc218 \uc788\uc5c8\uc2b5\ub2c8\ub2e4. \ub192\uc740 \uac12\uc740 \uc544\ub2c8\uc9c0\ub9cc \uc804\uccb4 469\uac1c \ubbf8\ub2c8\ubc30\uce58 \uc911\uc5d0\uc11c 1\uac1c \ub370\uc774\ud130\uc14b\ub9cc \ud14c\uc2a4\ud2b8 \ud588\uae30 \ub54c\ubb38\uc5d0 \uc804\uccb4 \ub370\uc774\ud130\ub97c \ub300\uc0c1\uc73c\ub85c \ud14c\uc2a4\ud2b8\ud558\uba74 \ubcf4\ub2e4 \ub192\uc740 \uc815\ud655\ub3c4\ub97c \uc5bb\uc744 \uc218 \uc788\uc744 \uac83\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=\"\">cnn.eval()\n\nwith torch.no_grad():\n    output = cnn(x_test)\n    loss = criterion(output, y_test)\n    \n    predict = torch.argmax(output, dim=-1) == y_test\n    accuracy =  predict.float().mean().item()\n    \n    print(accuracy)<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>CNN \uc54c\uace0\ub9ac\uc998\uc744 MNIST \ub370\uc774\ud130\uc14b\uc744 \ud65c\uc6a9\ud574\uc11c \ud14c\uc2a4\ud2b8\ud574\ubd05\ub2c8\ub2e4. CNN \uc54c\uace0\ub9ac\uc998\uc5d0 \ub300\ud55c \ub2e4\uc591\ud55c \ub9ce\uc740 \uc124\uba85\uc774 \uc788\uc73c\ub2c8 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc544\ub798\uc758 \uac15\uc758\ub97c \ucc38\uace0\ud558\uc2dc\uae30 \ubc14\ub78d\ub2c8\ub2e4. \ube44\ub85d \uc791\uc740 \ubd80\ubd84\uc758 \ucc28\uc774\ub4e4\uc740 \uc788\uc744 \uc218 \uc788\uc9c0\ub9cc \ubcf8 \uc608\uc81c \uc5ed\uc2dc \uc778\ud130\ub137\uc5d0 \ub9ce\uc740 \uc18c\uc2a4 \ucf54\ub4dc\uc640 \ub2e4\ub974\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ub2e8, \uc544\ub798\uc758 \uc601\uc0c1\uc740 \ud150\uc11c\ud50c\ub85c\uc6b0\ub85c \uc124\uba85\ud558\ub294 \uc601\uc0c1\uc774\uc9c0\ub9cc \ubcf8 \uc608\uc81c\ub294 \ud30c\uc774\ud1a0\uce58\ub85c \uad6c\ud604\ub418\uc5b4 \uc788\uc73c\uba70 \ud559\uc2b5\ub3c4 \uc804\uccb4 \ub370\uc774\ud130\ub97c \ub300\uc0c1\uc73c\ub85c \ud558\uc9c0 \uc54a\uace0 \uccab\ubc88\uc9f8 \ubbf8\ub2c8\ubc30\uce58\ub9cc \ud559\uc2b5\ud558\ub294 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/blog.cedartrees.co.kr\/index.php\/2020\/08\/11\/cnn-mnist-dataset\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;CNN MNIST \ud14c\uc2a4\ud2b8 (PyTorch)&#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":[41,14],"tags":[37,58,38,61,55],"_links":{"self":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/347"}],"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=347"}],"version-history":[{"count":9,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/347\/revisions"}],"predecessor-version":[{"id":845,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/posts\/347\/revisions\/845"}],"wp:attachment":[{"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/media?parent=347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/categories?post=347"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.cedartrees.co.kr\/index.php\/wp-json\/wp\/v2\/tags?post=347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}