{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 06wk-1: 합성곱 신경망 (2) – MNIST, Fashion MNIST, ImageNet, CIFAR10\n",
"\n",
"최규빈 \n",
"2024-04-08\n",
"\n",
"
\n",
"\n",
"# 1. 강의영상\n",
"\n",
"\n",
"\n",
"# 2. Imports"
],
"id": "ef6760d2-a40a-4492-a645-2d884819caee"
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"import torch\n",
"import torchvision\n",
"import matplotlib.pyplot as plt\n",
"import pandas as pd\n",
"import numpy as np\n",
"import fastai.vision.all "
],
"id": "66839c05-69cf-4da5-b8a8-861e89481e52"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 3. torch.eigensum\n",
"\n",
"## A. transpose"
],
"id": "198b5cf0-e05a-4b5f-987b-bd010fdfe9b3"
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"tsr = torch.arange(12).reshape(4,3)\n",
"tsr"
],
"id": "fa3d65ef-9547-4b80-96c1-442457d0e23a"
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"tsr.t()"
],
"id": "01bb899f-b74e-4754-93d3-df0be29348d8"
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.einsum('ij->ji',tsr)"
],
"id": "18265793-22d8-4daa-9164-58d3f656e9cc"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## B. 행렬곱"
],
"id": "eb379850-8bfb-4ff4-811d-6120dd626c88"
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"tsr1 = torch.arange(12).reshape(4,3).float()\n",
"tsr2 = torch.arange(15).reshape(3,5).float()"
],
"id": "87678d33-7443-430a-bb1b-8969b398c792"
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"tsr1.shape"
],
"id": "701aaf62-9245-44e0-8c5b-a82726e2ddaf"
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"tsr2.shape"
],
"id": "3efc65bc-8115-4304-a74a-add116f4ca1c"
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"tsr1 @ tsr2"
],
"id": "07a4f7c8-d189-4f1e-afdd-f04c3e15a3e1"
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torch.einsum('ij,jk -> ik',tsr1,tsr2) "
],
"id": "0b01990c-424f-49ec-8c53-22d9fde57c88"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## C. 이미지변환"
],
"id": "d68f80c6-5a70-4658-b4c8-17f70e36411f"
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"r = torch.zeros(16).reshape(4,4) + 1.0\n",
"g = torch.zeros(16).reshape(4,4)\n",
"b = torch.zeros(16).reshape(4,4)\n",
"img_plt = torch.stack([r,g,b],axis=-1) # matplotlib 를 쓰기 위해서는 이미지가 이렇게 저장되어있어야한다. \n",
"img_torch = torch.stack([r,g,b],axis=0).reshape(1,3,4,4) # torch를 쓰기 위해서는 이미지가 이렇게 저장되어있어야한다. "
],
"id": "fb252af0-eed5-493c-81e1-1cc245b4003b"
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"img_plt.shape, img_torch.shape"
],
"id": "5573c8b5-5e5f-4eaf-8e32-68aa109c63b5"
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "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\nWJLh/+Oml49fS5b9jqW3uWO56L3+n1/2kgTuvfdeM2XKFNPY2GgaGxvNjTfeaO67776oNXl5eWb9\n+vXGGGNOnjxpfvzjH5sdO3aYtrY2s23bNuP1es13vvMdEwqFHJlx3bp1JiUlxaxatcrs27fPLFq0\nyFxxxRXm0KFDxhhjnnrqKVNeXh5Z/9lnn5nLL7/cLF682Ozbt8+sWrXKpKSkmHfeeceR+eI5+29/\n+1uzYcMG8/e//9387W9/M0899ZSRZHw+X0LnPnnypGlpaTEtLS1GkvnNb35jWlpazOeffx5z7mTZ\n8/7OnQz7/cQTTxiPx2P8fr/p7OyMHF9//XVkTbLu98XMngx7Xl1dbRoaGkxbW5vZs2ePWbp0qbns\nssvM1q1bY86cLPvd37njudeDInjHjh0zDz/8sBk+fLgZPny4efjhh7u9hFWSWb16tTHGmK+//tqU\nlJSYq6++2qSkpJjx48ebiooK097e7uicr7zyisnJyTGpqanm5ptvjnrZc0VFhbnzzjuj1vv9fjN1\n6lSTmppqcnNzTW1traPz9aY/s//iF78w3/3ud01aWpq56qqrzB133GE2bdqU8JnPvZz5/KOioiLm\n3MYkx573d+5k2O9Y8/73v3Ox5jYmOfb7YmZPhj3/wQ9+EPl38uqrrzbFxcWRaMSa2Zjk2O/+zh3P\nvebjgQAAVhjwb0sAAKAvCB4AwAoEDwBgBYIHALACwQMAWIHgAQCsQPAAAFYgeAAAKxA8AIAVCB4A\nwAoEDwBghf8H6k1NGUu6YJ4AAAAASUVORK5CYII=\n"
}
}
],
"source": [
"plt.imshow(img_plt)"
],
"id": "d8248398-ed82-4409-9cd4-ed9e28514d1b"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"만약에 `img_torch`를 matplotlib 으로 보고싶다면?"
],
"id": "1aec59d2-cbf3-43d4-9a17-2151a723c092"
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "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\n9eqo+x9//HEzceLEiGOPPvqoyc/Pd2zGrvR29j179hhJ5tSpU30wXc9IMtu2bet2Tzxd84t6Mnc8\nXu/29nYjyVRXV3e5Jx6vtzE9mz0er7kxxlx//fXmtddei/q1eL3exnQ/dyyvdb9/hldbWyuPx6M7\n7rgjfCw/P18ej0d79+7t9ly/36+UlBTddNNNeuSRR9Te3u7IjB0dHdq/f78KCwsjjhcWFnY5Y21t\nbaf9c+bMUX19vc6dO+fInNFcyewX9eZjnuJBvFzzKxVP1/vi51IOHz68yz3xer17MvtF8XLNe/Lx\na/F4vZ362Liu9PvgtbW1KSUlpdPxlJQUtbW1dXleUVGR3nzzTX3wwQf63e9+p3379mn27Nm9+ns+\ne+rEiRO6cOGCUlNTI46npqZ2OWNbW1vU/efPn9eJEydiPmNXrmT2tLQ0rV+/Xj6fT1u3blVWVpYK\nCgpUU1PTFyNfsXi55r0Vb9fbGKOysjJNnz5dkydP7nJfPF7vns4eL9f80KFDuu666+R2u7V48WJt\n27Yt6ifRSPF1vXszdyyvteMfD3SlnnrqKT399NPd7tm3b58kyeVydfqaMSbq8YsWLlwY/ufJkycr\nLy9PGRkZ2rFjh+65554rnLp7l85zuRmj7Y92vC/0ZvYr+ZineBFP17yn4u16L126VAcPHtRHH310\n2b3xdr17Onu8XPPefPyaFD/X2+mPjetK3AZv6dKluu+++7rdk5mZqYMHD+rLL7/s9LWvvvqq03/N\ndCctLU0ZGRmOfBTRyJEjNWjQoE7PiNrb27uccfTo0VH3Dx48WCNGjIj5jF25ktmjyc/P1+bNm2M9\nXkzFyzWPhat1vZctW6bt27erpqZGY8eO7XZvvF3v3swezdW45hc/fk2S8vLytG/fPr344ot69dVX\nO+2Np+vdm7mjudJrHbfBGzlypEaOHHnZfV6vV4FAQJ988oluv/12SdLHH3+sQCCgadOm9fjxTp48\nqZaWFkc+iigxMVG5ubmqqqrS3XffHT5eVVWl+fPnRz3H6/Xqvffeizi2e/du5eXlKSEhIeYzduVK\nZo+mP3zMU7xc81jo6+ttjNGyZcu0bds2+f1+jR8//rLnxMv1vpLZo4mH/4+bbj5+LV6udzTdzR3N\nFV/r7/22lzgwd+5cM2XKFFNbW2tqa2vNLbfcYu66666IPVlZWWbr1q3GGGPOnDljfvGLX5i9e/ea\npqYms2fPHuP1es0Pf/hDEwwGHZlxy5YtJiEhwWzYsMEcPnzYrFixwvzgBz8wn3/+uTHGmNWrV5uS\nkpLw/s8++8xce+21ZuXKlebw4cNmw4YNJiEhwbzzzjuOzBfL2X//+9+bbdu2mX/+85/mH//4h1m9\nerWRZHw+X5/OfebMGdPQ0GAaGhqMJPPCCy+YhoYG88UXX0SdO16ueW/njofr/dhjjxmPx2P8fr9p\nbW0Nr2+++Sa8J16v95XMHg/XvLy83NTU1JimpiZz8OBBs2bNGnPNNdeY3bt3R505Xq53b+eO5bUe\nEME7efKkeeCBB8zQoUPN0KFDzQMPPNDpLaySzMaNG40xxnzzzTemsLDQjBo1yiQkJJhx48aZ0tJS\n09zc7OicL7/8ssnIyDCJiYnm1ltvjXjbc2lpqZk1a1bEfr/fb3JyckxiYqLJzMw0lZWVjs7Xnd7M\n/pvf/Mb86Ec/MklJSeb6668306dPNzt27OjzmS++nfnSVVpaGnVuY+Ljmvd27ni43tHm/f//zkWb\n25j4uN5XMns8XPOHHnoo/O/kqFGjTEFBQTga0WY2Jj6ud2/njuW15uOBAABW6Pe/lgAAQE8QPACA\nFQgeAMAKBA8AYAWCBwCwAsEDAFiB4AEArEDwAABWIHgAACsQPACAFQgeAMAK/wsu1PqVdaIaFAAA\nAABJRU5ErkJggg==\n"
}
}
],
"source": [
"# 잘못된코드\n",
"plt.imshow(img_torch.reshape(4,4,3))"
],
"id": "d47a8100-0d28-452d-a649-5933d86aa57c"
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "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\nWJLh/+Oml49fS5b9jqW3uWO56L3+n1/2kgTuvfdeM2XKFNPY2GgaGxvNjTfeaO67776oNXl5eWb9\n+vXGGGNOnjxpfvzjH5sdO3aYtrY2s23bNuP1es13vvMdEwqFHJlx3bp1JiUlxaxatcrs27fPLFq0\nyFxxxRXm0KFDxhhjnnrqKVNeXh5Z/9lnn5nLL7/cLF682Ozbt8+sWrXKpKSkmHfeeceR+eI5+29/\n+1uzYcMG8/e//9387W9/M0899ZSRZHw+X0LnPnnypGlpaTEtLS1GkvnNb35jWlpazOeffx5z7mTZ\n8/7OnQz7/cQTTxiPx2P8fr/p7OyMHF9//XVkTbLu98XMngx7Xl1dbRoaGkxbW5vZs2ePWbp0qbns\nssvM1q1bY86cLPvd37njudeDInjHjh0zDz/8sBk+fLgZPny4efjhh7u9hFWSWb16tTHGmK+//tqU\nlJSYq6++2qSkpJjx48ebiooK097e7uicr7zyisnJyTGpqanm5ptvjnrZc0VFhbnzzjuj1vv9fjN1\n6lSTmppqcnNzTW1traPz9aY/s//iF78w3/3ud01aWpq56qqrzB133GE2bdqU8JnPvZz5/KOioiLm\n3MYkx573d+5k2O9Y8/73v3Ox5jYmOfb7YmZPhj3/wQ9+EPl38uqrrzbFxcWRaMSa2Zjk2O/+zh3P\nvebjgQAAVhjwb0sAAKAvCB4AwAoEDwBgBYIHALACwQMAWIHgAQCsQPAAAFYgeAAAKxA8AIAVCB4A\nwAoEDwBghf8H6k1NGUu6YJ4AAAAASUVORK5CYII=\n"
}
}
],
"source": [
"# 올바른코드\n",
"plt.imshow(torch.einsum('ocij -> ijc',img_torch))"
],
"id": "d95e2996-aa45-4b1d-a415-6626f0bb3ff9"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 4. MNIST – 직접설계"
],
"id": "f97d0609-5ddc-4953-88e0-96b06fcd2d33"
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"path = fastai.data.external.untar_data(fastai.data.external.URLs.MNIST)\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/1').ls()])\n",
"X2 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'training/2').ls()])\n",
"X = torch.concat([X0,X1,X2])/255\n",
"y = torch.nn.functional.one_hot(torch.tensor([0]*len(X0) + [1]*len(X1) + [2]*len(X2))).float()\n",
"X0 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'testing/0').ls()])\n",
"X1 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'testing/1').ls()])\n",
"X2 = torch.stack([torchvision.io.read_image(str(fname)) for fname in (path/'testing/2').ls()])\n",
"XX = torch.concat([X0,X1,X2])/255\n",
"yy = torch.nn.functional.one_hot(torch.tensor([0]*len(X0) + [1]*len(X1) + [2]*len(X2))).float()"
],
"id": "84efbf3a-ab82-4e99-9bd1-f908a2da2919"
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([18623, 1, 28, 28]) torch.float32\n",
"torch.Size([18623, 3]) torch.float32\n",
"torch.Size([3147, 1, 28, 28]) torch.float32\n",
"torch.Size([3147, 3]) torch.float32"
]
}
],
"source": [
"print(X.shape,'\\t',X.dtype)\n",
"print(y.shape,'\\t\\t\\t',y.dtype)\n",
"print(XX.shape,'\\t',XX.dtype)\n",
"print(yy.shape,'\\t\\t\\t',yy.dtype)"
],
"id": "d8912eed-0678-4f17-8ceb-e15fb1e50f84"
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "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\n9X0IBoN3dV2P+3UcAKDvIIQAAGYyKoT8fr/WrFkjv99v3Yop7kMn7kMn7kMn7kOnTLsPPe6NCQCA\nviOjVkIAgN6FEAIAmCGEAABmCCEAgJmMCqE33nhDBQUFeuCBBzR+/HgdOXLEuqX7qry8XD6fL2GE\nQiHrttLu8OHDmjNnjiKRiHw+n3bv3p1w3jmn8vJyRSIRDR48WNOnT9epU6dsmk2jL7oPixcv7jI/\nJk+ebNNsmlRUVGjixIkKBALKycnR3Llzdfr06YRr+sJ8uJv7kCnzIWNCaMeOHVq1apVWr16tEydO\n6Mknn1RxcbHOnTtn3dp9NXr0aDU1NcXHyZMnrVtKu8uXL2vcuHGqrKzs9vy6deu0fv16VVZW6tix\nYwqFQpo1a1av24fwi+6DJM2ePTthfuzbt+8+dph+NTU1Wr58uY4ePaqqqip1dHSoqKhIly9fjl/T\nF+bD3dwHKUPmg8sQ3/rWt9zSpUsTjn3ta19zP/3pT406uv/WrFnjxo0bZ92GKUlu165d8cc3btxw\noVDIvfLKK/Fjn3/+uQsGg+53v/udQYf3x633wTnnSkpK3NNPP23Sj5WWlhYnydXU1Djn+u58uPU+\nOJc58yEjVkLXrl1TXV2dioqKEo4XFRWptrbWqCsb9fX1ikQiKigo0DPPPKMzZ85Yt2SqoaFBzc3N\nCXPD7/dr2rRpfW5uSFJ1dbVycnI0atQoLVmyRC0tLdYtpVU0GpUkZWdnS+q78+HW+3BTJsyHjAih\nCxcu6Pr168rNzU04npubq+bmZqOu7r9JkyZpy5Yt2r9/vzZu3Kjm5mYVFhaqtbXVujUzN//79/W5\nIUnFxcXaunWrDh48qNdee03Hjh3TzJkz1d7ebt1aWjjnVFpaqieeeEJjxoyR1DfnQ3f3Qcqc+dDj\ndtG+k1v/tINzrsux3qy4uDj+77Fjx2rKlCl65JFHtHnzZpWWlhp2Zq+vzw1JWrhwYfzfY8aM0YQJ\nE5Sfn6+9e/dq/vz5hp2lx4oVK/TBBx/o73//e5dzfWk+3O4+ZMp8yIiV0NChQ9W/f/8u/yfT0tLS\n5f94+pIhQ4Zo7Nixqq+vt27FzM13BzI3ugqHw8rPz++V82PlypXas2ePDh06lPCnX/rafLjdfehO\nT50PGRFCgwYN0vjx41VVVZVwvKqqSoWFhUZd2Wtvb9dHH32kcDhs3YqZgoIChUKhhLlx7do11dTU\n9Om5IUmtra1qbGzsVfPDOacVK1Zo586dOnjwoAoKChLO95X58EX3oTs9dj4YvinCk+3bt7uBAwe6\n3//+9+7DDz90q1atckOGDHFnz561bu2+ef755111dbU7c+aMO3r0qHvqqadcIBDo9fegra3NnThx\nwp04ccJJcuvXr3cnTpxw//nPf5xzzr3yyisuGAy6nTt3upMnT7pnn33WhcNhF4vFjDtPrTvdh7a2\nNvf888+72tpa19DQ4A4dOuSmTJniHnrooV51H3784x+7YDDoqqurXVNTU3xcuXIlfk1fmA9fdB8y\naT5kTAg559xvf/tbl5+f7wYNGuQef/zxhLcj9gULFy504XDYDRw40EUiETd//nx36tQp67bS7tCh\nQ05Sl1FSUuKc63xb7po1a1woFHJ+v99NnTrVnTx50rbpNLjTfbhy5YorKipyw4YNcwMHDnQjRoxw\nJSUl7ty5c9Ztp1R3378kt2nTpvg1fWE+fNF9yKT5wJ9yAACYyYjXhAAAvRMhBAAwQwgBAMwQQgAA\nM4QQAMAMIQQAMEMIAQDMEEIAADOEEADADCEEADBDCAEAzBBCAAAz/wcUTOy2YGYkFAAAAABJRU5E\nrkJggg==\n"
}
}
],
"source": [
"plt.imshow(torch.einsum('cij -> ijc',X[0]),cmap=\"gray\")"
],
"id": "4404394e-174e-4134-8e9b-c42abb485e1b"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A. y: (n,3)-float"
],
"id": "83bd1229-efa5-4717-8782-ad14fb0de445"
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.9851\n",
"val: 0.9898"
]
}
],
"source": [
"# Step1: 데이터정리 (dls생성)\n",
"ds = torch.utils.data.TensorDataset(X,y)\n",
"dl = torch.utils.data.DataLoader(ds,batch_size=128) \n",
"# Step2: 적합에 필요한 오브젝트 생성\n",
"net1 = torch.nn.Sequential(\n",
" torch.nn.Conv2d(1,16,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.MaxPool2d((2,2)),\n",
" torch.nn.Flatten()\n",
")\n",
"net2 = torch.nn.Sequential(\n",
" torch.nn.Linear(2304,3),\n",
")\n",
"net = torch.nn.Sequential(\n",
" net1, # 2d-part\n",
" net2, # 1d-part \n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"# Step3: 적합 \n",
"net.to(\"cuda:0\")\n",
"for epoc in range(10):\n",
" for xi,yi in dl:\n",
" ## 1\n",
" ## 2\n",
" loss = loss_fn(net(xi.to(\"cuda:0\")),yi.to(\"cuda:0\"))\n",
" ## 3 \n",
" loss.backward()\n",
" ## 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"net.to(\"cpu\")\n",
"# Step4: 예측 및 평가 \n",
"print(f'train: {(net(X).data.argmax(axis=1) == y.argmax(axis=1)).float().mean():.4f}')\n",
"print(f'val: {(net(XX).data.argmax(axis=1) == yy.argmax(axis=1)).float().mean():.4f}')"
],
"id": "ce223c36-98b7-442c-9aaf-9894bba83a1b"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## B. y: (n,)-int"
],
"id": "0f0c8fbe-4135-42f3-8405-bbff1fe52a7d"
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"y = y.argmax(axis=-1)\n",
"yy = yy.argmax(axis=-1)\n",
"y,yy"
],
"id": "9e8ec864-ea1c-40bc-8734-915303281364"
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([18623, 1, 28, 28]) torch.float32\n",
"torch.Size([18623]) torch.int64\n",
"torch.Size([3147, 1, 28, 28]) torch.float32\n",
"torch.Size([3147]) torch.int64"
]
}
],
"source": [
"print(X.shape,'\\t',X.dtype)\n",
"print(y.shape,'\\t\\t',y.dtype)\n",
"print(XX.shape,'\\t',XX.dtype)\n",
"print(yy.shape,'\\t\\t',yy.dtype)"
],
"id": "0261ae34-4574-43ef-a63e-2b9cbdf12121"
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.9836\n",
"val: 0.9895"
]
}
],
"source": [
"# Step1: 데이터정리 (dls생성)\n",
"ds = torch.utils.data.TensorDataset(X,y)\n",
"dl = torch.utils.data.DataLoader(ds,batch_size=128) \n",
"# Step2: 적합에 필요한 오브젝트 생성\n",
"net1 = torch.nn.Sequential(\n",
" torch.nn.Conv2d(1,16,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.MaxPool2d((2,2)),\n",
" torch.nn.Flatten()\n",
")\n",
"net2 = torch.nn.Sequential(\n",
" torch.nn.Linear(2304,3),\n",
")\n",
"net = torch.nn.Sequential(\n",
" net1, # 2d-part\n",
" net2, # 1d-part \n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"# Step3: 적합 \n",
"net.to(\"cuda:0\")\n",
"for epoc in range(10):\n",
" for xi,yi in dl:\n",
" ## 1\n",
" ## 2\n",
" loss = loss_fn(net(xi.to(\"cuda:0\")),yi.to(\"cuda:0\"))\n",
" ## 3 \n",
" loss.backward()\n",
" ## 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"net.to(\"cpu\")\n",
"# Step4: 예측 및 평가 \n",
"print(f'train: {(net(X).data.argmax(axis=1) == y).float().mean():.4f}') # <-- 여기수정\n",
"print(f'val: {(net(XX).data.argmax(axis=1) == yy).float().mean():.4f}') # <-- 여기수정"
],
"id": "2e32ab1a-44cd-40d3-8344-03b17150d54c"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 5. Fashion-MNIST – fastai\n",
"\n",
"`-` Data"
],
"id": "3022121a-cfe1-484f-b2ec-8be3aae3eef4"
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"df_train=pd.read_csv('https://media.githubusercontent.com/media/guebin/PP2023/main/posts/fashion-mnist_train.csv')\n",
"df_test=pd.read_csv('https://media.githubusercontent.com/media/guebin/PP2023/main/posts/fashion-mnist_test.csv')\n",
"def rshp(row):\n",
" return row.reshape(1,28,28)\n",
"X = torch.tensor(np.apply_along_axis(rshp,axis=1,arr=np.array(df_train.iloc[:,1:]))).float()\n",
"XX = torch.tensor(np.apply_along_axis(rshp,axis=1,arr=np.array(df_test.iloc[:,1:]))).float()\n",
"y = torch.tensor(np.array(df_train.label))\n",
"yy = torch.tensor(np.array(df_test.label))"
],
"id": "155edf23-35db-4ac3-af9e-3a177e358944"
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([60000, 1, 28, 28]) torch.float32\n",
"torch.Size([60000]) torch.int64\n",
"torch.Size([10000, 1, 28, 28]) torch.float32\n",
"torch.Size([10000]) torch.int64"
]
}
],
"source": [
"print(X.shape,'\\t',X.dtype)\n",
"print(y.shape,'\\t\\t\\t',y.dtype)\n",
"print(XX.shape,'\\t',XX.dtype)\n",
"print(yy.shape,'\\t\\t\\t',yy.dtype)"
],
"id": "6abf37c9-6418-44da-9575-bfd755b7838d"
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "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\nGxsbG1s/3xKJxAW7xOsxodOWLFmiF198Udu2bdOYMWPOu29JSYlKS0t14MCBs34+Go2e9QoJADDw\neZWQc05LlizR888/r61bt6qsrOyCmaamJtXX16ukpCR4kQCAgcnriQmLFi3S7373O23cuFH5+flq\naGhQQ0ODWltbJUnHjh3TQw89pL/97W86ePCgtm7dqlmzZmnUqFG6/fbb0/IFAAD6MZ/HgXSOf/db\nt26dc865lpYWV15e7kaPHu2ys7PduHHj3Pz5811dXV2v7yORSJj/OyYbGxsb28VvvXlMiAGmAIC0\nYIApAKBPo4QAAGYoIQCAGUoIAGCGEgIAmKGEAABmKCEAgBlKCABghhICAJihhAAAZighAIAZSggA\nYIYSAgCYoYQAAGYoIQCAGUoIAGCGEgIAmKGEAABmKCEAgBlKCABghhICAJihhAAAZighAIAZSggA\nYIYSAgCY6XMl5JyzXgIAIAV68/u8z5VQc3Oz9RIAACnQm9/nEdfHLj26urp06NAh5efnKxKJ9Phc\nMpnU2LFjVV9fr4KCAqMV2uM4nMJxOIXjcArH4ZS+cBycc2publY8HldW1vmvdYZmaE29lpWVpTFj\nxpx3n4KCgkF9kp3GcTiF43AKx+EUjsMp1schFov1ar8+989xAIDBgxICAJjpVyUUjUb1yCOPKBqN\nWi/FFMfhFI7DKRyHUzgOp/S349DnnpgAABg8+tWVEABgYKGEAABmKCEAgBlKCABgpl+V0Nq1a1VW\nVqbc3FxNmTJF27dvt15SRlVWVioSifTYiouLrZeVdtu2bdOsWbMUj8cViUT0wgsv9Pi8c06VlZWK\nx+PKy8vTzJkztW/fPpvFptGFjsOCBQvOOD+mTZtms9g0qaqq0jXXXKP8/HwVFhZq9uzZ2r9/f499\nBsP50Jvj0F/Oh35TQps2bdLSpUu1YsUK7dmzRzfccIMqKipUV1dnvbSMuuqqq3T48OHube/evdZL\nSrvjx49r0qRJWrNmzVk//9hjj2n16tVas2aNdu3apeLiYt1yyy0Dbg7hhY6DJN166609zo/Nmzdn\ncIXpV1NTo0WLFmnnzp2qrq5WZ2enysvLdfz48e59BsP50JvjIPWT88H1E9dee6277777etz2la98\nxf3whz80WlHmPfLII27SpEnWyzAlyT3//PPdH3d1dbni4mK3atWq7tva2tpcLBZzP//5zw1WmBmf\nPw7OOTd//nx32223mazHSmNjo5PkampqnHOD93z4/HFwrv+cD/3iSqijo0O7d+9WeXl5j9vLy8u1\nY8cOo1XZOHDggOLxuMrKyjRv3jx9+OGH1ksyVVtbq4aGhh7nRjQa1Y033jjozg1J2rp1qwoLC3XF\nFVfonnvuUWNjo/WS0iqRSEiSRowYIWnwng+fPw6n9YfzoV+U0JEjR3Ty5EkVFRX1uL2oqEgNDQ1G\nq8q8qVOnasOGDXrllVf09NNPq6GhQdOnT1dTU5P10syc/v4P9nNDkioqKvTMM89oy5Ytevzxx7Vr\n1y7dfPPNam9vt15aWjjntGzZMl1//fWaMGGCpMF5PpztOEj953zoc1O0z+fzb+3gnDvjtoGsoqKi\n+78nTpyo6667TpdffrnWr1+vZcuWGa7M3mA/NyRp7ty53f89YcIEXX311SotLdVLL72kOXPmGK4s\nPRYvXqx3331Xb7zxxhmfG0znw7mOQ385H/rFldCoUaM0ZMiQM/6SaWxsPOMvnsFk+PDhmjhxog4c\nOGC9FDOnnx3IuXGmkpISlZaWDsjzY8mSJXrxxRf1+uuv93jrl8F2PpzrOJxNXz0f+kUJ5eTkaMqU\nKaquru5xe3V1taZPn260Knvt7e16//33VVJSYr0UM2VlZSouLu5xbnR0dKimpmZQnxuS1NTUpPr6\n+gF1fjjntHjxYj333HPasmWLysrKenx+sJwPFzoOZ9NnzwfDJ0V4+f3vf++ys7Pdr3/9a/fee++5\npUuXuuHDh7uDBw9aLy1jHnzwQbd161b34Ycfup07d7pvf/vbLj8/f8Afg+bmZrdnzx63Z88eJ8mt\nXr3a7dmzx3300UfOOedWrVrlYrGYe+6559zevXvdXXfd5UpKSlwymTReeWqd7zg0Nze7Bx980O3Y\nscPV1ta6119/3V133XXui1/84oA6Dvfff7+LxWJu69at7vDhw91bS0tL9z6D4Xy40HHoT+dDvykh\n55x78sknXWlpqcvJyXGTJ0/u8XTEwWDu3LmupKTEZWdnu3g87ubMmeP27dtnvay0e/31152kM7b5\n8+c75049LfeRRx5xxcXFLhqNuhkzZri9e/faLjoNznccWlpaXHl5uRs9erTLzs5248aNc/Pnz3d1\ndXXWy06ps339kty6deu69xkM58OFjkN/Oh94KwcAgJl+8ZgQAGBgooQAAGYoIQCAGUoIAGCGEgIA\nmKGEAABmKCEAgBlKCABghhICAJihhAAAZighAIAZSggAYOb/AKwRa3jxpSU0AAAAAElFTkSuQmCC\n"
}
}
],
"source": [
"plt.imshow(torch.einsum('cij -> ijc',X[0]),cmap=\"gray\")"
],
"id": "c719fe6c-fc81-4259-8089-e9e49adae0d2"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## A. torch"
],
"id": "9db5332b-b278-4cb0-888c-c553cb3d9a1b"
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.9077\n",
"val: 0.8723"
]
}
],
"source": [
"# Step1: 데이터정리 (dls생성)\n",
"ds = torch.utils.data.TensorDataset(X,y)\n",
"dl = torch.utils.data.DataLoader(ds,batch_size=128) \n",
"# Step2: 적합에 필요한 오브젝트 생성\n",
"net1 = torch.nn.Sequential(\n",
" torch.nn.Conv2d(1,16,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.MaxPool2d((2,2)),\n",
" torch.nn.Flatten()\n",
")\n",
"net2 = torch.nn.Sequential(\n",
" torch.nn.Linear(2304,10),\n",
")\n",
"net = torch.nn.Sequential(\n",
" net1, # 2d-part\n",
" net2, # 1d-part \n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"optimizr = torch.optim.Adam(net.parameters())\n",
"# Step3: 적합 \n",
"net.to(\"cuda:0\")\n",
"for epoc in range(10):\n",
" for xi,yi in dl:\n",
" ## 1\n",
" ## 2\n",
" loss = loss_fn(net(xi.to(\"cuda:0\")),yi.to(\"cuda:0\"))\n",
" ## 3 \n",
" loss.backward()\n",
" ## 4 \n",
" optimizr.step()\n",
" optimizr.zero_grad()\n",
"net.to(\"cpu\")\n",
"# Step4: 예측 및 평가 \n",
"print(f'train: {(net(X).data.argmax(axis=1) == y).float().mean():.4f}')\n",
"print(f'val: {(net(XX).data.argmax(axis=1) == yy).float().mean():.4f}')"
],
"id": "18a1516f-34c6-4802-b79b-8c8bc2f38688"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## B. fastai"
],
"id": "9f26934f-b85b-43a9-a96a-1d966fe7055a"
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.9124\n",
"val: 0.8708"
]
}
],
"source": [
"# Step1: 데이터정리 (dls생성)\n",
"ds1 = torch.utils.data.TensorDataset(X,y)\n",
"ds2 = torch.utils.data.TensorDataset(XX,yy)\n",
"dl1 = torch.utils.data.DataLoader(ds1,batch_size=128) \n",
"dl2 = torch.utils.data.DataLoader(ds2,batch_size=100) \n",
"dls = fastai.data.core.DataLoaders(dl1,dl2)\n",
"# Step2: 적합에 필요한 오브젝트 생성\n",
"net1 = torch.nn.Sequential(\n",
" torch.nn.Conv2d(1,16,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.MaxPool2d((2,2)),\n",
" torch.nn.Flatten()\n",
")\n",
"net2 = torch.nn.Sequential(\n",
" torch.nn.Linear(2304,10),\n",
")\n",
"net = torch.nn.Sequential(\n",
" net1, # 2d-part\n",
" net2, # 1d-part \n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"#optimizr = torch.optim.Adam(net.parameters())\n",
"lrnr = fastai.learner.Learner(\n",
" dls=dls,\n",
" model=net,\n",
" loss_func=loss_fn,\n",
" #--#\n",
" metrics=[fastai.metrics.accuracy]\n",
")\n",
"# Step3: 적합 \n",
"lrnr.fit(10)\n",
"# Step4: 예측 및 평가 \n",
"\n",
"lrnr.model.to(\"cpu\")\n",
"print(f'train: {(lrnr.model(X).data.argmax(axis=1) == y).float().mean():.4f}')\n",
"print(f'val: {(lrnr.model(XX).data.argmax(axis=1) == yy).float().mean():.4f}')"
],
"id": "9508e991-9faf-4c0f-9f44-f28a0b4486c4"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 6. ImageNet – 직접설계/transfer\n",
"\n",
"## A. 알렉스넷(Krizhevsky, Sutskever, and Hinton 2012)의 의미\n",
"\n",
"`-` 야사로 배우는 인공지능: \n",
"\n",
"## B. 알렉스넷의 아키텍처 써보기\n",
"\n",
"`-` 알렉스넷의 아키텍처:\n",
"\n",
"-ref:\n",
"\n",
"\n",
"\n",
"\n",
"`-` 재미삼아 써보면.."
],
"id": "cf27e5d7-722c-4782-b2f3-b242c873755e"
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"img = torch.zeros(1,3*227*227).reshape(1,3,227,227)\n",
"img.shape"
],
"id": "cd8bd6aa-9004-4cd6-9642-d2f121fd06b8"
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net = torch.nn.Sequential(\n",
" torch.nn.Conv2d(3,96,kernel_size=(11,11),stride=4),\n",
" torch.nn.ReLU(), \n",
" torch.nn.MaxPool2d((3,3),stride=2), # default stride는 3\n",
" torch.nn.Conv2d(96,256,kernel_size=(5,5),padding=2),\n",
" torch.nn.ReLU(),\n",
" torch.nn.MaxPool2d((3,3),stride=2), # default stride는 3\n",
" torch.nn.Conv2d(256,384,kernel_size=(3,3),padding=1),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Conv2d(384,384,kernel_size=(3,3),padding=1),\n",
" torch.nn.ReLU(), \n",
" torch.nn.Conv2d(384,256,kernel_size=(3,3),padding=1),\n",
" torch.nn.ReLU(), \n",
" torch.nn.MaxPool2d((3,3),stride=2),\n",
" torch.nn.Flatten(),\n",
" torch.nn.Linear(9216,4096),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Dropout(0.5),\n",
" torch.nn.Linear(4096,4096), \n",
" torch.nn.ReLU(),\n",
" torch.nn.Dropout(0.5), \n",
" torch.nn.Linear(4096,1000),\n",
")"
],
"id": "bdd5f796-6695-480b-8ed6-df39a04ea845"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 참고사항: `torchvision.models.alexnet()`을 이용하여 네크워크를\n",
"선언할 수도 있음."
],
"id": "15785b6c-362e-4670-ba18-648daacbd850"
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"torchvision.models.alexnet()"
],
"id": "d389e428-6367-4868-b7af-b77351af8dfc"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> **Note**\n",
">\n",
"> 직접구현한 알렉스넷과 `torchvision.models.alexnet()`를 이용한\n",
"> 알렉스넷은 약간다름.\n",
">\n",
"> 그 이유는 파이토치에서는 원래 논문에서 구현된 알렉스넷이 아니라 이후\n",
"> 수정된 알렉스넷을 사용하기 때문임. 이 내용은 파이토치 공식홈페이지에서\n",
"> 아래와 같이 명시되어있음.\n",
">\n",
"> AlexNet was originally introduced in the ImageNet Classification with Deep Convolutional Neural Networks paper. Our implementation is based instead on the “One weird trick” paper above.\n",
">\n",
"> ref:\n",
"> \n",
"\n",
"## C. 알렉스넷으로 ImageNet 적합"
],
"id": "71b0331d-7336-44d3-a3d0-10383e1ab6a9"
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"pass # 데이터가 너무 커서.. 코랩에서 못할것같아요"
],
"id": "f6a4287e-c7fc-40e2-8291-28dafb5bd0f7"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 7. CIFAR10 – transfer\n",
"\n",
"## A. `dls` 만들자\n",
"\n",
"`-` X,y를 얻자."
],
"id": "d1cbaf7b-28ef-4983-94f6-261eca3e09a8"
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"path = fastai.data.external.untar_data(fastai.data.external.URLs.CIFAR)\n",
"path.ls()"
],
"id": "951a8d56-993b-4f21-8623-c9ee0c184dd8"
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"labels = [str(l).split('/')[-1] for l in (path/'train').ls()]\n",
"labels"
],
"id": "54e33b0f-aa27-4a90-be18-9c431f1ac0ea"
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"X = torch.stack([torchvision.io.read_image(str(fname)) for l in labels for fname in (path/f'train/{l}').ls()],axis=0).float()/255\n",
"XX = torch.stack([torchvision.io.read_image(str(fname)) for l in labels for fname in (path/f'test/{l}').ls()],axis=0).float()/255\n",
"y = torch.tensor([i for i,l in enumerate(labels) for fname in (path/f'train/{l}').ls()])\n",
"yy = torch.tensor([i for i,l in enumerate(labels) for fname in (path/f'test/{l}').ls()])"
],
"id": "6160ec79-b1d4-439c-90d0-e383e4c0f10c"
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"torch.Size([50000, 3, 32, 32]) torch.float32\n",
"torch.Size([50000]) torch.int64\n",
"torch.Size([10000, 3, 32, 32]) torch.float32\n",
"torch.Size([10000]) torch.int64"
]
}
],
"source": [
"print(X.shape,'\\t',X.dtype)\n",
"print(y.shape,'\\t\\t\\t',y.dtype)\n",
"print(XX.shape,'\\t',XX.dtype)\n",
"print(yy.shape,'\\t\\t\\t',yy.dtype)"
],
"id": "3e0a32f5-de50-4b65-8d2d-d04926b59aa3"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 데이터를 시각화해보자."
],
"id": "801929f9-a528-4503-88ea-7366dad39e47"
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "display_data",
"metadata": {},
"data": {
"image/png": "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\nXbpUnZ2dA6d9+/YNx5IAACPQkH5OqLa2VtKnR0R1dXUD57e3t59wdHRcMplU0vjZAwDA2DCkR0JT\npkxRbW2t1q9fP3BeJpPR5s2bNXv27KH8VQCAMcB8JHTs2DH9/ve/H/h59+7devvtt1VVVaXJkydr\n8eLFWr58uaZOnaqpU6dq+fLlKi0t1S233DKkCwcAjH7mIbR9+3ZdddVVAz8vWbJEkrRgwQL913/9\nl+6991719fVp0aJFOnLkiGbOnKl169YplfKPv5GkaKxI0SLP5RnSPqLOFmlikS/4R8hIUjTqfyBq\nfcqyxBDzUsjYIk3SlitcUj7tf724ImfqHTOspSjpH38iSY11td61nYcOmXp3x+Om+vFVld61ybjt\nbt1zzP8dqalS2+2wrKzcu7a3xxYHdSzh/9nDZCJh6j1x4nhTveU6L4raboe1VRO8a6urqk29qybU\ne9d2ZSyxZP6PbeYhNGfOHDl36geKSCSilpYWtbS0WFsDAM4yZMcBAIJhCAEAgmEIAQCCYQgBAIJh\nCAEAgmEIAQCCYQgBAIJhCAEAgmEIAQCCYQgBAIIZ0q9yGErxeFxFntlx8WL/PKt4zJbZFTdkfGUz\naVPvhCEPzllz6eSfwVaI2rLgCgVbvltJif91WF5q2z+93f55Y6Up/zw9SWqo98/hKjb+OZfJ50z1\nlSn/DLbOo4dNvcdX+uekRWW7HRby/vWWLEVJqqryX3fcmKeXKLJlTKZK/LPpKsqLTb0b6/3z3caN\nm2TqnZf/ug9/4v9db5ls1ruWIyEAQDAMIQBAMAwhAEAwDCEAQDAMIQBAMAwhAEAwDCEAQDAMIQBA\nMAwhAEAwDCEAQDAjNrYnn0lLhbxXbWl5hXffCkP8iSQdOtjuXZszRFVIUnHcPxqkq7vb1LusxD8S\nKBm3/S0ST5WZ6g+lj3nXjkulTL0bqv2jdXqytlilopj/9RI11EpSiSGySZIswUplpbb9UxTzfxhI\nFNm2s2CImyqK2SKBSgxxXdmsLSYpmbDtn6px/o9B48qsvf33Zzrbb+rdb4hV6uw84l2bzflf3xwJ\nAQCCYQgBAIJhCAEAgmEIAQCCYQgBAIJhCAEAgmEIAQCCYQgBAIJhCAEAgmEIAQCCYQgBAIIZsdlx\nkyZVKx6Pe9VGDbO0OJkwrSOb7vOuzRvzqaoqK71rU6Ulpt79/f7rLi+39f5o7x9N9R0HD3vX1k/0\nz4KTpMlNk71r/78PPjD1Tuf8sgsl6fDRLlPvRNx2O4xF/NPjists2XGHOzq8a4uM2X41Nf778+hR\n/2wySUpn/HPSSkptmZGlxcWm+niR//4sivlnRkpSuq/Xu/ZY2pa/1532X8uhQwe9a3N5//sOR0IA\ngGAYQgCAYBhCAIBgGEIAgGAYQgCAYBhCAIBgGEIAgGAYQgCAYBhCAIBgGEIAgGBGbGzPkSOHVVTk\nt7xUuX+USE31eNM6amsmedd2d9qiW2JR51279+OPTb0zhkiTeEO9qbec/7olaWKV/3U+vqrK1Lu0\n3D+OZdx4W+/Kcf7rjif3m3qne/2jWCTpnHMavWuL47a7dU93t3dtearC1DsW8f87t7QkaeqdzWf8\na21pNorG/CLD/vc/+F/nvf1ZU+uSEsN25mz3zc7uY961Pb3+tfmC/xXOkRAAIBiGEAAgGPMQevXV\nV3Xdddepvr5ekUhEzz///KDLFy5cqEgkMuh06aWXDtV6AQBjiHkI9fT0aPr06Vq5cuUpa6655hod\nOHBg4PTiiy+e0SIBAGOT+Y0Jzc3Nam5u/tyaZDKp2tra014UAODsMCyvCW3atEnV1dU677zzdNtt\nt6m9vf2Utel0Wl1dXYNOAICzw5APoebmZj355JPasGGDHn74YW3btk1z585VOp0+aX1ra6sqKysH\nTo2N/m9FBQCMbkP+OaEbb7xx4N/Tpk3TjBkz1NTUpLVr12r+/Pkn1C9dulRLliwZ+Lmrq4tBBABn\niWH/sGpdXZ2ampq0a9euk16eTCaVTNo+pAYAGBuG/XNChw4d0r59+1RXVzfcvwoAMMqYj4SOHTum\n3//+9wM/7969W2+//baqqqpUVVWllpYWfe9731NdXZ327Nmj++67TxMnTtR3v/vdIV04AGD0Mw+h\n7du366qrrhr4+fjrOQsWLNCqVau0Y8cOPf744zp69Kjq6up01VVX6emnn1Yq5Z/vJkn9/b2KxWJe\ntbXVE7379vb652RJ0oEDB7xry0oSpt4FQ/aVy+dMveMx/4PcVKnt6dCSBtvb753zz5FqmmJ7PfBo\nl//+rDcejRvir5TL2fLAci5vqt/f5p9NV1FSYupdbsjfi3rmOR4Xkf+VmDT2zub8r8NjvSd/Y9Sp\nTG5oMtUnDEvv7T5q6n24y3/t6ZwtJK/j8GHv2qNdR71rCwX/DDvzEJozZ47c5wRYvvLKK9aWAICz\n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\nIhGz3eHKx/nfbvOy9S7kDfdlQ3yQpZYjIQBAMAwhAEAwDCEAQDAMIQBAMAwhAEAwDCEAQDAMIQBA\nMAwhAEAwDCEAQDAMIQBAMAwhAEAwIzY7LpEo8s6OyxhioSrHT7AtJOI/p8fX1Jla7+847F3rnCW4\nSSor8c/hatv/sal3NmPLjitKlHrXFsdt25n3j6VTLG67udfU+u/Pjw/sMfWORm0ZX/mMf87g4Y6D\npt4dB/3rq6r6TL0Tkxu9a48ePWrqvafT//5THE+Yep/TdK6pvv3AXu/aDz/8g6n3X3zjAu/a8eMn\nmnqXl5Sb6n2lDQ/KHAkBAIJhCAEAgmEIAQCCYQgBAIJhCAEAgmEIAQCCYQgBAIJhCAEAgmEIAQCC\nYQgBAIIZsbE9n7QfVNwzZqW6uta7b23dObaFGGJ7orGYqXXWEDmTzfrHtkhSUZF/86KEf8SPJCWT\nZab6eJH/zaw4mTT1Lkr4x7Eki2x/c9XVVHvX1kz0r5WkQwfbTPVRw9Lb2vaberu8fwzTsc5Dpt5J\nwyNMWWnK1PvYsS7v2o/bPjH1Li0pNtXnDbFa/Tnbfbm3r9e7dlylLVKrp7fHuzZnWHc6m/Wu5UgI\nABAMQwgAEAxDCAAQDEMIABAMQwgAEAxDCAAQDEMIABAMQwgAEAxDCAAQDEMIABAMQwgAEMyIzY6r\nrBynRCLuVXtO42TvvuPGTzStwxX8M9iikYipd7zIb/skqa+vz9S7vMQ/D+5rkxtNvZ0hJ0uSknH/\nfLeSYlt2XDTqf51b152fUOlde+zIuabebxw8YKrv6jnmXVtZbstgixkyD9P9/jlmknTwE//trKi0\n3TejznLfNAQ1Sjp0yJY153IZ79qKVIWpdyad9q5ta/vI1Lvf0DtnyK/MGnLmOBICAARjGkKtra26\n5JJLlEqlVF1drRtuuEEffPDBoJqFCxcqEokMOl166aVDumgAwNhgGkKbN2/WnXfeqa1bt2r9+vXK\n5XKaN2+eenoGx4Ffc801OnDgwMDpxRdfHNJFAwDGBtNrQi+//PKgn1evXq3q6mq9+eabuuKKKwbO\nTyaTqq31/44fAMDZ6YxeE+rs7JQkVVVVDTp/06ZNqq6u1nnnnafbbrtN7e3tp+yRTqfV1dU16AQA\nODuc9hByzmnJkiW67LLLNG3atIHzm5ub9eSTT2rDhg16+OGHtW3bNs2dO1fpU7wLo7W1VZWVlQOn\n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\nZWWl+9nPfhZghUPjs9vpnHMLFixw119/fZD1DJf29nYnyW3evNk5N3b352e307mxuT+dc278+PHu\nP//zP7/0fTnij4QymYzefPNNzZs3b9D58+bN05YtWwKtanjs2rVL9fX1mjJlim666SZ9+OGHoZc0\nbHbv3q22trZB+zWZTOrKK68cc/tVkjZt2qTq6mqdd955uu2229Te3h56SWeks7NTklRVVSVp7O7P\nz27ncWNpf+bzea1Zs0Y9PT2aNWvWl74vR/wQ6ujoUD6fV01NzaDza2pq1NbWFmhVQ2/mzJl6/PHH\n9corr+jRRx9VW1ubZs+erUOHDoVe2rA4vu/G+n6VpObmZj355JPasGGDHn74YW3btk1z585V+k9f\n/DXaOOe0ZMkSXXbZZZo2bZqksbk/T7ad0tjZnzt27FB5ebmSyaRuv/12Pffcczr//PO/9H054r7K\n4VQin/k6QufcCeeNZs3NzQP/vvDCCzVr1ix97Wtf02OPPaYlS5YEXNnwGuv7VZJuvPHGgX9PmzZN\nM2bMUFNTk9auXav58+cHXNnpueuuu/Tuu+/q9ddfP+GysbQ/T7WdY2V/fv3rX9fbb7+to0eP6pln\nntGCBQu0efPmgcu/rH054o+EJk6cqFgsdsIEbm9vP2FSjyVlZWW68MILtWvXrtBLGRbH3/l3tu1X\nSaqrq1NTU9Oo3Ld33323XnjhBW3cuHHQ936Ntf15qu08mdG6PxOJhM4991zNmDFDra2tmj59un7y\nk5986ftyxA+hRCKhiy++WOvXrx90/vr16zV79uxAqxp+6XRa77//vurq6kIvZVhMmTJFtbW1g/Zr\nJpPR5s2bx/R+laRDhw5p3759o2rfOud011136dlnn9WGDRs0ZcqUQZePlf35Rdt5MqNxf56Mc07p\ndPrL35dD/laHYbBmzRoXj8fdL37xC/fee++5xYsXu7KyMrdnz57QSxsyP/zhD92mTZvchx9+6LZu\n3equvfZal0qlRvU2dnd3u7feesu99dZbTpJbsWKFe+utt9wf//hH55xzDz74oKusrHTPPvus27Fj\nh7v55ptdXV2d6+rqCrxym8/bzu7ubvfDH/7Qbdmyxe3evdtt3LjRzZo1y51zzjmjajvvuOMOV1lZ\n6TZt2uQOHDgwcOrt7R2oGQv784u2c6zsz6VLl7pXX33V7d6927377rvuvvvuc9Fo1K1bt8459+Xu\ny1ExhJxz7j/+4z9cU1OTSyQS7pvf/Oagt0yOBTfeeKOrq6tz8Xjc1dfXu/nz57udO3eGXtYZ2bhx\no5N0wmnBggXOuU/f1rts2TJXW1vrksmku+KKK9yOHTvCLvo0fN529vb2unnz5rlJkya5eDzuJk+e\n7BYsWOD27t0betkmJ9s+SW716tUDNWNhf37Rdo6V/fkP//APA4+nkyZNct/61rcGBpBzX+6+5PuE\nAADBjPjXhAAAYxdDCAAQDEMIABAMQwgAEAxDCAAQDEMIABAMQwgAEAxDCAAQDEMIABAMQwgAEAxD\nCAAQzP8Podht/idXv+UAAAAASUVORK5CYII=\n"
}
}
],
"source": [
"ylabel = [l for l in labels for fname in (path/f'train/{l}').ls()]\n",
"i = 30002\n",
"plt.imshow(torch.einsum('cij->ijc',X[i]))\n",
"plt.title(f'{ylabel[i]},{y[i]}')"
],
"id": "cf15b80e-d3a9-40c5-bfbd-f6cc91ece64f"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 그림이 너무 어려운데?\n",
"- 맞추기 힘들겠는데..\n",
"\n",
"`-` dls를 만들자."
],
"id": "5667022b-36eb-4c58-a3a7-951f853ffa2f"
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"ds1 = torch.utils.data.TensorDataset(X,y)\n",
"ds2 = torch.utils.data.TensorDataset(XX,yy)\n",
"dl1 = torch.utils.data.DataLoader(ds1,batch_size=256,shuffle=True)\n",
"dl2 = torch.utils.data.DataLoader(ds2,batch_size=100)\n",
"dls = fastai.data.core.DataLoaders(dl1,dl2)"
],
"id": "32ced4a4-424f-4cbb-90b4-dd3f76fdbf72"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 아래와 같이 쉽게 만들수도있음…"
],
"id": "39509687-1ff0-4200-8fae-93c2e8ad8b67"
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"# dls = fastai.vision.data.ImageDataLoaders.from_folder(path,train='train',valid='test')\n",
"# dls.show_batch()"
],
"id": "7033e450-dec3-4e40-81c5-97b47410635e"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## B. 수제네트워크로 학습\n",
"\n",
"`-` 시도1: 이게 좀 힘들어요 ㅎㅎ"
],
"id": "7caca62c-4b76-4140-a730-00dc761b960e"
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.1000\n",
"val: 0.1002"
]
}
],
"source": [
"# Step1:\n",
"ds1 = torch.utils.data.TensorDataset(X,y)\n",
"ds2 = torch.utils.data.TensorDataset(XX,yy)\n",
"dl1 = torch.utils.data.DataLoader(ds1,batch_size=256)\n",
"dl2 = torch.utils.data.DataLoader(ds2,batch_size=100)\n",
"dls = fastai.data.core.DataLoaders(dl1,dl2)\n",
"# Step2:\n",
"net1 = torch.nn.Sequential(\n",
" torch.nn.Conv2d(3,16,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.MaxPool2d((2,2)),\n",
" torch.nn.Flatten()\n",
")\n",
"net2 = torch.nn.Sequential(\n",
" torch.nn.Linear(3136,10),\n",
")\n",
"net = torch.nn.Sequential(\n",
" net1, # 2d-part\n",
" net2, # 1d-part \n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"lrnr = fastai.learner.Learner(\n",
" dls=dls,\n",
" model=net,\n",
" loss_func=loss_fn,\n",
" #--#\n",
" metrics=[fastai.metrics.accuracy]\n",
")\n",
"# Step3:\n",
"lrnr.fit(10)\n",
"# Step4: \n",
"lrnr.model.to(\"cpu\")\n",
"print(f'train: {(lrnr.model(X).data.argmax(axis=1) == y).float().mean():.4f}')\n",
"print(f'val: {(lrnr.model(XX).data.argmax(axis=1) == yy).float().mean():.4f}')"
],
"id": "ba19fd0d-7c2d-476a-be5f-7cc2b7e6841f"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- ????\n",
"\n",
"`-` 시도2: 셔플!"
],
"id": "cfcde086-d904-4bc2-ac9b-11d16269999a"
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.6101\n",
"val: 0.5783"
]
}
],
"source": [
"# Step1:\n",
"ds1 = torch.utils.data.TensorDataset(X,y)\n",
"ds2 = torch.utils.data.TensorDataset(XX,yy)\n",
"dl1 = torch.utils.data.DataLoader(ds1,batch_size=256,shuffle=True)\n",
"dl2 = torch.utils.data.DataLoader(ds2,batch_size=100)\n",
"dls = fastai.data.core.DataLoaders(dl1,dl2)\n",
"# Step2:\n",
"net1 = torch.nn.Sequential(\n",
" torch.nn.Conv2d(3,16,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.MaxPool2d((2,2)),\n",
" torch.nn.Flatten()\n",
")\n",
"net2 = torch.nn.Sequential(\n",
" torch.nn.Linear(3136,10),\n",
")\n",
"net = torch.nn.Sequential(\n",
" net1, # 2d-part\n",
" net2, # 1d-part \n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"lrnr = fastai.learner.Learner(\n",
" dls=dls,\n",
" model=net,\n",
" loss_func=loss_fn,\n",
" #--#\n",
" metrics=[fastai.metrics.accuracy]\n",
")\n",
"# Step3:\n",
"lrnr.fit(10)\n",
"# Step4: \n",
"lrnr.model.to(\"cpu\")\n",
"print(f'train: {(lrnr.model(X).data.argmax(axis=1) == y).float().mean():.4f}')\n",
"print(f'val: {(lrnr.model(XX).data.argmax(axis=1) == yy).float().mean():.4f}')"
],
"id": "eb6a6fc1-c932-4a8b-8923-23a7d215d30c"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- 셔플의 차이가 이렇게 크다니??\n",
"\n",
"`-` 시도3: 복잡하게.."
],
"id": "7109a79e-2e04-400f-852d-4f406b8bb0b6"
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.7026\n",
"val: 0.6605"
]
}
],
"source": [
"# Step1:\n",
"ds1 = torch.utils.data.TensorDataset(X,y)\n",
"ds2 = torch.utils.data.TensorDataset(XX,yy)\n",
"dl1 = torch.utils.data.DataLoader(ds1,batch_size=256,shuffle=True)\n",
"dl2 = torch.utils.data.DataLoader(ds2,batch_size=100)\n",
"dls = fastai.data.core.DataLoaders(dl1,dl2)\n",
"# Step2:\n",
"net1 = torch.nn.Sequential(\n",
" torch.nn.Conv2d(3,256,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Conv2d(256,64,(5,5)),\n",
" torch.nn.ReLU(),\n",
" torch.nn.Conv2d(64,16,(5,5)),\n",
" torch.nn.MaxPool2d((2,2)),\n",
" torch.nn.Flatten()\n",
")\n",
"net2 = torch.nn.Sequential(\n",
" torch.nn.Linear(1600,10),\n",
")\n",
"net = torch.nn.Sequential(\n",
" net1, # 2d-part\n",
" net2, # 1d-part \n",
")\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"lrnr = fastai.learner.Learner(\n",
" dls=dls,\n",
" model=net,\n",
" loss_func=loss_fn,\n",
" #--#\n",
" metrics=[fastai.metrics.accuracy]\n",
")\n",
"# Step3:\n",
"lrnr.fit(10)\n",
"# Step4: \n",
"# 코랩사용시 아래는 주석처리할것 (이유: 코랩의 RAM이 충분하지 않음) valiation set의 accuracy는 fastai결과로 확인할것. \n",
"lrnr.model.to(\"cpu\")\n",
"print(f'train: {(lrnr.model(X).data.argmax(axis=1) == y).float().mean():.4f}')\n",
"print(f'val: {(lrnr.model(XX).data.argmax(axis=1) == yy).float().mean():.4f}')"
],
"id": "80d4267a-1897-42ac-8103-b332bb35db1a"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## C. TransferLearning으로 학습\n",
"\n",
"`-` ResNet18을 다운로드"
],
"id": "240bfdf1-cc64-4570-a908-8e36b6787d2c"
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net = torchvision.models.resnet18()\n",
"net"
],
"id": "fec1f582-ee0b-4222-868f-7ac81bd3bc2c"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 마지막의 레이어만 수정"
],
"id": "2c13ce43-de64-4bb5-b0f3-8a0dde0383e6"
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"tags": []
},
"outputs": [],
"source": [
"net.fc = torch.nn.Linear(512,10)"
],
"id": "f0907f77-037e-44d1-8db1-3c2087c67870"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"`-` 학습해보자."
],
"id": "6e8728e3-eca2-4afb-bd78-2cb34e1020e5"
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"tags": []
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"train: 0.9523\n",
"val: 0.7632"
]
}
],
"source": [
"# Step1:\n",
"ds1 = torch.utils.data.TensorDataset(X,y)\n",
"ds2 = torch.utils.data.TensorDataset(XX,yy)\n",
"dl1 = torch.utils.data.DataLoader(ds1,batch_size=64,shuffle=True)\n",
"dl2 = torch.utils.data.DataLoader(ds2,batch_size=100)\n",
"dls = fastai.data.core.DataLoaders(dl1,dl2)\n",
"# Step2:\n",
"net = torchvision.models.resnet18()\n",
"net.fc = torch.nn.Linear(512,10)\n",
"loss_fn = torch.nn.CrossEntropyLoss()\n",
"lrnr = fastai.learner.Learner(\n",
" dls=dls,\n",
" model=net,\n",
" loss_func=loss_fn,\n",
" #--#\n",
" metrics=[fastai.metrics.accuracy]\n",
")\n",
"# Step3:\n",
"lrnr.fit(10)\n",
"# Step4: \n",
"# 코랩사용시 아래는 주석처리할것 (이유: 코랩의 RAM이 충분하지 않음) valiation set의 accuracy는 fastai결과로 확인할것. \n",
"lrnr.model.to(\"cpu\")\n",
"print(f'train: {(lrnr.model(X).data.argmax(axis=1) == y).float().mean():.4f}') # \n",
"print(f'val: {(lrnr.model(XX).data.argmax(axis=1) == yy).float().mean():.4f}')"
],
"id": "ebaf1a49-349d-457a-b3f2-99137b22c1d9"
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"> **Caution**\n",
">\n",
"> 통계학과서버를 이용하시는 분들은 다른 학생들을 위하여 실습이 끝난이후\n",
"> 커널을 죽여주시기 바랍니다. 그렇지 않으면 GPU메모리 부족으로\n",
"> 다른학생들이 실습하기 어렵습니다.(무슨말인지 모르겠으면 저에게\n",
"> 물어보세요)\n",
"\n",
"# 8. HW\n",
"\n",
"없어요..\n",
"\n",
"Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E Hinton. 2012. “Imagenet\n",
"Classification with Deep Convolutional Neural Networks.” *Advances in\n",
"Neural Information Processing Systems* 25."
],
"id": "2df9a8b8-a1ad-4399-8eb7-13ce720efa4f"
}
],
"nbformat": 4,
"nbformat_minor": 5,
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3 (ipykernel)",
"language": "python"
},
"language_info": {
"name": "python",
"codemirror_mode": {
"name": "ipython",
"version": "3"
},
"file_extension": ".py",
"mimetype": "text/x-python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.8"
}
}
}