diff --git "a/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.ipynb" "b/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.ipynb" deleted file mode 100644 index f6b8b0c..0000000 --- "a/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.ipynb" +++ /dev/null @@ -1,1176 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# **Week1 복습과제**\n", - "\n", - "1. [Pytorch 기본]\n", - "1. [Linear Regression]\n", - "1. [Logistic Regression]" - ], - "metadata": { - "id": "9mabISNcCPiV" - } - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "T-Govjsw7kBQ" - }, - "outputs": [], - "source": [ - "# import libraries\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "\n", - "#input data: 첨부된 .csv 파일 다운받아 사용해주세요" - ] - }, - { - "cell_type": "code", - "source": [ - "from google.colab import drive\n", - "drive.mount('/content/drive')\n", - "\n", - "dataset = pd.read_csv('/content/drive/MyDrive/sample_submission.csv')\n", - "dataset.head()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 232 - }, - "id": "hYZVioA08iuE", - "outputId": "5619a20e-7b60-4fdd-b462-9dc42226a027" - }, - "execution_count": 2, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Mounted at /content/drive\n" - ] - }, - { - "output_type": "execute_result", - "data": { - "text/plain": [ - " ImageId Label\n", - "0 1 0\n", - "1 2 0\n", - "2 3 0\n", - "3 4 0\n", - "4 5 0" - ], - "text/html": [ - "\n", - "
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
ImageIdLabel
010
120
230
340
450
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "\n", - "\n", - "
\n", - "
\n" - ], - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "dataframe", - "variable_name": "dataset", - "summary": "{\n \"name\": \"dataset\",\n \"rows\": 28000,\n \"fields\": [\n {\n \"column\": \"ImageId\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 8083,\n \"min\": 1,\n \"max\": 28000,\n \"num_unique_values\": 28000,\n \"samples\": [\n 18407,\n 5035,\n 18326\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"Label\",\n \"properties\": {\n \"dtype\": \"number\",\n \"std\": 0,\n \"min\": 0,\n \"max\": 0,\n \"num_unique_values\": 1,\n \"samples\": [\n 0\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" - } - }, - "metadata": {}, - "execution_count": 2 - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "
\n", - "## 1. Pytorch 기본" - ], - "metadata": { - "id": "0qcO6qTxCUTU" - } - }, - { - "cell_type": "code", - "source": [ - "# numpy array\n", - "array = [[1,2,3],[4,5,6]]\n", - "first_array = np.array(array)\n", - "print(\"Array Type: {}\".format(type(first_array))) # type\n", - "print(\"Array Shape: {}\".format(first_array.shape)) # shape\n", - "print(first_array)" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "_KdP4S5g7udz", - "outputId": "56e00382-4ed8-4f71-e305-e654af1889cf" - }, - "execution_count": 4, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Array Type: \n", - "Array Shape: (2, 3)\n", - "[[1 2 3]\n", - " [4 5 6]]\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 우리는 NumPy 배열을 살펴보았습니다.\n", - "- 이제 텐서(PyTorch 배열)를 구현하는 방법을 살펴보겠습니다.\n", - "- import torch를 사용하여 PyTorch 라이브러리를 가져옵니다.\n", - "- torch.Tensor() 메서드를 사용하여 텐서를 생성합니다.\n", - "- type: 배열의 타입을 나타냅니다. 이 예제에서는 텐서입니다.\n", - "- shape: 배열의 형태를 나타냅니다. (행 × 열)" - ], - "metadata": { - "id": "HfLiM-u1Cj5l" - } - }, - { - "cell_type": "code", - "source": [ - "# import pytorch library\n", - "import torch\n", - "\n", - "# pytorch array\n", - "tensor = torch.Tensor(array)\n", - "print(\"Array Type: {}\".format(tensor.type())) # type\n", - "print(\"Array Shape: {}\".format(tensor.shape)) # shape\n", - "print(tensor)" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "d-uAA50o7ua4", - "outputId": "4c9c19e1-dbf1-4f90-caf2-572e61d3c798" - }, - "execution_count": 5, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Array Type: torch.FloatTensor\n", - "Array Shape: torch.Size([2, 3])\n", - "tensor([[1., 2., 3.],\n", - " [4., 5., 6.]])\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 할당(Allocation)은 코딩에서 가장 많이 사용되는 기법 중 하나입니다.\n", - "- 따라서 PyTorch를 사용하여 이를 구현하는 방법을 배워봅시다.\n", - "- 학습을 위해 NumPy와 Tensor를 비교해 봅시다.\n", - " - np.ones() = torch.ones()\n", - " - np.random.rand() = torch.rand()" - ], - "metadata": { - "id": "pEvocwKPC6J1" - } - }, - { - "cell_type": "code", - "source": [ - "# numpy ones\n", - "print(\"Numpy {}\\n\".format(np.ones((2, 3)))) # 2x3 in numpy\n", - "\n", - "# pytorch ones\n", - "print(torch.ones(2,3)) # 2x3 in tensor" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "QlHQXzBR7uYo", - "outputId": "cd776167-5ff4-4bad-cf1e-6619fd32ee58" - }, - "execution_count": 7, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Numpy [[1. 1. 1.]\n", - " [1. 1. 1.]]\n", - "\n", - "tensor([[1., 1., 1.],\n", - " [1., 1., 1.]])\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "# numpy random\n", - "print(\"Numpy {}\\n\".format(np.random.rand(2,3))) # 2x3 random numpy array\n", - "\n", - "# pytorch random\n", - "print(torch.rand(2,3)) # 2x3 random tensor" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xEV88BpO7uWc", - "outputId": "f9b449b3-a2d9-47e9-d5ab-7e1211c1b902" - }, - "execution_count": 9, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Numpy [[0.60737527 0.36235617 0.42979969]\n", - " [0.37420243 0.8607521 0.20257992]]\n", - "\n", - "tensor([[0.6001, 0.6567, 0.3195],\n", - " [0.5397, 0.5741, 0.5407]])\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 텐서와 NumPy 배열 간의 변환을 살펴봅시다.\n", - " - torch.from_numpy(): NumPy → Tensor\n", - " - .numpy(): Tensor → NumPy" - ], - "metadata": { - "id": "2TAOGUteDLOv" - } - }, - { - "cell_type": "code", - "source": [ - "# random numpy array\n", - "array = np.random.rand(2,2)\n", - "print(\"{} {}\\n\".format(type(array), array))\n", - "\n", - "# numpy -> tensor\n", - "from_numpy_to_tensor = torch.from_numpy(array)\n", - "print(\"{}\\n\".format(from_numpy_to_tensor))\n", - "\n", - "# tensor -> numpy\n", - "tensor = from_numpy_to_tensor\n", - "from_tensor_to_numpy = tensor.numpy()\n", - "print(\"{} {}\\n\".format(type(from_tensor_to_numpy),from_tensor_to_numpy))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "yWShZwKC7uUM", - "outputId": "eb6525f6-5dd3-4fed-cc4d-f168fa6e0efd" - }, - "execution_count": 10, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " [[0.74167566 0.65020656]\n", - " [0.12166811 0.45198761]]\n", - "\n", - "tensor([[0.7417, 0.6502],\n", - " [0.1217, 0.4520]], dtype=torch.float64)\n", - "\n", - " [[0.74167566 0.65020656]\n", - " [0.12166811 0.45198761]]\n", - "\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "### PyTorch 기본 수학 연산\n", - "- 크기 변경(Resize): view()\n", - "- a와 b는 텐서입니다.\n", - "- 덧셈(Addition): torch.add(a, b) = a + b\n", - "- 뺄셈(Subtraction): torch.sub(b) = a - b\n", - "- 원소별 곱(Element-wise Multiplication): torch.mul(a, b) = a * b\n", - "- 원소별 나눗셈(Element-wise Division): torch.div(a, b) = a / b\n", - "- 평균(Mean): a.mean()\n", - "- 표준 편차(Standard Deviation, std): a.std()\n" - ], - "metadata": { - "id": "bsJkMU_lDZgy" - } - }, - { - "cell_type": "code", - "source": [ - "# 텐서 생성\n", - "tensor = torch.ones(3,3)\n", - "print(\"\\n\",tensor)\n", - "\n", - "# 크기 변경\n", - "print(\"{}{}\\n\".format(tensor.view(9).shape,tensor.view(9)))\n", - "\n", - "# 덧셈\n", - "print(\"Addition: {}\\n\".format(torch.add(tensor,tensor)))\n", - "\n", - "# 뺄셈\n", - "print(\"Subtraction: {}\\n\".format(tensor.sub(tensor)))\n", - "\n", - "# 원소별 곱\n", - "print(\"Element wise multiplication: {}\\n\".format(torch.mul(tensor,tensor)))\n", - "\n", - "# 원소별 나눗셈\n", - "print(\"Element wise division: {}\\n\".format(torch.div(tensor,tensor)))\n", - "\n", - "# 평균\n", - "tensor = torch.Tensor([1,2,3,4,5])\n", - "print(\"Mean: {}\".format(tensor.mean()))\n", - "\n", - "# 표준편차\n", - "print(\"std: {}\".format(tensor.std()))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "V6iLiAPS7uQs", - "outputId": "b838f51a-aa2d-4cd3-8e73-86b2776f50bb" - }, - "execution_count": 11, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - " tensor([[1., 1., 1.],\n", - " [1., 1., 1.],\n", - " [1., 1., 1.]])\n", - "torch.Size([9])tensor([1., 1., 1., 1., 1., 1., 1., 1., 1.])\n", - "\n", - "Addition: tensor([[2., 2., 2.],\n", - " [2., 2., 2.],\n", - " [2., 2., 2.]])\n", - "\n", - "Subtraction: tensor([[0., 0., 0.],\n", - " [0., 0., 0.],\n", - " [0., 0., 0.]])\n", - "\n", - "Element wise multiplication: tensor([[1., 1., 1.],\n", - " [1., 1., 1.],\n", - " [1., 1., 1.]])\n", - "\n", - "Element wise division: tensor([[1., 1., 1.],\n", - " [1., 1., 1.],\n", - " [1., 1., 1.]])\n", - "\n", - "Mean: 3.0\n", - "std: 1.5811388492584229\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "### Variables \n", - "- 변수는 그래디언트(Gradients)를 누적합니다.\n", - "- 우리는 PyTorch를 신경망에 사용할 것입니다. 신경망에서는 역전파(Backpropagation) 과정에서 그래디언트를 계산하게 됩니다. 따라서 그래디언트를 다룰 필요가 있습니다.\n", - "- 변수(Variable)와 텐서(Tensor)의 차이점은 변수가 그래디언트를 누적한다는 것입니다. \n", - "- 변수를 사용하여 수학 연산을 수행할 수도 있습니다. \n", - "- 역전파를 수행하려면 변수가 필요합니다." - ], - "metadata": { - "id": "HxVIlKSQEIXx" - } - }, - { - "cell_type": "code", - "source": [ - "from torch.autograd import Variable\n", - "\n", - "# variable 정의\n", - "var =Variable(torch.ones(3), requires_grad = True)\n", - "var" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "UfpDKji97uOv", - "outputId": "cd44e445-ca82-445a-9000-0c63de3da1bf" - }, - "execution_count": 12, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "tensor([1., 1., 1.], requires_grad=True)" - ] - }, - "metadata": {}, - "execution_count": 12 - } - ] - }, - { - "cell_type": "code", - "source": [ - "# 기본적인 역전파(backward propagation) 수행\n", - "# 주어진 함수 y = x^2\n", - "array = [2,4]\n", - "tensor = torch.Tensor(array)\n", - "x = Variable(tensor, requires_grad = True)\n", - "y = x**2\n", - "print(\" y = \",y)\n", - "\n", - "# 방정식 요약: o = 1/2*sum(y)\n", - "o = (1/2)*sum(y)\n", - "print(\" o = \",o)\n", - "\n", - "# 역전파 실행(그래디언트 계산)\n", - "o.backward()\n", - "\n", - "# 변수는 그래디언트를 누적. 여기서는 x 하나만 존재.\n", - "# 따라선 변수 x는 그래디언트를 가져야 함\n", - "# x의 그래디언트 출\n", - "print(\"gradients: \",x.grad)" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "t4p2w1z_7uMv", - "outputId": "e4a85fde-c16e-4c30-d009-946143252296" - }, - "execution_count": 13, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " y = tensor([ 4., 16.], grad_fn=)\n", - " o = tensor(10., grad_fn=)\n", - "gradients: tensor([2., 4.])\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "
\n", - "## 2. 선형 회귀\n", - "\n", - "- y = Ax + B\n", - " - A = 기울기\n", - " - B = 절편 (y축과 교차하는 점)\n", - "\n", - "- 자동차 가격이 낮으면 더 많이 팔리고, 자동차 가격이 높으면 덜 팔린다는 사실을 우리는 알고 있으며, 이에 대한 데이터셋을 가지고 있습니다.\n", - "\n", - "- 목표는 자동차 가격이 100일 때 팔린 자동차의 수를 예측하는 것입니다." - ], - "metadata": { - "id": "Jq1tID2f9DOP" - } - }, - { - "cell_type": "code", - "source": [ - "# 자동차 회사에서 과거 판매 데이터를 수집했다고 가정\n", - "# 자동차 가격 데이터 정의\n", - "car_prices_array = [3,4,5,6,7,8,9]\n", - "car_price_np = np.array(car_prices_array,dtype=np.float32) # numpy array로 변환\n", - "car_price_np = car_price_np.reshape(-1,1) #reshape\n", - "car_price_tensor = Variable(torch.from_numpy(car_price_np)) # define variable\n", - "\n", - "# 자동차 판매량 데이터 정의\n", - "number_of_car_sell_array = [ 7.5, 7, 6.5, 6.0, 5.5, 5.0, 4.5]\n", - "number_of_car_sell_np = np.array(number_of_car_sell_array,dtype=np.float32) # numpy array 로 변환\n", - "number_of_car_sell_np = number_of_car_sell_np.reshape(-1,1) #reshape\n", - "number_of_car_sell_tensor = Variable(torch.from_numpy(number_of_car_sell_np)) # define variable\n", - "\n", - "# 데이터 시각화\n", - "import matplotlib.pyplot as plt\n", - "plt.scatter(car_prices_array,number_of_car_sell_array)\n", - "plt.xlabel(\"Car Price $\")\n", - "plt.ylabel(\"Number of Car Sell\")\n", - "plt.title(\"Car Price$ VS Number of Car Sell\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 472 - }, - "id": "5r4kXCwf7uKP", - "outputId": "cec45bc1-f9e0-4a37-f77f-9009c55e46dd" - }, - "execution_count": 15, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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/Oc/TalSpcypU6fsfX19fU3Dhg3Nn3/+6fQ5LhcWFmbuvvtus3fv3hxXb3K7ctO7d28TFhaW4zhxcXHm7/9rk2Sio6NNaGioGTdunBk3bpwJCAgwN998s5k0aZKJjIw0b7zxhnnxxReNl5eXueOOOxz2b9mypalUqZIJCgoygwYNMm+99ZZp3ry5kWRmzJjh8J4587O5VFOdOnVMYGCgGTVqlJk8ebL9Z5ybS6+rTZs25u233zaDBg0ynp6e5rbbbjPnz583xhjz+eef23//4uPjzQcffGC2bt2a6/HOnDljSpYsae688848z/l3VapUMU888YSZNGmSmTBhgmncuLGRZL766qt8v7YjR44YSebuu+82Z86cueL5z5w5Y6Kjo02FChXM888/b6ZMmWJ69eplbDabGTJkSI4auHJz4yLc4LqSlpZmJOX4oLiS3IaA2rdvnyMghYWFGUlm8eLFTh33Urj5/fffze+//26SkpLMK6+8Ymw2m4mOjnbquH8PN//5z3+MJDN//vwcfbOzs40xxnzwwQfGw8PDrFq1ymH7lClTjCTz008/GWMufhB4eHiYF154wRjjergxxpjhw4cbSWbXrl32trS0NOPj42O6d+/u0PdS7aVLlzYdO3Y0L7/8stm4caPT57oUbowx5pFHHjE+Pj72YceCCDfe3t4Or3/q1KlGkgkODnYYkomNjc3xIdiyZUsjybzxxhv2tszMTHPrrbeaoKAge7hw9mdzqSYPDw+zffv2q743x48fN15eXqZdu3YmKyvL3j5p0iQjybz33ns5Xv/VhqW2bt1qJOUIBVfy939L58+fN1FRUTkCkiuvzRhjevXq5TBk+vrrr5udO3fm6DdmzBhTunRps3v3bof2ESNGGE9PT5OcnOxQA+HmxsWwFK4r6enpkpTrJfS8+Pr62v87LS1Nf/zxh1q2bKl9+/YpLS3NoW94eLjat2/v9LHPnDmjwMBABQYGKiIiQs8//7xiYmL0+eef5+u4n332mW655RZ17do1x7ZLQy3z5s1TnTp1VLt2bf3xxx/2x5133ilJ+u677yRJpUqV0v33369XX31V/fr10+HDh3X48GGnX5t0cWhKujh5+PIaMzIy7ENSl4waNUpz5sxR/fr1tWTJEr3wwgtq2LChGjRooJ07d7p03hdffFF//fWXxo0b59J+V9K6dWuHYazbb79dknTfffc5/D5dat+3b5/D/iVKlNBjjz1mf+7l5aXHHntMx48f18aNGyU5/7O5pGXLloqMjLxq7cuWLdP58+c1dOhQhwno/fv3l7+/vxYtWuTMW+DgWv8tpaamKi0tTS1atNCmTZty9HX2tUkXh44nTZqk8PBwff7553rmmWdUp04dtW7d2uF3dt68eWrRooXKlSvn8P62adNGWVlZ+uGHH5x+LbA2wg2uK/7+/pKkU6dOOb3PTz/9pDZt2qh06dIqW7asAgMD7Xd/5BZuXOHj46OlS5dq6dKl+uGHH3To0CH99NNPqlatWr6Ou3fv3quup7Jnzx5t377dHqouPWrWrClJOn78uL3vzJkzNXr0aP38889KSkpS8+bNFR4eroSEBKfqiY6OVlRUlD766CN725w5c3TTTTflGta6d++uVatWKTU1Vd9++60eeughbd68WZ06dXL6Ti1Jqlatmh5++GFNmzZNKSkpTu93JTfffLPD84CAAElSaGhoru2pqakO7ZUqVVLp0qUd2i6955fm6Ljys5Gc/724NEeqVq1aDu1eXl6qVq2aU3Oo/i4//5a++uorNWnSRD4+PipfvrwCAwMVHx+f49+R5Nq/JQ8PDw0cOFAbN27UH3/8oS+//FIdO3bUihUr7HfjSRff38WLF+d4f9u0aSMp5/uLGxe3guO64u/vr0qVKikxMdGp/nv37lXr1q1Vu3ZtTZgwQaGhofLy8tLXX3+t//73vzkmIV7+l6kzPD097f9jvRJXj3sl2dnZqlevniZMmJDr9ss/rL29vTVixAiNGDFCrVq10kMPPaRPPvlEffv2la+vr8MHR1569uypESNGaMOGDapSpYq+++47PfbYYypRIu//ffj7+6tt27Zq27atSpYsqVmzZunnn39Wy5YtnX6dL7zwgj744AONHz9eXbp0ybH975OGL8lrXRZPT0+X2o0xzhV6GVd+NlLB/l64KiIiQiVKlLBPqr6aVatW6d5779U//vEPvfPOOwoJCVHJkiWVkJDgcGXvkvy+tgoVKujee+/Vvffeq1atWun777/XwYMHFRYWpuzsbLVt21bPPvtsrvteCpEA4QbXnXvuuUfTpk3TmjVrFBMTc8W+CxcuVGZmphYsWODwl/vfhweKi+rVq181uFWvXl1bt25V69at8/yAz0u7du3Up08fVapUSZ9++qlT4aZ79+6KjY3VnDlzFBYWpqysrBxDUlfSqFEjzZo1y+UrMNWrV1fPnj01depU+1DR5cqVK+dwp9Al+bmK4YwjR47ozJkzDldvdu/eLUn24a5r+dlcSVhYmKSL6yJdflXw/Pnz2r9/v1MB++9KlSqlO++8UytWrNChQ4dyBK+/++yzz+Tj46MlS5bI29vb3u7sVcD8aNSokb7//nulpKQoLCxM1atX1+nTp/P1enFjYVgK151nn31WpUuX1qOPPqpjx47l2L537169+eabkv73V/nlf4WnpaUV6v+Qr8V9992nrVu35pizI/3vNdx///06fPiwpk+fnqPPuXPndObMGUkXb0nObaXm7OxsZWdnO/2X9c0336wWLVpo7ty5mj17tsLDw9W0aVOHPmfPntWaNWty3f+bb76RlHNIxRkvvviiLly4oFdffTXHturVqystLU2//PKLvS0lJSXX964g/PXXXw5LA5w/f15Tp05VYGCgGjZsKMn5n42r2rRpIy8vL7311lsOv8szZsxQWlqa7r777nwdNy4uTsYYPfzwwzp9+nSO7Rs3btSsWbMkXfy3ZLPZHK6MHThwQF988UW+zn3J0aNHtWPHjhzt58+f1/Lly+Xh4WFfjPD+++/XmjVrtGTJkhz9T548qb/++uuaaoF1cOUG153q1atrzpw5euCBB1SnTh2HFYpXr16tefPm2dfmaNeunby8vNSpUyc99thjOn36tKZPn66goKACm8tRkIYPH65PP/1U3bp1U9++fdWwYUOdOHFCCxYs0JQpU3TLLbfo4Ycf1ieffKLHH39c3333nZo1a6asrCz9+uuv+uSTT+zr6aSkpKh58+bq27evmjZtqvT0dC1YsEDz589XamqqHnroIafr6tmzp/7v//5PR44c0QsvvJBj+9mzZ9W0aVM1adJEHTp0UGhoqE6ePKkvvvhCq1atUpcuXVS/fn2X349LV28ufcBe7sEHH9Rzzz2nrl27avDgwTp79qzi4+NVs2bNXCe4XqtKlSpp/PjxOnDggGrWrKm5c+dqy5YtmjZtmkqWLClJTv9sXBUYGKjY2FiNGjVKHTp00L333qtdu3bpnXfe0W233Waf+O2qpk2bavLkyXriiSdUu3ZthxWKV65cqQULFuill16SdHHV6gkTJqhDhw566KGHdPz4cU2ePFkREREOAdNVv/32mxo3bqw777xTrVu3VnBwsI4fP66PPvpIW7du1dChQ3XTTTdJuvjvY8GCBbrnnnvUp08fNWzYUGfOnNG2bdv06aef6sCBA/a+uMG59V4t4Brs3r3b9O/f31StWtV4eXkZPz8/06xZM/P222+bjIwMe78FCxaY6Oho4+PjY6pWrWrGjx9v3nvvvRy3hV5+K7Iz8lrn5u+udNy/3wpujDF//vmnGTRokKlcubLx8vIyVapUMb179zZ//PGHvc/58+fN+PHjTd26dY23t7cpV66cadiwoRk1apRJS0szxhiTkZFhJkyYYJo1a2ZuuukmI8mUKVPGNGzY0HzyySdOv05jjDlx4oTx9vY2ksyOHTtybL9w4YKZPn266dKliwkLCzPe3t6mVKlSpn79+ua1114zmZmZVz1HXu/Tnj17jKenZ64rFH/77bcmKirKeHl5mVq1apnZs2fneSv4wIEDHdr2799vJJnXXnvNoT23284vrVC8YcMGExMTY3x8fExYWFiOtZKMce5nk1dNVzNp0iRTu3ZtU7JkSVOxYkUzYMAAk5qa6tDH2VvBL7dx40bz0EMPmUqVKpmSJUuacuXKmdatW5tZs2Y53Ho+Y8YMU6NGDePt7W1q165tEhISnH6/85Kenm7efPNN0759e1OlShVTsmRJ4+fnZ2JiYsz06dPtSyBccurUKRMbG2siIiKMl5eXuemmm0zTpk3N66+/br8l/1IN3Ap+47IZk49ZcwCuO61atdLMmTNzXdUXAKyEOTcAAMBSCDfADaJPnz4qW7asu8sAgELHsBQAALAUrtwAAABLIdwAAABLIdwAAABLueEW8cvOztaRI0fk5+dXoMujAwCAwmOM0alTp1SpUiV5eFz52swNF26OHDly1e9QAQAAxdOhQ4dUpUqVK/a54cKNn5+fpItvjr+/v5urAQAAzkhPT1doaKj9c/xKbrhwc2koyt/fn3ADAMB1xpkpJUwoBgAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlnLDrVBcWLKyjdbtP6HjpzIU5OejxuHl5enBF3MCAFDU3HrlpmrVqrLZbDkeAwcOzLX/zJkzc/T18fEp4qpzWpyYoubjV6j79LUa8vEWdZ++Vs3Hr9DixBR3lwYAwA3HrVdu1q9fr6ysLPvzxMREtW3bVt26dctzH39/f+3atcv+3JnvmChMixNTNGD2Jpm/tR9Ny9CA2ZsU37OBOkSFuKU2AABuRG4NN4GBgQ7Px40bp+rVq6tly5Z57mOz2RQcHFzYpTklK9to1MIdOYKNJBlJNkmjFu5Q28hghqgAACgixWZC8fnz5zV79mz17dv3ildjTp8+rbCwMIWGhqpz587avn37FY+bmZmp9PR0h0dBWbf/hFLSMvLcbiSlpGVo3f4TBXZOAABwZcUm3HzxxRc6efKk+vTpk2efWrVq6b333tOXX36p2bNnKzs7W02bNtVvv/2W5z5jx45VQECA/REaGlpgNR8/lXewyU8/AABw7WzGmNxGVYpc+/bt5eXlpYULFzq9z4ULF1SnTh11795dY8aMybVPZmamMjMz7c/T09MVGhqqtLQ0+fv7X1PNa/b+qe7T116130f9myimeoVrOhcAADey9PR0BQQEOPX5XSxuBT948KCWLVum+fPnu7RfyZIlVb9+fSUlJeXZx9vbW97e3tdaYq4ah5dXSICPjqZl5DrvxiYpOODibeEAAKBoFIthqYSEBAUFBenuu+92ab+srCxt27ZNISHuuRvJ08OmuE6Rki4Gmctdeh7XKZLJxAAAFCG3h5vs7GwlJCSod+/eKlHC8UJSr169FBsba38+evRoffvtt9q3b582bdqknj176uDBg3r00UeLumy7DlEhiu/ZQMEBjuvtBAf4cBs4AABu4PZhqWXLlik5OVl9+/bNsS05OVkeHv/LX6mpqerfv7+OHj2qcuXKqWHDhlq9erUiIyOLsuQcOkSFqG1kMCsUAwBQDBSbCcVFxZUJSQAAoHhw5fPb7cNSAAAABYlwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALKWEuwvA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77//vlq1aqVHHnlELVq0UEREhMLCwvThhx+qR48ehVEnAACAU1y+cnPixAlVq1ZN0sX5NZdu/W7evLl++OGHgq0OAADARS6Hm2rVqmn//v2SpNq1a+uTTz6RdPGKTtmyZQu0OAAAAFe5HG4eeeQRbd26VZI0YsQITZ48WT4+Pho2bJiGDx9e4AUCAAC4wuUViv/u4MGD2rhxoyIiIhQdHV1QdRUaVigGAOD6U6grFP9dWFiYwsLCrvUwAAAABcLpYakVK1YoMjJS6enpObalpaWpbt26WrVqVYEWBwAA4Cqnw83EiRPVv3//XC8FBQQE6LHHHtOECRMKtDgAAABXOR1utm7dqg4dOuS5vV27dtq4cWOBFAUAAJBfToebY8eOqWTJknluL1GihH7//fcCKQoAACC/nA43lStXVmJiYp7bf/nlF4WEhBRIUQAAAPnldLi566679O9//1sZGRk5tp07d05xcXG65557CrQ4AAAAVzm9zs2xY8fUoEEDeXp6atCgQapVq5Yk6ddff9XkyZOVlZWlTZs2qWLFioVa8LVinRsAAK4/hbLOTcWKFbV69WoNGDBAsbGxupSJbDab2rdvr8mTJxf7YAMAAKzPpUX8wsLC9PXXXys1NVVJSUkyxqhGjRoqV65cYdUHAADgknytUFyuXDnddtttBV0LAADANXP5izMBAACKM8INAACwFMINAACwFKfCTYMGDZSamipJGj16tM6ePVuoRQEAAOSXU+Fm586dOnPmjCRp1KhROn36dKEWBQAAkF9O3S1166236pFHHlHz5s1ljNHrr7+uMmXK5Nr3P//5T4EWCADOyMo2Wrf/hI6fylCQn48ah5eXp4fN3WUBcAOnVijetWuX4uLitHfvXm3atEmRkZEqUSJnLrLZbNq0aZNLBRw+fFjPPfecvvnmG509e1YRERFKSEhQo0aN8txn5cqVeuqpp7R9+3aFhobqxRdfVJ8+fZw6HysUA9azODFFoxbuUEra/74eJiTAR3GdItUhiu+8A6zAlc9vp79+4RIPDw8dPXpUQUFB11SkJKWmpqp+/fq64447NGDAAAUGBmrPnj2qXr26qlevnus++/fvV1RUlB5//HE9+uijWr58uYYOHapFixapffv2Vz0n4QawlsWJKRowe5P+/j+yS9ds4ns2IOAAFlCo4aYgjRgxQj/99JNWrVrl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UYeoEMX3bKBRC3c4TC4ODvBRXKdIbgOHZeRrnZtLQWTWrFlq3769tmzZoqioKJeP89tvv6l79+76888/FRgYqObNm2vt2rUKDAyUJCUnJ8vD43/rDKampqp///46evSoypUrp4YNG2r16tWKjIzMz8sAgBtOh6gQtY0MZoViWJpLE4rT0tL0yiuv6O2339att96q8ePHq0WLFoVZX4FzZUISAAAoHgplQvGrr76q8ePHKzg4WB999FGuw1QAAADu5vSVGw8PD/n6+qpNmzby9PTMs9/8+fMLrLjCwJUbAACuP4Vy5aZXr158jxMAACj2nA43M2fOLMQyAAAACobH1bsAAABcPwg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUkq4uwAAAIqzrGyjdftP6PipDAX5+ahxeHl5etjcXRauwK1XbkaOHCmbzebwqF279hX3mTdvnmrXri0fHx/Vq1dPX3/9dRFVCwC40SxOTFHz8SvUffpaDfl4i7pPX6vm41docWKKu0vDFbh9WKpu3bpKSUmxP3788cc8+65evVrdu3dXv379tHnzZnXp0kVdunRRYmJiEVYMALgRLE5M0YDZm5SSluHQfjQtQwNmbyLgFGNuDzclSpRQcHCw/XHTTTfl2ffNN99Uhw4dNHz4cNWpU0djxoxRgwYNNGnSpCKsGABgdVnZRqMW7pDJZdultlELdygrO7cecDe3h5s9e/aoUqVKqlatmnr06KHk5OQ8+65Zs0Zt2rRxaGvfvr3WrFmT5z6ZmZlKT093eAAAcCXr9p/IccXmckZSSlqG1u0/UXRFwWluDTe33367Zs6cqcWLFys+Pl779+9XixYtdOrUqVz7Hz16VBUrVnRoq1ixoo4ePZrnOcaOHauAgAD7IzQ0tEBfAwDAeo6fyjvY5KcfipZb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\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 이제 이 그래프는 우리가 수집한 데이터입니다.\n", - "- 우리는 자동차 가격이 100달러일 때 판매된 자동차의 수가 무엇일지를 묻는 질문을 가지고 있습니다.\n", - "- 이 질문을 해결하기 위해 우리는 선형 회귀를 사용해야 합니다.\n", - "- 우리는 이 데이터에 맞는 선을 찾아야 합니다. 목표는 최소한의 오류로 선을 맞추는 것입니다.\n", - "\n", - "---\n", - "\n", - "- **선형 회귀의 단계**\n", - " 1. LinearRegression 클래스를 생성합니다.\n", - " 2. 이 LinearRegression 클래스로 모델을 정의합니다.\n", - " 3. MSE: 평균 제곱 오차(Mean Squared Error)\n", - " 4. 최적화 (SGD: 확률적 경사 하강법)\n", - " 5. 역전파 (Backpropagation)\n", - " 6. 예측 (Prediction)" - ], - "metadata": { - "id": "MOlzmdG89JCT" - } - }, - { - "cell_type": "code", - "source": [ - "# PyTorch를 이용한 선형 회귀 모델 구현\n", - "\n", - "import torch\n", - "from torch.autograd import Variable\n", - "import torch.nn as nn\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")\n", - "\n", - "# 선형 회귀 클래스 정의\n", - "class LinearRegression(nn.Module):\n", - " def __init__(self, input_size, output_size):\n", - " super(LinearRegression, self).__init__()\n", - " self.linear=nn.Linear(input_dim,output_dim) # apply linear function\n", - "\n", - " def forward(self, x):\n", - " return self.linear(x)\n", - "\n", - "# 모델 정의\n", - "input_dim = 1\n", - "output_dim = 1\n", - "model = LinearRegression(input_dim,output_dim)\n", - "\n", - "# 손실 함수 (MSE)\n", - "mse = nn.MSELoss()\n", - "\n", - "# 옵티마이저 (SGD 사용)\n", - "learning_rate = 0.02\n", - "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n", - "\n", - "# 모델 학습\n", - "loss_list = []\n", - "iteration_number = 1001\n", - "for iteration in range(iteration_number):\n", - " optimizer.zero_grad() # 기울기 초기화\n", - " results = model(car_price_tensor) # 예측값 계산\n", - " loss =mse(results, number_of_car_sell_tensor) # 손실 계산\n", - " # 역전파 실행\n", - " loss.backward()\n", - " # 가중치 업데이트\n", - " optimizer.step()\n", - " # loss 저장\n", - " loss_list.append(loss.data)\n", - " # loss 출력\n", - " if iteration % 50 == 0:\n", - " print(f'epoch {iteration}, loss {loss.data}')\n", - "\n", - "# 손실 그래프 시각화\n", - "plt.plot(range(iteration_number), loss_list)\n", - "plt.xlabel(\"Number of Iterations\")\n", - "plt.ylabel(\"Loss\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 839 - }, - "id": "6MvDUc9b7uHf", - "outputId": "b2dc5aa3-1789-4997-c066-b3aa7a2ac99b" - }, - "execution_count": 19, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "epoch 0, loss 57.4945068359375\n", - "epoch 50, loss 4.509761810302734\n", - "epoch 100, loss 3.0474343299865723\n", - "epoch 150, loss 2.059279203414917\n", - "epoch 200, loss 1.3915412425994873\n", - "epoch 250, loss 0.9403228759765625\n", - "epoch 300, loss 0.6354154944419861\n", - "epoch 350, loss 0.4293767511844635\n", - "epoch 400, loss 0.2901478111743927\n", - "epoch 450, loss 0.19606487452983856\n", - "epoch 500, loss 0.1324894279241562\n", - "epoch 550, loss 0.08952870219945908\n", - "epoch 600, loss 0.06049841642379761\n", - "epoch 650, loss 0.04088138788938522\n", - "epoch 700, loss 0.027625257149338722\n", - "epoch 750, loss 0.018667524680495262\n", - "epoch 800, loss 0.012614578939974308\n", - "epoch 850, loss 0.008524337783455849\n", - "epoch 900, loss 0.005760081112384796\n", - "epoch 950, loss 0.0038922152016311884\n", - "epoch 1000, loss 0.0026302249170839787\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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btDBgwfb+qu0W3V1dXrggQfUu3dvRUVF6Qc/+IF+97vf+TyLh+t86latWqXLLrtMKSkpcrlcWrp0qc/2lrqmn3zyiS644AJFRkYqNTVVTzzxRMt8AYNTtmjRIhMeHm7+53/+x2zdutXceOONJiEhwZSUlNguLWhkZWWZhQsXmi1btphNmzaZn/zkJ6Znz57m4MGDzj4333yzSU1NNStXrjQbNmwwo0aNMqNHj3a219bWmkGDBpnMzEyzceNG889//tN07tzZzJw508ZXatfWrVtnevXqZYYMGWJuv/12Zz3XuGXs37/fpKWlmWuvvdasXbvW7Nixw7z99tvmyy+/dPaZM2eOiY+PN0uXLjWbN282l19+uendu7c5fPiws8+Pf/xjM3ToULNmzRrz73//2/Tp08dMmTLFxldqlx599FGTmJho3nzzTbNz506zePFiExMTY5566ilnH67zqfvnP/9p7r//fvPaa68ZSWbJkiU+21vimpaVlZmkpCQzdepUs2XLFvPKK6+YqKgo8+c//zng+gkyfjj//PNNdna2876urs6kpKSY2bNnW6wquO3Zs8dIMrm5ucYYY0pLS01YWJhZvHixs89nn31mJJnVq1cbY+r/8rndblNcXOzs8+yzz5q4uDhTVVXVtl+gHSsvLzd9+/Y1K1asMBdddJETZLjGLefee+81Y8eOPeZ2r9drkpOTzR/+8AdnXWlpqYmIiDCvvPKKMcaYbdu2GUlm/fr1zj5vvfWWcblc5ttvv2294oPIpZdeaq6//nqfdZMmTTJTp041xnCdW8L3g0xLXdNnnnnGdOzY0effjXvvvdf069cv4JrpWjpF1dXVysvLU2ZmprPO7XYrMzNTq1evtlhZcCsrK5MkderUSZKUl5enmpoan+ucnp6unj17Otd59erVGjx4sJKSkpx9srKy5PF4tHXr1jasvn3Lzs7WpZde6nMtJa5xS3rjjTc0YsQI/exnP1PXrl01bNgw/eUvf3G279y5U8XFxT7XOj4+XiNHjvS51gkJCRoxYoSzT2Zmptxut9auXdt2X6YdGz16tFauXKkvvvhCkrR582Z98MEHmjBhgiSuc2toqWu6evVqXXjhhQoPD3f2ycrKUn5+vg4cOBBQjaf9QyNb2t69e1VXV+fzD7skJSUl6fPPP7dUVXDzer2aPn26xowZo0GDBkmSiouLFR4eroSEBJ99k5KSVFxc7OxztD+Hxm2QFi1apI8//ljr168/YhvXuOXs2LFDzz77rGbMmKHf/OY3Wr9+vX79618rPDxc06ZNc67V0a5l82vdtWtXn+2hoaHq1KkT17rBfffdJ4/Ho/T0dIWEhKiurk6PPvqopk6dKklc51bQUte0uLhYvXv3PuIcjds6duzod40EGViXnZ2tLVu26IMPPrBdymmlsLBQt99+u1asWKHIyEjb5ZzWvF6vRowYoccee0ySNGzYMG3ZskXPPfecpk2bZrm608ff//53vfTSS3r55Zc1cOBAbdq0SdOnT1dKSgrX+QxG19Ip6ty5s0JCQo6Y2VFSUqLk5GRLVQWvW2+9VW+++abee+899ejRw1mfnJys6upqlZaW+uzf/DonJycf9c+hcduZLi8vT3v27NG5556r0NBQhYaGKjc3V/Pnz1doaKiSkpK4xi2kW7duGjBggM+6/v37q6CgQFLTtTrevxvJycnas2ePz/ba2lrt37+fa93g7rvv1n333aerr75agwcP1jXXXKM77rhDs2fPlsR1bg0tdU1b898SgswpCg8P1/Dhw7Vy5Upnndfr1cqVK5WRkWGxsuBijNGtt96qJUuW6N133z2iyXH48OEKCwvzuc75+fkqKChwrnNGRoY+/fRTn79AK1asUFxc3BG/VM5E48eP16effqpNmzY5y4gRIzR16lTnNde4ZYwZM+aI2wd88cUXSktLkyT17t1bycnJPtfa4/Fo7dq1Pte6tLRUeXl5zj7vvvuuvF6vRo4c2Qbfov07dOiQ3G7fX1shISHyer2SuM6toaWuaUZGhlatWqWamhpnnxUrVqhfv34BdStJYvq1PxYtWmQiIiLMCy+8YLZt22Zuuukmk5CQ4DOzA8f3q1/9ysTHx5v333/f7N6921kOHTrk7HPzzTebnj17mnfffdds2LDBZGRkmIyMDGd749TgSy65xGzatMksX77cdOnShanBx9F81pIxXOOWsm7dOhMaGmoeffRRs337dvPSSy+Z6Oho87//+7/OPnPmzDEJCQnm9ddfN5988omZOHHiUaewDhs2zKxdu9Z88MEHpm/fvmf0tODvmzZtmunevbsz/fq1114znTt3Nvfcc4+zD9f51JWXl5uNGzeajRs3Gklm7ty5ZuPGjebrr782xrTMNS0tLTVJSUnmmmuu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lZeXp/79+0uSzj33XG3dulW9evVSnz59fJZTCS9xcXFKSUnRhx9+6LP+ww8/1IABAwKqPzw8XHV1dT7r/K07Ly9PXq9Xf/zjHzVq1CidffbZKioqOuHnfV///v1VWFiowsJCZ922bdtUWlp6St/X5XJpzJgxeuSRR7Rx40aFh4dryZIlJ308EKwIMkAQGjx4sKZOnar58+f7rL/44ov13Xff6YknntBXX32lnJwcvfXWWy32uTk5OVqyZIk+//xzZWdn68CBA7r++uslSdnZ2dq/f7+mTJmi9evX66uvvtLbb7+t66677oS/zL/v7rvv1uOPP65XX31V+fn5uu+++7Rp0ybdfvvtAdXfq1cvrV27Vrt27dLevXvl9Xr9rrtPnz6qqanR008/rR07duhvf/vbEYOXe/XqpYMHD2rlypXau3fvUbucMjMznT/Pjz/+WOvWrdMvf/lLXXTRRRoxYsRJfa+1a9fqscce04YNG1RQUKDXXntN3333nRMygdMZQQYIUrNmzTqi66d///565plnlJOTo6FDh2rdunUnNaPnZM2ZM0dz5szR0KFD9cEHH+iNN95Q586dJclpRamrq9Mll1yiwYMHa/r06UpISPAZj3Myfv3rX2vGjBm68847NXjwYC1fvlxvvPGG+vbtG1D9d911l0JCQjRgwAB16dJFBQUFftc9dOhQzZ07V48//rgGDRqkl1566Yip8aNHj9bNN9+sq666Sl26dNETTzxxxHlcLpdef/11dezYURdeeKEyMzN11lln6dVXXz3p7xUXF6dVq1bpJz/5ic4++2z99re/1R//+EdNmDDh5C8OEKRc5vsd6gAAAEGCFhkAABC0CDIAACBoEWQAAEDQIsgAAICgRZABAABBiyADAACCFkEGAAAELYIMAAAIWgQZAAAQtAgyAAAgaBFkAABA0CLIAACAoPX/A9Z4iNlB5g3dAAAAAElFTkSuQmCC\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 반복 횟수는 1000입니다.\n", - "- 손실 값은 거의 0에 가까우며, 이는 그래프나 1000번째 epoch에서의 손실 값에서 확인할 수 있습니다.\n", - "- 이제 우리는 훈련된 모델을 가지고 있습니다.\n", - "- 훈련된 모델을 사용할 때, 자동차 가격을 예측해 봅시다." - ], - "metadata": { - "id": "9odY_Wb59N8H" - } - }, - { - "cell_type": "code", - "source": [ - "# car price 예측\n", - "predicted = model(car_price_tensor).data.numpy()\n", - "plt.scatter(car_prices_array,number_of_car_sell_array,label = \"original data\",color =\"red\") # original data\n", - "plt.scatter(car_prices_array,predicted,label = \"predicted data\",color =\"blue\") # predicted data\n", - "\n", - "# car price가 10$ 일 때, car sell은?\n", - "predicted_10 = model(Variable(torch.Tensor([[10.0]]))).data.numpy()\n", - "plt.scatter(10, predicted_10, label = \"car price 10$\", color = \"green\")\n", - "plt.legend()\n", - "plt.xlabel(\"Car Price $\")\n", - "plt.ylabel(\"Number of Car Sell\")\n", - "plt.title(\"Original vs Predicted values\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 472 - }, - "id": "FtsHa2uk7uDy", - "outputId": "07ef40d2-76f2-4f95-b382-cc8ddda6cb4b" - }, - "execution_count": 22, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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l8vlePbsmUaCIiIiIiovtZMbb29vJCQkFCvfunUr/Pz8NBIUERERUXmp/VbwadOmoX///khPT4dcLkdsbCwuXbqEtWvXYteuXZURIxEREZHK1O656datG3bu3In9+/fD3Nwc06ZNQ3JyMnbu3Im33367MmIkIiIiUhnfLUVERESvPI2/W6o0T58+xaZNm/D48WN06NABHh4eFTkdERERUYWpnNyMHTsWz549w5IlSwAA+fn5aNmyJS5cuIBq1aphwoQJ2LdvHwICAiotWCIiIqKXUXnOzd69e5Xm1Kxbtw6pqam4cuUKMjMz0bNnT3z11VeVEiQRERGRqlROblJTU+Ht7a3Y37t3L3r06AEXFxdIJBKEhYXhzJkzlRIkERERkapUTm4MDAzw/NzjY8eOoWXLlor96tWrIzMzU7PREREREalJ5eTGy8sLO3fuBACcP38eqampCAoKUtTfvHkTdnZ2mo+QiIiISA0qTyieOHEievfujZ9//hnnz59Hp06d4ObmpqjfvXs3mjdvXilBEhEREalK5Z6b999/H7t370bjxo0xZswYbNq0Sam+WrVqGD58uMYDJCIiIlIHF/EjIiKiV546399qv36BiIiI6FXG5IaIiIj0CpMbIiIi0itqJTdCCKSmpuLp06eVFQ8RERFRhaid3NSrVw9paWmVFQ8RERFRhaiV3BgYGMDDwwP379+vrHiIiIiIKkTtOTdz587FhAkTcO7cucqIh4iIiKhC1F7npkaNGnj8+DEKCgpgbGwMMzMzpfoHDx5oNEBN4zo3RERErx91vr9Vfv1CkcjIyPLGRURERFTp1E5u+vfvXxlxEBEREWmE2snN854+fYr8/HylMg71EBERkS6pPaH40aNHGDlyJGxtbWFubo4aNWoobURERES6pHZyM3HiRPz2229Yvnw5TExMsHr1asycORO1a9fG2rVrKyNGIiIiIpWpPSy1c+dOrF27Fu3atcPAgQMRGBiIevXqwcXFBevWrUOfPn0qI04ietXJZEBCApCRATg4AIGBgFSq66iIqApSu+fmwYMHcHd3B1A4v6bo0e82bdrg999/VzuA9PR0fPzxx6hVqxbMzMzg4+ODkydPlnlMfHw8/P39YWJignr16iEmJkbt6xKRBsXGAq6uQFAQ8NFHhf91dS0sJyLSMrWTG3d3d6SkpAAAPD09sXnzZgCF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\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "
\n", - "## 3. 로지스틱 회귀\n", - "\n", - "- 선형 회귀는 분류 문제에서 적합하지 않습니다.\n", - "- 우리는 분류 문제를 해결하기 위해 로지스틱 회귀를 사용합니다.\n", - "- 선형 회귀 + 로지스틱 함수(소프트맥스) = 로지스틱 회귀\n", - "\n", - " \n", - "- **로지스틱 회귀의 단계**\n", - " 1. 라이브러리 가져오기\n", - " 2. 데이터셋 준비\n", - " - 우리는 MNIST 데이터셋을 사용합니다.\n", - " - 28x28 이미지와 0부터 9까지의 10개의 레이블이 있습니다.\n", - " - 데이터는 정규화되지 않았기 때문에 각 이미지를 255로 나눠 기본적인 정규화를 진행합니다.\n", - " - 데이터를 분할하기 위해 sklearn 라이브러리의 `train_test_split` 메서드를 사용합니다.\n", - " - 학습 데이터 크기는 80%, 테스트 데이터 크기는 20%입니다.\n", - " - 특성(feature)과 목표(target) 텐서를 생성합니다. 이후 텐서에서 변수(variable)를 생성합니다. 이 변수는 기울기 누적을 위해 정의됩니다.\n", - " - `batch_size` = 배치 크기는 예를 들어, 1000개의 샘플이 있을 때, 이 샘플을 한 번에 모두 훈련시킬 수도 있고, 100개의 샘플씩 10개의 그룹으로 나누어 순차적으로 훈련시킬 수도 있습니다. 예를 들어, `batch_size = 100`이라면, 모든 데이터를 한 번 훈련시키는 데 336개의 그룹을 사용합니다. 각 그룹은 100개의 샘플을 가지고 있으며, 총 33600개의 샘플을 훈련합니다.\n", - " - `epoch`: 1 epoch는 모든 샘플을 한 번 훈련시키는 것입니다.\n", - " - 예를 들어, 33600개의 샘플이 있고, 배치 크기(batch_size)는 100, epoch는 29로 설정한 경우, 29번 훈련을 진행합니다. 그럼 총 몇 번의 반복(iteration)이 필요한지 계산해 봅시다:\n", - " - 훈련 데이터 1번 = 33600개의 샘플 훈련\n", - " - 하지만 데이터를 336개의 그룹으로 나누었으므로, 1 epoch는 336번의 반복이 필요합니다.\n", - " - 29 epoch 동안 훈련하므로, 총 반복 횟수는 9744번입니다(대략 10000번).\n", - " - `TensorDataset()`: 텐서를 래핑하는 데이터셋. 각 샘플은 텐서를 첫 번째 차원으로 인덱싱하여 검색됩니다.\n", - " - `DataLoader()`: 데이터셋과 샘플을 결합하고, 데이터셋에 대한 다중 프로세스 반복기를 제공합니다.\n", - " - 데이터셋의 이미지를 하나 시각화해봅니다.\n", - " 3. 로지스틱 회귀 모델 생성\n", - " - 선형 회귀와 비슷합니다.\n", - " - 하지만 예측을 위해 모델에 로지스틱 함수(소프트맥스)가 포함되어야 합니다.\n", - " - PyTorch에서는 로지스틱 함수가 손실 함수에 포함되어 있으며, 이후 단계에서 이를 사용합니다.\n", - " 4. 모델 인스턴스화\n", - " - `input_dim = 28*28` # 이미지 크기 px*px\n", - " - `output_dim = 10` # 레이블 0,1,2,3,4,5,6,7,8,9\n", - " - 모델을 생성합니다.\n", - " 5. 손실 함수 인스턴스화\n", - " - 교차 엔트로피 손실\n", - " - 손실을 계산하는 함수로, 소프트맥스(로지스틱 함수)도 포함되어 있습니다.\n", - " 6. 옵티마이저 인스턴스화\n", - " - SGD 옵티마이저\n", - " 7. 모델 훈련\n", - " 8. 예측\n", - "- 결과적으로, 그래프에서 볼 수 있듯이 손실 값은 감소하고, 정확도는 약 85%까지 증가하며 모델이 훈련되고 있음을 확인할 수 있습니다." - ], - "metadata": { - "id": "7uXrwVTU9VFH" - } - }, - { - "cell_type": "code", - "source": [ - "import torch\n", - "import torch.nn as nn\n", - "from torch.autograd import Variable\n", - "from torch.utils.data import DataLoader\n", - "import pandas as pd\n", - "from sklearn.model_selection import train_test_split" - ], - "metadata": { - "id": "FvnI_38-8CfS" - }, - "execution_count": 23, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "# 데이터셋 준비\n", - "# 데이터 로드\n", - "train = pd.read_csv('/content/drive/MyDrive/train.csv', dtype=np.float32)\n", - "\n", - "# 데이터를 특징(픽셀 값)과 라벨(0~9 숫자)로 분리\n", - "targets_numpy = train.label.values\n", - "features_numpy = train.loc[:, train.columns != \"label\"].values / 255 # 정규화\n", - "\n", - "# 학습 데이터 80%, 테스트 데이터 20%로 분할\n", - "features_train, features_test, targets_train, targets_test = train_test_split(\n", - " features_numpy, targets_numpy, test_size=0.2, random_state=42\n", - ")\n", - "\n", - "# 학습 데이터셋을 텐서로 변환 (경사 계산을 위해 Variable 생성 필요)\n", - "featuresTrain = torch.from_numpy(features_train)\n", - "targetsTrain = torch.from_numpy(targets_train).type(torch.LongTensor) # 데이터 타입은 long\n", - "\n", - "# 테스트 데이터셋을 텐서로 변환\n", - "featuresTest =torch.from_numpy(features_test)\n", - "targetsTest = torch.from_numpy(targets_test).type(torch.LongTensor)\n", - "## 힌트: PyTorch Tesnor를 생성해주세요!\n", - "## 어떤 데이터를 PyTorch Tensor를 변환하고, 어떤 데이터타입을 선택할지 직접 작성해주세요\n", - "\n", - "# 배치 크기, 반복 횟수 및 에포크 설정\n", - "batch_size = 100\n", - "n_iters = 10000\n", - "num_epochs = int(n_iters / (len(features_train) / batch_size))\n", - "\n", - "# PyTorch 학습 및 테스트 데이터셋 생성\n", - "train = torch.utils.data.TensorDataset(featuresTrain, targetsTrain)\n", - "test = torch.utils.data.TensorDataset(featuresTest, targetsTest)\n", - "## 힌트: 입력 데이터와 레이블을 텐서로 변환하여, 이들을 TensorDataset으로 묶어 train과 test 데이터셋을 구성합니다\n", - "## TensorDataset에는 두 개의 텐서를 전달해야 하며, 각각 특징과 레이블에 해당합니다.\n", - "## 첫 번째 텐서는 입력 데이터, 두 번째 텐서는 정답 데이터이며 입력 데이터와 정답 데이터의 샘플 수가 동일해야 합니다.\n", - "\n", - "# 데이터 로더 생성\n", - "train_loader = DataLoader(train, batch_size=batch_size, shuffle=False)\n", - "test_loader = DataLoader(test, batch_size=batch_size, shuffle=False)\n", - "\n", - "# 데이터셋 중 하나의 이미지를 시각화\n", - "plt.imshow(features_numpy[10].reshape(28, 28))\n", - "plt.axis(\"off\")\n", - "plt.title(str(targets_numpy[10]))\n", - "plt.savefig('graph.png')\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 428 - }, - "id": "cPmM5DM48Cb6", - "outputId": "22311837-01e2-4b58-e0b7-71ad43f36473" - }, - "execution_count": 25, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "code", - "source": [ - "# 로지스틱 회귀 모델 생성\n", - "class LogisticRegressionModel(nn.Module):\n", - " def __init__(self, input_dim, output_dim):\n", - " super(LogisticRegressionModel, self).__init__()\n", - " # 선형 계층 설정\n", - " self.linear = nn.Linear(input_dim, output_dim)\n", - " # 로지스틱 함수는 손실 함수에 포함되어 있으므로 별도로 정의할 필요 없음\n", - "\n", - " def forward(self, x):\n", - " out = self.linear(x)\n", - " return out\n", - "\n", - "# 모델 인스턴스화\n", - "input_dim = 28 * 28 # 이미지 크기 (픽셀 * 픽셀)\n", - "output_dim = 10 # 출력 라벨 (0~9)\n", - "\n", - "# 로지스틱 회귀 모델 생성\n", - "model = LogisticRegressionModel(input_dim, output_dim)\n", - "\n", - "# 크로스 엔트로피 손실 함수\n", - "error = nn.CrossEntropyLoss()\n", - "\n", - "# SGD 옵티마이저 설정\n", - "learning_rate = 0.001\n", - "optimizer =torch.optim.SGD(model.parameters(), lr=learning_rate)\n", - "## 힌트: 모델 파라미터를 model.parameters()로 넘겨줍니다\n", - "## 학습률(learning rate)은 훈련 속도를 결정합니다\n", - "## 최적화 함수가 SGD이므로, torch.optim.SGD를 사용합니다" - ], - "metadata": { - "id": "S73aSJuz8CZq" - }, - "execution_count": 27, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "# 모델 학습\n", - "count = 0\n", - "loss_list = []\n", - "iteration_list = []\n", - "for epoch in range(num_epochs):\n", - " for i, (images, labels) in enumerate(train_loader):\n", - "\n", - " # 변수 정의\n", - " train = Variable(images.view(-1, 28 * 28))\n", - " labels = Variable(labels)\n", - "\n", - " # 경사 초기화\n", - " optimizer.zero_grad()\n", - "\n", - " # 순전파\n", - " outputs = model(train)\n", - "\n", - " # 소프트맥스 및 크로스 엔트로피 손실 계산\n", - " loss = error(outputs, labels)\n", - "\n", - " # 역전파를 통한 경사 계산\n", - " loss.backward()\n", - "\n", - " # 가중치 업데이트\n", - " optimizer.step()\n", - "\n", - " count += 1\n", - "\n", - " # 정확도 측정\n", - " if count % 50 == 0:\n", - " correct = 0\n", - " total = 0\n", - " # 테스트 데이터셋 예측 수행\n", - " for images, labels in test_loader:\n", - " test = Variable(images.view(-1, 28 * 28))\n", - "\n", - " # 순전파\n", - " outputs = model(test)\n", - "\n", - " # 최댓값을 기준으로 예측값 결정\n", - " predicted = torch.max(outputs.data, 1)[1]\n", - "\n", - " # 전체 라벨 개수\n", - " total += len(labels)\n", - "\n", - " # 맞춘 개수 계산\n", - " correct += (predicted == labels).sum()\n", - "\n", - " accuracy = 100 * correct / float(total)\n", - "\n", - " # 손실 및 반복 횟수 저장\n", - " loss_list.append(loss.data)\n", - " iteration_list.append(count)\n", - "\n", - " # 500번마다 손실 출력\n", - " if count % 500 == 0:\n", - " print('Iteration: {} Loss: {} Accuracy: {}%'.format(count, loss.data, accuracy))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Oc4X8eZt8CXq", - "outputId": "28dca2c1-6ea1-41bf-b83c-451acf46677e" - }, - "execution_count": 28, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Iteration: 500 Loss: 1.8648936748504639 Accuracy: 68.22618865966797%\n", - "Iteration: 1000 Loss: 1.5949221849441528 Accuracy: 75.76190185546875%\n", - "Iteration: 1500 Loss: 1.2798724174499512 Accuracy: 78.46428680419922%\n", - "Iteration: 2000 Loss: 1.203356146812439 Accuracy: 79.88095092773438%\n", - "Iteration: 2500 Loss: 1.0473371744155884 Accuracy: 81.20237731933594%\n", - "Iteration: 3000 Loss: 0.9176527261734009 Accuracy: 82.19047546386719%\n", - "Iteration: 3500 Loss: 0.9006666541099548 Accuracy: 82.76190185546875%\n", - "Iteration: 4000 Loss: 0.7445427179336548 Accuracy: 83.28571319580078%\n", - "Iteration: 4500 Loss: 0.9780916571617126 Accuracy: 83.71428680419922%\n", - "Iteration: 5000 Loss: 0.8077605366706848 Accuracy: 84.14286041259766%\n", - "Iteration: 5500 Loss: 0.749131441116333 Accuracy: 84.47618865966797%\n", - "Iteration: 6000 Loss: 0.8715823888778687 Accuracy: 84.72618865966797%\n", - "Iteration: 6500 Loss: 0.6631848812103271 Accuracy: 84.9047622680664%\n", - "Iteration: 7000 Loss: 0.7165728211402893 Accuracy: 85.16666412353516%\n", - "Iteration: 7500 Loss: 0.62673020362854 Accuracy: 85.39286041259766%\n", - "Iteration: 8000 Loss: 0.7406119704246521 Accuracy: 85.44047546386719%\n", - "Iteration: 8500 Loss: 0.5480479001998901 Accuracy: 85.48809814453125%\n", - "Iteration: 9000 Loss: 0.6580547094345093 Accuracy: 85.69047546386719%\n", - "Iteration: 9500 Loss: 0.5276540517807007 Accuracy: 85.83333587646484%\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "# 시각화\n", - "plt.plot(iteration_list,loss_list)\n", - "plt.xlabel(\"Number of iteration\")\n", - "plt.ylabel(\"Loss\")\n", - "plt.title(\"Logistic Regression: Loss vs Number of iteration\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 472 - }, - "id": "FctKP-1E8CVh", - "outputId": "cdbdddc8-b5aa-4839-f2c0-edd03e1b5f62" - }, - "execution_count": 29, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAnKpJREFUeJzs3Xd4k+X6B/BvkjZJV9K96GTvLXsKUhBRnMhPZTiPgsrBcQ7HI+LRI4rjuMEFuBX3ZsiUvTeUWVq6927TJs/vj+R9m6Rpm5a26fh+riuXNnnz5snbkZv7uZ/7UQghBIiIiIioVkpXD4CIiIioNWDQREREROQEBk1ERERETmDQREREROQEBk1ERERETmDQREREROQEBk1ERERETmDQREREROQEBk1ERERETmDQRI1u3LhxGDduXKOdLyYmBnPmzGm08xGgUCiwZMkSVw+DWpGYmBhcd911rh6G015++WV07NgRKpUK/fv3r/G4OXPmICYmptnG1Rga+28sOY9BUxu2evVqKBQK7N+/39VDqdPOnTuxZMkS5OXlNenrxMTEQKFQyDcvLy8MGTIEn3zySZO+LtVu3Lhx6N27t6uH4XLSz+Wrr75a7bHW9PvsauvXr8eTTz6JkSNHYtWqVXjhhRecfm5JSQmWLFmCLVu2NN0AnXDy5EksWbIECQkJLh0H2XJz9QCo7Vm/fn29n7Nz5048++yzmDNnDnx9fW0ei4+Ph1LZePF9//798dhjjwEAUlNT8eGHH2L27NkoLy/Hfffd12iv05KVlpbCzY2//i3Vyy+/jAcffBCenp6uHkqrtGnTJiiVSnz00UdQq9W1HvvBBx/AZDLJX5eUlODZZ58FAJdmc06ePIlnn30W48aNq5YJa8jfWGoczDRRo1Or1XX+oaoPjUYDd3f3Rjtfhw4dcOedd+LOO+/EE088ge3bt8Pb2xv/+9//Gu01nFVcXNzsrwkAWq2WQVML1b9/f6Snp2PFihWuHkqzq6yshMFguOLzZGRkwMPDw6m/Q+7u7tBoNFf8mnVpzN/1xv4bS85j0EQ4dOgQpkyZAp1OB29vb0yYMAG7d++udtzRo0cxduxYeHh4ICIiAs8//zxWrVoFhUJhk0J2NN/+1ltvoVevXvD09ISfnx8GDx6ML774AgCwZMkSPPHEEwCA2NhYeYpCOqejmqa8vDz8/e9/R0xMDDQaDSIiIjBr1ixkZWXV+/0HBQWhe/fuOH/+vM39JpMJr7/+Onr16gWtVouQkBA88MADyM3NrXbckiVLEB4eDk9PT4wfPx4nT56sNm5pemXr1q146KGHEBwcjIiICPnxP/74A6NHj4aXlxd8fHwwdepUnDhxwua10tLSMHfuXERERECj0SAsLAw33HCDzfXfv38/4uLiEBgYCA8PD8TGxuLuu++2OY+jmiZnfg6k97Bjxw4sXLgQQUFB8PLywo033ojMzEybY/Pz83H69Gnk5+fXev3r491330WvXr2g0WgQHh6OefPmVZvSPXv2LG6++WaEhoZCq9UiIiICt99+u804NmzYgFGjRsHX1xfe3t7o1q0b/vWvf9X62r1798b48eOr3W8ymdChQwfccsst8n1fffUVBg0aBB8fH+h0OvTp0wdvvPGGU+9x5MiRuPrqq7Fs2TKUlpbWemxNtS32dToJCQlQKBR45ZVX8M4776Bjx47w9PTEpEmTkJSUBCEEnnvuOURERMDDwwM33HADcnJyHL7m+vXr0b9/f2i1WvTs2RPff/99tWPy8vKwYMECREZGQqPRoHPnznjppZdsMjrWY3r99dfRqVMnaDQanDx5ssb3W1lZieeee04+NiYmBv/6179QXl4uH6NQKLBq1SoUFxfLf0tWr15d4zmtr1VCQgKCgoIAAM8++6z8fOvfldOnT+OWW26Bv78/tFotBg8ejJ9//tnmnLX9rl+6dAkPPfQQunXrBg8PDwQEBODWW2+1+R1evXo1br31VgDA+PHj5XFIU4aOvu8ZGRm45557EBISAq1Wi379+uHjjz+2Ocb6mr///vvydbzqqquwb9++Gq8RVeE/Ndu5EydOYPTo0dDpdHjyySfh7u6O9957D+PGjcPWrVsxdOhQAEBycrL8y7to0SJ4eXnhww8/dOpfaB988AEeeeQR3HLLLXj00UdRVlaGo0ePYs+ePfi///s/3HTTTThz5gy+/PJL/O9//0NgYCAAyH+87BUVFWH06NE4deoU7r77bgwcOBBZWVn4+eefcfnyZfn5zqqsrMTly5fh5+dnc/8DDzyA1atXY+7cuXjkkUdw8eJFvP322zh06BB27NghZ78WLVqEZcuWYdq0aYiLi8ORI0cQFxeHsrIyh6/30EMPISgoCIsXL5b/9fnpp59i9uzZiIuLw0svvYSS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vjh48GCDxvb7778jNDQUM2fOlO9zd3fHI488gqKiImzdutXm+BkzZthk1kePHg0AuHDhQoNevz1h0NSOZWZmoqSkBN26dav2WI8ePWAymZCUlATAPA/fuXPnasc5us/eP/7xD3h7e2PIkCHo0qUL5s2bV+dUSG3Onz9/RcvThw4dig0bNmDt2rV45ZVX4Ovri9zcXJvCyrNnzyI/Px/BwcFygCXdioqKkJGRAQBykGB/Hfz9/atN90liY2Ntvj579iwA4Oqrr672WuvXr5dfS6PR4KWXXsIff/yBkJAQjBkzBsuWLZM/rABg7NixuPnmm/Hss88iMDAQN9xwA1atWmVT82GvPj8HkqioKJuvpfdaUzB3paTrbD9GtVqNjh07yo/HxsZi4cKF+PDDDxEYGIi4uDi88847NvVMM2bMwMiRI3HvvfciJCQEt99+O9asWeNUADVjxgzs2LFD/nDcsmULMjIyMGPGDPmYhx56CF27dsWUKVMQERGBu+++G2vXrq33ex4zZgzGjx/vVG2Ts+y/b1IAFRkZ6fB+++9n586dq/3DpGvXrgAg1+ScPXsWa9eurfazPHHiRACQf54l9r8PNbl06RKUSmW137XQ0FD4+vraBOxN4dy5cxBC4Omnn6723p555hkAzr230tJSLF68WK73CgwMRFBQEPLy8hpc/3fp0iV06dKl2ipjaTrP/to09+9vW8KaJmpyPXr0QHx8PH799VesXbsW3333Hd59910sXrxYXtrbnAIDA+U/4HFxcejevTuuu+46vPHGG/K/Yk0mE4KDg/H55587PIcz/zKuifW/NKXXAsy1GNa1MhLrDMCCBQswbdo0/Pjjj1i3bh2efvppLF26FJs2bcKAAQOgUCjw7bffYvfu3fjll1+wbt063H333Xj11Vexe/dueHt7N3jc1uz/9SwRQjTK+a/Eq6++ijlz5uCnn37C+vXr8cgjj2Dp0qXYvXu3XOi8bds2bN68Gb/99hvWrl2Lr7/+GldffTXWr19f43sDzEHTokWL8M0332DBggVYs2YN9Ho9Jk+eLB8THByMw4cPY926dfjjjz/wxx9/YNWqVZg1a1a1wty6PPPMMxg3bhzee++9aq04AHNm1dE1NxqNDs9X03trzO+nyWTCNddcgyeffNLh41KQJbH/faiLM9nkpiD9nj7++OOIi4tzeIx9QOfo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\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "code", - "source": [], - "metadata": { - "id": "RdWaIhvQHvkJ" - }, - "execution_count": null, - "outputs": [] - } - ] -} \ No newline at end of file diff --git "a/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\225\210\354\204\234\354\230\201.ipynb" "b/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\225\210\354\204\234\354\230\201.ipynb" new file mode 100644 index 0000000..5a94c48 --- /dev/null +++ "b/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\225\210\354\204\234\354\230\201.ipynb" @@ -0,0 +1,1013 @@ +{ + "nbformat": 4, + "nbformat_minor": 0, + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "name": "python3", + "display_name": "Python 3" + }, + "language_info": { + "name": "python" + } + }, + "cells": [ + { + "cell_type": "markdown", + "source": [ + "# **Week1 복습과제**\n", + "\n", + "1. [Pytorch 기본]\n", + "1. [Linear Regression]\n", + "1. [Logistic Regression]" + ], + "metadata": { + "id": "9mabISNcCPiV" + } + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "id": "T-Govjsw7kBQ" + }, + "outputs": [], + "source": [ + "# import libraries\n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "\n", + "#input data: 첨부된 .csv 파일 다운받아 사용해주세요" + ] + }, + { + "cell_type": "markdown", + "source": [ + "
\n", + "## 1. Pytorch 기본" + ], + "metadata": { + "id": "0qcO6qTxCUTU" + } + }, + { + "cell_type": "code", + "source": [ + "# numpy array\n", + "array = [[1,2,3],[4,5,6]]\n", + "first_array = np.array(array) # 2x3 array\n", + "print(\"Array Type: {}\".format(type(first_array))) # type\n", + "print(\"Array Shape: {}\".format(np.shape(first_array))) # shape\n", + "print(first_array)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "_KdP4S5g7udz", + "outputId": "6baa5fb1-564c-4772-a4a1-c7a9a5f6b0ef" + }, + "execution_count": 3, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Array Type: \n", + "Array Shape: (2, 3)\n", + "[[1 2 3]\n", + " [4 5 6]]\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "- 우리는 NumPy 배열을 살펴보았습니다.\n", + "- 이제 텐서(PyTorch 배열)를 구현하는 방법을 살펴보겠습니다.\n", + "- import torch를 사용하여 PyTorch 라이브러리를 가져옵니다.\n", + "- torch.Tensor() 메서드를 사용하여 텐서를 생성합니다.\n", + "- type: 배열의 타입을 나타냅니다. 이 예제에서는 텐서입니다.\n", + "- shape: 배열의 형태를 나타냅니다. (행 × 열)" + ], + "metadata": { + "id": "HfLiM-u1Cj5l" + } + }, + { + "cell_type": "code", + "source": [ + "# import pytorch library\n", + "import torch\n", + "\n", + "# pytorch array\n", + "tensor = torch.Tensor(array)\n", + "print(\"Array Type: {}\".format(tensor.type)) # type\n", + "print(\"Array Shape: {}\".format(tensor.shape)) # shape\n", + "print(tensor)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "d-uAA50o7ua4", + "outputId": "8f25b35f-0dc9-4a3f-95a5-80139b22fc88" + }, + "execution_count": 4, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Array Type: \n", + "Array Shape: torch.Size([2, 3])\n", + "tensor([[1., 2., 3.],\n", + " [4., 5., 6.]])\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "- 할당(Allocation)은 코딩에서 가장 많이 사용되는 기법 중 하나입니다.\n", + "- 따라서 PyTorch를 사용하여 이를 구현하는 방법을 배워봅시다.\n", + "- 학습을 위해 NumPy와 Tensor를 비교해 봅시다.\n", + " - np.ones() = torch.ones()\n", + " - np.random.rand() = torch.rand()" + ], + "metadata": { + "id": "pEvocwKPC6J1" + } + }, + { + "cell_type": "code", + "source": [ + "# numpy ones\n", + "print(\"Numpy {}\\n\".format(np.ones((2,3)))) # 2x3 in numpy\n", + "\n", + "# pytorch ones\n", + "print(torch.ones((2,3))) # 2x3 in tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "QlHQXzBR7uYo", + "outputId": "1f6ae756-ed08-4c44-d0af-be8d39e7a59a" + }, + "execution_count": 5, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Numpy [[1. 1. 1.]\n", + " [1. 1. 1.]]\n", + "\n", + "tensor([[1., 1., 1.],\n", + " [1., 1., 1.]])\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# numpy random\n", + "print(\"Numpy {}\\n\".format(np.random.rand(2,3))) # 2x3 random numpy array\n", + "\n", + "# pytorch random\n", + "print(torch.rand(2,3)) # 2x3 random tensor" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xEV88BpO7uWc", + "outputId": "666fd35a-94bc-47e0-e7ab-68faccc2bf57" + }, + "execution_count": 6, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Numpy [[0.20136548 0.13054894 0.20158078]\n", + " [0.32359517 0.83742531 0.49613312]]\n", + "\n", + "tensor([[0.8066, 0.4279, 0.4400],\n", + " [0.1623, 0.8999, 0.3644]])\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "- 텐서와 NumPy 배열 간의 변환을 살펴봅시다.\n", + " - torch.from_numpy(): NumPy → Tensor\n", + " - .numpy(): Tensor → NumPy" + ], + "metadata": { + "id": "2TAOGUteDLOv" + } + }, + { + "cell_type": "code", + "source": [ + "# random numpy array\n", + "array = np.random.rand(2,2)\n", + "print(\"{} {}\\n\".format(type(array),array))\n", + "\n", + "# numpy -> tensor\n", + "from_numpy_to_tensor = torch.from_numpy(array)\n", + "print(\"{}\\n\".format(from_numpy_to_tensor))\n", + "\n", + "# tensor -> numpy\n", + "tensor = from_numpy_to_tensor\n", + "from_tensor_to_numpy = tensor.numpy()\n", + "print(\"{} {}\\n\".format(type(from_tensor_to_numpy),from_tensor_to_numpy))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "yWShZwKC7uUM", + "outputId": "03a8c502-c31d-4c71-9d19-7ce47b9e48ac" + }, + "execution_count": 7, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " [[0.15263279 0.91620509]\n", + " [0.3285187 0.51813651]]\n", + "\n", + "tensor([[0.1526, 0.9162],\n", + " [0.3285, 0.5181]], dtype=torch.float64)\n", + "\n", + " [[0.15263279 0.91620509]\n", + " [0.3285187 0.51813651]]\n", + "\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### PyTorch 기본 수학 연산\n", + "- 크기 변경(Resize): view()\n", + "- a와 b는 텐서입니다.\n", + "- 덧셈(Addition): torch.add(a, b) = a + b\n", + "- 뺄셈(Subtraction): a.sub(b) = a - b\n", + "- 원소별 곱(Element-wise Multiplication): torch.mul(a, b) = a * b\n", + "- 원소별 나눗셈(Element-wise Division): torch.div(a, b) = a / b\n", + "- 평균(Mean): a.mean()\n", + "- 표준 편차(Standard Deviation, std): a.std()\n" + ], + "metadata": { + "id": "bsJkMU_lDZgy" + } + }, + { + "cell_type": "code", + "source": [ + "# 텐서 생성\n", + "tensor = torch.ones(3,3)\n", + "print(\"\\n\",tensor)\n", + "\n", + "# 크기 변경\n", + "print(\"{}{}\\n\".format(tensor.view(9).shape,tensor.view(9)))\n", + "\n", + "# 덧셈\n", + "print(\"Addition: {}\\n\".format(torch.add(tensor,tensor)))\n", + "\n", + "# 뺄셈\n", + "print(\"Subtraction: {}\\n\".format(tensor.sub(tensor)))\n", + "\n", + "# 원소별 곱\n", + "print(\"Element wise multiplication: {}\\n\".format(torch.mul(tensor,tensor)))\n", + "\n", + "# 원소별 나눗셈\n", + "print(\"Element wise division: {}\\n\".format(torch.div(tensor,tensor)))\n", + "\n", + "# 평균\n", + "tensor = torch.Tensor([1,2,3,4,5])\n", + "print(\"Mean: {}\".format(tensor.mean()))\n", + "\n", + "# 표준편차\n", + "print(\"std: {}\".format(tensor.std()))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "V6iLiAPS7uQs", + "outputId": "10573960-7b34-431a-e1fe-5e18867f539f" + }, + "execution_count": 8, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "\n", + " tensor([[1., 1., 1.],\n", + " [1., 1., 1.],\n", + " [1., 1., 1.]])\n", + "torch.Size([9])tensor([1., 1., 1., 1., 1., 1., 1., 1., 1.])\n", + "\n", + "Addition: tensor([[2., 2., 2.],\n", + " [2., 2., 2.],\n", + " [2., 2., 2.]])\n", + "\n", + "Subtraction: tensor([[0., 0., 0.],\n", + " [0., 0., 0.],\n", + " [0., 0., 0.]])\n", + "\n", + "Element wise multiplication: tensor([[1., 1., 1.],\n", + " [1., 1., 1.],\n", + " [1., 1., 1.]])\n", + "\n", + "Element wise division: tensor([[1., 1., 1.],\n", + " [1., 1., 1.],\n", + " [1., 1., 1.]])\n", + "\n", + "Mean: 3.0\n", + "std: 1.5811388492584229\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "### Variables \n", + "- 변수는 그래디언트(Gradients)를 누적합니다.\n", + "- 우리는 PyTorch를 신경망에 사용할 것입니다. 신경망에서는 역전파(Backpropagation) 과정에서 그래디언트를 계산하게 됩니다. 따라서 그래디언트를 다룰 필요가 있습니다.\n", + "- 변수(Variable)와 텐서(Tensor)의 차이점은 변수가 그래디언트를 누적한다는 것입니다. \n", + "- 변수를 사용하여 수학 연산을 수행할 수도 있습니다. \n", + "- 역전파를 수행하려면 변수가 필요합니다." + ], + "metadata": { + "id": "HxVIlKSQEIXx" + } + }, + { + "cell_type": "code", + "source": [ + "from torch.autograd import Variable\n", + "\n", + "# variable 정의\n", + "var = Variable(torch.ones(3), requires_grad = True)\n", + "var" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UfpDKji97uOv", + "outputId": "cc13f30a-d4da-4c23-8f75-19c10839eff7" + }, + "execution_count": 9, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "tensor([1., 1., 1.], requires_grad=True)" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 기본적인 역전파(backward propagation) 수행\n", + "# 주어진 함수 y = x^2\n", + "array = [2,4]\n", + "tensor = torch.Tensor(array)\n", + "x = Variable(tensor, requires_grad = True)\n", + "y = x**2\n", + "print(\" y = \",y)\n", + "\n", + "# 방정식 요약: o = 1/2*sum(y)\n", + "o = (1/2)*sum(y)\n", + "print(\" o = \",o)\n", + "\n", + "# 역전파 실행(그래디언트 계산)\n", + "o.backward#()\n", + "\n", + "# 변수는 그래디언트를 누적. 여기서는 x 하나만 존재.\n", + "# 따라선 변수 x는 그래디언트를 가져야 함\n", + "# x의 그래디언트 출\n", + "print(\"gradients: \",x.grad)" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "t4p2w1z_7uMv", + "outputId": "3fd89740-fa35-4f39-9fa9-964d0f16d44e" + }, + "execution_count": 10, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + " y = tensor([ 4., 16.], grad_fn=)\n", + " o = tensor(10., grad_fn=)\n", + "gradients: None\n" + ] + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "
\n", + "## 2. 선형 회귀\n", + "\n", + "- y = Ax + B\n", + " - A = 기울기\n", + " - B = 절편 (y축과 교차하는 점)\n", + "\n", + "- 자동차 가격이 낮으면 더 많이 팔리고, 자동차 가격이 높으면 덜 팔린다는 사실을 우리는 알고 있으며, 이에 대한 데이터셋을 가지고 있습니다.\n", + "\n", + "- 목표는 자동차 가격이 100일 때 팔린 자동차의 수를 예측하는 것입니다." + ], + "metadata": { + "id": "Jq1tID2f9DOP" + } + }, + { + "cell_type": "code", + "source": [ + "# 자동차 회사에서 과거 판매 데이터를 수집했다고 가정\n", + "# 자동차 가격 데이터 정의\n", + "car_prices_array = [3,4,5,6,7,8,9]\n", + "car_price_np = np.array(car_prices_array,dtype=np.float32) # numpy array로 변환\n", + "car_price_np = car_price_np.reshape(-1,1) #reshape\n", + "car_price_tensor = Variable(torch.from_numpy(car_price_np)) # define variable\n", + "\n", + "# 자동차 판매량 데이터 정의\n", + "number_of_car_sell_array = [ 7.5, 7, 6.5, 6.0, 5.5, 5.0, 4.5]\n", + "number_of_car_sell_np = np.array(number_of_car_sell_array,dtype=np.float32)\n", + "number_of_car_sell_np = number_of_car_sell_np.reshape(-1,1)\n", + "number_of_car_sell_tensor = Variable(torch.from_numpy(number_of_car_sell_np))\n", + "\n", + "# 데이터 시각화\n", + "import matplotlib.pyplot as plt\n", + "plt.scatter(car_prices_array,number_of_car_sell_array)\n", + "plt.xlabel(\"Car Price $\")\n", + "plt.ylabel(\"Number of Car Sell\")\n", + "plt.title(\"Car Price$ VS Number of Car Sell\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "5r4kXCwf7uKP", + "outputId": "2ba1b279-1215-41f0-b4d5-1083a7262518" + }, + "execution_count": 14, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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/Oc/TalSpcypU6fsfX19fU3Dhg3Nn3/+6fQ5LhcWFmbuvvtus3fv3hxXb3K7ctO7d28TFhaW4zhxcXHm7/9rk2Sio6NNaGioGTdunBk3bpwJCAgwN998s5k0aZKJjIw0b7zxhnnxxReNl5eXueOOOxz2b9mypalUqZIJCgoygwYNMm+99ZZp3ry5kWRmzJjh8J4587O5VFOdOnVMYGCgGTVqlJk8ebL9Z5ybS6+rTZs25u233zaDBg0ynp6e5rbbbjPnz583xhjz+eef23//4uPjzQcffGC2bt2a6/HOnDljSpYsae688848z/l3VapUMU888YSZNGmSmTBhgmncuLGRZL766qt8v7YjR44YSebuu+82Z86cueL5z5w5Y6Kjo02FChXM888/b6ZMmWJ69eplbDabGTJkSI4auHJz4yLc4LqSlpZmJOX4oLiS3IaA2rdvnyMghYWFGUlm8eLFTh33Urj5/fffze+//26SkpLMK6+8Ymw2m4mOjnbquH8PN//5z3+MJDN//vwcfbOzs40xxnzwwQfGw8PDrFq1ymH7lClTjCTz008/GWMufhB4eHiYF154wRjjergxxpjhw4cbSWbXrl32trS0NOPj42O6d+/u0PdS7aVLlzYdO3Y0L7/8stm4caPT57oUbowx5pFHHjE+Pj72YceCCDfe3t4Or3/q1KlGkgkODnYYkomNjc3xIdiyZUsjybzxxhv2tszMTHPrrbeaoKAge7hw9mdzqSYPDw+zffv2q743x48fN15eXqZdu3YmKyvL3j5p0iQjybz33ns5Xv/VhqW2bt1qJOUIBVfy939L58+fN1FRUTkCkiuvzRhjevXq5TBk+vrrr5udO3fm6DdmzBhTunRps3v3bof2ESNGGE9PT5OcnOxQA+HmxsWwFK4r6enpkpTrJfS8+Pr62v87LS1Nf/zxh1q2bKl9+/YpLS3NoW94eLjat2/v9LHPnDmjwMBABQYGKiIiQs8//7xiYmL0+eef5+u4n332mW655RZ17do1x7ZLQy3z5s1TnTp1VLt2bf3xxx/2x5133ilJ+u677yRJpUqV0v33369XX31V/fr10+HDh3X48GGnX5t0cWhKujh5+PIaMzIy7ENSl4waNUpz5sxR/fr1tWTJEr3wwgtq2LChGjRooJ07d7p03hdffFF//fWXxo0b59J+V9K6dWuHYazbb79dknTfffc5/D5dat+3b5/D/iVKlNBjjz1mf+7l5aXHHntMx48f18aNGyU5/7O5pGXLloqMjLxq7cuWLdP58+c1dOhQhwno/fv3l7+/vxYtWuTMW+DgWv8tpaamKi0tTS1atNCmTZty9HX2tUkXh44nTZqk8PBwff7553rmmWdUp04dtW7d2uF3dt68eWrRooXKlSvn8P62adNGWVlZ+uGHH5x+LbA2wg2uK/7+/pKkU6dOOb3PTz/9pDZt2qh06dIqW7asAgMD7Xd/5BZuXOHj46OlS5dq6dKl+uGHH3To0CH99NNPqlatWr6Ou3fv3quup7Jnzx5t377dHqouPWrWrClJOn78uL3vzJkzNXr0aP38889KSkpS8+bNFR4eroSEBKfqiY6OVlRUlD766CN725w5c3TTTTflGta6d++uVatWKTU1Vd9++60eeughbd68WZ06dXL6Ti1Jqlatmh5++GFNmzZNKSkpTu93JTfffLPD84CAAElSaGhoru2pqakO7ZUqVVLp0qUd2i6955fm6Ljys5Gc/724NEeqVq1aDu1eXl6qVq2aU3Oo/i4//5a++uorNWnSRD4+PipfvrwCAwMVHx+f49+R5Nq/JQ8PDw0cOFAbN27UH3/8oS+//FIdO3bUihUr7HfjSRff38WLF+d4f9u0aSMp5/uLGxe3guO64u/vr0qVKikxMdGp/nv37lXr1q1Vu3ZtTZgwQaGhofLy8tLXX3+t//73vzkmIV7+l6kzPD097f9jvRJXj3sl2dnZqlevniZMmJDr9ss/rL29vTVixAiNGDFCrVq10kMPPaRPPvlEffv2la+vr8MHR1569uypESNGaMOGDapSpYq+++47PfbYYypRIu//ffj7+6tt27Zq27atSpYsqVmzZunnn39Wy5YtnX6dL7zwgj744AONHz9eXbp0ybH975OGL8lrXRZPT0+X2o0xzhV6GVd+NlLB/l64KiIiQiVKlLBPqr6aVatW6d5779U//vEPvfPOOwoJCVHJkiWVkJDgcGXvkvy+tgoVKujee+/Vvffeq1atWun777/XwYMHFRYWpuzsbLVt21bPPvtsrvteCpEA4QbXnXvuuUfTpk3TmjVrFBMTc8W+CxcuVGZmphYsWODwl/vfhweKi+rVq181uFWvXl1bt25V69at8/yAz0u7du3Up08fVapUSZ9++qlT4aZ79+6KjY3VnDlzFBYWpqysrBxDUlfSqFEjzZo1y+UrMNWrV1fPnj01depU+1DR5cqVK+dwp9Al+bmK4YwjR47ozJkzDldvdu/eLUn24a5r+dlcSVhYmKSL6yJdflXw/Pnz2r9/v1MB++9KlSqlO++8UytWrNChQ4dyBK+/++yzz+Tj46MlS5bI29vb3u7sVcD8aNSokb7//nulpKQoLCxM1atX1+nTp/P1enFjYVgK151nn31WpUuX1qOPPqpjx47l2L537169+eabkv73V/nlf4WnpaUV6v+Qr8V9992nrVu35pizI/3vNdx///06fPiwpk+fnqPPuXPndObMGUkXb0nObaXm7OxsZWdnO/2X9c0336wWLVpo7ty5mj17tsLDw9W0aVOHPmfPntWaNWty3f+bb76RlHNIxRkvvviiLly4oFdffTXHturVqystLU2//PKLvS0lJSXX964g/PXXXw5LA5w/f15Tp05VYGCgGjZsKMn5n42r2rRpIy8vL7311lsOv8szZsxQWlqa7r777nwdNy4uTsYYPfzwwzp9+nSO7Rs3btSsWbMkXfy3ZLPZHK6MHThwQF988UW+zn3J0aNHtWPHjhzt58+f1/Lly+Xh4WFfjPD+++/XmjVrtGTJkhz9T548qb/++uuaaoF1cOUG153q1atrzpw5euCBB1SnTh2HFYpXr16tefPm2dfmaNeunby8vNSpUyc99thjOn36tKZPn66goKACm8tRkIYPH65PP/1U3bp1U9++fdWwYUOdOHFCCxYs0JQpU3TLLbfo4Ycf1ieffKLHH39c3333nZo1a6asrCz9+uuv+uSTT+zr6aSkpKh58+bq27evmjZtqvT0dC1YsEDz589XamqqHnroIafr6tmzp/7v//5PR44c0QsvvJBj+9mzZ9W0aVM1adJEHTp0UGhoqE6ePKkvvvhCq1atUpcuXVS/fn2X349LV28ufcBe7sEHH9Rzzz2nrl27avDgwTp79qzi4+NVs2bNXCe4XqtKlSpp/PjxOnDggGrWrKm5c+dqy5YtmjZtmkqWLClJTv9sXBUYGKjY2FiNGjVKHTp00L333qtdu3bpnXfe0W233Waf+O2qpk2bavLkyXriiSdUu3ZthxWKV65cqQULFuill16SdHHV6gkTJqhDhw566KGHdPz4cU2ePFkREREOAdNVv/32mxo3bqw777xTrVu3VnBwsI4fP66PPvpIW7du1dChQ3XTTTdJuvjvY8GCBbrnnnvUp08fNWzYUGfOnNG2bdv06aef6sCBA/a+uMG59V4t4Brs3r3b9O/f31StWtV4eXkZPz8/06xZM/P222+bjIwMe78FCxaY6Oho4+PjY6pWrWrGjx9v3nvvvRy3hV5+K7Iz8lrn5u+udNy/3wpujDF//vmnGTRokKlcubLx8vIyVapUMb179zZ//PGHvc/58+fN+PHjTd26dY23t7cpV66cadiwoRk1apRJS0szxhiTkZFhJkyYYJo1a2ZuuukmI8mUKVPGNGzY0HzyySdOv05jjDlx4oTx9vY2ksyOHTtybL9w4YKZPn266dKliwkLCzPe3t6mVKlSpn79+ua1114zmZmZVz1HXu/Tnj17jKenZ64rFH/77bcmKirKeHl5mVq1apnZs2fneSv4wIEDHdr2799vJJnXXnvNoT23284vrVC8YcMGExMTY3x8fExYWFiOtZKMce5nk1dNVzNp0iRTu3ZtU7JkSVOxYkUzYMAAk5qa6tDH2VvBL7dx40bz0EMPmUqVKpmSJUuacuXKmdatW5tZs2Y53Ho+Y8YMU6NGDePt7W1q165tEhISnH6/85Kenm7efPNN0759e1OlShVTsmRJ4+fnZ2JiYsz06dPtSyBccurUKRMbG2siIiKMl5eXuemmm0zTpk3N66+/br8l/1IN3Ap+47IZk49ZcwCuO61atdLMmTNzXdUXAKyEOTcAAMBSCDfADaJPnz4qW7asu8sAgELHsBQAALAUrtwAAABLIdwAAABLIdwAAABLueEW8cvOztaRI0fk5+dXoMujAwCAwmOM0alTp1SpUiV5eFz52swNF26OHDly1e9QAQAAxdOhQ4dUpUqVK/a54cKNn5+fpItvjr+/v5urAQAAzkhPT1doaKj9c/xKbrhwc2koyt/fn3ADAMB1xpkpJUwoBgAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlnLDrVBcWLKyjdbtP6HjpzIU5OejxuHl5enBF3MCAFDU3HrlpmrVqrLZbDkeAwcOzLX/zJkzc/T18fEp4qpzWpyYoubjV6j79LUa8vEWdZ++Vs3Hr9DixBR3lwYAwA3HrVdu1q9fr6ysLPvzxMREtW3bVt26dctzH39/f+3atcv+3JnvmChMixNTNGD2Jpm/tR9Ny9CA2ZsU37OBOkSFuKU2AABuRG4NN4GBgQ7Px40bp+rVq6tly5Z57mOz2RQcHFzYpTklK9to1MIdOYKNJBlJNkmjFu5Q28hghqgAACgixWZC8fnz5zV79mz17dv3ildjTp8+rbCwMIWGhqpz587avn37FY+bmZmp9PR0h0dBWbf/hFLSMvLcbiSlpGVo3f4TBXZOAABwZcUm3HzxxRc6efKk+vTpk2efWrVq6b333tOXX36p2bNnKzs7W02bNtVvv/2W5z5jx45VQECA/REaGlpgNR8/lXewyU8/AABw7WzGmNxGVYpc+/bt5eXlpYULFzq9z4ULF1SnTh11795dY8aMybVPZmamMjMz7c/T09MVGhqqtLQ0+fv7X1PNa/b+qe7T116130f9myimeoVrOhcAADey9PR0BQQEOPX5XSxuBT948KCWLVum+fPnu7RfyZIlVb9+fSUlJeXZx9vbW97e3tdaYq4ah5dXSICPjqZl5DrvxiYpOODibeEAAKBoFIthqYSEBAUFBenuu+92ab+srCxt27ZNISHuuRvJ08OmuE6Rki4Gmctdeh7XKZLJxAAAFCG3h5vs7GwlJCSod+/eKlHC8UJSr169FBsba38+evRoffvtt9q3b582bdqknj176uDBg3r00UeLumy7DlEhiu/ZQMEBjuvtBAf4cBs4AABu4PZhqWXLlik5OVl9+/bNsS05OVkeHv/LX6mpqerfv7+OHj2qcuXKqWHDhlq9erUiIyOLsuQcOkSFqG1kMCsUAwBQDBSbCcVFxZUJSQAAoHhw5fPb7cNSAAAABYlwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALKWEuwvA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77//vlq1aqVHHnlELVq0UEREhMLCwvThhx+qR48ehVEnAACAU1y+cnPixAlVq1ZN0sX5NZdu/W7evLl++OGHgq0OAADARS6Hm2rVqmn//v2SpNq1a+uTTz6RdPGKTtmyZQu0OAAAAFe5HG4eeeQRbd26VZI0YsQITZ48WT4+Pho2bJiGDx9e4AUCAAC4wuUViv/u4MGD2rhxoyIiIhQdHV1QdRUaVigGAOD6U6grFP9dWFiYwsLCrvUwAAAABcLpYakVK1YoMjJS6enpObalpaWpbt26WrVqVYEWBwAA4Cqnw83EiRPVv3//XC8FBQQE6LHHHtOECRMKtDgAAABXOR1utm7dqg4dOuS5vV27dtq4cWOBFAUAAJBfToebY8eOqWTJknluL1GihH7//fcCKQoAACC/nA43lStXVmJiYp7bf/nlF4WEhBRIUQAAAPnldLi566679O9//1sZGRk5tp07d05xcXG65557CrQ4AAAAVzm9zs2xY8fUoEEDeXp6atCgQapVq5Yk6ddff9XkyZOVlZWlTZs2qWLFioVa8LVinRsAAK4/hbLOTcWKFbV69WoNGDBAsbGxupSJbDab2rdvr8mTJxf7YAMAAKzPpUX8wsLC9PXXXys1NVVJSUkyxqhGjRoqV65cYdUHAADgknytUFyuXDnddtttBV0LAADANXP5izMBAACKM8INAACwFMINAACwFKfCTYMGDZSamipJGj16tM6ePVuoRQEAAOSXU+Fm586dOnPmjCRp1KhROn36dKEWBQAAkF9O3S1166236pFHHlHz5s1ljNHrr7+uMmXK5Nr3P//5T4EWCADOyMo2Wrf/hI6fylCQn48ah5eXp4fN3WUBcAOnVijetWuX4uLitHfvXm3atEmRkZEqUSJnLrLZbNq0aZNLBRw+fFjPPfecvvnmG509e1YRERFKSEhQo0aN8txn5cqVeuqpp7R9+3aFhobqxRdfVJ8+fZw6HysUA9azODFFoxbuUEra/74eJiTAR3GdItUhiu+8A6zAlc9vp79+4RIPDw8dPXpUQUFB11SkJKWmpqp+/fq64447NGDAAAUGBmrPnj2qXr26qlevnus++/fvV1RUlB5//HE9+uijWr58uYYOHapFixapffv2Vz0n4QawlsWJKRowe5P+/j+yS9ds4ns2IOAAFlCo4aYgjRgxQj/99JNWrVrl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UYeoEMX3bKBRC3c4TC4ODvBRXKdIbgOHZeRrnZtLQWTWrFlq3769tmzZoqioKJeP89tvv6l79+76888/FRgYqObNm2vt2rUKDAyUJCUnJ8vD43/rDKampqp///46evSoypUrp4YNG2r16tWKjIzMz8sAgBtOh6gQtY0MZoViWJpLE4rT0tL0yiuv6O2339att96q8ePHq0WLFoVZX4FzZUISAAAoHgplQvGrr76q8ePHKzg4WB999FGuw1QAAADu5vSVGw8PD/n6+qpNmzby9PTMs9/8+fMLrLjCwJUbAACuP4Vy5aZXr158jxMAACj2nA43M2fOLMQyAAAACobH1bsAAABcPwg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUkq4uwAAAIqzrGyjdftP6PipDAX5+ahxeHl5etjcXRauwK1XbkaOHCmbzebwqF279hX3mTdvnmrXri0fHx/Vq1dPX3/9dRFVCwC40SxOTFHz8SvUffpaDfl4i7pPX6vm41docWKKu0vDFbh9WKpu3bpKSUmxP3788cc8+65evVrdu3dXv379tHnzZnXp0kVdunRRYmJiEVYMALgRLE5M0YDZm5SSluHQfjQtQwNmbyLgFGNuDzclSpRQcHCw/XHTTTfl2ffNN99Uhw4dNHz4cNWpU0djxoxRgwYNNGnSpCKsGABgdVnZRqMW7pDJZdultlELdygrO7cecDe3h5s9e/aoUqVKqlatmnr06KHk5OQ8+65Zs0Zt2rRxaGvfvr3WrFmT5z6ZmZlKT093eAAAcCXr9p/IccXmckZSSlqG1u0/UXRFwWluDTe33367Zs6cqcWLFys+Pl779+9XixYtdOrUqVz7Hz16VBUrVnRoq1ixoo4ePZrnOcaOHauAgAD7IzQ0tEBfAwDAeo6fyjvY5KcfipZbw03Hjh3VrVs3RUdHq3379vr666918uRJffLJJwV2jtjYWKWlpdkfhw4dKrBjAwCsKcjPp0D7oWgVq1vBy5Ytq5o1ayopKSnX7cHBwTp27JhD27FjxxQcHJznMb29veXt7V2gdQIArK1xeHmFBPjoaFpGrvNubJKCAy7eFo7ix+1zbi53+vRp7d27VyEhIbluj4mJ0fLlyx3ali5dqpiYmKIoDwBwg/D0sCmuU6Ski0Hmcpeex3WKZL2bYsqt4eaZZ57R999/rwMHDmj16tXq2rWrPD091b17d0lSr169FBsba+8/ZMgQLV68WG+88YZ+/fVXjRw5Uhs2bNCgQYPc9RIAABbVISpE8T0bKDjAcegpOMBH8T0bqENU7n+Iw/3cOiz122+/qXv37vrzzz8VGBio5s2ba+3atQoMDJQkJScny8Pjf/mradOmmjNnjl588UU9//zzqlGjhr744gtFRUW56yUAACysQ1SI2kYGs0LxdcZmjLmhbtJPT09XQECA0tLS5O/v7+5yAACAE1z5/C5Wc24AAACuFeEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYCuEGAABYSgl3FwAAAKwhK9to3f4TOn4qQ0F+PmocXl6eHrYir6PYXLkZN26cbDabhg4dmmefmTNnymazOTx8fHyKrkgAAJCrxYkpaj5+hbpPX6shH29R9+lr1Xz8Ci1OTCnyWopFuFm/fr2mTp2q6Ojoq/b19/dXSkqK/XHw4MEiqBAAAORlcWKKBszepJS0DIf2o2kZGjB7U5EHHLeHm9OnT6tHjx6aPn26ypUrd9X+NptNwcHB9kfFihWLoEoAAJCbrGyjUQt3yOSy7VLbqIU7lJWdW4/C4fZwM3DgQN19991q06aNU/1Pnz6tsLAwhYaGqnPnztq+ffsV+2dmZio9Pd3hAQAACsa6/SdyXLG5nJGUkpahdftPFFlNbg03H3/8sTZt2qSxY8c61b9WrVp677339OWXX2r27NnKzs5W06ZN9dtvv+W5z9ixYxUQEGB/hIaGFlT5AADc8I6fyjvY5KdfQXBbuDl06JCGDBmiDz/80OlJwTExMerVq5duvfVWtWzZUvPnz1dgYKCmTp2a5z6xsbFKS0uzPw4dOlRQLwEAgBtekJ9zn+HO9isIbrsVfOPGjTp+/LgaNGhgb8vKytIPP/ygSZMmKTMzU56enlc8RsmSJVW/fn0lJSXl2cfb21ve3t4FVjcAAPifxuHlFRLgo6NpGbnOu7FJCg64eFt4UXHblZvWrVtr27Zt2rJli/3RqFEj9ejRQ1u2bLlqsJEuhqFt27YpJCSkCCoGAAB/5+lhU1ynSEkXg8zlLj2P6xRZpOvduO3KjZ+fn6KiohzaSpcurQoVKtjbe/XqpcqVK9vn5IwePVpNmjRRRESETp48qddee00HDx7Uo48+WuT1AwCAizpEhSi+ZwONWrjDYXJxcICP4jpFqkNU0V6EKNYrFCcnJ8vD438Xl1JTU9W/f38dPXpU5cqVU8OGDbV69WpFRka6sUoAANAhKkRtI4OLxQrFNmNM0d14Xgykp6crICBAaWlp8vf3d3c5AADACa58frt9nRsAAICCRLgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWQrgBAACWUqy/fqEwXFqQOT093c2VAAAAZ1363HbmixVuuHBz6tQpSVJoaKibKwEAAK46deqUAgICrtjnhvtuqezsbB05ckR+fn6y2Qr2y7zS09MVGhqqQ4cO8b1VV8F75TzeK+fxXjmP98o1vF/OK6z3yhijU6dOqVKlSg5fqp2bG+7KjYeHh6pUqVKo5/D39+eX30m8V87jvXIe75XzeK9cw/vlvMJ4r652xeYSJhQDAABLIdwAAABLIdwUIG9vb8XFxcnb29vdpRR7vFfO471yHu+V83ivXMP75bzi8F7dcBOKAQCAtXHlBgAAWArhBgAAWArhBgAAWArhBgAAWArhpgDEx8crOjravmBRTEyMvvnmG3eXVeyNGzdONptNQ4cOdXcpxdLIkSNls9kcHrVr13Z3WcXW4cOH1bNnT1WoUEG+vr6qV6+eNmzY4O6yip2qVavm+L2y2WwaOHCgu0srdrKysvTvf/9b4eHh8vX1VfXq1TVmzBinvtvoRnTq1CkNHTpUYWFh8vX1VdOmTbV+/Xq31HLDrVBcGKpUqaJx48apRo0aMsZo1qxZ6ty5szZv3qy6deu6u7xiaf369Zo6daqio6PdXUqxVrduXS1btsz+vEQJ/snmJjU1Vc2aNdMdd9yhb775RoGBgdqzZ4/KlSvn7tKKnfXr1ysrK8v+PDExUW3btlW3bt3cWFXxNH78eMXHx2vWrFmqW7euNmzYoEceeUQBAQEaPHiwu8srdh599FElJibqgw8+UKVKlTR79my1adNGO3bsUOXKlYu0Fm4FLyTly5fXa6+9pn79+rm7lGLn9OnTatCggd555x299NJLuvXWWzVx4kR3l1XsjBw5Ul988YW2bNni7lKKvREjRuinn37SqlWr3F3KdWfo0KH66quvtGfPngL/vr3r3T333KOKFStqxowZ9rb77rtPvr6+mj17thsrK37OnTsnPz8/ffnll7r77rvt7Q0bNlTHjh310ksvFWk9DEsVsKysLH388cc6c+aMYmJi3F1OsTRw4EDdfffdatOmjbtLKfb27NmjSpUqqVq1aurRo4eSk5PdXVKxtGDBAjVq1EjdunVTUFCQ6tevr+nTp7u7rGLv/Pnzmj17tvr27UuwyUXTpk21fPly7d69W5K0detW/fjjj+rYsaObKyt+/vrrL2VlZcnHx8eh3dfXVz/++GOR18M17gKybds2xcTEKCMjQ2XKlNHnn3+uyMhId5dV7Hz88cfatGmT28Zhrye33367Zs6cqVq1aiklJUWjRo1SixYtlJiYKD8/P3eXV6zs27dP8fHxeuqpp/T8889r/fr1Gjx4sLy8vNS7d293l1dsffHFFzp58qT69Onj7lKKpREjRig9PV21a9eWp6ensrKy9PLLL6tHjx7uLq3Y8fPzU0xMjMaMGaM6deqoYsWK+uijj7RmzRpFREQUfUEGBSIzM9Ps2bPHbNiwwYwYMcLcdNNNZvv27e4uq1hJTk42QUFBZuvWrfa2li1bmiFDhrivqOtIamqq8ff3N++++667Syl2SpYsaWJiYhzannzySdOkSRM3VXR9aNeunbnnnnvcXUax9dFHH5kqVaqYjz76yPzyyy/m/fffN+XLlzczZ850d2nFUlJSkvnHP/5hJBlPT09z2223mR49epjatWsXeS1cuSkgXl5e9nTasGFDrV+/Xm+++aamTp3q5sqKj40bN+r48eNq0KCBvS0rK0s//PCDJk2apMzMTHl6erqxwuKtbNmyqlmzppKSktxdSrETEhKS40ppnTp19Nlnn7mpouLv4MGDWrZsmebPn+/uUoqt4cOHa8SIEXrwwQclSfXq1dPBgwc1duxYrgjmonr16vr+++915swZpaenKyQkRA888ICqVatW5LUw56aQZGdnKzMz091lFCutW7fWtm3btGXLFvujUaNG6tGjh7Zs2UKwuYrTp09r7969CgkJcXcpxU6zZs20a9cuh7bdu3crLCzMTRUVfwkJCQoKCnKY/AlHZ8+elYeH48ekp6ensrOz3VTR9aF06dIKCQlRamqqlixZos6dOxd5DVy5KQCxsbHq2LGjbr75Zp06dUpz5szRypUrtWTJEneXVqz4+fkpKirKoa106dKqUKFCjnZIzzzzjDp16qSwsDAdOXJEcXFx8vT0VPfu3d1dWrEzbNgwNW3aVK+88oruv/9+rVu3TtOmTdO0adPcXVqxlJ2drYSEBPXu3ZvlBa6gU6dOevnll3XzzTerbt262rx5syZMmKC+ffu6u7RiacmSJTLGqFatWkpKStLw4cNVu3ZtPfLII0VfTJEPhFlQ3759TVhYmPHy8jKBgYGmdevW5ttvv3V3WdcF5tzk7YEHHjAhISHGy8vLVK5c2TzwwAMmKSnJ3WUVWwsXLjRRUVHG29vb1K5d20ybNs3dJRVbS5YsMZLMrl273F1KsZaenm6GDBlibr75ZuPj42OqVatmXnjhBZOZmenu0oqluXPnmmrVqhkvLy8THBxsBg4caE6ePOmWWljnBgAAWApzbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgAAgKUQbgBY3syZM1W2bNkiOdfKlSs1c+bMIjkXgNwRbgBck6NHj+rJJ59UtWrV5O3trdDQUHXq1EnLly8v8HMdOHBANpvN/qhQoYLatWunzZs3X3G/Bx54QLt37y7wegAUT4QbAPl24MABNWzYUCtWrNBrr72mbdu2afHixbrjjjs0cODAfB83Kyvril9OuGzZMqWkpGjJkiU6ffq0OnbsqJMnT+ba98KFC/L19VVQUFC+63HGli1b1LZtW91333168sknVa9ePY0cObJQzwkgd4QbAPn2xBNPyGazad26dbrvvvtUs2ZN1a1bV0899ZTWrl1r7zdhwgTVq1dPpUuXVmhoqJ544gmdPn3avv3SsNGCBQsUGRkpb29vJScn53neChUqKDg4WI0aNdLrr7+uY8eO6eeff7Zf2Zk7d65atmwpHx8fffjhh7kOSy1cuFC33XabfHx8dNNNN6lr1672bZmZmXrmmWdUuXJllS5dWrfffrtWrlyZZz3GGHXu3Fm+vr4aO3asnn32Wb3yyivy9fV1/U0FcM0INwDy5cSJE1q8eLEGDhyo0qVL59h+eZjw8PDQW2+9pe3bt2vWrFlasWKFnn32WYf+Z8+e1fjx4/Xuu+9q+/btTl9puRQgzp8/b28bMWKEhgwZop07d6p9+/Y59lm0aJG6du2qu+66S5s3b9by5cvVuHFj+/ZBgwZpzZo1+vjjj/XLL7+oW7du6tChg/bs2ZNrDX/++aeSk5P13HPPqWbNmvahueeee86p1wCggLnl6zoBXPd+/vlnI8nMnz/f5X3nzZtnKlSoYH+ekJBgJJktW7Zccb/9+/cbSWbz5s3GGGNSU1NN165dTZkyZczRo0ft2ydOnOiwX0JCggkICLA/j4mJMT169Mj1HAcPHjSenp7m8OHDDu2tW7c2sbGxedZWq1Yt0759e/Pf//7XJCQkXPF1AChcXLkBkC/GGKf7Llu2TK1bt1blypXl5+enhx9+WH/++afOnj1r7+Pl5aXo6Ginjte0aVOVKVNG5cqV09atWzV37lxVrFjRvr1Ro0ZX3H/Lli1q3bp1rtu2bdumrKws1axZU2XKlLE/vv/+e+3duzfPYy5ZskQVK1bUK6+8oscff1ytW7fWihUrnHo9AApWCXcXAOD6VKNGDdlsNv36669X7HfgwAHdc889GjBggF5++WWVL19eP/74o/r166fz58+rVKlSki4OL9lsNqfOPXfuXEVGRqpChQq53uKd2zDZ5a40F+b06dPy9PTUxo0b5enp6bCtTJkyee4XFhamWbNmaeXKlfruu+90+vRpdejQQZs3b1bdunWv/IIAFCiu3ADIl/Lly6t9+/aaPHmyzpw5k2P7pbuXNm7cqOzsbL3xxhtq0qSJatasqSNHjlzTuUNDQ1W9evV8r10THR2d563q9evXV1ZWlo4fP66IiAiHR3BwsFPHDw8P1xtvvCE/Pz+HidUAigbhBkC+TZ48WVlZWWrcuLE+++wz7dmzRzt37tRbb72lmJgYSVJERIQuXLigt99+W/v27dMHH3ygKVOmuLXuuLg4ffTRR4qLi9POnTu1bds2jR8/XpJUs2ZN9ejRQ7169dL8+fO1f/9+rVu3TmPHjtWiRYtyPd6RI0f01FNP6ZdfflFmZqbOnj2rqVOn6uTJk6pfv35RvjQAYlgKwDWoVq2aNm3apJdffllPP/20UlJSFBgYqIYNGyo+Pl6SdMstt2jChAkaP368YmNj9Y9//ENjx45Vr1693FZ3q1atNG/ePI0ZM0bjxo2Tv7+//vGPf9i3JyQk6KWXXtLTTz+tw4cP66abblKTJk10zz335Ho8f39//fXXX/rXv/6l5ORkGWNUrVo1JSQkqEGDBkX1sgD8fzbjyqxAAMAVrVy5UgcOHFCfPn3cXQpww2JYCgAAWApXbgAAgKVw5QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFgK4QYAAFjK/wPsp9+zwR1ShAAAAABJRU5ErkJggg==\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "- 이제 이 그래프는 우리가 수집한 데이터입니다.\n", + "- 우리는 자동차 가격이 100달러일 때 판매된 자동차의 수가 무엇일지를 묻는 질문을 가지고 있습니다.\n", + "- 이 질문을 해결하기 위해 우리는 선형 회귀를 사용해야 합니다.\n", + "- 우리는 이 데이터에 맞는 선을 찾아야 합니다. 목표는 최소한의 오류로 선을 맞추는 것입니다.\n", + "\n", + "---\n", + "\n", + "- **선형 회귀의 단계**\n", + " 1. LinearRegression 클래스를 생성합니다.\n", + " 2. 이 LinearRegression 클래스로 모델을 정의합니다.\n", + " 3. MSE: 평균 제곱 오차(Mean Squared Error)\n", + " 4. 최적화 (SGD: 확률적 경사 하강법)\n", + " 5. 역전파 (Backpropagation)\n", + " 6. 예측 (Prediction)" + ], + "metadata": { + "id": "MOlzmdG89JCT" + } + }, + { + "cell_type": "code", + "source": [ + "# PyTorch를 이용한 선형 회귀 모델 구현\n", + "\n", + "import torch\n", + "from torch.autograd import Variable\n", + "import torch.nn as nn\n", + "import warnings\n", + "warnings.filterwarnings(\"ignore\")\n", + "\n", + "# 선형 회귀 클래스 정의\n", + "class LinearRegression(nn.Module):\n", + " def __init__(self, input_size, output_size):\n", + " super(LinearRegression, self).__init__()\n", + " self.linear = nn.Linear(input_size, output_size)\n", + "\n", + " def forward(self, x):\n", + " return self.linear(x)\n", + "\n", + "# 모델 정의\n", + "input_dim = 1\n", + "output_dim = 1\n", + "model = LinearRegression(input_dim, output_dim)\n", + "\n", + "# 손실 함수 (MSE)\n", + "mse = nn.MSELoss()\n", + "\n", + "# 옵티마이저 (SGD 사용)\n", + "learning_rate = 0.02\n", + "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n", + "\n", + "# 모델 학습\n", + "loss_list = []\n", + "iteration_number = 1001\n", + "for iteration in range(iteration_number):\n", + " optimizer.zero_grad() # 기울기 초기화\n", + " results = model(car_price_tensor) # 예측값 계산\n", + " loss = mse(results, number_of_car_sell_tensor) # 손실 계산\n", + " loss.backward() # 역전파 실행\n", + " optimizer.step() # 가중치 업데이트\n", + " loss_list.append(loss.data)\n", + " if iteration % 50 == 0:\n", + " print(f'epoch {iteration}, loss {loss.data}')\n", + "\n", + "# 손실 그래프 시각화\n", + "plt.plot(range(iteration_number), loss_list)\n", + "plt.xlabel(\"Number of Iterations\")\n", + "plt.ylabel(\"Loss\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 841 + }, + "id": "6MvDUc9b7uHf", + "outputId": "1df52d62-1a0b-40db-e4c4-499eb482a118" + }, + "execution_count": 15, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "epoch 0, loss 147.91769409179688\n", + "epoch 50, loss 5.685555934906006\n", + "epoch 100, loss 3.841968059539795\n", + "epoch 150, loss 2.596179246902466\n", + "epoch 200, loss 1.754346489906311\n", + "epoch 250, loss 1.1854852437973022\n", + "epoch 300, loss 0.80108243227005\n", + "epoch 350, loss 0.541324257850647\n", + "epoch 400, loss 0.36579522490501404\n", + "epoch 450, loss 0.24718308448791504\n", + "epoch 500, loss 0.1670314371585846\n", + "epoch 550, loss 0.11287014186382294\n", + "epoch 600, loss 0.07627131789922714\n", + "epoch 650, loss 0.05154002085328102\n", + "epoch 700, loss 0.034827906638383865\n", + "epoch 750, loss 0.023534808307886124\n", + "epoch 800, loss 0.015903523191809654\n", + "epoch 850, loss 0.010746841318905354\n", + "epoch 900, loss 0.007261961232870817\n", + "epoch 950, loss 0.004907268099486828\n", + "epoch 1000, loss 0.003315925830975175\n" + ] + }, + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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NbdcxHkOH851eHCew4PzHB5unmdjjPbt26f09HR5vUeemUPPjiSv16tOnTq5dvzExET+QwoDznP4cK7Dg/McHpzn8HDrPB+tR6ceE5QBAEBEI+wAAICIRthxUWxsrB544AHFxsbaLiWicZ7Dh3MdHpzn8OA8h0dzOM9MUAYAABGNnh0AABDRCDsAACCiEXYAAEBEI+wAAICIRthx0Zw5c9S1a1fFxcUpMzNTa9assV1SizF16lRdcMEFatOmjTp06KArr7xSW7ZsCdmnoqJC48aNU0pKilq3bq1Ro0apqKgoZJ+dO3dq+PDhatWqlTp06KBJkyappqYmnF+lRZk2bZo8Ho8mTJjgtHGem85XX32lX/3qV0pJSVF8fLx69+6tdevWOduNMZoyZYo6duyo+Ph4ZWdna+vWrSHHKC4uVk5OjhITE5WUlKQbb7xRZWVl4f4qzVZtba3uv/9+devWTfHx8Tr99NP18MMPh6ydxHk+fqtWrdLll1+u9PR0eTweLVq0KGR7U53Tf//73/rRj36kuLg4ZWRkaMaMGU3zBQxc8eqrr5qYmBjz3//932bTpk3mpptuMklJSaaoqMh2aS3C0KFDzfz5883GjRvNhg0bzGWXXWY6d+5sysrKnH1uvvlmk5GRYZYvX27WrVtnBgwYYC688EJne01NjenVq5fJzs42H3zwgfn73/9u2rVrZyZPnmzjKzV7a9asMV27djXnnHOOuf322512znPTKC4uNl26dDHXXXedycvLM1988YV56623zGeffebsM23aNOP3+82iRYvMhx9+aK644grTrVs3c+DAAWefSy+91PTp08esXr3a/POf/zRnnHGGufrqq218pWbpkUceMSkpKWbJkiVm27Zt5rXXXjOtW7c2Tz31lLMP5/n4/f3vfzf33nuvef31140ks3DhwpDtTXFOS0tLTWpqqsnJyTEbN240r7zyiomPjzd//OMfT7p+wo5L+vfvb8aNG+e8rq2tNenp6Wbq1KkWq2q59uzZYySZlStXGmOMKSkpMdHR0ea1115z9tm8ebORZHJzc40xdf9xer1eU1hY6Owzd+5ck5iYaCorK8P7BZq5ffv2mTPPPNMsW7bMXHzxxU7Y4Tw3nbvvvtsMGjToiNuDwaBJS0szf/jDH5y2kpISExsba1555RVjjDEff/yxkWTWrl3r7PPmm28aj8djvvrqK/eKb0GGDx9ubrjhhpC2kSNHmpycHGMM57kpfDfsNNU5feaZZ0zbtm1D/t24++67zVlnnXXSNTOM5YKqqirl5+crOzvbafN6vcrOzlZubq7Fylqu0tJSSVJycrIkKT8/X9XV1SHnuHv37urcubNzjnNzc9W7d2+lpqY6+wwdOlSBQECbNm0KY/XN37hx4zR8+PCQ8ylxnpvS4sWL1a9fP/3iF79Qhw4d1LdvXz333HPO9m3btqmwsDDkXPv9fmVmZoac66SkJPXr18/ZJzs7W16vV3l5eeH7Ms3YhRdeqOXLl+vTTz+VJH344Yd67733NGzYMEmcZzc01TnNzc3VRRddpJiYGGefoUOHasuWLfr2229PqkYWAnXB3r17VVtbG/KPvySlpqbqk08+sVRVyxUMBjVhwgQNHDhQvXr1kiQVFhYqJiZGSUlJIfumpqaqsLDQ2aex30H9NtR59dVXtX79eq1du/awbZznpvPFF19o7ty5mjhxov7f//t/Wrt2rW677TbFxMRozJgxzrlq7Fweeq47dOgQst3n8yk5OZlzfdA999yjQCCg7t27KyoqSrW1tXrkkUeUk5MjSZxnFzTVOS0sLFS3bt0OO0b9trZt255wjYQdNHvjxo3Txo0b9d5779kuJeIUFBTo9ttv17JlyxQXF2e7nIgWDAbVr18/Pfroo5Kkvn37auPGjZo3b57GjBljubrI8Ze//EULFizQyy+/rLPPPlsbNmzQhAkTlJ6eznk+hTGM5YJ27dopKirqsCtWioqKlJaWZqmqlmn8+PFasmSJ3nnnHXXq1MlpT0tLU1VVlUpKSkL2P/Qcp6WlNfo7qN+GumGqPXv26LzzzpPP55PP59PKlSs1a9Ys+Xw+paamcp6bSMeOHdWzZ8+Qth49emjnzp2SGs7V0f7dSEtL0549e0K219TUqLi4mHN90KRJk3TPPfdo9OjR6t27t6655hrdcccdmjp1qiTOsxua6py6+W8JYccFMTExOv/887V8+XKnLRgMavny5crKyrJYWcthjNH48eO1cOFCrVix4rCuzfPPP1/R0dEh53jLli3auXOnc46zsrL00UcfhfwHtmzZMiUmJh72R+dUNWTIEH300UfasGGD8+jXr59ycnKc55znpjFw4MDDbp/w6aefqkuXLpKkbt26KS0tLeRcBwIB5eXlhZzrkpIS5efnO/usWLFCwWBQmZmZYfgWzd/+/fvl9Yb+aYuKilIwGJTEeXZDU53TrKwsrVq1StXV1c4+y5Yt01lnnXVSQ1iSuPTcLa+++qqJjY01L7zwgvn444/N2LFjTVJSUsgVKziy3/zmN8bv95t3333X7N6923ns37/f2efmm282nTt3NitWrDDr1q0zWVlZJisry9lef0n0JZdcYjZs2GCWLl1q2rdvzyXR3+PQq7GM4Tw3lTVr1hifz2ceeeQRs3XrVrNgwQLTqlUr8z//8z/OPtOmTTNJSUnmb3/7m/n3v/9tRowY0ejlu3379jV5eXnmvffeM2eeeeYpfUn0d40ZM8acdtppzqXnr7/+umnXrp256667nH04z8dv37595oMPPjAffPCBkWSeeOIJ88EHH5gdO3YYY5rmnJaUlJjU1FRzzTXXmI0bN5pXX33VtGrVikvPm7vZs2ebzp07m5iYGNO/f3+zevVq2yW1GJIafcyfP9/Z58CBA+aWW24xbdu2Na1atTI/+9nPzO7du0OOs337djNs2DATHx9v2rVrZ+68805TXV0d5m/Tsnw37HCem84bb7xhevXqZWJjY0337t3Ns88+G7I9GAya+++/36SmpprY2FgzZMgQs2XLlpB9vvnmG3P11Veb1q1bm8TERHP99debffv2hfNrNGuBQMDcfvvtpnPnziYuLs784Ac/MPfee2/I5cyc5+P3zjvvNPpv8pgxY4wxTXdOP/zwQzNo0CATGxtrTjvtNDNt2rQmqd9jzCG3lQQAAIgwzNkBAAARjbADAAAiGmEHAABENMIOAACIaIQdAAAQ0Qg7AAAgohF2AABARCPsAACAiEbYAdAktm/fLo/How0bNtguxfHJJ59owIABiouL07nnnmu7nOPStWtXzZw503YZQEQg7AAR4rrrrpPH49G0adNC2hctWiSPx2OpKrseeOABJSQkaMuWLSGLFB7quuuu05VXXum8Hjx4sCZMmBCeAiW98MILSkpKOqx97dq1Gjt2bNjqACIZYQeIIHFxcZo+fbq+/fZb26U0maqqqhN+7+eff65BgwapS5cuSklJacKqvt/J1C1J7du3V6tWrZqoGuDURtgBIkh2drbS0tI0derUI+7z4IMPHjakM3PmTHXt2tV5Xd/b8eijjyo1NVVJSUl66KGHVFNTo0mTJik5OVmdOnXS/PnzDzv+J598ogsvvFBxcXHq1auXVq5cGbJ948aNGjZsmFq3bq3U1FRdc8012rt3r7N98ODBGj9+vCZMmKB27dpp6NChjX6PYDCohx56SJ06dVJsbKzOPfdcLV261Nnu8XiUn5+vhx56SB6PRw8++OBRzlzD9165cqWeeuopeTweeTwebd++/aTqfuKJJ9S7d28lJCQoIyNDt9xyi8rKyiRJ7777rq6//nqVlpY6n1df53eHsXbu3KkRI0aodevWSkxM1FVXXaWioiJne/3v9U9/+pO6du0qv9+v0aNHa9++fc4+f/3rX9W7d2/Fx8crJSVF2dnZKi8v/97zArR0hB0ggkRFRenRRx/V7Nmz9eWXX57UsVasWKFdu3Zp1apVeuKJJ/TAAw/opz/9qdq2bau8vDzdfPPN+vWvf33Y50yaNEl33nmnPvjgA2VlZenyyy/XN998I0kqKSnRT37yE/Xt21fr1q3T0qVLVVRUpKuuuirkGC+++KJiYmL0r3/9S/PmzWu0vqeeekqPP/64HnvsMf373//W0KFDdcUVV2jr1q2SpN27d+vss8/WnXfeqd27d+u3v/3t937np556SllZWbrpppu0e/du7d69WxkZGSdVt9fr1axZs7Rp0ya9+OKLWrFihe666y5J0oUXXqiZM2cqMTHR+bzG6gwGgxoxYoSKi4u1cuVKLVu2TF988YV++ctfhuz3+eefa9GiRVqyZImWLFmilStXOsOau3fv1tVXX60bbrhBmzdv1rvvvquRI0eKtaBxSmiStdMBWDdmzBgzYsQIY4wxAwYMMDfccIMxxpiFCxeaQ/9Tf+CBB0yfPn1C3vvkk0+aLl26hByrS5cupra21mk766yzzI9+9CPndU1NjUlISDCvvPKKMcaYbdu2GUlm2rRpzj7V1dWmU6dOZvr06cYYYx5++GFzySWXhHx2QUGBkWS2bNlijDHm4osvNn379v3e75uenm4eeeSRkLYLLrjA3HLLLc7rPn36mAceeOCoxzn0vNV//u233x6yT1PW/dprr5mUlBTn9fz5843f7z9svy5dupgnn3zSGGPMP/7xDxMVFWV27tzpbN+0aZORZNasWWOMqfu9tmrVygQCAWefSZMmmczMTGOMMfn5+UaS2b59+/fWCEQaenaACDR9+nS9+OKL2rx58wkf4+yzz5bX2/BPRGpqqnr37u28joqKUkpKivbs2RPyvqysLOe5z+dTv379nDo+/PBDvfPOO2rdurXz6N69u6S6Xol6559//lFrCwQC2rVrlwYOHBjSPnDgwJP6zkdyMnW//fbbGjJkiE477TS1adNG11xzjb755hvt37//mD9/8+bNysjIUEZGhtPWs2dPJSUlhXzfrl27qk2bNs7rjh07Or+fPn36aMiQIerdu7d+8Ytf6LnnnououV3A0RB2gAh00UUXaejQoZo8efJh27xe72FDF9XV1YftFx0dHfLa4/E02hYMBo+5rrKyMl1++eXasGFDyGPr1q266KKLnP0SEhKO+ZjhcKJ1b9++XT/96U91zjnn6H//93+Vn5+vOXPmSDr5CcyNOdrvJyoqSsuWLdObb76pnj17avbs2TrrrLO0bdu2Jq8DaG4IO0CEmjZtmt544w3l5uaGtLdv316FhYUhgacp742zevVq53lNTY3y8/PVo0cPSdJ5552nTZs2qWvXrjrjjDNCHscTcBITE5Wenq5//etfIe3/+te/1LNnz5OqPyYmRrW1tSFtJ1p3fn6+gsGgHn/8cQ0YMEA//OEPtWvXru/9vO/q0aOHCgoKVFBQ4LR9/PHHKikpOa7v6/F4NHDgQP3ud7/TBx98oJiYGC1cuPCY3w+0VIQdIEL17t1bOTk5mjVrVkj74MGD9fXXX2vGjBn6/PPPNWfOHL355ptN9rlz5szRwoUL9cknn2jcuHH69ttvdcMNN0iSxo0bp+LiYl199dVau3atPv/8c7311lu6/vrrv/cP/ndNmjRJ06dP15///Gdt2bJF99xzjzZs2KDbb7/9pOrv2rWr8vLytH37du3du1fBYPCE6z7jjDNUXV2t2bNn64svvtCf/vSnwyZcd+3aVWVlZVq+fLn27t3b6PBWdna28/tcv3691qxZo2uvvVYXX3yx+vXrd0zfKy8vT48++qjWrVunnTt36vXXX9fXX3/tBFEgkhF2gAj20EMPHTbM1KNHDz3zzDOaM2eO+vTpozVr1hzTlUrHatq0aZo2bZr69Omj9957T4sXL1a7du0kyemNqa2t1SWXXKLevXtrwoQJSkpKCpkfdCxuu+02TZw4UXfeead69+6tpUuXavHixTrzzDNPqv7f/va3ioqKUs+ePdW+fXvt3LnzhOvu06ePnnjiCU2fPl29evXSggULDrstwIUXXqibb75Zv/zlL9W+fXvNmDHjsON4PB797W9/U9u2bXXRRRcpOztbP/jBD/TnP//5mL9XYmKiVq1apcsuu0w//OEPdd999+nxxx/XsGHDjv3kAC2Ux3x38B4AACCC0LMDAAAiGmEHAABENMIOAACIaIQdAAAQ0Qg7AAAgohF2AABARCPsAACAiEbYAQAAEY2wAwAAIhphBwAARDTCDgAAiGj/H9WcAmlwJ1l2AAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "- 반복 횟수는 1000입니다.\n", + "- 손실 값은 거의 0에 가까우며, 이는 그래프나 1000번째 epoch에서의 손실 값에서 확인할 수 있습니다.\n", + "- 이제 우리는 훈련된 모델을 가지고 있습니다.\n", + "- 훈련된 모델을 사용할 때, 자동차 가격을 예측해 봅시다." + ], + "metadata": { + "id": "9odY_Wb59N8H" + } + }, + { + "cell_type": "code", + "source": [ + "# car price 예측\n", + "predicted = model(car_price_tensor).data.numpy()\n", + "plt.scatter(car_prices_array, number_of_car_sell_array, label = \"original data\",color =\"red\") # original data\n", + "plt.scatter(car_prices_array, predicted, label = \"predicted data\",color =\"blue\") # predicted data\n", + "\n", + "# car price가 10$ 일 때, car sell은?\n", + "predicted_10 = model(Variable(torch.from_numpy(np.array([10], dtype=np.float32)))).data.numpy()\n", + "plt.scatter(10,predicted_10.data,label = \"car price 10$\",color =\"green\")\n", + "plt.legend()\n", + "plt.xlabel(\"Car Price $\")\n", + "plt.ylabel(\"Number of Car Sell\")\n", + "plt.title(\"Original vs Predicted values\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "FtsHa2uk7uDy", + "outputId": "c92f62a8-bb2e-4dec-d374-3f6316df346a" + }, + "execution_count": 20, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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FxcuXNBocERERETqUju5SU9Ph7u7e7FyuVyOp0+faiQoIiIiovJSO7nx9vZGQkJCsfKtW7fCz89PI0ERERERlZfa3wo+ffp0DBw4EOnp6ZDL5YiNjcXFixexdu1a/Pzzz5URIxEREZHK1O656d69O3bu3Il9+/bBzMwM06dPR3JyMnbu3Ik33nijMmIkIiIiUplKOxTrE+5QTERE9PLR+A7FpXny5Ak2bdqER48eoWPHjvDw8KjI5YiIiIgqTOXkZvz48Xj69CmWLFkCAMjPz8drr72G8+fPo2bNmpg0aRL27t2LgICASguWiIiI6EVUnnOzZ88epTk169atQ2pqKi5fvozMzEz07t0bX3zxRaUESURERKQqlZOb1NRUeHt7K17v2bMHvXr1grOzMyQSCcLCwnD69OlKCZKIiIhIVSonNwYGBnh27vHRo0fx2muvKV7XqlULmZmZmo2OiIiISE0qJzdeXl7YuXMnAODcuXNITU1FUFCQov7GjRuwtbXVfIREREREalB5QvHkyZPRt29f/PLLLzh37hw6d+4MV1dXRf2uXbvQsmXLSgmSiIiISFUq99y888472LVrF5o2bYpx48Zh06ZNSvU1a9bEyJEjNR4gERERkTq4iR8RERFVeep8fqv99QtEREREVRmTGyIiItIrTG6IiIhIr6iV3AghkJqaiidPnlRWPEREREQVonZy4+7ujrS0tMqKh4iIiKhC1EpuDAwM4OHhgXv37lVWPEREREQVovacm7lz52LSpEk4e/ZsZcRDREREVCFq73NTu3ZtPHr0CAUFBTAyMoKpqalS/f379zUaoKZxnxsiIqKXjzqf3yp//UKRyMjI8sZFREREVOnUTm4GDhxYGXEQERERaYTayc2znjx5gvz8fKUyDvUQERGRLqk9ofjhw4cYPXo0bGxsYGZmhtq1aysdRERERLqkdnIzefJk/P7771i+fDmMjY2xevVqzJw5E/Xq1cPatWsrI0YiIiIilak9LLVz506sXbsW7du3x+DBgxEYGAh3d3c4Oztj3bp16NevX2XESURERKQStXtu7t+/Dzc3NwCF82uKln63bdsWf/zxh9oBpKen4/3330fdunVhamoKHx8fnDhxosxz4uPj4e/vD2NjY7i7uyMmJkbt+xKRhslkQHw8sGFD4X9lMl1HRETVlNrJjZubG1JSUgAAjRo1wubNmwEU9ujUqlVLrWtlZmaiTZs2qFGjBn799VecP38eCxcuLHPuTkpKCrp06YKgoCAkJSUhPDwcw4YNQ1xcnLqPQkSaEhsLuLgAQUHAe+8V/tfFpbCciEjL1N7E76uvvoJUKsXYsWOxb98+dOvWDUIIPH36FIsWLUJYWJjK1/r4449x6NAhJCQkqHzOlClT8MsvvyjtkNy3b19kZWVh9+7dLzyfm/gRaVhsLNCrF2RCggQEIgP2sEcGAnEQUokc2LoVCAnRdZRE9JJT5/Nb7eTmeTdu3MDJkyfh7u6Opk2bqnWut7c3goODcfPmTRw4cAAODg4YOXIkhg8fXuo5r7/+Ovz9/ZU2E4yOjkZ4eDiys7NfeE8mN0QaJJMBLi6IvfkqwhCFm3BSVDkiDVEIR4hTIpCSAkilOgyUiF526nx+qz0s9TxnZ2eEhISondgAwLVr17B8+XJ4eHggLi4OH330EcaOHYs1a9aUes7t27dha2urVGZra4ucnBw8fvy4WPu8vDzk5OQoHUSkIQkJiL35KnphK27CQakqHQ7ohS2ITWsBqNE7S0RUUSonN7///ju8vb1LTA6ys7PRuHFjtYaXAEAul8Pf3x9z5syBn58fPvjgAwwfPhwrVqxQ6zpliYiIgJWVleJwcnJ68UlEpBJZ+m2EIQqF3b/Kv07Ev6/DEQlZ+m2tx0ZE1ZfKyU1kZCSGDx9eYleQlZUVRowYgUWLFql1c3t7e3h7eyuVeXl5ITU1tdRz7OzscOfOHaWyO3fuwNLSstiXeALA1KlTkZ2drTjS0tLUipGISpfwd6N/h6JK/lUiYIA01EfC3420GxgRVWsqJzd//vkn3nrrrVLr33zzTZw8eVKtm7dp0wYXL15UKrt06RKcnZ1LPScgIAC//fabUtnevXsREBBQYntjY2NYWloqHUSkGRnWqg1Hq9qOiEgTVE5u7ty5gxo1apRab2hoiL///lutm48bNw5Hjx7FnDlzcOXKFaxfvx6rVq3CqFGjFG2mTp2KAQMGKF5/+OGHuHbtGiZPnowLFy7g66+/xubNmzFu3Di17k1EFWfvoNqvEFXbERFpgsq/cRwcHJSWXz/vr7/+gr29vVo3f/XVV7F9+3Zs2LABTZo0waxZsxAZGam0y3FGRobSMJWrqyt++eUX7N27F76+vli4cCFWr16N4OBgte5NRBUXGAg4OgISlLzoUgIBJ6fCdkRE2qLyUvAxY8YgPj4eiYmJMDExUap7/PgxWrZsiaCgICxevLhSAtUULgUn0qx/t7kBICCERFEukQgAEm5zQ0QaUSn73Ny5cwf+/v6QSqUYPXo0GjZsCAC4cOECli1bBplMhlOnThVbpl3VMLkh0rzYWCAsDLh5878yJycgMpKJDRFpRqVt4nfjxg189NFHiIuLQ9FpEokEwcHBWLZsGVxdXSsWuRYwuSGqHDJZ4XY2GRmAvX3hUBT37SMiTan0HYozMzNx5coVCCHg4eFR5ndBVTVMboiIiF4+6nx+G5bnBrVr18arr75aruCIiIiIKhPXZxIREZFeYXJDREREeoXJDREREekVlZIbf39/ZGZmAgA+//xzPHr0qFKDIiIiIiovlZKb5ORkPHz4EAAwc+ZM5ObmVmpQREREROWl0mqpZs2aYfDgwWjbti2EEPjyyy9hbm5eYtvp06drNEAiIiIidai0z83FixcxY8YMXL16FadOnYK3tzcMDYvnRRKJBKdOnaqUQDWF+9wQERG9fCp1Ez8DAwPcvn0bNjY2FQpSV5jcEBERvXwqdRM/uVxe7sCIiIiIKlu5dii+evUqIiMjkZycDADw9vZGWFgYGjRooNHgiIiIiNSl9j43cXFx8Pb2xvHjx9G0aVM0bdoUx44dQ+PGjbF3797KiJGIiIhIZWrPufHz80NwcDDmzp2rVP7xxx9jz549nFBMREREGqfO57faPTfJyckYOnRosfIhQ4bg/Pnz6l6OiIiISKPUTm6sra2RlJRUrDwpKemlXUFFRERE+kPtCcXDhw/HBx98gGvXrqF169YAgEOHDmHevHkYP368xgMkIiIiUofac26EEIiMjMTChQtx69YtAEC9evUwadIkjB07FhKJpFIC1RTOuSEiInr5VOomfs968OABAMDCwqK8l9A6JjdEREQvn0rdxO9ZL1NSQ0RERNWD2hOKiYiIiKoyJjdERESkV5jcEBERkV5RK7l5+vQpOnTogMuXL1dWPEREREQVolZyU6NGDfz111+VFQsRERFRhak9LPX+++/j22+/rYxYiIiIiCpM7aXgBQUF+O6777Bv3z40b94cZmZmSvWLFi3SWHBERERE6lI7uTl79iz8/f0BAJcuXVKqq+q7ExMREZH+Uzu52b9/f2XEQURERKQR5V4KfuXKFcTFxeHx48cACr9zioiIiEjX1E5u7t27hw4dOsDT0xOdO3dGRkYGAGDo0KGYMGGCxgMkIiIiUofayc24ceNQo0YNpKamombNmoryPn36YPfu3RoNjoiIiEhdas+52bNnD+Li4uDo6KhU7uHhgRs3bmgsMCIiIqLyULvn5uHDh0o9NkXu378PY2NjjQRFREREVF5qJzeBgYFYu3at4rVEIoFcLsf8+fMRFBSk0eCIiIiI1KX2sNT8+fPRoUMHnDhxAvn5+Zg8eTLOnTuH+/fv49ChQ5URIxFRlSeTAQkJQEYGYG8PBAYCUqmuoyKqntTuuWnSpAkuXbqEtm3bonv37nj48CFCQkJw+vRpNGjQoDJiJCKq0mJjARcXgaAg4L33gKCgwtexsbqOjKh6kggdblDz2WefYebMmUplDRs2xIULF0psHxMTg8GDByuVGRsb48mTJyrfMycnB1ZWVsjOzoalpaX6QRMRPSM2FujVU0BA4Nl/L0ogByDB1m0ShIToLDwivaHO57faw1IAkJmZiW+//RbJyckAAG9vbwwePBh16tRR+1qNGzfGvn37/gvIsOyQLC0tcfHiRcVrfuUDEemKTAaEffAIAiZ4viNcwAASyBH+wWN0716TQ1REWqT2sNQff/wBFxcXLF68GJmZmcjMzMTixYvh6uqKP/74Q+0ADA0NYWdnpzheeeWVMttLJBKl9ra2tmrfk4hIExLiZbh5ryZK+1UqYIC0ezWREC/TbmBE1Zzayc2oUaPQp08fpKSkIDY2FrGxsbh27Rr69u2LUaNGqR3A5cuXUa9ePbi5uaFfv35ITU0ts31ubi6cnZ3h5OSE7t2749y5c2W2z8vLQ05OjtJBRKQJGfEXX9xIjXZEpBlqJzdXrlzBhAkTIH2mj1UqlWL8+PG4cuWKWtdq1aoVYmJisHv3bixfvhwpKSkIDAzEgwcPSmzfsGFDfPfdd/jxxx/xww8/QC6Xo3Xr1rh582ap94iIiICVlZXicHJyUitGIqLS2CNDo+2ISDPUnlDcpk0bTJo0CT169FAq37FjB+bOnYujR4+WO5isrCw4Oztj0aJFGDp06AvbP336FF5eXggNDcWsWbNKbJOXl4e8vDzF65ycHDg5OXFCMRFVmOy3eLh0bIB0OECU8G9FCeRwxE2k7LsGaYf22g+QSI9ofELxX3/9pfj/sWPHIiwsDFeuXMFrr70GADh69CiWLVuGuXPnViBsoFatWvD09FS5B6hGjRrw8/Mrs72xsTF3TiaiSiFtH4iouh+i172VkECulOAUrpYCIut+AWn75boKkahaUim5adasGSQSCZ7t5Jk8eXKxdu+99x769OlT7mByc3Nx9epV9O/fX6X2MpkMZ86cQefOnct9TyKicpNKEbKqE7b27I0wROIm/hv2dsRNRGIcQlb1425+RFqmUnKTkpJSKTefOHEiunXrBmdnZ9y6dQszZsyAVCpFaGgoAGDAgAFwcHBAREQEAODzzz/Ha6+9Bnd3d2RlZWHBggW4ceMGhg0bVinxERG9UEgIQrYB3ce2RUK6KzJgD3tkINDxOqRRi8BNboi0T6XkxtnZuVJufvPmTYSGhuLevXuwtrZG27ZtcfToUVhbWwMAUlNTYWDwXzdvZmYmhg8fjtu3b6N27dpo3rw5Dh8+DG9v70qJj4hIJSEhkHbvjvb8/gWiKqFcOxTfunULBw8exN27dyGXy5Xqxo4dq7HgKgN3KCYiInr5VOoOxTExMRgxYgSMjIxQt25dpR2CJRJJlU9uiIiISL+p3XPj5OSEDz/8EFOnTlUaMnpZsOeGiIjo5aPO57fa2cmjR4/Qt2/flzKxISIiIv2ndoYydOhQbNmypTJiISIiIqowtYelZDIZunbtisePH8PHxwc1atRQql+0aJFGA9Q0DksRERG9fCp1QnFERATi4uLQsGFDACg2oZiIiIhIl9RObhYuXIjvvvsOgwYNqoRwiIiIiCpG7Tk3xsbGaNOmTWXEQkRERFRhaic3YWFhWLJkSWXEQkRERFRhag9LHT9+HL///jt+/vlnNG7cuNiE4tjYWI0FR0RERKQutZObWrVqIYRfBEdERERVlNrJTXR0dGXEQURERKQR3GaYiIiI9IraPTeurq5l7mdz7dq1CgVEREREVBFqJzfh4eFKr58+fYrTp09j9+7dmDRpkqbiIiIiIioXtZObsLCwEsuXLVuGEydOVDggIiIioorQ2JybTp06Ydu2bZq6HBEREVG5aCy52bp1K+rUqaOpyxERERGVi9rDUn5+fkoTioUQuH37Nv7++298/fXXGg2OiIiISF1qJzc9evRQem1gYABra2u0b98ejRo10lRcREREROUiEUIIXQehTTk5ObCyskJ2djYsLS11HQ4RERGpQJ3Pb27iR0RERHpF5WEpAwODMjfvAwCJRIKCgoIKB0VERERUXionN9u3by+17siRI1i8eDHkcrlGgiIiIiIqL5WTm+7duxcru3jxIj7++GPs3LkT/fr1w+eff67R4IiIiIjUVa45N7du3cLw4cPh4+ODgoICJCUlYc2aNXB2dtZ0fERERERqUSu5yc7OxpQpU+Du7o5z587ht99+w86dO9GkSZPKio+IiIhILSoPS82fPx/z5s2DnZ0dNmzYUOIwFREREZGuqbzPjYGBAUxNTdGxY0dIpdJS28XGxmosuMrAfW6IiIhePup8fqvcczNgwIAXLgUnIiIi0jWVk5uYmJhKDIOIiIhIM7hDMREREekVJjdERESkV5jcEBERkV5Rec4NERFRWWQyICEByMgA7O2BwECgjMW1RJWGyQ0REVVYbCwQFgbcvPlfmaMjEBUFhIToLi6qnjgsRUREFRIbC/TqpZzYAEB6emF5Fd/+jPQQkxsiIio3maywx6ak7WCLysLDC9sRaYtOk5vPPvsMEolE6WjUqFGZ52zZsgWNGjWCiYkJfHx8sGvXLi1FS0REz0tIKN5j8ywhgLS0wnZE2qLznpvGjRsjIyNDcRw8eLDUtocPH0ZoaCiGDh2K06dPo0ePHujRowfOnj2rxYiJiKhIRoZm2xFpgs6TG0NDQ9jZ2SmOV155pdS2UVFReOuttzBp0iR4eXlh1qxZ8Pf3x9KlS7UYMRERFbG3UW28SdV2RJqg8+Tm8uXLqFevHtzc3NCvXz+kpqaW2vbIkSPo2LGjUllwcDCOHDlS6jl5eXnIyclROoiISDMCkQBHpEECeYn1EsjhhFQEguNSpD06TW5atWqFmJgY7N69G8uXL0dKSgoCAwPx4MGDEtvfvn0btra2SmW2tra4fft2qfeIiIiAlZWV4nByctLoMxARVWfSuxmIQhgAFEtwil5HIhzSuxyXIu3RaXLTqVMn9O7dG02bNkVwcDB27dqFrKwsbN68WWP3mDp1KrKzsxVHWlqaxq5NRFTt2dsjBNuxFb3ggHSlKkfcxFb0Qgi2F+7qR6QlVWoTv1q1asHT0xNXrlwpsd7Ozg537txRKrtz5w7s7OxKvaaxsTGMjY01GicREf0rMBBwdERI+g50Fz8iAYHIgD3skYFAJEAqEYCjU2E7Ii3R+ZybZ+Xm5uLq1auwLyXDDwgIwG+//aZUtnfvXgQEBGgjPCIiep5UWrgNMQCpRKA9DiAUG9EeBwoTGwCIjOT3MJBW6TS5mThxIg4cOIDr16/j8OHDeOeddyCVShEaGgoAGDBgAKZOnapoHxYWht27d2PhwoW4cOECPvvsM5w4cQKjR4/W1SMQEVFICLB1K+DgoFzu6FhYzu9fIC3T6bDUzZs3ERoainv37sHa2hpt27bF0aNHYW1tDQBITU2FgcF/+Vfr1q2xfv16fPrpp/i///s/eHh4YMeOHWjSpImuHoGIiIDCBKZ7d35zJlUJEiFK2jRbf+Xk5MDKygrZ2dmwtLTUdThERESkAnU+v6vUnBsiIiKiimJyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVQ10HQEREpA9kMiAhAcjIAOztgcBAQCrVdVTVE5MbIiKiCoqNBcLCgJs3/ytzdASiooCQEN3FVV1xWIqIiKgCYmOBXr2UExsASE8vLI+N1U1c1RmTGyIionKSyQp7bIQoXldUFh5e2I60h8kNERFROSUkFO+xeZYQQFpaYTvSHiY3RERE5ZSRodl2pBlMboiIiMrJ3l6z7UgzqkxyM3fuXEgkEoSHh5faJiYmBhKJROkwMTHRXpBERETPCAwsXBUlkZRcL5EATk6F7Uh7qsRS8MTERKxcuRJNmzZ9YVtLS0tcvHhR8VpS2k8UERFRJZNKC5d79+opIIGAeKbPQAI5ICSIjJRwvxst03nPTW5uLvr164dvvvkGtWvXfmF7iUQCOzs7xWFra6uFKImIiEoWglhsRS84IF2p3BE3sRW9EAKuBdc2nSc3o0aNQpcuXdCxY0eV2ufm5sLZ2RlOTk7o3r07zp07V8kREhERleLfteAhiMV1uGA/2mM9QrEf7ZECV4RItnMtuA7odFhq48aNOHXqFBITE1Vq37BhQ3z33Xdo2rQpsrOz8eWXX6J169Y4d+4cHB0dSzwnLy8PeXl5itc5OTkaiZ2IiOjZteBSyNEeB5TrBf5bC96+vdbDq6501nOTlpaGsLAwrFu3TuVJwQEBARgwYACaNWuGdu3aITY2FtbW1li5cmWp50RERMDKykpxODk5aeoRiIiouuNa8CpJZ8nNyZMncffuXfj7+8PQ0BCGhoY4cOAAFi9eDENDQ8hU6MKrUaMG/Pz8cOXKlVLbTJ06FdnZ2YojLS1Nk49BRETVGdeCV0k6G5bq0KEDzpw5o1Q2ePBgNGrUCFOmTIFUhanlMpkMZ86cQefOnUttY2xsDGNj4wrHS0REVEzRWvD09JK/g0EiKaznWnCt0llyY2FhgSZNmiiVmZmZoW7duoryAQMGwMHBAREREQCAzz//HK+99hrc3d2RlZWFBQsW4MaNGxg2bJjW4yciIvpvLXivwkTm2QSnaKuSyEhwLbh26Xy1VFlSU1OR8cw4ZWZmJoYPHw4vLy907twZOTk5OHz4MLy9vXUYJRERVWshIcDWrYCDg3K5o2NheUiIbuKqxiRClNSPpr9ycnJgZWWF7OxsWFpa6jocIiLSFzJZ4aqojIzCOTaBgeyx0SB1Pr+rxA7FRERELz2plMu9q4gqPSxFREREpC4mN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHrFUNcBEBERkX6QyWVISE1AxoMM2FvYI7B+IKQGUq3HweSGiIiIKiw2ORZhu8NwM+emoszR0hFRb0UhxCtEq7FwWIqIiIgqJDY5Fr0291JKbAAgPScdvTb3QmxyrFbjYXJDRERE5SaTyxC2OwwColhdUVn47nDI5DKtxcTkhoiIiMotITWhWI/NswQE0nLSkJCaoLWYmNwQERFRuWU8yNBoO01gckNERETlZm9hr9F2msDkhoiIiMotsH4gHC0dIYGkxHoJJHCydEJg/UCtxcTkhoiIiMpNaiBF1FtRAFAswSl6HflWpFb3u2FyQ0RERBUS4hWCre9uhYOlg1K5o6Ujtr67tfruczN37lxIJBKEh4eX2W7Lli1o1KgRTExM4OPjg127dmknQCIiIipViFcIroddx/6B+7E+ZD32D9yPlLAUrSc2QBXZoTgxMRErV65E06ZNy2x3+PBhhIaGIiIiAl27dsX69evRo0cPnDp1Ck2aNNFStERERFQSqYEU7V3a6zoM3ffc5Obmol+/fvjmm29Qu3btMttGRUXhrbfewqRJk+Dl5YVZs2bB398fS5cu1VK0REREVNXpPLkZNWoUunTpgo4dO76w7ZEjR4q1Cw4OxpEjR0o9Jy8vDzk5OUoHERER6S+dDktt3LgRp06dQmJiokrtb9++DVtbW6UyW1tb3L59u9RzIiIiMHPmzArFSURERC8PnfXcpKWlISwsDOvWrYOJiUml3Wfq1KnIzs5WHGlpaZV2LyIiItI9nfXcnDx5Enfv3oW/v7+iTCaT4Y8//sDSpUuRl5cHqVR5TbydnR3u3LmjVHbnzh3Y2dmVeh9jY2MYGxtrNngiIiKqsnTWc9OhQwecOXMGSUlJiqNFixbo168fkpKSiiU2ABAQEIDffvtNqWzv3r0ICAjQVthERERUxems58bCwqLY8m0zMzPUrVtXUT5gwAA4ODggIiICABAWFoZ27dph4cKF6NKlCzZu3IgTJ05g1apVWo+fiIiIqiadr5YqS2pqKjIy/vsW0datW2P9+vVYtWoVfH19sXXrVuzYsYN73BAREZGCRAghdB2ENuXk5MDKygrZ2dmwtLTUdThERESkAnU+v6vEDsXaVJTLcb8bIiKil0fR57YqfTLVLrl58OABAMDJyUnHkRAREZG6Hjx4ACsrqzLbVLthKblcjlu3bsHCwgISieTFJ6ghJycHTk5OSEtLq5ZDXtX9+QG+B3z+6v38AN+D6v78QOW9B0IIPHjwAPXq1YOBQdlThqtdz42BgQEcHR0r9R6WlpbV9oca4PMDfA/4/NX7+QG+B9X9+YHKeQ9e1GNTpEqvliIiIiJSF5MbIiIi0itMbjTI2NgYM2bMqLZf91Ddnx/ge8Dnr97PD/A9qO7PD1SN96DaTSgmIiIi/caeGyIiItIrTG6IiIhIrzC5ISIiIr3C5IaIiIj0CpMbDVi+fDmaNm2q2LAoICAAv/76q67D0pm5c+dCIpEgPDxc16FoxWeffQaJRKJ0NGrUSNdhaV16ejref/991K1bF6ampvDx8cGJEyd0HZZWuLi4FPsZkEgkGDVqlK5D0wqZTIZp06bB1dUVpqamaNCgAWbNmqXSdwDpkwcPHiA8PBzOzs4wNTVF69atkZiYqOuwKsUff/yBbt26oV69epBIJNixY4dSvRAC06dPh729PUxNTdGxY0dcvnxZa/ExudEAR0dHzJ07FydPnsSJEyfwv//9D927d8e5c+d0HZrWJSYmYuXKlWjatKmuQ9Gqxo0bIyMjQ3EcPHhQ1yFpVWZmJtq0aYMaNWrg119/xfnz57Fw4ULUrl1b16FpRWJiotKf/969ewEAvXv31nFk2jFv3jwsX74cS5cuRXJyMubNm4f58+djyZIlug5Nq4YNG4a9e/fi+++/x5kzZ/Dmm2+iY8eOSE9P13VoGvfw4UP4+vpi2bJlJdbPnz8fixcvxooVK3Ds2DGYmZkhODgYT5480U6AgipF7dq1xerVq3UdhlY9ePBAeHh4iL1794p27dqJsLAwXYekFTNmzBC+vr66DkOnpkyZItq2bavrMKqMsLAw0aBBAyGXy3UdilZ06dJFDBkyRKksJCRE9OvXT0cRad+jR4+EVCoVP//8s1K5v7+/+OSTT3QUlXYAENu3b1e8lsvlws7OTixYsEBRlpWVJYyNjcWGDRu0EhN7bjRMJpNh48aNePjwIQICAnQdjlaNGjUKXbp0QceOHXUditZdvnwZ9erVg5ubG/r164fU1FRdh6RVP/30E1q0aIHevXvDxsYGfn5++Oabb3Qdlk7k5+fjhx9+wJAhQzT+5bxVVevWrfHbb7/h0qVLAIA///wTBw8eRKdOnXQcmfYUFBRAJpPBxMREqdzU1LTa9eSmpKTg9u3bSp8FVlZWaNWqFY4cOaKVGKrdF2dWljNnziAgIABPnjyBubk5tm/fDm9vb12HpTUbN27EqVOn9HZ8uSytWrVCTEwMGjZsiIyMDMycOROBgYE4e/YsLCwsdB2eVly7dg3Lly/H+PHj8X//939ITEzE2LFjYWRkhIEDB+o6PK3asWMHsrKyMGjQIF2HojUff/wxcnJy0KhRI0ilUshkMsyePRv9+vXTdWhaY2FhgYCAAMyaNQteXl6wtbXFhg0bcOTIEbi7u+s6PK26ffs2AMDW1lap3NbWVlFX2ZjcaEjDhg2RlJSE7OxsbN26FQMHDsSBAweqRYKTlpaGsLAw7N27t9i/WqqDZ/912rRpU7Rq1QrOzs7YvHkzhg4dqsPItEcul6NFixaYM2cOAMDPzw9nz57FihUrql1y8+2336JTp06oV6+erkPRms2bN2PdunVYv349GjdujKSkJISHh6NevXrV6s//+++/x5AhQ+Dg4ACpVAp/f3+Ehobi5MmTug6t2uGwlIYYGRnB3d0dzZs3R0REBHx9fREVFaXrsLTi5MmTuHv3Lvz9/WFoaAhDQ0McOHAAixcvhqGhIWQyma5D1KpatWrB09MTV65c0XUoWmNvb18skffy8qp2w3M3btzAvn37MGzYMF2HolWTJk3Cxx9/jL59+8LHxwf9+/fHuHHjEBERoevQtKpBgwY4cOAAcnNzkZaWhuPHj+Pp06dwc3PTdWhaZWdnBwC4c+eOUvmdO3cUdZWNyU0lkcvlyMvL03UYWtGhQwecOXMGSUlJiqNFixbo168fkpKSIJVKdR2iVuXm5uLq1auwt7fXdSha06ZNG1y8eFGp7NKlS3B2dtZRRLoRHR0NGxsbdOnSRdehaNWjR49gYKD8cSKVSiGXy3UUkW6ZmZnB3t4emZmZiIuLQ/fu3XUdkla5urrCzs4Ov/32m6IsJycHx44d09pcVA5LacDUqVPRqVMn1K9fHw8ePMD69esRHx+PuLg4XYemFRYWFmjSpIlSmZmZGerWrVusXB9NnDgR3bp1g7OzM27duoUZM2ZAKpUiNDRU16Fpzbhx49C6dWvMmTMH7777Lo4fP45Vq1Zh1apVug5Na+RyOaKjozFw4EAYGlavX63dunXD7NmzUb9+fTRu3BinT5/GokWLMGTIEF2HplVxcXEQQqBhw4a4cuUKJk2ahEaNGmHw4MG6Dk3jcnNzlXqnU1JSkJSUhDp16qB+/foIDw/HF198AQ8PD7i6umLatGmoV68eevTooZ0AtbImS88NGTJEODs7CyMjI2FtbS06dOgg9uzZo+uwdKo6LQXv06ePsLe3F0ZGRsLBwUH06dNHXLlyRddhad3OnTtFkyZNhLGxsWjUqJFYtWqVrkPSqri4OAFAXLx4UdehaF1OTo4ICwsT9evXFyYmJsLNzU188sknIi8vT9ehadWmTZuEm5ubMDIyEnZ2dmLUqFEiKytL12FViv379wsAxY6BAwcKIQqXg0+bNk3Y2toKY2Nj0aFDB63+3ZAIUc22kCQiIiK9xjk3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNEem9mJgY1KpVSyv3io+PR0xMjFbuRUQlY3JDRBVy+/ZtjBkzBm5ubjA2NoaTkxO6deum9L0ymnL9+nVIJBLFUbduXbz55ps4ffp0mef16dMHly5d0ng8RFQ1MbkhonK7fv06mjdvjt9//x0LFizAmTNnsHv3bgQFBWHUqFHlvq5MJivzSxf37duHjIwMxMXFITc3F506dUJWVlaJbZ8+fQpTU1PY2NiUOx5VJCUl4Y033kDPnj0xZswY+Pj44LPPPqvUexJRyZjcEFG5jRw5EhKJBMePH0fPnj3h6emJxo0bY/z48Th69Kii3aJFi+Dj4wMzMzM4OTlh5MiRyM3NVdQXDRv99NNP8Pb2hrGxMVJTU0u9b926dWFnZ4cWLVrgyy+/xJ07d3Ds2DFFz86mTZvQrl07mJiYYN26dSUOS+3cuROvvvoqTExM8Morr+Cdd95R1OXl5WHixIlwcHCAmZkZWrVqhfj4+FLjEUKge/fuMDU1RUREBCZPnow5c+bA1NRU/TeViCqMyQ0Rlcv9+/exe/dujBo1CmZmZsXqn00mDAwMsHjxYpw7dw5r1qzB77//jsmTJyu1f/ToEebNm4fVq1fj3LlzKve0FCUQ+fn5irKPP/4YYWFhSE5ORnBwcLFzfvnlF7zzzjvo3LkzTp8+jd9++w0tW7ZU1I8ePRpHjhzBxo0b8ddff6F379546623cPny5RJjuHfvHlJTUzFlyhR4enoqhuamTJmi0jMQkYZp7Ss6iUivHDt2TAAQsbGxap+7ZcsWUbduXcXr6OhoAUAkJSWVeV5KSooAIE6fPi2EECIzM1O88847wtzcXNy+fVtRHxkZqXRedHS0sLKyUrwOCAgQ/fr1K/EeN27cEFKpVKSnpyuVd+jQQUydOrXU2Bo2bCiCg4PFV199JaKjo8t8DiKqXOy5IaJyEUKo3Hbfvn3o0KEDHBwcYGFhgf79++PevXt49OiRoo2RkRGaNm2q0vVat24Nc3Nz1K5dG3/++Sc2bdoEW1tbRX2LFi3KPD8pKQkdOnQose7MmTOQyWTw9PSEubm54jhw4ACuXr1a6jXj4uJga2uLOXPm4MMPP0SHDh3w+++/q/Q8RKRZhroOgIheTh4eHpBIJLhw4UKZ7a5fv46uXbvio48+wuzZs1GnTh0cPHgQQ4cORX5+PmrWrAmgcHhJIpGodO9NmzbB29sbdevWLXGJd0nDZM8qay5Mbm4upFIpTp48CalUqlRnbm5e6nnOzs5Ys2YN4uPjsX//fuTm5uKtt97C6dOn0bhx47IfiIg0ij03RFQuderUQXBwMJYtW4aHDx8Wqy9avXTy5EnI5XIsXLgQr732Gjw9PXHr1q0K3dvJyQkNGjQo9941TZs2LXWpup+fH2QyGe7evQt3d3elw87OTqXru7q6YuHChbCwsFCaWE1E2sHkhojKbdmyZZDJZGjZsiW2bduGy5cvIzk5GYsXL0ZAQAAAwN3dHU+fPsWSJUtw7do1fP/991ixYoVO454xYwY2bNiAGTNmIDk5GWfOnMG8efMAAJ6enujXrx8GDBiA2NhYpKSk4Pjx44iIiMAvv/xS4vVu3bqF8ePH46+//kJeXh4ePXqElStXIisrC35+ftp8NCICh6WIqALc3Nxw6tQpzJ49GxMmTEBGRgasra3RvHlzLF++HADg6+uLRYsWYd68eZg6dSpef/11REREYMCAATqLu3379tiyZQtmzZqFuXPnwtLSEq+//rqiPjo6Gl988QUmTJiA9PR0vPLKK3jttdfQtWvXEq9naWmJgoIC9OrVC6mpqRBCwM3NDdHR0fD399fWYxHRvyRCnVmBRERUpvj4eFy/fh2DBg3SdShE1RaHpYiIiEivsOeGiIiI9Ap7boiIiEivMLkhIiIivcLkhoiIiPQKkxsiIiLSK0xuiIiISK8wuSEiIiK9wuSGiIiI9AqTGyIiItIrTG6IiIhIrzC5ISIiIr3y/wx+xgeHDw5TAAAAAElFTkSuQmCC\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "markdown", + "source": [ + "
\n", + "## 3. 로지스틱 회귀\n", + "\n", + "- 선형 회귀는 분류 문제에서 적합하지 않습니다.\n", + "- 우리는 분류 문제를 해결하기 위해 로지스틱 회귀를 사용합니다.\n", + "- 선형 회귀 + 로지스틱 함수(소프트맥스) = 로지스틱 회귀\n", + "\n", + " \n", + "- **로지스틱 회귀의 단계**\n", + " 1. 라이브러리 가져오기\n", + " 2. 데이터셋 준비\n", + " - 우리는 MNIST 데이터셋을 사용합니다.\n", + " - 28x28 이미지와 0부터 9까지의 10개의 레이블이 있습니다.\n", + " - 데이터는 정규화되지 않았기 때문에 각 이미지를 255로 나눠 기본적인 정규화를 진행합니다.\n", + " - 데이터를 분할하기 위해 sklearn 라이브러리의 `train_test_split` 메서드를 사용합니다.\n", + " - 학습 데이터 크기는 80%, 테스트 데이터 크기는 20%입니다.\n", + " - 특성(feature)과 목표(target) 텐서를 생성합니다. 이후 텐서에서 변수(variable)를 생성합니다. 이 변수는 기울기 누적을 위해 정의됩니다.\n", + " - `batch_size` = 배치 크기는 예를 들어, 1000개의 샘플이 있을 때, 이 샘플을 한 번에 모두 훈련시킬 수도 있고, 100개의 샘플씩 10개의 그룹으로 나누어 순차적으로 훈련시킬 수도 있습니다. 예를 들어, `batch_size = 100`이라면, 모든 데이터를 한 번 훈련시키는 데 336개의 그룹을 사용합니다. 각 그룹은 100개의 샘플을 가지고 있으며, 총 33600개의 샘플을 훈련합니다.\n", + " - `epoch`: 1 epoch는 모든 샘플을 한 번 훈련시키는 것입니다.\n", + " - 예를 들어, 33600개의 샘플이 있고, 배치 크기(batch_size)는 100, epoch는 29로 설정한 경우, 29번 훈련을 진행합니다. 그럼 총 몇 번의 반복(iteration)이 필요한지 계산해 봅시다:\n", + " - 훈련 데이터 1번 = 33600개의 샘플 훈련\n", + " - 하지만 데이터를 336개의 그룹으로 나누었으므로, 1 epoch는 336번의 반복이 필요합니다.\n", + " - 29 epoch 동안 훈련하므로, 총 반복 횟수는 9744번입니다(대략 10000번).\n", + " - `TensorDataset()`: 텐서를 래핑하는 데이터셋. 각 샘플은 텐서를 첫 번째 차원으로 인덱싱하여 검색됩니다.\n", + " - `DataLoader()`: 데이터셋과 샘플을 결합하고, 데이터셋에 대한 다중 프로세스 반복기를 제공합니다.\n", + " - 데이터셋의 이미지를 하나 시각화해봅니다.\n", + " 3. 로지스틱 회귀 모델 생성\n", + " - 선형 회귀와 비슷합니다.\n", + " - 하지만 예측을 위해 모델에 로지스틱 함수(소프트맥스)가 포함되어야 합니다.\n", + " - PyTorch에서는 로지스틱 함수가 손실 함수에 포함되어 있으며, 이후 단계에서 이를 사용합니다.\n", + " 4. 모델 인스턴스화\n", + " - `input_dim = 28*28` # 이미지 크기 px*px\n", + " - `output_dim = 10` # 레이블 0,1,2,3,4,5,6,7,8,9\n", + " - 모델을 생성합니다.\n", + " 5. 손실 함수 인스턴스화\n", + " - 교차 엔트로피 손실\n", + " - 손실을 계산하는 함수로, 소프트맥스(로지스틱 함수)도 포함되어 있습니다.\n", + " 6. 옵티마이저 인스턴스화\n", + " - SGD 옵티마이저\n", + " 7. 모델 훈련\n", + " 8. 예측\n", + "- 결과적으로, 그래프에서 볼 수 있듯이 손실 값은 감소하고, 정확도는 약 85%까지 증가하며 모델이 훈련되고 있음을 확인할 수 있습니다." + ], + "metadata": { + "id": "7uXrwVTU9VFH" + } + }, + { + "cell_type": "code", + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "from torch.autograd import Variable\n", + "from torch.utils.data import DataLoader\n", + "import pandas as pd\n", + "from sklearn.model_selection import train_test_split" + ], + "metadata": { + "id": "FvnI_38-8CfS" + }, + "execution_count": 21, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# 데이터셋 준비\n", + "# 데이터 로드\n", + "from google.colab import drive\n", + "drive.mount('/content/drive/')" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8G40kdwjyrC1", + "outputId": "1d34a632-f5eb-48eb-fb91-31aa9e67cdd5" + }, + "execution_count": 22, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Mounted at /content/drive/\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 데이터셋 준비\n", + "# 데이터 로드\n", + "train = pd.read_csv(r\"/content/drive/MyDrive/딥러닝 파이토치 실습/week1/train.csv\", dtype=np.float32)\n", + "\n", + "# 데이터를 특징(픽셀 값)과 라벨(0~9 숫자)로 분리\n", + "targets_numpy = train.label.values\n", + "features_numpy = train.loc[:, train.columns != \"label\"].values / 255 # 정규화\n", + "\n", + "# 학습 데이터 80%, 테스트 데이터 20%로 분할\n", + "features_train, features_test, targets_train, targets_test = train_test_split(\n", + " features_numpy, targets_numpy, test_size=0.2, random_state=42\n", + ")\n", + "\n", + "# 학습 데이터셋을 텐서로 변환 (경사 계산을 위해 Variable 생성 필요)\n", + "featuresTrain = torch.from_numpy(features_train)\n", + "targetsTrain = torch.from_numpy(targets_train).type(torch.LongTensor) # 데이터 타입은 long\n", + "\n", + "# 테스트 데이터셋을 텐서로 변환\n", + "featuresTest = torch.from_numpy(features_test)\n", + "targetsTest = torch.from_numpy(targets_test).type(torch.LongTensor)\n", + "## 힌트: PyTorch Tesnor를 생성해주세요!\n", + "## 어떤 데이터를 PyTorch Tensor를 변환하고, 어떤 데이터타입을 선택할지 직접 작성해주세요\n", + "\n", + "# 배치 크기, 반복 횟수 및 에포크 설정\n", + "batch_size = 100\n", + "n_iters = 10000\n", + "num_epochs = int(n_iters / (len(features_train) / batch_size))\n", + "\n", + "# PyTorch 학습 및 테스트 데이터셋 생성\n", + "train = torch.utils.data.TensorDataset(featuresTrain, targetsTrain)\n", + "test = torch.utils.data.TensorDataset(featuresTest, targetsTest)\n", + "## 힌트: 입력 데이터와 레이블을 텐서로 변환하여, 이들을 TensorDataset으로 묶어 train과 test 데이터셋을 구성합니다\n", + "## TensorDataset에는 두 개의 텐서를 전달해야 하며, 각각 특징과 레이블에 해당합니다.\n", + "## 첫 번째 텐서는 입력 데이터, 두 번째 텐서는 정답 데이터이며 입력 데이터와 정답 데이터의 샘플 수가 동일해야 합니다.\n", + "\n", + "# 데이터 로더 생성\n", + "train_loader = DataLoader(train, batch_size=batch_size, shuffle=False)\n", + "test_loader = DataLoader(test, batch_size=batch_size, shuffle=False)\n", + "\n", + "# 데이터셋 중 하나의 이미지를 시각화\n", + "plt.imshow(features_numpy[10].reshape(28, 28))\n", + "plt.axis(\"off\")\n", + "plt.title(str(targets_numpy[10]))\n", + "plt.savefig('graph.png')\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 428 + }, + "id": "cPmM5DM48Cb6", + "outputId": "66d27d56-d101-4115-8c9a-e54616816c81" + }, + "execution_count": 23, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 로지스틱 회귀 모델 생성\n", + "class LogisticRegressionModel(nn.Module):\n", + " def __init__(self, input_dim, output_dim):\n", + " super(LogisticRegressionModel, self).__init__()\n", + " # 선형 계층 설정\n", + " self.linear = nn.Linear(input_dim, output_dim)\n", + " # 로지스틱 함수는 손실 함수에 포함되어 있으므로 별도로 정의할 필요 없음\n", + "\n", + " def forward(self, x):\n", + " out = self.linear(x)\n", + " return out\n", + "\n", + "# 모델 인스턴스화\n", + "input_dim = 28 * 28 # 이미지 크기 (픽셀 * 픽셀)\n", + "output_dim = 10 # 출력 라벨 (0~9)\n", + "\n", + "# 로지스틱 회귀 모델 생성\n", + "model = LogisticRegressionModel(input_dim, output_dim)\n", + "\n", + "# 크로스 엔트로피 손실 함수\n", + "error = nn.CrossEntropyLoss()\n", + "\n", + "# SGD 옵티마이저 설정\n", + "learning_rate = 0.001\n", + "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n", + "## 힌트: 모델 파라미터를 model.parameters()로 넘겨줍니다\n", + "## 학습률(learning rate)은 훈련 속도를 결정합니다\n", + "## 최적화 함수가 SGD이므로, torch.optim.SGD를 사용합니다" + ], + "metadata": { + "id": "S73aSJuz8CZq" + }, + "execution_count": 24, + "outputs": [] + }, + { + "cell_type": "code", + "source": [ + "# 모델 학습\n", + "count = 0\n", + "loss_list = []\n", + "iteration_list = []\n", + "for epoch in range(num_epochs):\n", + " for i, (images, labels) in enumerate(train_loader):\n", + "\n", + " # 변수 정의\n", + " train = Variable(images.view(-1, 28 * 28))\n", + " labels = Variable(labels)\n", + "\n", + " # 경사 초기화\n", + " optimizer.zero_grad()\n", + "\n", + " # 순전파\n", + " outputs = model(train)\n", + "\n", + " # 소프트맥스 및 크로스 엔트로피 손실 계산\n", + " loss = error(outputs, labels)\n", + "\n", + " # 역전파를 통한 경사 계산\n", + " loss.backward()\n", + "\n", + " # 가중치 업데이트\n", + " optimizer.step()\n", + "\n", + " count += 1\n", + "\n", + " # 정확도 측정\n", + " if count % 50 == 0:\n", + " correct = 0\n", + " total = 0\n", + " # 테스트 데이터셋 예측 수행\n", + " for images, labels in test_loader:\n", + " test = Variable(images.view(-1, 28 * 28))\n", + "\n", + " # 순전파\n", + " outputs = model(test)\n", + "\n", + " # 최댓값을 기준으로 예측값 결정\n", + " predicted = torch.max(outputs.data, 1)[1]\n", + "\n", + " # 전체 라벨 개수\n", + " total += len(labels)\n", + "\n", + " # 맞춘 개수 계산\n", + " correct += (predicted == labels).sum()\n", + "\n", + " accuracy = 100 * correct / float(total)\n", + "\n", + " # 손실 및 반복 횟수 저장\n", + " loss_list.append(loss.data)\n", + " iteration_list.append(count)\n", + "\n", + " # 500번마다 손실 출력\n", + " if count % 500 == 0:\n", + " print('Iteration: {} Loss: {} Accuracy: {}%'.format(count, loss.data, accuracy))" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Oc4X8eZt8CXq", + "outputId": "5e3362ca-e7a5-4032-f23e-fdfca5aea0fe" + }, + "execution_count": 25, + "outputs": [ + { + "output_type": "stream", + "name": "stdout", + "text": [ + "Iteration: 500 Loss: 1.8331190347671509 Accuracy: 65.44047546386719%\n", + "Iteration: 1000 Loss: 1.6040655374526978 Accuracy: 75.46428680419922%\n", + "Iteration: 1500 Loss: 1.2869268655776978 Accuracy: 79.1547622680664%\n", + "Iteration: 2000 Loss: 1.1951954364776611 Accuracy: 80.96428680419922%\n", + "Iteration: 2500 Loss: 1.0366665124893188 Accuracy: 81.85713958740234%\n", + "Iteration: 3000 Loss: 0.9232807755470276 Accuracy: 82.54762268066406%\n", + "Iteration: 3500 Loss: 0.8988181948661804 Accuracy: 83.0952377319336%\n", + "Iteration: 4000 Loss: 0.7505621314048767 Accuracy: 83.54762268066406%\n", + "Iteration: 4500 Loss: 0.9705399870872498 Accuracy: 83.94047546386719%\n", + "Iteration: 5000 Loss: 0.7989796996116638 Accuracy: 84.32142639160156%\n", + "Iteration: 5500 Loss: 0.7503263354301453 Accuracy: 84.58333587646484%\n", + "Iteration: 6000 Loss: 0.8809587359428406 Accuracy: 84.88095092773438%\n", + "Iteration: 6500 Loss: 0.6631824374198914 Accuracy: 85.11904907226562%\n", + "Iteration: 7000 Loss: 0.7107561230659485 Accuracy: 85.3452377319336%\n", + "Iteration: 7500 Loss: 0.6296020746231079 Accuracy: 85.42857360839844%\n", + "Iteration: 8000 Loss: 0.7376196980476379 Accuracy: 85.53571319580078%\n", + "Iteration: 8500 Loss: 0.5432592630386353 Accuracy: 85.71428680419922%\n", + "Iteration: 9000 Loss: 0.6587902903556824 Accuracy: 85.8452377319336%\n", + "Iteration: 9500 Loss: 0.5279787182807922 Accuracy: 85.89286041259766%\n" + ] + } + ] + }, + { + "cell_type": "code", + "source": [ + "# 시각화\n", + "plt.plot(iteration_list,loss_list)\n", + "plt.xlabel(\"Number of iteration\")\n", + "plt.ylabel(\"Loss\")\n", + "plt.title(\"Logistic Regression: Loss vs Number of iteration\")\n", + "plt.show()" + ], + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 472 + }, + "id": "FctKP-1E8CVh", + "outputId": "b3d5faeb-9a54-4697-c392-687ad7bac787" + }, + "execution_count": 26, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": [ + "
" + ], + "image/png": "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hmXLlmHkyJHYvXu38kv9mmuuwcGDB3H33XcjLi4OWVlZWLNmDVJTU5XPx48fj9DQUDz88MMICAhAcnKy0z9stlz9PpDdfffdCAwMxOOPP47k5GQsXboU8+bNwxdffKEc891332HOnDlYsWJFkxTyL1q0CE888QQSExNx55134ujRo1i2bBn++ecf5ethMBiQlJSEyspK3H333YiIiMDZs2fx888/o6CgAHq9HgcPHsQVV1yBvn374sknn4ROp8OJEyewadOmOt9/2rRpWLRoETIyMhAREaE8vnHjRpw7dw7Tp08HYAnIZsyYgXHjxuG5554DABw+fBibNm3Cvffe6/K1XnLJJVi2bBkWLFjQyDtW0yeffAKDwYC7774beXl5WLJkCa6//npceumlWL9+Pf7973/jxIkTeO211/DAAw/g/ffft3v98ePHMW3aNPzrX//CrFmzsGLFClx33XVYtWoVLrvsMgCW6a3Ro0fj7NmzuOOOO9CxY0ds3rwZCxcuRHp6OpYuXWp3zhUrVqCiogK33347dDodgoKCah3/rbfeig8++ADXXnst7r//fmzbtg2LFy/G4cOH8d133wGw/Cy9/fbb2L59O959910AwMUXX+zS/QkNDcWyZctw5513YurUqbj66qsBAH379gVg+TkZMWIEOnTogIcffhg+Pj748ssvMWXKFHzzzTeYOnWq3fmc/az/888/2Lx5M6ZPn47o6GgkJydj2bJlGDNmDA4dOgRvb29ccskluOeee/Dqq6/iP//5D3r06AEAyn8dlZeXY8yYMThx4gTmzZuH+Ph4fPXVV5g9ezYKCgpqfN99+umnKC4uxh133AFJkrBkyRJcffXVOHXqVJNm9S9Igi5YK1asEADEP//8U+sxU6ZMEVqtVpw8eVJ57Ny5c8LPz09ccsklymN33323kCRJ7N69W3ksNzdXBAUFCQDi9OnTyuOjR48Wo0ePVj6/6qqrRK9eveoc6/PPP1/jPLLY2Fgxa9Ys5fPHHntMABDffvttjWPNZnOd7xMbGyvGjx8vsrOzRXZ2tti/f7+46aabBAAxd+5c5bi///5bABCffPKJ3etXrVpl93hGRobQaDRiypQpdsctWrRIALAbt/z1GDlypDAajcrjxcXFIiAgQNx2221258jIyBB6vV55PD8/XwAQzz//fK3X991339X7NRdCCADi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\n" + }, + "metadata": {} + } + ] + }, + { + "cell_type": "code", + "source": [], + "metadata": { + "id": "15A-yzhkVmbb" + }, + "execution_count": null, + "outputs": [] + } + ] +} \ No newline at end of file diff --git "a/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\234\244\354\240\225.ipynb" "b/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\234\244\354\240\225.ipynb" deleted file mode 100644 index 2fbee45..0000000 --- "a/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\234\244\354\240\225.ipynb" +++ /dev/null @@ -1 +0,0 @@ -{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[]},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"}},"cells":[{"cell_type":"markdown","source":["# **Week1 복습과제**\n","\n","1. [Pytorch 기본]\n","1. [Linear Regression]\n","1. [Logistic Regression]"],"metadata":{"id":"9mabISNcCPiV"}},{"cell_type":"code","execution_count":31,"metadata":{"id":"T-Govjsw7kBQ","executionInfo":{"status":"ok","timestamp":1789028798711,"user_tz":-540,"elapsed":13,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"outputs":[],"source":["# import libraries\n","import numpy as np\n","import pandas as pd\n","import matplotlib.pyplot as plt\n","\n","#input data: 첨부된 .csv 파일 다운받아 사용해주세요"]},{"cell_type":"markdown","source":["
\n","## 1. Pytorch 기본"],"metadata":{"id":"0qcO6qTxCUTU"}},{"cell_type":"code","source":["# numpy array\n","array = [[1,2,3],[4,5,6]]\n","first_array = np.array(array) # 2x3 array\n","print(\"Array Type: {}\".format(type(first_array))) # type\n","print(\"Array Shape: {}\".format(first_array.shape)) # shape\n","print(first_array)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"_KdP4S5g7udz","outputId":"deee79b8-91b1-4c20-d990-2f7ca93c4aae","executionInfo":{"status":"ok","timestamp":1789028798721,"user_tz":-540,"elapsed":8,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":32,"outputs":[{"output_type":"stream","name":"stdout","text":["Array Type: \n","Array Shape: (2, 3)\n","[[1 2 3]\n"," [4 5 6]]\n"]}]},{"cell_type":"markdown","source":["- 우리는 NumPy 배열을 살펴보았습니다.\n","- 이제 텐서(PyTorch 배열)를 구현하는 방법을 살펴보겠습니다.\n","- import torch를 사용하여 PyTorch 라이브러리를 가져옵니다.\n","- torch.Tensor() 메서드를 사용하여 텐서를 생성합니다.\n","- type: 배열의 타입을 나타냅니다. 이 예제에서는 텐서입니다.\n","- shape: 배열의 형태를 나타냅니다. (행 × 열)"],"metadata":{"id":"HfLiM-u1Cj5l"}},{"cell_type":"code","source":["# import pytorch library\n","import torch\n","\n","# pytorch array\n","tensor = torch.Tensor(array)\n","print(\"Array Type: {}\".format(tensor.type())) # type\n","print(\"Array Shape: {}\".format(tensor.shape)) # shape\n","print(tensor)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"d-uAA50o7ua4","outputId":"9f0c7823-ff83-4140-f0cd-1e7129e78c67","executionInfo":{"status":"ok","timestamp":1789028798730,"user_tz":-540,"elapsed":8,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":33,"outputs":[{"output_type":"stream","name":"stdout","text":["Array Type: torch.FloatTensor\n","Array Shape: torch.Size([2, 3])\n","tensor([[1., 2., 3.],\n"," [4., 5., 6.]])\n"]}]},{"cell_type":"markdown","source":["- 할당(Allocation)은 코딩에서 가장 많이 사용되는 기법 중 하나입니다.\n","- 따라서 PyTorch를 사용하여 이를 구현하는 방법을 배워봅시다.\n","- 학습을 위해 NumPy와 Tensor를 비교해 봅시다.\n"," - np.ones() = torch.ones()\n"," - np.random.rand() = torch.rand()"],"metadata":{"id":"pEvocwKPC6J1"}},{"cell_type":"code","source":["# numpy ones\n","print(\"Numpy {}\\n\".format(np.ones((2,3)))) # 2x3 in numpy\n","\n","# pytorch ones\n","print(torch.ones(2,3)) # 2x3 in tensor"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"QlHQXzBR7uYo","outputId":"e0871530-7d47-4892-d428-40b04d64da05","executionInfo":{"status":"ok","timestamp":1789028798760,"user_tz":-540,"elapsed":28,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":34,"outputs":[{"output_type":"stream","name":"stdout","text":["Numpy [[1. 1. 1.]\n"," [1. 1. 1.]]\n","\n","tensor([[1., 1., 1.],\n"," [1., 1., 1.]])\n"]}]},{"cell_type":"code","source":["# numpy random\n","print(\"Numpy {}\\n\".format(np.random.rand(2,3))) # 2x3 random numpy array\n","\n","# pytorch random\n","print(torch.rand(2,3)) # 2x3 random tensor"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"xEV88BpO7uWc","outputId":"10c6c7dc-b473-453d-b55e-7eeb8df6ddfc","executionInfo":{"status":"ok","timestamp":1789028798788,"user_tz":-540,"elapsed":26,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":35,"outputs":[{"output_type":"stream","name":"stdout","text":["Numpy [[0.0855452 0.33332676 0.02701046]\n"," [0.28014679 0.76868357 0.90734782]]\n","\n","tensor([[0.1186, 0.4270, 0.6615],\n"," [0.2640, 0.5728, 0.6535]])\n"]}]},{"cell_type":"markdown","source":["- 텐서와 NumPy 배열 간의 변환을 살펴봅시다.\n"," - torch.from_numpy(): NumPy → Tensor\n"," - .numpy(): Tensor → NumPy"],"metadata":{"id":"2TAOGUteDLOv"}},{"cell_type":"code","source":["# random numpy array\n","array = np.random.rand(2,2)\n","print(\"{} {}\\n\".format(type(array), array))\n","\n","# numpy -> tensor\n","from_numpy_to_tensor = torch.from_numpy(array)\n","print(\"{}\\n\".format(from_numpy_to_tensor))\n","\n","# tensor -> numpy\n","tensor = from_numpy_to_tensor\n","from_tensor_to_numpy = tensor.numpy()\n","print(\"{} {}\\n\".format(type(from_tensor_to_numpy),from_tensor_to_numpy))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"yWShZwKC7uUM","outputId":"3204c7d0-6000-48fb-e030-de8d6c19d96c","executionInfo":{"status":"ok","timestamp":1789028798799,"user_tz":-540,"elapsed":8,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":36,"outputs":[{"output_type":"stream","name":"stdout","text":[" [[0.87551471 0.64295531]\n"," [0.43863765 0.87821535]]\n","\n","tensor([[0.8755, 0.6430],\n"," [0.4386, 0.8782]], dtype=torch.float64)\n","\n"," [[0.87551471 0.64295531]\n"," [0.43863765 0.87821535]]\n","\n"]}]},{"cell_type":"markdown","source":["### PyTorch 기본 수학 연산\n","- 크기 변경(Resize): view()\n","- a와 b는 텐서입니다.\n","- 덧셈(Addition): torch.add(a, b) = a + b\n","- 뺄셈(Subtraction): a.sub(b) = a - b\n","- 원소별 곱(Element-wise Multiplication): torch.mul(a, b) = a * b\n","- 원소별 나눗셈(Element-wise Division): torch.div(a, b) = a / b\n","- 평균(Mean): a.mean()\n","- 표준 편차(Standard Deviation, std): a.std()\n"],"metadata":{"id":"bsJkMU_lDZgy"}},{"cell_type":"code","source":["# 텐서 생성\n","tensor = torch.ones(3,3)\n","print(\"\\n\",tensor)\n","\n","# 크기 변경\n","print(\"{}{}\\n\".format(tensor.view(9).shape,tensor.view(9)))\n","\n","# 덧셈\n","print(\"Addition: {}\\n\".format(torch.add(tensor,tensor)))\n","\n","# 뺄셈\n","print(\"Subtraction: {}\\n\".format(tensor.sub(tensor)))\n","\n","# 원소별 곱\n","print(\"Element wise multiplication: {}\\n\".format(torch.mul(tensor,tensor)))\n","\n","# 원소별 나눗셈\n","print(\"Element wise division: {}\\n\".format(torch.div(tensor,tensor)))\n","\n","# 평균\n","tensor = torch.Tensor([1,2,3,4,5])\n","print(\"Mean: {}\".format(tensor.mean()))\n","\n","# 표준편차\n","print(\"std: {}\".format(tensor.std()))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"V6iLiAPS7uQs","outputId":"cc43ff1c-c56a-43db-c2d2-506330df189a","executionInfo":{"status":"ok","timestamp":1789028798864,"user_tz":-540,"elapsed":63,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":37,"outputs":[{"output_type":"stream","name":"stdout","text":["\n"," tensor([[1., 1., 1.],\n"," [1., 1., 1.],\n"," [1., 1., 1.]])\n","torch.Size([9])tensor([1., 1., 1., 1., 1., 1., 1., 1., 1.])\n","\n","Addition: tensor([[2., 2., 2.],\n"," [2., 2., 2.],\n"," [2., 2., 2.]])\n","\n","Subtraction: tensor([[0., 0., 0.],\n"," [0., 0., 0.],\n"," [0., 0., 0.]])\n","\n","Element wise multiplication: tensor([[1., 1., 1.],\n"," [1., 1., 1.],\n"," [1., 1., 1.]])\n","\n","Element wise division: tensor([[1., 1., 1.],\n"," [1., 1., 1.],\n"," [1., 1., 1.]])\n","\n","Mean: 3.0\n","std: 1.5811388492584229\n"]}]},{"cell_type":"markdown","source":["### Variables \n","- 변수는 그래디언트(Gradients)를 누적합니다.\n","- 우리는 PyTorch를 신경망에 사용할 것입니다. 신경망에서는 역전파(Backpropagation) 과정에서 그래디언트를 계산하게 됩니다. 따라서 그래디언트를 다룰 필요가 있습니다.\n","- 변수(Variable)와 텐서(Tensor)의 차이점은 변수가 그래디언트를 누적한다는 것입니다. \n","- 변수를 사용하여 수학 연산을 수행할 수도 있습니다. \n","- 역전파를 수행하려면 변수가 필요합니다."],"metadata":{"id":"HxVIlKSQEIXx"}},{"cell_type":"code","source":["from torch.autograd import Variable\n","\n","# variable 정의\n","var = Variable(torch.ones(3), requires_grad = True)\n","var"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"UfpDKji97uOv","outputId":"32ef520d-98a5-4021-c6ca-a106cbae9f9f","executionInfo":{"status":"ok","timestamp":1789028798895,"user_tz":-540,"elapsed":45,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":38,"outputs":[{"output_type":"execute_result","data":{"text/plain":["tensor([1., 1., 1.], requires_grad=True)"]},"metadata":{},"execution_count":38}]},{"cell_type":"code","source":["# 기본적인 역전파(backward propagation) 수행\n","# 주어진 함수 y = x^2\n","array = [2,4]\n","tensor = torch.Tensor(array)\n","x = Variable(tensor, requires_grad = True)\n","y = x**2\n","print(\" y = \",y)\n","\n","# 방정식 요약: o = 1/2*sum(y)\n","o = (1/2)*sum(y)\n","print(\" o = \",o)\n","\n","# 역전파 실행(그래디언트 계산)\n","o.backward()\n","\n","# 변수는 그래디언트를 누적. 여기서는 x 하나만 존재.\n","# 따라선 변수 x는 그래디언트를 가져야 함\n","# x의 그래디언트 출\n","print(\"gradients: \",x.grad)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"t4p2w1z_7uMv","outputId":"d5b265cb-da17-46cf-f8e4-b93c44e1a224","executionInfo":{"status":"ok","timestamp":1789028798896,"user_tz":-540,"elapsed":40,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":39,"outputs":[{"output_type":"stream","name":"stdout","text":[" y = tensor([ 4., 16.], grad_fn=)\n"," o = tensor(10., grad_fn=)\n","gradients: tensor([2., 4.])\n"]}]},{"cell_type":"markdown","source":["
\n","## 2. 선형 회귀\n","\n","- y = Ax + B\n"," - A = 기울기\n"," - B = 절편 (y축과 교차하는 점)\n","\n","- 자동차 가격이 낮으면 더 많이 팔리고, 자동차 가격이 높으면 덜 팔린다는 사실을 우리는 알고 있으며, 이에 대한 데이터셋을 가지고 있습니다.\n","\n","- 목표는 자동차 가격이 100일 때 팔린 자동차의 수를 예측하는 것입니다."],"metadata":{"id":"Jq1tID2f9DOP"}},{"cell_type":"code","source":["# 자동차 회사에서 과거 판매 데이터를 수집했다고 가정\n","# 자동차 가격 데이터 정의\n","car_prices_array = [3,4,5,6,7,8,9]\n","car_price_np = np.array(car_prices_array,dtype=np.float32) # numpy array로 변환\n","car_price_np = car_price_np.reshape(-1,1) #reshape\n","car_price_tensor = Variable(torch.from_numpy(car_price_np)) # define variable\n","\n","# 자동차 판매량 데이터 정의\n","number_of_car_sell_array = [ 7.5, 7, 6.5, 6.0, 5.5, 5.0, 4.5]\n","number_of_car_sell_np = np.array(number_of_car_sell_array,dtype=np.float32) # numpy array 로 변환\n","number_of_car_sell_np = number_of_car_sell_np.reshape(-1,1) #reshape\n","number_of_car_sell_tensor = Variable(torch.from_numpy(number_of_car_sell_np)) # define variable\n","\n","# 데이터 시각화\n","import matplotlib.pyplot as plt\n","plt.scatter(car_prices_array,number_of_car_sell_array)\n","plt.xlabel(\"Car Price $\")\n","plt.ylabel(\"Number of Car Sell\")\n","plt.title(\"Car Price$ VS Number of Car Sell\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":436},"id":"5r4kXCwf7uKP","outputId":"26099700-482c-4ea7-b258-14f873e11f0c","executionInfo":{"status":"ok","timestamp":1789028799109,"user_tz":-540,"elapsed":213,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":40,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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/Oc/TalSpcypU6fsfX19fU3Dhg3Nn3/+6fQ5LhcWFmbuvvtus3fv3hxXb3K7ctO7d28TFhaW4zhxcXHm7/9rk2Sio6NNaGioGTdunBk3bpwJCAgwN998s5k0aZKJjIw0b7zxhnnxxReNl5eXueOOOxz2b9mypalUqZIJCgoygwYNMm+99ZZp3ry5kWRmzJjh8J4587O5VFOdOnVMYGCgGTVqlJk8ebL9Z5ybS6+rTZs25u233zaDBg0ynp6e5rbbbjPnz583xhjz+eef23//4uPjzQcffGC2bt2a6/HOnDljSpYsae688848z/l3VapUMU888YSZNGmSmTBhgmncuLGRZL766qt8v7YjR44YSebuu+82Z86cueL5z5w5Y6Kjo02FChXM888/b6ZMmWJ69eplbDabGTJkSI4auHJz4yLc4LqSlpZmJOX4oLiS3IaA2rdvnyMghYWFGUlm8eLFTh33Urj5/fffze+//26SkpLMK6+8Ymw2m4mOjnbquH8PN//5z3+MJDN//vwcfbOzs40xxnzwwQfGw8PDrFq1ymH7lClTjCTz008/GWMufhB4eHiYF154wRjjergxxpjhw4cbSWbXrl32trS0NOPj42O6d+/u0PdS7aVLlzYdO3Y0L7/8stm4caPT57oUbowx5pFHHjE+Pj72YceCCDfe3t4Or3/q1KlGkgkODnYYkomNjc3xIdiyZUsjybzxxhv2tszMTHPrrbeaoKAge7hw9mdzqSYPDw+zffv2q743x48fN15eXqZdu3YmKyvL3j5p0iQjybz33ns5Xv/VhqW2bt1qJOUIBVfy939L58+fN1FRUTkCkiuvzRhjevXq5TBk+vrrr5udO3fm6DdmzBhTunRps3v3bof2ESNGGE9PT5OcnOxQA+HmxsWwFK4r6enpkpTrJfS8+Pr62v87LS1Nf/zxh1q2bKl9+/YpLS3NoW94eLjat2/v9LHPnDmjwMBABQYGKiIiQs8//7xiYmL0+eef5+u4n332mW655RZ17do1x7ZLQy3z5s1TnTp1VLt2bf3xxx/2x5133ilJ+u677yRJpUqV0v33369XX31V/fr10+HDh3X48GGnX5t0cWhKujh5+PIaMzIy7ENSl4waNUpz5sxR/fr1tWTJEr3wwgtq2LChGjRooJ07d7p03hdffFF//fWXxo0b59J+V9K6dWuHYazbb79dknTfffc5/D5dat+3b5/D/iVKlNBjjz1mf+7l5aXHHntMx48f18aNGyU5/7O5pGXLloqMjLxq7cuWLdP58+c1dOhQhwno/fv3l7+/vxYtWuTMW+DgWv8tpaamKi0tTS1atNCmTZty9HX2tUkXh44nTZqk8PBwff7553rmmWdUp04dtW7d2uF3dt68eWrRooXKlSvn8P62adNGWVlZ+uGHH5x+LbA2wg2uK/7+/pKkU6dOOb3PTz/9pDZt2qh06dIqW7asAgMD7Xd/5BZuXOHj46OlS5dq6dKl+uGHH3To0CH99NNPqlatWr6Ou3fv3quup7Jnzx5t377dHqouPWrWrClJOn78uL3vzJkzNXr0aP38889KSkpS8+bNFR4eroSEBKfqiY6OVlRUlD766CN725w5c3TTTTflGta6d++uVatWKTU1Vd9++60eeughbd68WZ06dXL6Ti1Jqlatmh5++GFNmzZNKSkpTu93JTfffLPD84CAAElSaGhoru2pqakO7ZUqVVLp0qUd2i6955fm6Ljys5Gc/724NEeqVq1aDu1eXl6qVq2aU3Oo/i4//5a++uorNWnSRD4+PipfvrwCAwMVHx+f49+R5Nq/JQ8PDw0cOFAbN27UH3/8oS+//FIdO3bUihUr7HfjSRff38WLF+d4f9u0aSMp5/uLGxe3guO64u/vr0qVKikxMdGp/nv37lXr1q1Vu3ZtTZgwQaGhofLy8tLXX3+t//73vzkmIV7+l6kzPD097f9jvRJXj3sl2dnZqlevniZMmJDr9ss/rL29vTVixAiNGDFCrVq10kMPPaRPPvlEffv2la+vr8MHR1569uypESNGaMOGDapSpYq+++47PfbYYypRIu//ffj7+6tt27Zq27atSpYsqVmzZunnn39Wy5YtnX6dL7zwgj744AONHz9eXbp0ybH975OGL8lrXRZPT0+X2o0xzhV6GVd+NlLB/l64KiIiQiVKlLBPqr6aVatW6d5779U//vEPvfPOOwoJCVHJkiWVkJDgcGXvkvy+tgoVKujee+/Vvffeq1atWun777/XwYMHFRYWpuzsbLVt21bPPvtsrvteCpEA4QbXnXvuuUfTpk3TmjVrFBMTc8W+CxcuVGZmphYsWODwl/vfhweKi+rVq181uFWvXl1bt25V69at8/yAz0u7du3Up08fVapUSZ9++qlT4aZ79+6KjY3VnDlzFBYWpqysrBxDUlfSqFEjzZo1y+UrMNWrV1fPnj01depU+1DR5cqVK+dwp9Al+bmK4YwjR47ozJkzDldvdu/eLUn24a5r+dlcSVhYmKSL6yJdflXw/Pnz2r9/v1MB++9KlSqlO++8UytWrNChQ4dyBK+/++yzz+Tj46MlS5bI29vb3u7sVcD8aNSokb7//nulpKQoLCxM1atX1+nTp/P1enFjYVgK151nn31WpUuX1qOPPqpjx47l2L537169+eabkv73V/nlf4WnpaUV6v+Qr8V9992nrVu35pizI/3vNdx///06fPiwpk+fnqPPuXPndObMGUkXb0nObaXm7OxsZWdnO/2X9c0336wWLVpo7ty5mj17tsLDw9W0aVOHPmfPntWaNWty3f+bb76RlHNIxRkvvviiLly4oFdffTXHturVqystLU2//PKLvS0lJSXX964g/PXXXw5LA5w/f15Tp05VYGCgGjZsKMn5n42r2rRpIy8vL7311lsOv8szZsxQWlqa7r777nwdNy4uTsYYPfzwwzp9+nSO7Rs3btSsWbMkXfy3ZLPZHK6MHThwQF988UW+zn3J0aNHtWPHjhzt58+f1/Lly+Xh4WFfjPD+++/XmjVrtGTJkhz9T548qb/++uuaaoF1cOUG153q1atrzpw5euCBB1SnTh2HFYpXr16tefPm2dfmaNeunby8vNSpUyc99thjOn36tKZPn66goKACm8tRkIYPH65PP/1U3bp1U9++fdWwYUOdOHFCCxYs0JQpU3TLLbfo4Ycf1ieffKLHH39c3333nZo1a6asrCz9+uuv+uSTT+zr6aSkpKh58+bq27evmjZtqvT0dC1YsEDz589XamqqHnroIafr6tmzp/7v//5PR44c0QsvvJBj+9mzZ9W0aVM1adJEHTp0UGhoqE6ePKkvvvhCq1atUpcuXVS/fn2X349LV28ufcBe7sEHH9Rzzz2nrl27avDgwTp79qzi4+NVs2bNXCe4XqtKlSpp/PjxOnDggGrWrKm5c+dqy5YtmjZtmkqWLClJTv9sXBUYGKjY2FiNGjVKHTp00L333qtdu3bpnXfe0W233Waf+O2qpk2bavLkyXriiSdUu3ZthxWKV65cqQULFuill16SdHHV6gkTJqhDhw566KGHdPz4cU2ePFkREREOAdNVv/32mxo3bqw777xTrVu3VnBwsI4fP66PPvpIW7du1dChQ3XTTTdJuvjvY8GCBbrnnnvUp08fNWzYUGfOnNG2bdv06aef6sCBA/a+uMG59V4t4Brs3r3b9O/f31StWtV4eXkZPz8/06xZM/P222+bjIwMe78FCxaY6Oho4+PjY6pWrWrGjx9v3nvvvRy3hV5+K7Iz8lrn5u+udNy/3wpujDF//vmnGTRokKlcubLx8vIyVapUMb179zZ//PGHvc/58+fN+PHjTd26dY23t7cpV66cadiwoRk1apRJS0szxhiTkZFhJkyYYJo1a2ZuuukmI8mUKVPGNGzY0HzyySdOv05jjDlx4oTx9vY2ksyOHTtybL9w4YKZPn266dKliwkLCzPe3t6mVKlSpn79+ua1114zmZmZVz1HXu/Tnj17jKenZ64rFH/77bcmKirKeHl5mVq1apnZs2fneSv4wIEDHdr2799vJJnXXnvNoT23284vrVC8YcMGExMTY3x8fExYWFiOtZKMce5nk1dNVzNp0iRTu3ZtU7JkSVOxYkUzYMAAk5qa6tDH2VvBL7dx40bz0EMPmUqVKpmSJUuacuXKmdatW5tZs2Y53Ho+Y8YMU6NGDePt7W1q165tEhISnH6/85Kenm7efPNN0759e1OlShVTsmRJ4+fnZ2JiYsz06dPtSyBccurUKRMbG2siIiKMl5eXuemmm0zTpk3N66+/br8l/1IN3Ap+47IZk49ZcwCuO61atdLMmTNzXdUXAKyEOTcAAMBSCDfADaJPnz4qW7asu8sAgELHsBQAALAUrtwAAABLIdwAAABLIdwAAABLueEW8cvOztaRI0fk5+dXoMujAwCAwmOM0alTp1SpUiV5eFz52swNF26OHDly1e9QAQAAxdOhQ4dUpUqVK/a54cKNn5+fpItvjr+/v5urAQAAzkhPT1doaKj9c/xKbrhwc2koyt/fn3ADAMB1xpkpJUwoBgAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlnLDrVBcWLKyjdbtP6HjpzIU5OejxuHl5enBF3MCAFDU3HrlpmrVqrLZbDkeAwcOzLX/zJkzc/T18fEp4qpzWpyYoubjV6j79LUa8vEWdZ++Vs3Hr9DixBR3lwYAwA3HrVdu1q9fr6ysLPvzxMREtW3bVt26dctzH39/f+3atcv+3JnvmChMixNTNGD2Jpm/tR9Ny9CA2ZsU37OBOkSFuKU2AABuRG4NN4GBgQ7Px40bp+rVq6tly5Z57mOz2RQcHFzYpTklK9to1MIdOYKNJBlJNkmjFu5Q28hghqgAACgixWZC8fnz5zV79mz17dv3ildjTp8+rbCwMIWGhqpz587avn37FY+bmZmp9PR0h0dBWbf/hFLSMvLcbiSlpGVo3f4TBXZOAABwZcUm3HzxxRc6efKk+vTpk2efWrVq6b333tOXX36p2bNnKzs7W02bNtVvv/2W5z5jx45VQECA/REaGlpgNR8/lXewyU8/AABw7WzGmNxGVYpc+/bt5eXlpYULFzq9z4ULF1SnTh11795dY8aMybVPZmamMjMz7c/T09MVGhqqtLQ0+fv7X1PNa/b+qe7T116130f9myimeoVrOhcAADey9PR0BQQEOPX5XSxuBT948KCWLVum+fPnu7RfyZIlVb9+fSUlJeXZx9vbW97e3tdaYq4ah5dXSICPjqZl5DrvxiYpOODibeEAAKBoFIthqYSEBAUFBenuu+92ab+srCxt27ZNISHuuRvJ08OmuE6Rki4Gmctdeh7XKZLJxAAAFCG3h5vs7GwlJCSod+/eKlHC8UJSr169FBsba38+evRoffvtt9q3b582bdqknj176uDBg3r00UeLumy7DlEhiu/ZQMEBjuvtBAf4cBs4AABu4PZhqWXLlik5OVl9+/bNsS05OVkeHv/LX6mpqerfv7+OHj2qcuXKqWHDhlq9erUiIyOLsuQcOkSFqG1kMCsUAwBQDBSbCcVFxZUJSQAAoHhw5fPb7cNSAAAABYlwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALKWEuwvA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77//vlq1aqVHHnlELVq0UEREhMLCwvThhx+qR48ehVEnAACAU1y+cnPixAlVq1ZN0sX5NZdu/W7evLl++OGHgq0OAADARS6Hm2rVqmn//v2SpNq1a+uTTz6RdPGKTtmyZQu0OAAAAFe5HG4eeeQRbd26VZI0YsQITZ48WT4+Pho2bJiGDx9e4AUCAAC4wuUViv/u4MGD2rhxoyIiIhQdHV1QdRUaVigGAOD6U6grFP9dWFiYwsLCrvUwAAAABcLpYakVK1YoMjJS6enpObalpaWpbt26WrVqVYEWBwAA4Cqnw83EiRPVv3//XC8FBQQE6LHHHtOECRMKtDgAAABXOR1utm7dqg4dOuS5vV27dtq4cWOBFAUAAJBfToebY8eOqWTJknluL1GihH7//fcCKQoAACC/nA43lStXVmJiYp7bf/nlF4WEhBRIUQAAAPnldLi566679O9//1sZGRk5tp07d05xcXG65557CrQ4AAAAVzm9zs2xY8fUoEEDeXp6atCgQapVq5Yk6ddff9XkyZOVlZWlTZs2qWLFioVa8LVinRsAAK4/hbLOTcWKFbV69WoNGDBAsbGxupSJbDab2rdvr8mTJxf7YAMAAKzPpUX8wsLC9PXXXys1NVVJSUkyxqhGjRoqV65cYdUHAADgknytUFyuXDnddtttBV0LAADANXP5izMBAACKM8INAACwFMINAACwFKfCTYMGDZSamipJGj16tM6ePVuoRQEAAOSXU+Fm586dOnPmjCRp1KhROn36dKEWBQAAkF9O3S1166236pFHHlHz5s1ljNHrr7+uMmXK5Nr3P//5T4EWCADOyMo2Wrf/hI6fylCQn48ah5eXp4fN3WUBcAOnVijetWuX4uLitHfvXm3atEmRkZEqUSJnLrLZbNq0aZNLBRw+fFjPPfecvvnmG509e1YRERFKSEhQo0aN8txn5cqVeuqpp7R9+3aFhobqxRdfVJ8+fZw6HysUA9azODFFoxbuUEra/74eJiTAR3GdItUhiu+8A6zAlc9vp79+4RIPDw8dPXpUQUFB11SkJKWmpqp+/fq64447NGDAAAUGBmrPnj2qXr26qlevnus++/fvV1RUlB5//HE9+uijWr58uYYOHapFixapffv2Vz0n4QawlsWJKRowe5P+/j+yS9ds4ns2IOAAFlCo4aYgjRgxQj/99JNWrVrl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UYeoEMX3bKBRC3c4TC4ODvBRXKdIbgOHZeRrnZtLQWTWrFlq3769tmzZoqioKJeP89tvv6l79+76888/FRgYqObNm2vt2rUKDAyUJCUnJ8vD43/rDKampqp///46evSoypUrp4YNG2r16tWKjIzMz8sAgBtOh6gQtY0MZoViWJpLE4rT0tL0yiuv6O2339att96q8ePHq0WLFoVZX4FzZUISAAAoHgplQvGrr76q8ePHKzg4WB999FGuw1QAAADu5vSVGw8PD/n6+qpNmzby9PTMs9/8+fMLrLjCwJUbAACuP4Vy5aZXr158jxMAACj2nA43M2fOLMQyAAAACobH1bsAAABcPwg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUkq4uwAAAIqzrGyjdftP6PipDAX5+ahxeHl5etjcXRauwK1XbkaOHCmbzebwqF279hX3mTdvnmrXri0fHx/Vq1dPX3/9dRFVCwC40SxOTFHz8SvUffpaDfl4i7pPX6vm41docWKKu0vDFbh9WKpu3bpKSUmxP3788cc8+65evVrdu3dXv379tHnzZnXp0kVdunRRYmJiEVYMALgRLE5M0YDZm5SSluHQfjQtQwNmbyLgFGNuDzclSpRQcHCw/XHTTTfl2ffNN99Uhw4dNHz4cNWpU0djxoxRgwYNNGnSpCKsGABgdVnZRqMW7pDJZdultlELdygrO7cecDe3h5s9e/aoUqVKqlatmnr06KHk5OQ8+65Zs0Zt2rRxaGvfvr3WrFmT5z6ZmZlKT093eAAAcCXr9p/IccXmckZSSlqG1u0/UXRFwWluDTe33367Zs6cqcWLFys+Pl779+9XixYtdOrUqVz7Hz16VBUrVnRoq1ixoo4ePZrnOcaOHauAgAD7IzQ0tEBfAwDAeo6fyjvY5KcfipZb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\n"},"metadata":{}}]},{"cell_type":"markdown","source":["- 이제 이 그래프는 우리가 수집한 데이터입니다.\n","- 우리는 자동차 가격이 100달러일 때 판매된 자동차의 수가 무엇일지를 묻는 질문을 가지고 있습니다.\n","- 이 질문을 해결하기 위해 우리는 선형 회귀를 사용해야 합니다.\n","- 우리는 이 데이터에 맞는 선을 찾아야 합니다. 목표는 최소한의 오류로 선을 맞추는 것입니다.\n","\n","---\n","\n","- **선형 회귀의 단계**\n"," 1. LinearRegression 클래스를 생성합니다.\n"," 2. 이 LinearRegression 클래스로 모델을 정의합니다.\n"," 3. MSE: 평균 제곱 오차(Mean Squared Error)\n"," 4. 최적화 (SGD: 확률적 경사 하강법)\n"," 5. 역전파 (Backpropagation)\n"," 6. 예측 (Prediction)"],"metadata":{"id":"MOlzmdG89JCT"}},{"cell_type":"code","source":["# PyTorch를 이용한 선형 회귀 모델 구현\n","\n","import torch\n","from torch.autograd import Variable\n","import torch.nn as nn\n","import warnings\n","warnings.filterwarnings(\"ignore\")\n","\n","# 선형 회귀 클래스 정의\n","class LinearRegression(nn.Module):\n"," def __init__(self, input_size, output_size):\n"," super(LinearRegression, self).__init__()\n"," self.linear = nn.Linear(input_dim,output_dim) # apply linear function\n","\n"," def forward(self, x):\n"," return self.linear(x)\n","\n","# 모델 정의\n","input_dim = 1\n","output_dim = 1\n","model = LinearRegression(input_dim,output_dim)\n","\n","# 손실 함수 (MSE)\n","mse = nn.MSELoss()\n","\n","# 옵티마이저 (SGD 사용)\n","learning_rate = 0.02\n","optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n","\n","# 모델 학습\n","loss_list = []\n","iteration_number = 1001\n","for iteration in range(iteration_number):\n"," optimizer.zero_grad() # 기울기 초기화\n"," results = model(car_price_tensor) # 예측값 계산\n"," loss = mse(results, number_of_car_sell_tensor) # 손실 계산\n"," # 역전파 실행\n"," loss.backward()\n"," # 가중치 업데이트\n"," optimizer.step()\n"," # loss 저장\n"," loss_list.append(loss.data)\n"," # loss 출력\n"," if iteration % 50 == 0:\n"," print(f'epoch {iteration}, loss {loss.data}')\n","\n","# 손실 그래프 시각화\n","plt.plot(range(iteration_number), loss_list)\n","plt.xlabel(\"Number of Iterations\")\n","plt.ylabel(\"Loss\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":799},"id":"6MvDUc9b7uHf","outputId":"0208ac74-2e65-437f-eaf7-8eb184986ec9","executionInfo":{"status":"ok","timestamp":1789028799621,"user_tz":-540,"elapsed":517,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":41,"outputs":[{"output_type":"stream","name":"stdout","text":["epoch 0, loss 8.033815383911133\n","epoch 50, loss 5.366822719573975\n","epoch 100, loss 3.626587152481079\n","epoch 150, loss 2.450636386871338\n","epoch 200, loss 1.6559978723526\n","epoch 250, loss 1.1190271377563477\n","epoch 300, loss 0.7561734318733215\n","epoch 350, loss 0.510978102684021\n","epoch 400, loss 0.3452893793582916\n","epoch 450, loss 0.23332622647285461\n","epoch 500, loss 0.1576683670282364\n","epoch 550, loss 0.10654307901859283\n","epoch 600, loss 0.07199542969465256\n","epoch 650, loss 0.04865054041147232\n","epoch 700, loss 0.03287480026483536\n","epoch 750, loss 0.02221512235701084\n","epoch 800, loss 0.015011617913842201\n","epoch 850, loss 0.010144123807549477\n","epoch 900, loss 0.006855023093521595\n","epoch 950, loss 0.004632061813026667\n","epoch 1000, loss 0.003129940712824464\n"]},{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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z7cnpQaTaQEAgN+iqAAAAL9FUTkLu92uJ598Una73ewobRrbuWWwnVsG27llsJ1bjj9s61Y9mRYAALRt7FEBAAB+i6ICAAD8FkUFAAD4LYoKAADwWxSVOsyePVspKSkKDg7W8OHDtX79erMjtSppaWkaOnSoIiIiFBcXp5tvvll79uypNaasrExTpkxRTEyMwsPD9V//9V/Kzc2tNSYzM1PXX3+9QkNDFRcXp0cffVSVlZUt+VValRkzZshisWjq1Km+ZWznpnHkyBH95Cc/UUxMjEJCQpSamqqNGzf61huGoSeeeEKdOnVSSEiIxo4dq3379tV6j5MnT2rixImKjIxUVFSUfvrTn6qoqKilv4rf8ng8evzxx9W1a1eFhISoW7dueuaZZ2rdC4bt3DArV67UjTfeqMTERFksFi1cuLDW+qbart98840uv/xyBQcHy+l06rnnnmuaL2Cglvnz5xtBQUHGX//6V2PHjh3Gz372MyMqKsrIzc01O1qrMW7cOGPOnDnG9u3bjfT0dOO6664zunTpYhQVFfnG3HfffYbT6TSWLl1qbNy40bj00kuNkSNH+tZXVlYa/fv3N8aOHWts2bLF+Oyzz4yOHTsa06ZNM+Mr+b3169cbKSkpxsUXX2w89NBDvuVs58Y7efKkkZycbNxzzz3GunXrjAMHDhhffPGF8e233/rGzJgxw3A4HMbChQuNrVu3GjfddJPRtWtXo7S01Dfmhz/8oTFgwABj7dq1xldffWV0797dmDBhghlfyS9Nnz7diImJMT799FPj4MGDxocffmiEh4cbL774om8M27lhPvvsM+P3v/+98dFHHxmSjAULFtRa3xTbtaCgwIiPjzcmTpxobN++3XjvvfeMkJAQ4/XXX290forK9wwbNsyYMmWK77nH4zESExONtLQ0E1O1bseOHTMkGStWrDAMwzDy8/ONwMBA48MPP/SN2bVrlyHJWLNmjWEYVf+wrFarkZOT4xvz6quvGpGRkYbb7W7ZL+DnCgsLjR49ehiLFy82rrzySl9RYTs3jd/+9rfGZZdddtb1Xq/XSEhIMP74xz/6luXn5xt2u9147733DMMwjJ07dxqSjA0bNvjGfP7554bFYjGOHDnSfOFbkeuvv96YPHlyrWW33nqrMXHiRMMw2M5N5ftFpam265///GcjOjq61v8bv/3tb41evXo1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8MADmjp1qjp27Khx48bV+T28Xq+efvppJSUlyW63a+DAgVq0aJFvvcVi0aZNm/T000/LYrHoqaeeOseW++57r1ixQi+++KIsFossFosyMjIalfuFF15QamqqwsLC5HQ6df/996uoqEiStHz5ct17770qKCjwfV5Nzu8f+snMzNT48eMVHh6uyMhI3X777crNzfWtr/l7feedd5SSkiKHw6E777xThYWFvjH/+Mc/lJqaqpCQEMXExGjs2LEqLi4+73YB2gKKCuAHbDabnn32Wb388ss6fPhwo95r2bJlOnr0qFauXKkXXnhBTz75pG644QZFR0dr3bp1uu+++/SLX/zijM959NFH9etf/1pbtmzRiBEjdOONNyovL0+SlJ+fr6uvvlqDBg3Sxo0btWjRIuXm5ur222+v9R5z585VUFCQvv76a7322mt15nvxxRf1/PPP6//+7//0zTffaNy4cbrpppu0b98+SVJ2drb69eunX//618rOztYjjzxy3u/84osvasSIEfrZz36m7OxsZWdny+l0Niq31WrVSy+9pB07dmju3LlatmyZfvOb30iSRo4cqVmzZikyMtL3eXXl9Hq9Gj9+vE6ePKkVK1Zo8eLFOnDggO64445a4/bv36+FCxfq008/1aeffqoVK1b4DgVmZ2drwoQJmjx5snbt2qXly5fr1ltvFfeTRbvRJPdgBtBgkyZNMsaPH28YhmFceumlxuTJkw3DMIwFCxYYp/8TffLJJ40BAwbUeu2f/vQnIzk5udZ7JScnGx6Px7esV69exuWXX+57XllZaYSFhRnvvfeeYRiGcfDgQUNSrVuyV1RUGElJScbMmTMNwzCMZ555xrjmmmtqfXZWVpYhyXc7+CuvvNIYNGjQeb9vYmKiMX369FrLhg4datx///2+5wMGDDCefPLJc77P6dut5vMfeuihWmOaMveHH35oxMTE+J7PmTPHcDgcZ4xLTk42/vSnPxmGYRj/+c9/DJvNZmRmZvrW79ixw5BkrF+/3jCMqr/X0NBQw+Vy+cY8+uijxvDhww3DMIxNmzYZkoyMjIzzZgTaIvaoAH5k5syZmjt3rnbt2tXg9+jXr5+s1u/+acfHxys1NdX33GazKSYmRseOHav1uhEjRvj+HBAQoCFDhvhybN26VV9++aXCw8N9j969e0uq2htQY/DgwefM5nK5dPToUY0aNarW8lGjRjXqO59NY3IvWbJEY8aMUefOnRUREaG77rpLeXl5Kikpqffn79q1S06nU06n07esb9++ioqKqvV9U1JSFBER4XveqVMn39/PgAEDNGbMGKWmpuq2227Tm2++2abmMgHnQ1EB/MgVV1yhcePGadq0aWess1qtZ+zur6ioOGNcYGBgrecWi6XOZV6vt965ioqKdOONNyo9Pb3WY9++fbriiit848LCwur9ni2hobkzMjJ0ww036OKLL9Y///lPbdq0SbNnz5bU+Mm2dTnX34/NZtPixYv1+eefq2/fvnr55ZfVq1cvHTx4sMlzAP6IogL4mRkzZuhf//qX1qxZU2t5bGyscnJyapWVprz2ydq1a31/rqys1KZNm9SnTx9J0iWXXKIdO3YoJSVF3bt3r/W4kHISGRmpxMREff3117WWf/311+rbt2+j8gcFBcnj8dRa1tDcmzZtktfr1fPPP69LL71UPXv21NGjR8/7ed/Xp08fZWVlKSsry7ds586dys/Pv6Dva7FYNGrUKP3hD3/Qli1bFBQUpAULFtT79UBrRlEB/ExqaqomTpyol156qdby0aNH6/jx43ruuee0f/9+zZ49W59//nmTfe7s2bO1YMEC7d69W1OmTNGpU6c0efJkSdKUKVN08uRJTZgwQRs2bND+/fv1xRdf6N577z3vL+vve/TRRzVz5ky9//772rNnjx577DGlp6froYcealT+lJQUrVu3ThkZGTpx4oS8Xm+Dc3fv3l0VFRV6+eWXdeDAAb3zzjtnTA5OSUlRUVGRli5dqhMnTtR5SGjs2LG+v8/Nmzdr/fr1uvvuu3XllVdqyJAh9fpe69at07PPPquNGzcqMzNTH330kY4fP+4rkUBbR1EB/NDTTz99xqGZPn366M9//rNmz56tAQMGaP369fU6I6a+ZsyYoRkzZmjAgAFatWqVPvnkE3Xs2FGSfHtBPB6PrrnmGqWmpmrq1KmKioqqNR+mPh588EE9/PDD+vWvf63U1FQtWrRIn3zyiXr06NGo/I888ohsNpv69u2r2NhYZWZmNjj3gAED9MILL2jmzJnq37+/5s2bd8ap4yNHjtR9992nO+64Q7GxsXruuefOeB+LxaKPP/5Y0dHRuuKKKzR27FhddNFFev/99+v9vSIjI7Vy5Updd9116tmzp/7f//t/ev7553XttdfWf+MArZjF+P5BbwAAAD/BHhUAAOC3KCoAAMBvUVQAAIDfoqgAAAC/RVEBAAB+i6ICAAD8FkUFAAD4LYoKAADwWxQVAADgtygqAADAb1FUAACA3/r/dpOnko8/aTYAAAAASUVORK5CYII=\n"},"metadata":{}}]},{"cell_type":"markdown","source":["- 반복 횟수는 1000입니다.\n","- 손실 값은 거의 0에 가까우며, 이는 그래프나 1000번째 epoch에서의 손실 값에서 확인할 수 있습니다.\n","- 이제 우리는 훈련된 모델을 가지고 있습니다.\n","- 훈련된 모델을 사용할 때, 자동차 가격을 예측해 봅시다."],"metadata":{"id":"9odY_Wb59N8H"}},{"cell_type":"code","source":["# car price 예측\n","predicted = model(car_price_tensor).data.numpy()\n","plt.scatter(car_prices_array,number_of_car_sell_array,label = \"original data\",color =\"red\") # original data\n","plt.scatter(car_prices_array,predicted,label = \"predicted data\",color =\"blue\") # predicted data\n","\n","# car price가 10$ 일 때, car sell은?\n","predicted_10 = model(torch.from_numpy(np.array([[10.0]], dtype=np.float32))).data.numpy()\n","plt.scatter(10,predicted_10,label = \"car price 10$\",color =\"green\")\n","plt.legend()\n","plt.xlabel(\"Car Price $\")\n","plt.ylabel(\"Number of Car Sell\")\n","plt.title(\"Original vs Predicted values\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":436},"id":"FtsHa2uk7uDy","outputId":"5c02f4c7-b680-4201-eb29-1e421c586ba1","executionInfo":{"status":"ok","timestamp":1789028799889,"user_tz":-540,"elapsed":267,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":42,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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w+nXrx8cHR0RGRkJAAgPD0fbtm2xYMECdO7cGevXr8eJEydemufqq6I4hKIH3i222mg6HNEDm7EZEoTqKDYiIqqadN5zs3fvXqSmpmLQoEHF6lJTU5GR8d9CTq1atcLatWuxYsUKNGnSBJs3b8a2bdvQqFEjbYZM/1I8CQ4Jnv9REjAAJBI+CU6kp0RJS0AQVZCmfq4koor9hObk5MDKygrZ2dmwtLTUdTivtISEwsWIX2TfPqBdu8qOhoi0QSaT4dKlS7C1tYW1tbWuwyE9k52djVu3bsHDwwNGRkZKdep8f+t8WIpeXRkqro6uajsievlJpVLUqFFDsT5M9erVS12bjEgdcrkcf//9N6pXr15smoq6mNxQufFJcKKqqegJ1aIEh0hTDAwMUKdOnQonzExuqNyeeRK8xDcwSCR8EpxIH0kkEjg4OMDW1hZPnz7VdTikR6pVq1bm6sqqYnJD5fbvk+Do0aMwkXk2wSlKuvkkOJH+kkqlkPIvOL2EdP60FL3aQkOBzZsBR0flcienwvJQPgdORERaxp4bqrDQUCAkpPD9mBkZhXNsAgPZY0NERLrB5IY0Qirl495ERPRy4LAUERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFcMdR0Akd6QyYDERCAjA3BwAAIDAalU11EREVU5Ou+5SU9PxwcffABra2uYmprCx8cHJ06cKLV9QkICJBJJse327dtajJroOXFxgKsrEBQEvP9+4X9dXQvLiYhIq3Tac5OZmYnWrVsjKCgIv/76K2xsbHD58mXUrFnzhcdevHgRlpaWin1bW9vKDJWodHFxQI8egBDK5enpheWbNwOhobqJjYioCtJpcjN37lw4OzsjJiZGUebm5qbSsba2tqhRo0YlRUakIpkMCA8vntgAhWUSCRARAYSEcIiKiEhLdDos9fPPP6NZs2bo2bMn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\n"},"metadata":{}}]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"2GFXlED1ZkSM","executionInfo":{"status":"ok","timestamp":1789028830785,"user_tz":-540,"elapsed":30893,"user":{"displayName":"윤정","userId":"14844225516483515025"}},"outputId":"bddca36b-906d-4cb4-ed61-0abf8e61c041"},"execution_count":43,"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}]},{"cell_type":"markdown","source":["
\n","## 3. 로지스틱 회귀\n","\n","- 선형 회귀는 분류 문제에서 적합하지 않습니다.\n","- 우리는 분류 문제를 해결하기 위해 로지스틱 회귀를 사용합니다.\n","- 선형 회귀 + 로지스틱 함수(소프트맥스) = 로지스틱 회귀\n","\n"," \n","- **로지스틱 회귀의 단계**\n"," 1. 라이브러리 가져오기\n"," 2. 데이터셋 준비\n"," - 우리는 MNIST 데이터셋을 사용합니다.\n"," - 28x28 이미지와 0부터 9까지의 10개의 레이블이 있습니다.\n"," - 데이터는 정규화되지 않았기 때문에 각 이미지를 255로 나눠 기본적인 정규화를 진행합니다.\n"," - 데이터를 분할하기 위해 sklearn 라이브러리의 `train_test_split` 메서드를 사용합니다.\n"," - 학습 데이터 크기는 80%, 테스트 데이터 크기는 20%입니다.\n"," - 특성(feature)과 목표(target) 텐서를 생성합니다. 이후 텐서에서 변수(variable)를 생성합니다. 이 변수는 기울기 누적을 위해 정의됩니다.\n"," - `batch_size` = 배치 크기는 예를 들어, 1000개의 샘플이 있을 때, 이 샘플을 한 번에 모두 훈련시킬 수도 있고, 100개의 샘플씩 10개의 그룹으로 나누어 순차적으로 훈련시킬 수도 있습니다. 예를 들어, `batch_size = 100`이라면, 모든 데이터를 한 번 훈련시키는 데 336개의 그룹을 사용합니다. 각 그룹은 100개의 샘플을 가지고 있으며, 총 33600개의 샘플을 훈련합니다.\n"," - `epoch`: 1 epoch는 모든 샘플을 한 번 훈련시키는 것입니다.\n"," - 예를 들어, 33600개의 샘플이 있고, 배치 크기(batch_size)는 100, epoch는 29로 설정한 경우, 29번 훈련을 진행합니다. 그럼 총 몇 번의 반복(iteration)이 필요한지 계산해 봅시다:\n"," - 훈련 데이터 1번 = 33600개의 샘플 훈련\n"," - 하지만 데이터를 336개의 그룹으로 나누었으므로, 1 epoch는 336번의 반복이 필요합니다.\n"," - 29 epoch 동안 훈련하므로, 총 반복 횟수는 9744번입니다(대략 10000번).\n"," - `TensorDataset()`: 텐서를 래핑하는 데이터셋. 각 샘플은 텐서를 첫 번째 차원으로 인덱싱하여 검색됩니다.\n"," - `DataLoader()`: 데이터셋과 샘플을 결합하고, 데이터셋에 대한 다중 프로세스 반복기를 제공합니다.\n"," - 데이터셋의 이미지를 하나 시각화해봅니다.\n"," 3. 로지스틱 회귀 모델 생성\n"," - 선형 회귀와 비슷합니다.\n"," - 하지만 예측을 위해 모델에 로지스틱 함수(소프트맥스)가 포함되어야 합니다.\n"," - PyTorch에서는 로지스틱 함수가 손실 함수에 포함되어 있으며, 이후 단계에서 이를 사용합니다.\n"," 4. 모델 인스턴스화\n"," - `input_dim = 28*28` # 이미지 크기 px*px\n"," - `output_dim = 10` # 레이블 0,1,2,3,4,5,6,7,8,9\n"," - 모델을 생성합니다.\n"," 5. 손실 함수 인스턴스화\n"," - 교차 엔트로피 손실\n"," - 손실을 계산하는 함수로, 소프트맥스(로지스틱 함수)도 포함되어 있습니다.\n"," 6. 옵티마이저 인스턴스화\n"," - SGD 옵티마이저\n"," 7. 모델 훈련\n"," 8. 예측\n","- 결과적으로, 그래프에서 볼 수 있듯이 손실 값은 감소하고, 정확도는 약 85%까지 증가하며 모델이 훈련되고 있음을 확인할 수 있습니다."],"metadata":{"id":"7uXrwVTU9VFH"}},{"cell_type":"code","source":["import torch\n","import torch.nn as nn\n","from torch.autograd import Variable\n","from torch.utils.data import DataLoader\n","import pandas as pd\n","from sklearn.model_selection import train_test_split"],"metadata":{"id":"FvnI_38-8CfS","executionInfo":{"status":"ok","timestamp":1789028830792,"user_tz":-540,"elapsed":3,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":44,"outputs":[]},{"cell_type":"code","source":["# train.csv를 못 받아서 MNIST에서 같은 형식으로 직접 생성\n","from torchvision import datasets\n","mnist = datasets.MNIST(root=\"./data\", train=True, download=True)\n","\n","X = mnist.data.numpy().reshape(-1, 28*28) # (60000, 784) 픽셀\n","y = mnist.targets.numpy() # (60000,) 라벨 0~9\n","\n","df = pd.DataFrame(X, columns=[f\"pixel{i}\" for i in range(784)])\n","df.insert(0, \"label\", y)\n","df = df.iloc[:42000] # Kaggle train.csv와 같은 42,000행\n","df.to_csv(\"train.csv\", index=False)\n","print(df.shape)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"MsW5tVb7aTcd","executionInfo":{"status":"ok","timestamp":1789028841950,"user_tz":-540,"elapsed":11155,"user":{"displayName":"윤정","userId":"14844225516483515025"}},"outputId":"c63bb316-fce6-4944-80bf-c9a394c4a9e7"},"execution_count":45,"outputs":[{"output_type":"stream","name":"stdout","text":["(42000, 785)\n"]}]},{"cell_type":"code","source":["# 데이터셋 준비\n","# 데이터 로드\n","train = pd.read_csv(r\"./train.csv\", dtype=np.float32)\n","\n","# 데이터를 특징(픽셀 값)과 라벨(0~9 숫자)로 분리\n","targets_numpy = train.label.values\n","features_numpy = train.loc[:, train.columns != \"label\"].values / 255 # 정규화\n","\n","# 학습 데이터 80%, 테스트 데이터 20%로 분할\n","features_train, features_test, targets_train, targets_test = train_test_split(\n"," features_numpy, targets_numpy, test_size=0.2, random_state=42\n",")\n","\n","# 학습 데이터셋을 텐서로 변환 (경사 계산을 위해 Variable 생성 필요)\n","featuresTrain = torch.from_numpy(features_train)\n","targetsTrain = torch.from_numpy(targets_train).type(torch.LongTensor) # 데이터 타입은 long\n","\n","# 테스트 데이터셋을 텐서로 변환\n","featuresTest = torch.from_numpy(features_test)\n","targetsTest = torch.from_numpy(targets_test).type(torch.LongTensor)\n","## 힌트: PyTorch Tesnor를 생성해주세요!\n","## 어떤 데이터를 PyTorch Tensor를 변환하고, 어떤 데이터타입을 선택할지 직접 작성해주세요\n","\n","# 배치 크기, 반복 횟수 및 에포크 설정\n","batch_size = 100\n","n_iters = 10000\n","num_epochs = int(n_iters / (len(features_train) / batch_size))\n","\n","# PyTorch 학습 및 테스트 데이터셋 생성\n","train = torch.utils.data.TensorDataset(featuresTrain, targetsTrain)\n","test = torch.utils.data.TensorDataset(featuresTest, targetsTest)\n","## 힌트: 입력 데이터와 레이블을 텐서로 변환하여, 이들을 TensorDataset으로 묶어 train과 test 데이터셋을 구성합니다\n","## TensorDataset에는 두 개의 텐서를 전달해야 하며, 각각 특징과 레이블에 해당합니다.\n","## 첫 번째 텐서는 입력 데이터, 두 번째 텐서는 정답 데이터이며 입력 데이터와 정답 데이터의 샘플 수가 동일해야 합니다.\n","\n","# 데이터 로더 생성\n","train_loader = DataLoader(train, batch_size=batch_size, shuffle=False)\n","test_loader = DataLoader(test, batch_size=batch_size, shuffle=False)\n","\n","# 데이터셋 중 하나의 이미지를 시각화\n","plt.imshow(features_numpy[10].reshape(28, 28))\n","plt.axis(\"off\")\n","plt.title(str(targets_numpy[10]))\n","plt.savefig('graph.png')\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":428},"id":"cPmM5DM48Cb6","outputId":"58fac730-b445-4556-8f16-eee89995f7e3","executionInfo":{"status":"ok","timestamp":1789028848360,"user_tz":-540,"elapsed":6374,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":46,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{}}]},{"cell_type":"code","source":["# 로지스틱 회귀 모델 생성\n","class LogisticRegressionModel(nn.Module):\n"," def __init__(self, input_dim, output_dim):\n"," super(LogisticRegressionModel, self).__init__()\n"," # 선형 계층 설정\n"," self.linear = nn.Linear(input_dim, output_dim)\n"," # 로지스틱 함수는 손실 함수에 포함되어 있으므로 별도로 정의할 필요 없음\n","\n"," def forward(self, x):\n"," out = self.linear(x)\n"," return out\n","\n","# 모델 인스턴스화\n","input_dim = 28 * 28 # 이미지 크기 (픽셀 * 픽셀)\n","output_dim = 10 # 출력 라벨 (0~9)\n","\n","# 로지스틱 회귀 모델 생성\n","model = LogisticRegressionModel(input_dim, output_dim)\n","\n","# 크로스 엔트로피 손실 함수\n","error = nn.CrossEntropyLoss()\n","\n","# SGD 옵티마이저 설정\n","learning_rate = 0.001\n","optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n","## 힌트: 모델 파라미터를 model.parameters()로 넘겨줍니다\n","## 학습률(learning rate)은 훈련 속도를 결정합니다\n","## 최적화 함수가 SGD이므로, torch.optim.SGD를 사용합니다"],"metadata":{"id":"S73aSJuz8CZq","executionInfo":{"status":"ok","timestamp":1789028848376,"user_tz":-540,"elapsed":13,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":47,"outputs":[]},{"cell_type":"code","source":["# 모델 학습\n","count = 0\n","loss_list = []\n","iteration_list = []\n","for epoch in range(num_epochs):\n"," for i, (images, labels) in enumerate(train_loader):\n","\n"," # 변수 정의\n"," train = Variable(images.view(-1, 28 * 28))\n"," labels = Variable(labels)\n","\n"," # 경사 초기화\n"," optimizer.zero_grad()\n","\n"," # 순전파\n"," outputs = model(train)\n","\n"," # 소프트맥스 및 크로스 엔트로피 손실 계산\n"," loss = error(outputs, labels)\n","\n"," # 역전파를 통한 경사 계산\n"," loss.backward()\n","\n"," # 가중치 업데이트\n"," optimizer.step()\n","\n"," count += 1\n","\n"," # 정확도 측정\n"," if count % 50 == 0:\n"," correct = 0\n"," total = 0\n"," # 테스트 데이터셋 예측 수행\n"," for images, labels in test_loader:\n"," test = Variable(images.view(-1, 28 * 28))\n","\n"," # 순전파\n"," outputs = model(test)\n","\n"," # 최댓값을 기준으로 예측값 결정\n"," predicted = torch.max(outputs.data, 1)[1]\n","\n"," # 전체 라벨 개수\n"," total += len(labels)\n","\n"," # 맞춘 개수 계산\n"," correct += (predicted == labels).sum()\n","\n"," accuracy = 100 * correct / float(total)\n","\n"," # 손실 및 반복 횟수 저장\n"," loss_list.append(loss.data)\n"," iteration_list.append(count)\n","\n"," # 500번마다 손실 출력\n"," if count % 500 == 0:\n"," print('Iteration: {} Loss: {} Accuracy: {}%'.format(count, loss.data, accuracy))"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Oc4X8eZt8CXq","outputId":"6303af54-3609-41a0-9a5b-d52378c01bbb","executionInfo":{"status":"ok","timestamp":1789028907444,"user_tz":-540,"elapsed":59056,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":48,"outputs":[{"output_type":"stream","name":"stdout","text":["Iteration: 500 Loss: 1.891208291053772 Accuracy: 66.44047546386719%\n","Iteration: 1000 Loss: 1.5182867050170898 Accuracy: 74.33333587646484%\n","Iteration: 1500 Loss: 1.316827416419983 Accuracy: 77.5952377319336%\n","Iteration: 2000 Loss: 1.164794683456421 Accuracy: 79.13095092773438%\n","Iteration: 2500 Loss: 1.0871655941009521 Accuracy: 80.55952453613281%\n","Iteration: 3000 Loss: 0.9518724083900452 Accuracy: 81.3452377319336%\n","Iteration: 3500 Loss: 0.7744255065917969 Accuracy: 82.08333587646484%\n","Iteration: 4000 Loss: 0.9008788466453552 Accuracy: 82.5952377319336%\n","Iteration: 4500 Loss: 0.7937527298927307 Accuracy: 83.14286041259766%\n","Iteration: 5000 Loss: 0.8782798647880554 Accuracy: 83.53571319580078%\n","Iteration: 5500 Loss: 0.811984121799469 Accuracy: 84.05952453613281%\n","Iteration: 6000 Loss: 0.655483603477478 Accuracy: 84.21428680419922%\n","Iteration: 6500 Loss: 0.6972290873527527 Accuracy: 84.55952453613281%\n","Iteration: 7000 Loss: 0.688505232334137 Accuracy: 84.72618865966797%\n","Iteration: 7500 Loss: 0.6294087767601013 Accuracy: 84.96428680419922%\n","Iteration: 8000 Loss: 0.6459348201751709 Accuracy: 85.20237731933594%\n","Iteration: 8500 Loss: 0.6714396476745605 Accuracy: 85.53571319580078%\n","Iteration: 9000 Loss: 0.5594702959060669 Accuracy: 85.66666412353516%\n","Iteration: 9500 Loss: 0.5748496055603027 Accuracy: 85.9047622680664%\n"]}]},{"cell_type":"code","source":["# 시각화\n","plt.plot(iteration_list,loss_list)\n","plt.xlabel(\"Number of iteration\")\n","plt.ylabel(\"Loss\")\n","plt.title(\"Logistic Regression: Loss vs Number of iteration\")\n","plt.show()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":420},"id":"FctKP-1E8CVh","outputId":"e5dab133-eadb-45f9-cd19-cb721eb3e46b","executionInfo":{"status":"ok","timestamp":1789028907861,"user_tz":-540,"elapsed":412,"user":{"displayName":"윤정","userId":"14844225516483515025"}}},"execution_count":49,"outputs":[{"output_type":"display_data","data":{"text/plain":["
"],"image/png":"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\n"},"metadata":{}}]}]} \ No newline at end of file diff --git "a/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\235\264\355\232\250\354\243\274.ipynb" "b/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\235\264\355\232\250\354\243\274.ipynb" deleted file mode 100644 index e9d9267..0000000 --- "a/Week1_\353\263\265\354\212\265\352\263\274\354\240\234_\354\235\264\355\232\250\354\243\274.ipynb" +++ /dev/null @@ -1,982 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [] - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - } - }, - "cells": [ - { - "cell_type": "markdown", - "source": [ - "# **Week1 복습과제**\n", - "\n", - "1. [Pytorch 기본]\n", - "1. [Linear Regression]\n", - "1. [Logistic Regression]" - ], - "metadata": { - "id": "9mabISNcCPiV" - } - }, - { - "cell_type": "code", - "execution_count": 30, - "metadata": { - "id": "T-Govjsw7kBQ" - }, - "outputs": [], - "source": [ - "# import libraries\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "\n", - "#input data: 첨부된 .csv 파일 다운받아 사용해주세요" - ] - }, - { - "cell_type": "markdown", - "source": [ - "
\n", - "## 1. Pytorch 기본" - ], - "metadata": { - "id": "0qcO6qTxCUTU" - } - }, - { - "cell_type": "code", - "source": [ - "# numpy array\n", - "array = [[1,2,3],[4,5,6]]\n", - "first_array = np.array(array) # 2x3 array\n", - "print(\"Array Type: {}\".format(type(first_array))) # type\n", - "print(\"Array Shape: {}\".format(first_array.shape)) # shape\n", - "print(first_array)" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "_KdP4S5g7udz", - "outputId": "2a5b9a13-502a-4e6b-f688-c16d1523a5d0" - }, - "execution_count": 4, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Array Type: \n", - "Array Shape: (2, 3)\n", - "[[1 2 3]\n", - " [4 5 6]]\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 우리는 NumPy 배열을 살펴보았습니다.\n", - "- 이제 텐서(PyTorch 배열)를 구현하는 방법을 살펴보겠습니다.\n", - "- import torch를 사용하여 PyTorch 라이브러리를 가져옵니다.\n", - "- torch.Tensor() 메서드를 사용하여 텐서를 생성합니다.\n", - "- type: 배열의 타입을 나타냅니다. 이 예제에서는 텐서입니다.\n", - "- shape: 배열의 형태를 나타냅니다. (행 × 열)" - ], - "metadata": { - "id": "HfLiM-u1Cj5l" - } - }, - { - "cell_type": "code", - "source": [ - "# import pytorch library\n", - "import torch\n", - "\n", - "# pytorch array\n", - "tensor = torch.Tensor(array)\n", - "print(\"Array Type: {}\".format(type(tensor))) # type\n", - "print(\"Array Shape: {}\".format(tensor.shape)) # shape\n", - "print(tensor)" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "d-uAA50o7ua4", - "outputId": "c54e79fa-489f-437e-b7da-8548193272b8" - }, - "execution_count": 5, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Array Type: \n", - "Array Shape: torch.Size([2, 3])\n", - "tensor([[1., 2., 3.],\n", - " [4., 5., 6.]])\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 할당(Allocation)은 코딩에서 가장 많이 사용되는 기법 중 하나입니다.\n", - "- 따라서 PyTorch를 사용하여 이를 구현하는 방법을 배워봅시다.\n", - "- 학습을 위해 NumPy와 Tensor를 비교해 봅시다.\n", - " - np.ones() = torch.ones()\n", - " - np.random.rand() = torch.rand()" - ], - "metadata": { - "id": "pEvocwKPC6J1" - } - }, - { - "cell_type": "code", - "source": [ - "# numpy ones\n", - "print(\"Numpy {}\\n\".format(np.ones((2,3)))) # 2x3 in numpy\n", - "\n", - "# pytorch ones\n", - "print(torch.ones(2,3)) # 2x3 in tensor" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "QlHQXzBR7uYo", - "outputId": "f80c9899-2dbe-4d29-83c9-c5981c1a6c31" - }, - "execution_count": 6, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Numpy [[1. 1. 1.]\n", - " [1. 1. 1.]]\n", - "\n", - "tensor([[1., 1., 1.],\n", - " [1., 1., 1.]])\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "# numpy random\n", - "print(\"Numpy {}\\n\".format(np.random.rand(2,3))) # 2x3 random numpy array\n", - "\n", - "# pytorch random\n", - "print(torch.rand(2,3)) # 2x3 random tensor" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "xEV88BpO7uWc", - "outputId": "9f4ea035-f8aa-490e-b755-6bf7a2894f13" - }, - "execution_count": 7, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Numpy [[0.76410019 0.86469336 0.16305342]\n", - " [0.80751548 0.37438185 0.04971491]]\n", - "\n", - "tensor([[0.1720, 0.2972, 0.3737],\n", - " [0.1757, 0.0604, 0.4595]])\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 텐서와 NumPy 배열 간의 변환을 살펴봅시다.\n", - " - torch.from_numpy(): NumPy → Tensor\n", - " - .numpy(): Tensor → NumPy" - ], - "metadata": { - "id": "2TAOGUteDLOv" - } - }, - { - "cell_type": "code", - "source": [ - "# random numpy array\n", - "array = np.random.rand(2,2)\n", - "print(\"{} {}\\n\".format(type(array),array))\n", - "\n", - "# numpy -> tensor\n", - "from_numpy_to_tensor = torch.from_numpy(array)\n", - "print(\"{}\\n\".format(from_numpy_to_tensor))\n", - "\n", - "# tensor -> numpy\n", - "tensor = from_numpy_to_tensor\n", - "from_tensor_to_numpy = tensor.numpy()\n", - "print(\"{} {}\\n\".format(type(from_tensor_to_numpy),from_tensor_to_numpy))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "yWShZwKC7uUM", - "outputId": "d1701b00-b497-4873-983c-d12832530c93" - }, - "execution_count": 11, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " [[0.53919275 0.48056631]\n", - " [0.18089882 0.91652413]]\n", - "\n", - "tensor([[0.5392, 0.4806],\n", - " [0.1809, 0.9165]], dtype=torch.float64)\n", - "\n", - " [[0.53919275 0.48056631]\n", - " [0.18089882 0.91652413]]\n", - "\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "### PyTorch 기본 수학 연산\n", - "- 크기 변경(Resize): view()\n", - "- a와 b는 텐서입니다.\n", - "- 덧셈(Addition): torch.add(a, b) = a + b\n", - "- 뺄셈(Subtraction): a.sub(b) = a - b\n", - "- 원소별 곱(Element-wise Multiplication): torch.mul(a, b) = a * b\n", - "- 원소별 나눗셈(Element-wise Division): torch.div(a, b) = a / b\n", - "- 평균(Mean): a.mean()\n", - "- 표준 편차(Standard Deviation, std): a.std()\n" - ], - "metadata": { - "id": "bsJkMU_lDZgy" - } - }, - { - "cell_type": "code", - "source": [ - "# 텐서 생성\n", - "tensor = torch.rand(3,3)\n", - "print(\"\\n\",tensor)\n", - "\n", - "# 크기 변경\n", - "print(\"{}{}\\n\".format(tensor.view(9).shape,tensor.view(9)))\n", - "\n", - "# 덧셈\n", - "print(\"Addition: {}\\n\".format(torch.add(tensor,tensor)))\n", - "\n", - "# 뺄셈\n", - "print(\"Subtraction: {}\\n\".format(tensor.sub(tensor)))\n", - "\n", - "# 원소별 곱\n", - "print(\"Element wise multiplication: {}\\n\".format(torch.mul(tensor,tensor)))\n", - "\n", - "# 원소별 나눗셈\n", - "print(\"Element wise division: {}\\n\".format(torch.div(tensor,tensor)))\n", - "\n", - "# 평균\n", - "tensor = torch.Tensor([1,2,3,4,5])\n", - "print(\"Mean: {}\".format(tensor.mean()))\n", - "\n", - "# 표준편차\n", - "print(\"std: {}\".format(tensor.std()))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "V6iLiAPS7uQs", - "outputId": "abb26eee-1794-4194-93b1-2505c331c26d" - }, - "execution_count": 12, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "\n", - " tensor([[0.3252, 0.4154, 0.9444],\n", - " [0.7093, 0.6031, 0.5193],\n", - " [0.3037, 0.8802, 0.0023]])\n", - "torch.Size([9])tensor([0.3252, 0.4154, 0.9444, 0.7093, 0.6031, 0.5193, 0.3037, 0.8802, 0.0023])\n", - "\n", - "Addition: tensor([[0.6503, 0.8308, 1.8889],\n", - " [1.4187, 1.2063, 1.0386],\n", - " [0.6074, 1.7603, 0.0046]])\n", - "\n", - "Subtraction: tensor([[0., 0., 0.],\n", - " [0., 0., 0.],\n", - " [0., 0., 0.]])\n", - "\n", - "Element wise multiplication: tensor([[1.0573e-01, 1.7258e-01, 8.9198e-01],\n", - " [5.0316e-01, 3.6378e-01, 2.6970e-01],\n", - " [9.2222e-02, 7.7468e-01, 5.3382e-06]])\n", - "\n", - "Element wise division: tensor([[1., 1., 1.],\n", - " [1., 1., 1.],\n", - " [1., 1., 1.]])\n", - "\n", - "Mean: 3.0\n", - "std: 1.5811388492584229\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "### Variables \n", - "- 변수는 그래디언트(Gradients)를 누적합니다.\n", - "- 우리는 PyTorch를 신경망에 사용할 것입니다. 신경망에서는 역전파(Backpropagation) 과정에서 그래디언트를 계산하게 됩니다. 따라서 그래디언트를 다룰 필요가 있습니다.\n", - "- 변수(Variable)와 텐서(Tensor)의 차이점은 변수가 그래디언트를 누적한다는 것입니다. \n", - "- 변수를 사용하여 수학 연산을 수행할 수도 있습니다. \n", - "- 역전파를 수행하려면 변수가 필요합니다." - ], - "metadata": { - "id": "HxVIlKSQEIXx" - } - }, - { - "cell_type": "code", - "source": [ - "from torch.autograd import Variable\n", - "\n", - "# variable 정의\n", - "var = Variable(torch.ones(3), requires_grad = True)\n", - "var" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "UfpDKji97uOv", - "outputId": "5bd6da69-0210-4bda-d95e-4fe531a98a78" - }, - "execution_count": 13, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "tensor([1., 1., 1.], requires_grad=True)" - ] - }, - "metadata": {}, - "execution_count": 13 - } - ] - }, - { - "cell_type": "code", - "source": [ - "# 기본적인 역전파(backward propagation) 수행\n", - "# 주어진 함수 y = x^2\n", - "array = [2,4]\n", - "tensor = torch.Tensor(array)\n", - "x = Variable(tensor, requires_grad = True)\n", - "y = x**2\n", - "print(\" y = \",y)\n", - "\n", - "# 방정식 요약: o = 1/2*sum(y)\n", - "o = (1/2)*sum(y)\n", - "print(\" o = \",o)\n", - "\n", - "# 역전파 실행(그래디언트 계산)\n", - "o.backward()\n", - "\n", - "# 변수는 그래디언트를 누적. 여기서는 x 하나만 존재.\n", - "# 따라선 변수 x는 그래디언트를 가져야 함\n", - "# x의 그래디언트 출\n", - "print(\"gradients: \",x.grad)" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "t4p2w1z_7uMv", - "outputId": "6ece5b99-7671-4174-db87-69cbfada6b21" - }, - "execution_count": 15, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - " y = tensor([ 4., 16.], grad_fn=)\n", - " o = tensor(10., grad_fn=)\n", - "gradients: tensor([2., 4.])\n" - ] - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "
\n", - "## 2. 선형 회귀\n", - "\n", - "- y = Ax + B\n", - " - A = 기울기\n", - " - B = 절편 (y축과 교차하는 점)\n", - "\n", - "- 자동차 가격이 낮으면 더 많이 팔리고, 자동차 가격이 높으면 덜 팔린다는 사실을 우리는 알고 있으며, 이에 대한 데이터셋을 가지고 있습니다.\n", - "\n", - "- 목표는 자동차 가격이 100일 때 팔린 자동차의 수를 예측하는 것입니다." - ], - "metadata": { - "id": "Jq1tID2f9DOP" - } - }, - { - "cell_type": "code", - "source": [ - "# 자동차 회사에서 과거 판매 데이터를 수집했다고 가정\n", - "# 자동차 가격 데이터 정의\n", - "car_prices_array = [3,4,5,6,7,8,9]\n", - "car_price_np = np.array(car_prices_array,dtype=np.float32) # numpy array로 변환\n", - "car_price_np = car_price_np.reshape(-1,1) #reshape\n", - "car_price_tensor = Variable(torch.from_numpy(car_price_np)) # define variable\n", - "\n", - "# 자동차 판매량 데이터 정의\n", - "number_of_car_sell_array = [ 7.5, 7, 6.5, 6.0, 5.5, 5.0, 4.5]\n", - "number_of_car_sell_np = np.array(number_of_car_sell_array,dtype=np.float32) # numpy array 로 변환\n", - "number_of_car_sell_np = number_of_car_sell_np.reshape(-1,1) #reshape\n", - "number_of_car_sell_tensor = Variable(torch.from_numpy(number_of_car_sell_np)) # define variable\n", - "\n", - "# 데이터 시각화\n", - "import matplotlib.pyplot as plt\n", - "plt.scatter(car_prices_array,number_of_car_sell_array)\n", - "plt.xlabel(\"Car Price $\")\n", - "plt.ylabel(\"Number of Car Sell\")\n", - "plt.title(\"Car Price$ VS Number of Car Sell\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 472 - }, - "id": "5r4kXCwf7uKP", - "outputId": "9710fcaf-02c2-4b96-e3c2-9e0214cb6919" - }, - "execution_count": 17, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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/Oc/TalSpcypU6fsfX19fU3Dhg3Nn3/+6fQ5LhcWFmbuvvtus3fv3hxXb3K7ctO7d28TFhaW4zhxcXHm7/9rk2Sio6NNaGioGTdunBk3bpwJCAgwN998s5k0aZKJjIw0b7zxhnnxxReNl5eXueOOOxz2b9mypalUqZIJCgoygwYNMm+99ZZp3ry5kWRmzJjh8J4587O5VFOdOnVMYGCgGTVqlJk8ebL9Z5ybS6+rTZs25u233zaDBg0ynp6e5rbbbjPnz583xhjz+eef23//4uPjzQcffGC2bt2a6/HOnDljSpYsae688848z/l3VapUMU888YSZNGmSmTBhgmncuLGRZL766qt8v7YjR44YSebuu+82Z86cueL5z5w5Y6Kjo02FChXM888/b6ZMmWJ69eplbDabGTJkSI4auHJz4yLc4LqSlpZmJOX4oLiS3IaA2rdvnyMghYWFGUlm8eLFTh33Urj5/fffze+//26SkpLMK6+8Ymw2m4mOjnbquH8PN//5z3+MJDN//vwcfbOzs40xxnzwwQfGw8PDrFq1ymH7lClTjCTz008/GWMufhB4eHiYF154wRjjergxxpjhw4cbSWbXrl32trS0NOPj42O6d+/u0PdS7aVLlzYdO3Y0L7/8stm4caPT57oUbowx5pFHHjE+Pj72YceCCDfe3t4Or3/q1KlGkgkODnYYkomNjc3xIdiyZUsjybzxxhv2tszMTHPrrbeaoKAge7hw9mdzqSYPDw+zffv2q743x48fN15eXqZdu3YmKyvL3j5p0iQjybz33ns5Xv/VhqW2bt1qJOUIBVfy939L58+fN1FRUTkCkiuvzRhjevXq5TBk+vrrr5udO3fm6DdmzBhTunRps3v3bof2ESNGGE9PT5OcnOxQA+HmxsWwFK4r6enpkpTrJfS8+Pr62v87LS1Nf/zxh1q2bKl9+/YpLS3NoW94eLjat2/v9LHPnDmjwMBABQYGKiIiQs8//7xiYmL0+eef5+u4n332mW655RZ17do1x7ZLQy3z5s1TnTp1VLt2bf3xxx/2x5133ilJ+u677yRJpUqV0v33369XX31V/fr10+HDh3X48GGnX5t0cWhKujh5+PIaMzIy7ENSl4waNUpz5sxR/fr1tWTJEr3wwgtq2LChGjRooJ07d7p03hdffFF//fWXxo0b59J+V9K6dWuHYazbb79dknTfffc5/D5dat+3b5/D/iVKlNBjjz1mf+7l5aXHHntMx48f18aNGyU5/7O5pGXLloqMjLxq7cuWLdP58+c1dOhQhwno/fv3l7+/vxYtWuTMW+DgWv8tpaamKi0tTS1atNCmTZty9HX2tUkXh44nTZqk8PBwff7553rmmWdUp04dtW7d2uF3dt68eWrRooXKlSvn8P62adNGWVlZ+uGHH5x+LbA2wg2uK/7+/pKkU6dOOb3PTz/9pDZt2qh06dIqW7asAgMD7Xd/5BZuXOHj46OlS5dq6dKl+uGHH3To0CH99NNPqlatWr6Ou3fv3quup7Jnzx5t377dHqouPWrWrClJOn78uL3vzJkzNXr0aP38889KSkpS8+bNFR4eroSEBKfqiY6OVlRUlD766CN725w5c3TTTTflGta6d++uVatWKTU1Vd9++60eeughbd68WZ06dXL6Ti1Jqlatmh5++GFNmzZNKSkpTu93JTfffLPD84CAAElSaGhoru2pqakO7ZUqVVLp0qUd2i6955fm6Ljys5Gc/724NEeqVq1aDu1eXl6qVq2aU3Oo/i4//5a++uorNWnSRD4+PipfvrwCAwMVHx+f49+R5Nq/JQ8PDw0cOFAbN27UH3/8oS+//FIdO3bUihUr7HfjSRff38WLF+d4f9u0aSMp5/uLGxe3guO64u/vr0qVKikxMdGp/nv37lXr1q1Vu3ZtTZgwQaGhofLy8tLXX3+t//73vzkmIV7+l6kzPD097f9jvRJXj3sl2dnZqlevniZMmJDr9ss/rL29vTVixAiNGDFCrVq10kMPPaRPPvlEffv2la+vr8MHR1569uypESNGaMOGDapSpYq+++47PfbYYypRIu//ffj7+6tt27Zq27atSpYsqVmzZunnn39Wy5YtnX6dL7zwgj744AONHz9eXbp0ybH975OGL8lrXRZPT0+X2o0xzhV6GVd+NlLB/l64KiIiQiVKlLBPqr6aVatW6d5779U//vEPvfPOOwoJCVHJkiWVkJDgcGXvkvy+tgoVKujee+/Vvffeq1atWun777/XwYMHFRYWpuzsbLVt21bPPvtsrvteCpEA4QbXnXvuuUfTpk3TmjVrFBMTc8W+CxcuVGZmphYsWODwl/vfhweKi+rVq181uFWvXl1bt25V69at8/yAz0u7du3Up08fVapUSZ9++qlT4aZ79+6KjY3VnDlzFBYWpqysrBxDUlfSqFEjzZo1y+UrMNWrV1fPnj01depU+1DR5cqVK+dwp9Al+bmK4YwjR47ozJkzDldvdu/eLUn24a5r+dlcSVhYmKSL6yJdflXw/Pnz2r9/v1MB++9KlSqlO++8UytWrNChQ4dyBK+/++yzz+Tj46MlS5bI29vb3u7sVcD8aNSokb7//nulpKQoLCxM1atX1+nTp/P1enFjYVgK151nn31WpUuX1qOPPqpjx47l2L537169+eabkv73V/nlf4WnpaUV6v+Qr8V9992nrVu35pizI/3vNdx///06fPiwpk+fnqPPuXPndObMGUkXb0nObaXm7OxsZWdnO/2X9c0336wWLVpo7ty5mj17tsLDw9W0aVOHPmfPntWaNWty3f+bb76RlHNIxRkvvviiLly4oFdffTXHturVqystLU2//PKLvS0lJSXX964g/PXXXw5LA5w/f15Tp05VYGCgGjZsKMn5n42r2rRpIy8vL7311lsOv8szZsxQWlqa7r777nwdNy4uTsYYPfzwwzp9+nSO7Rs3btSsWbMkXfy3ZLPZHK6MHThwQF988UW+zn3J0aNHtWPHjhzt58+f1/Lly+Xh4WFfjPD+++/XmjVrtGTJkhz9T548qb/++uuaaoF1cOUG153q1atrzpw5euCBB1SnTh2HFYpXr16tefPm2dfmaNeunby8vNSpUyc99thjOn36tKZPn66goKACm8tRkIYPH65PP/1U3bp1U9++fdWwYUOdOHFCCxYs0JQpU3TLLbfo4Ycf1ieffKLHH39c3333nZo1a6asrCz9+uuv+uSTT+zr6aSkpKh58+bq27evmjZtqvT0dC1YsEDz589XamqqHnroIafr6tmzp/7v//5PR44c0QsvvJBj+9mzZ9W0aVM1adJEHTp0UGhoqE6ePKkvvvhCq1atUpcuXVS/fn2X349LV28ufcBe7sEHH9Rzzz2nrl27avDgwTp79qzi4+NVs2bNXCe4XqtKlSpp/PjxOnDggGrWrKm5c+dqy5YtmjZtmkqWLClJTv9sXBUYGKjY2FiNGjVKHTp00L333qtdu3bpnXfe0W233Waf+O2qpk2bavLkyXriiSdUu3ZthxWKV65cqQULFuill16SdHHV6gkTJqhDhw566KGHdPz4cU2ePFkREREOAdNVv/32mxo3bqw777xTrVu3VnBwsI4fP66PPvpIW7du1dChQ3XTTTdJuvjvY8GCBbrnnnvUp08fNWzYUGfOnNG2bdv06aef6sCBA/a+uMG59V4t4Brs3r3b9O/f31StWtV4eXkZPz8/06xZM/P222+bjIwMe78FCxaY6Oho4+PjY6pWrWrGjx9v3nvvvRy3hV5+K7Iz8lrn5u+udNy/3wpujDF//vmnGTRokKlcubLx8vIyVapUMb179zZ//PGHvc/58+fN+PHjTd26dY23t7cpV66cadiwoRk1apRJS0szxhiTkZFhJkyYYJo1a2ZuuukmI8mUKVPGNGzY0HzyySdOv05jjDlx4oTx9vY2ksyOHTtybL9w4YKZPn266dKliwkLCzPe3t6mVKlSpn79+ua1114zmZmZVz1HXu/Tnj17jKenZ64rFH/77bcmKirKeHl5mVq1apnZs2fneSv4wIEDHdr2799vJJnXXnvNoT23284vrVC8YcMGExMTY3x8fExYWFiOtZKMce5nk1dNVzNp0iRTu3ZtU7JkSVOxYkUzYMAAk5qa6tDH2VvBL7dx40bz0EMPmUqVKpmSJUuacuXKmdatW5tZs2Y53Ho+Y8YMU6NGDePt7W1q165tEhISnH6/85Kenm7efPNN0759e1OlShVTsmRJ4+fnZ2JiYsz06dPtSyBccurUKRMbG2siIiKMl5eXuemmm0zTpk3N66+/br8l/1IN3Ap+47IZk49ZcwCuO61atdLMmTNzXdUXAKyEOTcAAMBSCDfADaJPnz4qW7asu8sAgELHsBQAALAUrtwAAABLIdwAAABLIdwAAABLueEW8cvOztaRI0fk5+dXoMujAwCAwmOM0alTp1SpUiV5eFz52swNF26OHDly1e9QAQAAxdOhQ4dUpUqVK/a54cKNn5+fpItvjr+/v5urAQAAzkhPT1doaKj9c/xKbrhwc2koyt/fn3ADAMB1xpkpJUwoBgAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlkK4AQAAlnLDrVBcWLKyjdbtP6HjpzIU5OejxuHl5enBF3MCAFDU3HrlpmrVqrLZbDkeAwcOzLX/zJkzc/T18fEp4qpzWpyYoubjV6j79LUa8vEWdZ++Vs3Hr9DixBR3lwYAwA3HrVdu1q9fr6ysLPvzxMREtW3bVt26dctzH39/f+3atcv+3JnvmChMixNTNGD2Jpm/tR9Ny9CA2ZsU37OBOkSFuKU2AABuRG4NN4GBgQ7Px40bp+rVq6tly5Z57mOz2RQcHFzYpTklK9to1MIdOYKNJBlJNkmjFu5Q28hghqgAACgixWZC8fnz5zV79mz17dv3ildjTp8+rbCwMIWGhqpz587avn37FY+bmZmp9PR0h0dBWbf/hFLSMvLcbiSlpGVo3f4TBXZOAABwZcUm3HzxxRc6efKk+vTpk2efWrVq6b333tOXX36p2bNnKzs7W02bNtVvv/2W5z5jx45VQECA/REaGlpgNR8/lXewyU8/AABw7WzGmNxGVYpc+/bt5eXlpYULFzq9z4ULF1SnTh11795dY8aMybVPZmamMjMz7c/T09MVGhqqtLQ0+fv7X1PNa/b+qe7T116130f9myimeoVrOhcAADey9PR0BQQEOPX5XSxuBT948KCWLVum+fPnu7RfyZIlVb9+fSUlJeXZx9vbW97e3tdaYq4ah5dXSICPjqZl5DrvxiYpOODibeEAAKBoFIthqYSEBAUFBenuu+92ab+srCxt27ZNISHuuRvJ08OmuE6Rki4Gmctdeh7XKZLJxAAAFCG3h5vs7GwlJCSod+/eKlHC8UJSr169FBsba38+evRoffvtt9q3b582bdqknj176uDBg3r00UeLumy7DlEhiu/ZQMEBjuvtBAf4cBs4AABu4PZhqWXLlik5OVl9+/bNsS05OVkeHv/LX6mpqerfv7+OHj2qcuXKqWHDhlq9erUiIyOLsuQcOkSFqG1kMCsUAwBQDBSbCcVFxZUJSQAAoHhw5fPb7cNSAAAABYlwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALIVwAwAALKWEuwvA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77//vlq1aqVHHnlELVq0UEREhMLCwvThhx+qR48ehVEnAACAU1y+cnPixAlVq1ZN0sX5NZdu/W7evLl++OGHgq0OAADARS6Hm2rVqmn//v2SpNq1a+uTTz6RdPGKTtmyZQu0OAAAAFe5HG4eeeQRbd26VZI0YsQITZ48WT4+Pho2bJiGDx9e4AUCAAC4wuUViv/u4MGD2rhxoyIiIhQdHV1QdRUaVigGAOD6U6grFP9dWFiYwsLCrvUwAAAABcLpYakVK1YoMjJS6enpObalpaWpbt26WrVqVYEWBwAA4Cqnw83EiRPVv3//XC8FBQQE6LHHHtOECRMKtDgAAABXOR1utm7dqg4dOuS5vV27dtq4cWOBFAUAAJBfToebY8eOqWTJknluL1GihH7//fcCKQoAACC/nA43lStXVmJiYp7bf/nlF4WEhBRIUQAAAPnldLi566679O9//1sZGRk5tp07d05xcXG65557CrQ4AAAAVzm9zs2xY8fUoEEDeXp6atCgQapVq5Yk6ddff9XkyZOVlZWlTZs2qWLFioVa8LVinRsAAK4/hbLOTcWKFbV69WoNGDBAsbGxupSJbDab2rdvr8mTJxf7YAMAAKzPpUX8wsLC9PXXXys1NVVJSUkyxqhGjRoqV65cYdUHAADgknytUFyuXDnddtttBV0LAADANXP5izMBAACKM8INAACwFMINAACwFKfCTYMGDZSamipJGj16tM6ePVuoRQEAAOSXU+Fm586dOnPmjCRp1KhROn36dKEWBQAAkF9O3S1166236pFHHlHz5s1ljNHrr7+uMmXK5Nr3P//5T4EWCADOyMo2Wrf/hI6fylCQn48ah5eXp4fN3WUBcAOnVijetWuX4uLitHfvXm3atEmRkZEqUSJnLrLZbNq0aZNLBRw+fFjPPfecvvnmG509e1YRERFKSEhQo0aN8txn5cqVeuqpp7R9+3aFhobqxRdfVJ8+fZw6HysUA9azODFFoxbuUEra/74eJiTAR3GdItUhiu+8A6zAlc9vp79+4RIPDw8dPXpUQUFB11SkJKWmpqp+/fq64447NGDAAAUGBmrPnj2qXr26qlevnus++/fvV1RUlB5//HE9+uijWr58uYYOHapFixapffv2Vz0n4QawlsWJKRowe5P+/j+yS9ds4ns2IOAAFlCo4aYgjRgxQj/99JNWrVrl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UYeoEMX3bKBRC3c4TC4ODvBRXKdIbgOHZeRrnZtLQWTWrFlq3769tmzZoqioKJeP89tvv6l79+76888/FRgYqObNm2vt2rUKDAyUJCUnJ8vD43/rDKampqp///46evSoypUrp4YNG2r16tWKjIzMz8sAgBtOh6gQtY0MZoViWJpLE4rT0tL0yiuv6O2339att96q8ePHq0WLFoVZX4FzZUISAAAoHgplQvGrr76q8ePHKzg4WB999FGuw1QAAADu5vSVGw8PD/n6+qpNmzby9PTMs9/8+fMLrLjCwJUbAACuP4Vy5aZXr158jxMAACj2nA43M2fOLMQyAAAACobH1bsAAABcPwg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUgg3AADAUkq4uwAAAIqzrGyjdftP6PipDAX5+ahxeHl5etjcXRauwK1XbkaOHCmbzebwqF279hX3mTdvnmrXri0fHx/Vq1dPX3/9dRFVCwC40SxOTFHz8SvUffpaDfl4i7pPX6vm41docWKKu0vDFbh9WKpu3bpKSUmxP3788cc8+65evVrdu3dXv379tHnzZnXp0kVdunRRYmJiEVYMALgRLE5M0YDZm5SSluHQfjQtQwNmbyLgFGNuDzclSpRQcHCw/XHTTTfl2ffNN99Uhw4dNHz4cNWpU0djxoxRgwYNNGnSpCKsGABgdVnZRqMW7pDJZdultlELdygrO7cecDe3h5s9e/aoUqVKqlatmnr06KHk5OQ8+65Zs0Zt2rRxaGvfvr3WrFmT5z6ZmZlKT093eAAAcCXr9p/IccXmckZSSlqG1u0/UXRFwWluDTe33367Zs6cqcWLFys+Pl779+9XixYtdOrUqVz7Hz16VBUrVnRoq1ixoo4ePZrnOcaOHauAgAD7IzQ0tEBfAwDAeo6fyjvY5KcfipZb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\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 이제 이 그래프는 우리가 수집한 데이터입니다.\n", - "- 우리는 자동차 가격이 100달러일 때 판매된 자동차의 수가 무엇일지를 묻는 질문을 가지고 있습니다.\n", - "- 이 질문을 해결하기 위해 우리는 선형 회귀를 사용해야 합니다.\n", - "- 우리는 이 데이터에 맞는 선을 찾아야 합니다. 목표는 최소한의 오류로 선을 맞추는 것입니다.\n", - "\n", - "---\n", - "\n", - "- **선형 회귀의 단계**\n", - " 1. LinearRegression 클래스를 생성합니다.\n", - " 2. 이 LinearRegression 클래스로 모델을 정의합니다.\n", - " 3. MSE: 평균 제곱 오차(Mean Squared Error)\n", - " 4. 최적화 (SGD: 확률적 경사 하강법)\n", - " 5. 역전파 (Backpropagation)\n", - " 6. 예측 (Prediction)" - ], - "metadata": { - "id": "MOlzmdG89JCT" - } - }, - { - "cell_type": "code", - "source": [ - "# PyTorch를 이용한 선형 회귀 모델 구현\n", - "\n", - "import torch\n", - "from torch.autograd import Variable\n", - "import torch.nn as nn\n", - "import warnings\n", - "warnings.filterwarnings(\"ignore\")\n", - "\n", - "# 선형 회귀 클래스 정의\n", - "class LinearRegression(nn.Module):\n", - " def __init__(self, input_size, output_size):\n", - " super(LinearRegression, self).__init__()\n", - " self.linear = nn.Linear(input_dim,output_dim) # apply linear function\n", - "\n", - " def forward(self, x):\n", - " return self.linear(x)\n", - "\n", - "# 모델 정의\n", - "input_dim = 1\n", - "output_dim = 1\n", - "model = LinearRegression(input_dim,output_dim)\n", - "\n", - "# 손실 함수 (MSE)\n", - "mse = nn.MSELoss()\n", - "\n", - "# 옵티마이저 (SGD 사용)\n", - "learning_rate = 0.02\n", - "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n", - "\n", - "# 모델 학습\n", - "loss_list = []\n", - "iteration_number = 1001\n", - "for iteration in range(iteration_number):\n", - " optimizer.zero_grad() # 기울기 초기화\n", - " results = model(car_price_tensor) # 예측값 계산\n", - " loss = mse(results, number_of_car_sell_tensor) # 손실 계산\n", - " # 역전파 실행\n", - " loss.backward()\n", - " # 가중치 업데이트\n", - " optimizer.step()\n", - " # loss 저장\n", - " loss_list.append(loss.data)\n", - " # loss 출력\n", - " if iteration % 50 == 0:\n", - " print(f'epoch {iteration}, loss {loss.data}')\n", - "\n", - "# 손실 그래프 시각화\n", - "plt.plot(range(iteration_number), loss_list)\n", - "plt.xlabel(\"Number of Iterations\")\n", - "plt.ylabel(\"Loss\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 841 - }, - "id": "6MvDUc9b7uHf", - "outputId": "f8276d54-6254-47df-c19f-6337ef76cfe9" - }, - "execution_count": 18, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "epoch 0, loss 25.426912307739258\n", - "epoch 50, loss 5.2248311042785645\n", - "epoch 100, loss 3.5306379795074463\n", - "epoch 150, loss 2.385801076889038\n", - "epoch 200, loss 1.6121852397918701\n", - "epoch 250, loss 1.089420199394226\n", - "epoch 300, loss 0.7361676096916199\n", - "epoch 350, loss 0.49745896458625793\n", - "epoch 400, loss 0.33615371584892273\n", - "epoch 450, loss 0.22715328633785248\n", - "epoch 500, loss 0.15349726378917694\n", - "epoch 550, loss 0.10372438281774521\n", - "epoch 600, loss 0.0700916051864624\n", - "epoch 650, loss 0.047363877296447754\n", - "epoch 700, loss 0.032005682587623596\n", - "epoch 750, loss 0.021627668291330338\n", - "epoch 800, loss 0.014614446088671684\n", - "epoch 850, loss 0.009875531308352947\n", - "epoch 900, loss 0.006673324853181839\n", - "epoch 950, loss 0.004509496036916971\n", - "epoch 1000, loss 0.003047296078875661\n" - ] - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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j1555RXNmTOnLusLaTUrYBNkAACwIaggU15eLrfbLUn66KOPdMkll0iSunTpot27d9dddSGuepwMOQYAADuCCjLdu3fXc889p3//+99auHChLrjgAknSrl27lJSUVKcFhrLqIEOPDAAAdgQVZKZPn64///nPGjJkiMaMGaOsrCxJ0jvvvOO/5NQUOPyXluzWAQBAUxURzJuGDBmiffv2yePxqEWLFv7tN954o2JiYuqsuFDn75EhyQAAYEVQPTKHDx9WaWmpP8Rs375dM2bMUG5urpKTk+u0wFBWPdiXK0sAANgRVJC59NJL9dJLL0mSCgoK1L9/fz322GMaNWqUZs2aVacFhjLGyAAAYFdQQeazzz7TeeedJ0n65z//qZSUFG3fvl0vvfSSnnrqqTotMJQ5mH4NAIBVQQWZkpISxcXFSZI+/PBDXX755XI6nRowYIC2b99epwWGMqezukfGciEAADRRQQWZTp06ad68edq5c6c++OADDR8+XJK0Z88excfH12mBoazmPjIkGQAAbAgqyNx3332688471aFDB/Xr10/Z2dmSKntnevXqVacFhjIn068BALAqqOnXv/zlLzVo0CDt3r3bfw8ZSRo6dKguu+yyOisu1DkY7AsAgFVBBRlJSk1NVWpqqn8V7PT09CZ1MzyJtZYAALAtqEtLPp9PU6ZMUUJCgtq3b6/27dsrMTFRDz30kHw+X13XGLJYawkAALuC6pG599579cILL2jatGkaOHCgJGnZsmV64IEHdOTIET388MN1WmSo4j4yAADYFVSQefHFF/XXv/7Vv+q1JPXs2VNt27bVzTff3GSCDGstAQBgV1CXlg4cOKAuXboct71Lly46cOBArYsKF/TIAABgV1BBJisrS88888xx25955hn17Nmz1kWFi5q1lggyAADYENSlpUcffVQXXXSRPvroI/89ZJYvX66dO3fqvffeq9MCQ1lNj4zlQgAAaKKC6pE5//zz9c033+iyyy5TQUGBCgoKdPnll2vjxo16+eWX67rGkOUfI0OSAQDAiqDvI5OWlnbcoN7PP/9cL7zwgp5//vlaFxYO6JEBAMCuoHpkUIm1lgAAsIsgUwtMvwYAwC6CTC0w/RoAALt+1BiZyy+//JT7CwoKalNL2HFWxUCCDAAAdvyoIJOQkPCD+3/961/XqqBwwlpLAADY9aOCzOzZ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RZAJ0syZM9WhQwdFRUWpf//+WrVqle2SwsrUqVPVt29fxcXFKTk5WaNGjVJubm5AmyNHjmjChAlKSkpS8+bNNXr0aOXn5we02bFjhy666CLFxMQoOTlZd911lyoqKhryq4SNadOmyeFwaOLEif5tnOO68/333+u//uu/lJSUpOjoaGVmZmrNmjX+/cYY3XfffWrTpo2io6M1bNgwbdq0KeAYBw4c0NixYxUfH6/ExERdf/31OnToUEN/lZDl9Xr1xz/+UR07dlR0dLTOPPNMPfTQQwFr8XCef7ylS5fq4osvVlpamhwOh+bNmxewv67O6fr163XeeecpKipKGRkZevTRR+vmCxj8aK+//rqJjIw0f/vb38zGjRvNDTfcYBITE01+fr7t0sLGiBEjzOzZs82GDRvMunXrzIUXXmjatWtnDh065G9z0003mYyMDLNo0SKzZs0aM2DAAHPuuef691dUVJgePXqYYcOGmbVr15r33nvPtGrVykyePNnGVwppq1atMh06dDA9e/Y0t912m38757huHDhwwLRv396MHz/erFy50nz77bfmgw8+MJs3b/a3mTZtmklISDDz5s0zn3/+ubnkkktMx44dzeHDh/1tLrjgApOVlWVWrFhh/v3vf5tOnTqZMWPG2PhKIenhhx82SUlJZv78+Wbr1q3mzTffNM2bNzdPPvmkvw3n+cd77733zL333mveeustI8nMnTs3YH9dnNPCwkKTkpJixo4dazZs2GBee+01Ex0dbf785z/Xun6CTBD69etnJkyY4H/t9XpNWlqamTp1qsWqwtuePXuMJLNkyRJjjDEFBQWmWbNm5s033/S3+eqrr4wks3z5cmNM5V8+p9Np8vLy/G1mzZpl4uPjTWlpacN+gRBWVFRkzjrrLLNw4UJz/vnn+4MM57ju/O53vzODBg066X6fz2dSU1PNn/70J/+2goIC43a7zWuvvWaMMebLL780kszq1av9bd5//33jcDjM999/X3/Fh5GLLrrIXHfddQHbLr/8cjN27FhjDOe5LhwbZOrqnD777LOmRYsWAf9u/O53vzOdO3eudc1cWvqRysrKlJOTo2HDhvm3OZ1ODRs2TMuXL7dYWXgrLCyUJLVs2VKSlJOTo/Ly8oDz3KVLF7Vr185/npcvX67MzEylpKT424wYMUIej0cbN25swOpD24QJE3TR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br75Zh06dEiStHjxYl177bUqLCz0f151ncdeWtqxY4cuvfRSNW/eXPHx8bryyiuVn5/v31/95/ryyy+rQ4cOSkhI0NVXX62ioiJ/m3/+85/KzMxUdHS0kpKSNGzYMBUXF//geQHCHUEGCBMul0uPPPKInn76aX333Xe1OtbHH3+sXbt2aenSpXr88cd1//336xe/+IVatGihlStX6qabbtL//M//HPc5d911l+644w6tXbtW2dnZuvjii7V//35JUkFBgX72s5+pV69eWrNmjRYsWKD8/HxdeeWVAcd48cUXFRkZqU8//VTPPffcCet78skn9dhjj+n//u//tH79eo0YMUKXXHKJNm3aJEnavXu3unfvrjvuuEO7d+/WnXfe+YPf+cknn1R2drZuuOEG7d69W7t371ZGRkat6nY6nXrqqae0ceNGvfjii/r444919913S5LOPfdczZgxQ/Hx8f7PO1GdPp9Pl156qQ4cOKAlS5Zo4cKF+vbbb3XVVVcFtNuyZYvmzZun+fPna/78+VqyZIn/UuPu3bs1ZswYXXfddfrqq6+0ePFiXX755WJNYDQJdbKGNoB6NW7cOHPppZcaY4wZMGCAue6664wxxsydO9cc/df4/vvvN1lZWQHvfeKJJ0z79u0DjtW+fXvj9Xr92zp37mzOO+88/+uKigoTGxtrXnvtNWOMMVu3bjWSzLRp0/xtysvLTXp6upk+fboxxpiHHnrIDB8+POCzd+7caSSZ3NxcY4wx559/vunVq9cPft+0tDTz8MMPB2zr27evufnmm/2vs7KyzP3333/K4xx93qo//7bbbgtoU5d1v/nmmyYpKcn/evbs2SYhIeG4du3btzdPPPGEMcaYDz/80LhcLrNjxw7//o0bNxpJZtWqVcaYyj/XmJgY4/F4/G3uuusu079/f2OMMTk5OUaS2bZt2w/WCDQ29MgAYWb69Ol68cUX9dVXXwV9jO7du8vprPnrn5KSoszMTP9rl8ulpKQk7dmzJ+B92dnZ/ucRERHq06ePv47PP/9cn3zyiZo3b+5/dOnSRVJlb0K13r17n7I2j8ejXbt2aeDAgQHbBw4cWKvvfDK1qfujjz7S0KFD1bZtW8XFxemaa67R/v37VVJSctqf/9VXXykjI0MZGRn+bd26dVNiYmLA9+3QoYPi4uL8r9u0aeP/88nKytLQoUOVmZmpK664Qn/5y18a1Vgq4FQIMkCYGTx4sEaMGKHJkycft8/pdB53OaG8vPy4ds2aNQt47XA4TrjN5/Oddl2HDh3SxRdfrHXr1gU8Nm3apMGDB/vbxcbGnvYxG0KwdW/btk2/+MUv1LNnT/3rX/9STk6OZs6cKan2g4FP5FR/Pi6XSwsXLtT777+vbt266emnn1bnzp21devWOq8DCDUEGSAMTZs2Te+++66WL18esL1169bKy8sLCDN1ee+XFStW+J9XVFQoJydHXbt2lST95Cc/0caNG9WhQwd16tQp4PFjwkt8fLzS0tL06aefBmz/9NNP1a1bt1rVHxkZKa/XG7At2LpzcnLk8/n02GOPacCAATr77LO1a9euH/y8Y3Xt2lU7d+7Uzp07/du+/PJLFRQU/Kjv63A4NHDgQD344INau3atIiMjNXfu3NN+PxCuCDJAGMrMzNTYsWP11FNPBWwfMmSI9u7dq0cffVRbtmzRzJkz9f7779fZ586cOVNz587V119/rQkTJujgwYO67rrrJEkTJkzQgQMHNGbMGK1evVpbtmzRBx98oGuvvfYHf5kf66677tL06dP1xhtvKDc3V/fcc4/WrVun2267rVb1d+jQQStXrtS2bdu0b98++Xy+oOvu1KmTysvL9fTTT+vbb7/Vyy+/fNzg5Q4dOujQoUNatGiR9u3bd8JLTsOGDfP/eX722WdatWqVfv3rX+v8889Xnz59Tut7rVy5Uo888ojWrFmjHTt26K233tLevXv9IRNozAgyQJiaMmXKcZd+unbtqmeffVYzZ85UVlaWVq1adVozek7XtGnTNG3aNGVlZWnZsmV655131KpVK0ny96J4vV4NHz5cmZmZmjhxohITEwPG45yO3/72t5o0aZLuuOMOZWZmasGCBXrnnXd01lln1ar+O++8Uy6XS926dVPr1q21Y8eOoOvOysrS448/runTp6tHjx565ZVXjpsaf+655+qmm27SVVddpdatW+vRRx897jgOh0Nvv/22WrRoocGDB2vYsGE644wz9MYbb5z294qPj9fSpUt14YUX6uyzz9Yf/vAHPfbYYxo5cuTpnxwgTDnMsRfUAQAAwgQ9MgAAIGwRZAAAQNgiyAAAgLBFkAEAAGGLIAMAAMIWQQYAAIQtggwAAAhbBBkAABC2CDIAACBsEWQAAEDYIsgAAICw9f8B9Go6YUrI6XIAAAAASUVORK5CYII=\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "- 반복 횟수는 1000입니다.\n", - "- 손실 값은 거의 0에 가까우며, 이는 그래프나 1000번째 epoch에서의 손실 값에서 확인할 수 있습니다.\n", - "- 이제 우리는 훈련된 모델을 가지고 있습니다.\n", - "- 훈련된 모델을 사용할 때, 자동차 가격을 예측해 봅시다." - ], - "metadata": { - "id": "9odY_Wb59N8H" - } - }, - { - "cell_type": "code", - "source": [ - "# car price 예측\n", - "predicted = model(car_price_tensor).data.numpy()\n", - "plt.scatter(car_prices_array,number_of_car_sell_array,label = \"original data\",color =\"red\") # original data\n", - "plt.scatter(car_prices_array,predicted,label = \"predicted data\",color =\"blue\") # predicted data\n", - "\n", - "# car price가 10$ 일 때, car sell은?\n", - "predicted_10 = model(torch.tensor([[10.0]])).data.numpy()\n", - "plt.scatter(10,predicted_10,label = \"car price 10$\",color =\"green\")\n", - "plt.legend()\n", - "plt.xlabel(\"Car Price $\")\n", - "plt.ylabel(\"Number of Car Sell\")\n", - "plt.title(\"Original vs Predicted values\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 472 - }, - "id": "FtsHa2uk7uDy", - "outputId": "1f6b7507-23df-4534-d27b-f881414ec7d7" - }, - "execution_count": 22, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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w+nXrx8cHR0RGRkJAAgPD0fbtm2xYMECdO7cGevXr8eJEydemufqq6I4hKIH3i222mg6HNEDm7EZEoTqKDYiIqqadN5zs3fvXqSmpmLQoEHF6lJTU5GR8d9CTq1atcLatWuxYsUKNGnSBJs3b8a2bdvQqFEjbYZM/1I8CQ4Jnv9REjAAJBI+CU6kp0RJS0AQVZCmfq4koor9hObk5MDKygrZ2dmwtLTUdTivtISEwsWIX2TfPqBdu8qOhoi0QSaT4dKlS7C1tYW1tbWuwyE9k52djVu3bsHDwwNGRkZKdep8f+t8WIpeXRkqro6uajsievlJpVLUqFFDsT5M9erVS12bjEgdcrkcf//9N6pXr15smoq6mNxQufFJcKKqqegJ1aIEh0hTDAwMUKdOnQonzExuqNyeeRK8xDcwSCR8EpxIH0kkEjg4OMDW1hZPnz7VdTikR6pVq1bm6sqqYnJD5fbvk+Do0aMwkXk2wSlKuvkkOJH+kkqlkPIvOL2EdP60FL3aQkOBzZsBR0flcienwvJQPgdORERaxp4bqrDQUCAkpPD9mBkZhXNsAgPZY0NERLrB5IY0Qirl495ERPRy4LAUERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFeY3BAREZFeYXJDREREeoXJDREREekVJjdERESkV5jcEBERkV5hckNERER6hckNERER6RUmN0RERKRXmNwQERGRXmFyQ0RERHqFyQ0RERHpFSY3REREpFcMdR0Akd6QyYDERCAjA3BwAAIDAalU11EREVU5Ou+5SU9PxwcffABra2uYmprCx8cHJ06cKLV9QkICJBJJse327dtajJroOXFxgKsrEBQEvP9+4X9dXQvLiYhIq3Tac5OZmYnWrVsjKCgIv/76K2xsbHD58mXUrFnzhcdevHgRlpaWin1bW9vKDJWodHFxQI8egBDK5enpheWbNwOhobqJjYioCtJpcjN37lw4OzsjJiZGUebm5qbSsba2tqhRo0YlRUakIpkMCA8vntgAhWUSCRARAYSEcIiKiEhLdDos9fPPP6NZs2bo2bMn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\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "markdown", - "source": [ - "
\n", - "## 3. 로지스틱 회귀\n", - "\n", - "- 선형 회귀는 분류 문제에서 적합하지 않습니다.\n", - "- 우리는 분류 문제를 해결하기 위해 로지스틱 회귀를 사용합니다.\n", - "- 선형 회귀 + 로지스틱 함수(소프트맥스) = 로지스틱 회귀\n", - "\n", - " \n", - "- **로지스틱 회귀의 단계**\n", - " 1. 라이브러리 가져오기\n", - " 2. 데이터셋 준비\n", - " - 우리는 MNIST 데이터셋을 사용합니다.\n", - " - 28x28 이미지와 0부터 9까지의 10개의 레이블이 있습니다.\n", - " - 데이터는 정규화되지 않았기 때문에 각 이미지를 255로 나눠 기본적인 정규화를 진행합니다.\n", - " - 데이터를 분할하기 위해 sklearn 라이브러리의 `train_test_split` 메서드를 사용합니다.\n", - " - 학습 데이터 크기는 80%, 테스트 데이터 크기는 20%입니다.\n", - " - 특성(feature)과 목표(target) 텐서를 생성합니다. 이후 텐서에서 변수(variable)를 생성합니다. 이 변수는 기울기 누적을 위해 정의됩니다.\n", - " - `batch_size` = 배치 크기는 예를 들어, 1000개의 샘플이 있을 때, 이 샘플을 한 번에 모두 훈련시킬 수도 있고, 100개의 샘플씩 10개의 그룹으로 나누어 순차적으로 훈련시킬 수도 있습니다. 예를 들어, `batch_size = 100`이라면, 모든 데이터를 한 번 훈련시키는 데 336개의 그룹을 사용합니다. 각 그룹은 100개의 샘플을 가지고 있으며, 총 33600개의 샘플을 훈련합니다.\n", - " - `epoch`: 1 epoch는 모든 샘플을 한 번 훈련시키는 것입니다.\n", - " - 예를 들어, 33600개의 샘플이 있고, 배치 크기(batch_size)는 100, epoch는 29로 설정한 경우, 29번 훈련을 진행합니다. 그럼 총 몇 번의 반복(iteration)이 필요한지 계산해 봅시다:\n", - " - 훈련 데이터 1번 = 33600개의 샘플 훈련\n", - " - 하지만 데이터를 336개의 그룹으로 나누었으므로, 1 epoch는 336번의 반복이 필요합니다.\n", - " - 29 epoch 동안 훈련하므로, 총 반복 횟수는 9744번입니다(대략 10000번).\n", - " - `TensorDataset()`: 텐서를 래핑하는 데이터셋. 각 샘플은 텐서를 첫 번째 차원으로 인덱싱하여 검색됩니다.\n", - " - `DataLoader()`: 데이터셋과 샘플을 결합하고, 데이터셋에 대한 다중 프로세스 반복기를 제공합니다.\n", - " - 데이터셋의 이미지를 하나 시각화해봅니다.\n", - " 3. 로지스틱 회귀 모델 생성\n", - " - 선형 회귀와 비슷합니다.\n", - " - 하지만 예측을 위해 모델에 로지스틱 함수(소프트맥스)가 포함되어야 합니다.\n", - " - PyTorch에서는 로지스틱 함수가 손실 함수에 포함되어 있으며, 이후 단계에서 이를 사용합니다.\n", - " 4. 모델 인스턴스화\n", - " - `input_dim = 28*28` # 이미지 크기 px*px\n", - " - `output_dim = 10` # 레이블 0,1,2,3,4,5,6,7,8,9\n", - " - 모델을 생성합니다.\n", - " 5. 손실 함수 인스턴스화\n", - " - 교차 엔트로피 손실\n", - " - 손실을 계산하는 함수로, 소프트맥스(로지스틱 함수)도 포함되어 있습니다.\n", - " 6. 옵티마이저 인스턴스화\n", - " - SGD 옵티마이저\n", - " 7. 모델 훈련\n", - " 8. 예측\n", - "- 결과적으로, 그래프에서 볼 수 있듯이 손실 값은 감소하고, 정확도는 약 85%까지 증가하며 모델이 훈련되고 있음을 확인할 수 있습니다." - ], - "metadata": { - "id": "7uXrwVTU9VFH" - } - }, - { - "cell_type": "code", - "source": [ - "import torch\n", - "import torch.nn as nn\n", - "from torch.autograd import Variable\n", - "from torch.utils.data import DataLoader\n", - "import pandas as pd\n", - "from sklearn.model_selection import train_test_split" - ], - "metadata": { - "id": "FvnI_38-8CfS" - }, - "execution_count": 29, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "# 데이터셋 준비\n", - "# 데이터 로드\n", - "train = pd.read_csv(r\"./train.csv\", dtype=np.float32)\n", - "\n", - "# 데이터를 특징(픽셀 값)과 라벨(0~9 숫자)로 분리\n", - "targets_numpy = train.label.values\n", - "features_numpy = train.loc[:, train.columns != \"label\"].values / 255 # 정규화\n", - "\n", - "# 학습 데이터 80%, 테스트 데이터 20%로 분할\n", - "features_train, features_test, targets_train, targets_test = train_test_split(\n", - " features_numpy, targets_numpy, test_size=0.2, random_state=42\n", - ")\n", - "\n", - "# 학습 데이터셋을 텐서로 변환 (경사 계산을 위해 Variable 생성 필요)\n", - "featuresTrain = torch.from_numpy(features_train)\n", - "targetsTrain = torch.from_numpy(targets_train).type(torch.LongTensor) # 데이터 타입은 long\n", - "\n", - "# 테스트 데이터셋을 텐서로 변환\n", - "featuresTest = torch.from_numpy(features_test)\n", - "targetsTest = torch.from_numpy(targets_test).type(torch.LongTensor)\n", - "## 힌트: PyTorch Tesnor를 생성해주세요!\n", - "## 어떤 데이터를 PyTorch Tensor를 변환하고, 어떤 데이터타입을 선택할지 직접 작성해주세요\n", - "\n", - "# 배치 크기, 반복 횟수 및 에포크 설정\n", - "batch_size = 100\n", - "n_iters = 10000\n", - "num_epochs = int(n_iters / (len(features_train) / batch_size))\n", - "\n", - "# PyTorch 학습 및 테스트 데이터셋 생성\n", - "train = torch.utils.data.TensorDataset(featuresTrain, targetsTrain)\n", - "test = torch.utils.data.TensorDataset(featuresTest, targetsTest)\n", - "## 힌트: 입력 데이터와 레이블을 텐서로 변환하여, 이들을 TensorDataset으로 묶어 train과 test 데이터셋을 구성합니다\n", - "## TensorDataset에는 두 개의 텐서를 전달해야 하며, 각각 특징과 레이블에 해당합니다.\n", - "## 첫 번째 텐서는 입력 데이터, 두 번째 텐서는 정답 데이터이며 입력 데이터와 정답 데이터의 샘플 수가 동일해야 합니다.\n", - "\n", - "# 데이터 로더 생성\n", - "train_loader = DataLoader(train, batch_size=batch_size, shuffle=False)\n", - "test_loader = DataLoader(test, batch_size=batch_size, shuffle=False)\n", - "\n", - "# 데이터셋 중 하나의 이미지를 시각화\n", - "plt.imshow(features_numpy[10].reshape(28, 28))\n", - "plt.axis(\"off\")\n", - "plt.title(str(targets_numpy[10]))\n", - "plt.savefig('graph.png')\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 428 - }, - "id": "cPmM5DM48Cb6", - "outputId": "ec58abca-3bb8-4b6e-867f-154fddc7732b" - }, - "execution_count": 46, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAGbCAYAAAAr/4yjAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAADgdJREFUeJzt3H+s1fV9x/H3PZfLhav8vEUF8RdBxamYi6Kl2RxK3DCdkKoYTO3MpiG2Azuj07ZLV6eGLGuVpU5s1bVGu/lziS44E8kgODcmWC+x6xRQ1npVqlUErwPxcs/ZH43vlIDTz3e9P7g8Hn/ec175fi9c8rxfuHyaGo1GIwAgImoDfQMADB6iAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEASBYa0zZs3x8KFC2Py5MnR1tYW06ZNi5tuuil27tz5idvXX389Lrnkkhg7dmyMHj065s+fH1u2bOmHu4aB0+TsI4aqrq6umD59eowZMyauuuqqGD9+fKxduzbuvffemDdvXjz++OMfu33//fdjxowZsWPHjrj22mujpaUlli1bFo1GIzZs2BDt7e39+JlA/xk20DcAfeX++++P7du3xzPPPBMnn3xyREQsWrQo6vV63HffffHuu+/GuHHj9rtdvnx5bN68OdatWxczZ86MiIjzzz8/TjnllLj11ltj6dKl/fZ5QH/y10cMWe+9915ERBx++OF7fXzixIlRq9Vi+PDhH7t99NFHY+bMmRmEiIhp06bFnDlz4uGHH+6bG4ZBQBQYsmbPnh0REVdccUVs2LAhurq64qGHHoo777wzrr766jjkkEP2u6vX6/HCCy/EGWecsc9rZ555ZrzyyivR3d3dl7cOA0YUGLLmzp0bN998c6xcuTI6Ojri6KOPjoULF8aSJUti2bJlH7vbtm1b7N69OyZOnLjPax997I033uiz+4aB5N8UGNKOPfbYOPvss+Oiiy6K9vb2eOKJJ2Lp0qVxxBFHxOLFi/e72bVrV0REtLa27vPaiBEj9noPDDWiwJD14IMPxqJFi2LTpk0xefLkiIi48MILo16vxw033BCXXnrpfn+KaOTIkRERsXv37n1e++CDD/Z6Dww1/vqIIWv58uXR0dGRQfjIvHnzYufOndHZ2bnf3fjx46O1tTW2bt26z2sffWzSpEm/+RuGQUAUGLLefPPN6O3t3efjPT09ERGxZ8+e/e5qtVqceuqp8dxzz+3z2rPPPhtTpkyJUaNG/WZvFgYJUWDIOuGEE6KzszM2bdq018cfeOCBqNVqMX369IiIePXVV+Oll17a6z0XX3xxrF+/fq8wbNy4MVatWhULFizo+5uHAeJ/NDNkPf3003HuuedGe3t7LF68ONrb22PFihXx5JNPxpVXXhl33313RPzqR1fXrFkTv/5Hobu7Ozo6OqK7uzuuu+66aGlpidtuuy16e3tjw4YNMWHChIH6tKBPiQJD2rp16+LGG2+Mzs7OeOedd+K4446Lyy+/PK6//voYNuxXP2exvyhERLz22mtxzTXXxFNPPRX1ej1mz54dy5Yti6lTpw7EpwL9QhQASP5NAYAkCgAkUQAgiQIASRQASKIAQPrUB+KdV/O/OAEOZCvrj3ziezwpAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASMMG+gbgk9Ta2so3h0/ogzvZV9cXjize/Pja2/vgTgZWS1Nz8WbuS5+vdK3evzyseFNb01npWgcjTwoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEgOxKPfNJ90fKVd213vFm/+fsqjla5Vqlbh+6p61PvgTgZWT6N88/iJj1W61uq/O7R4893PX1C86d34cvFmKPCkAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJKekUknT6ScXb17+s+ZK1/rJlH+otCNi9a7yE0X/4pY/Lt5c943y36P5h7xdvImIOGfk+8WbP/nyZ4o3U//UKakAHOREAYAkCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgORCPeHvRrOLNHV/72+JNR2u9eMP/z+ruk4o3n3nsv4o3P/jD3y7ezD/xseJNVc27mvrtWgc6TwoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEgOxBtiGrNOK9488OffKd4cN2xE8cZxeP1vSfszxZvZ37yuePOFsc8Wb/pT71EfDPQtHDA8KQCQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIDkQb5CqtbVV2v3+PWuKN1UOt2tpai7e9DSKJ/1q3e6m4k1XT3vx5oeXX1C8iYiI/3ihePLa1z9XvHlx8e3Fm2pfD9W+J73l7enFm2lf/2XxZk/xYmjwpABAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACSnpA5StSMOq7Q7quU/izf1qBdvqpx4WuU6Vd2zY0rx5p/nnFy82bP1F8WbiPLTTiMiatOnFW+WfOnx4k1/fT380/+MKx9FxNM3lJ/8OrxrfaVrHYw8KQCQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIDkQb5Das+VnlXY33nVZ8eZ3vvrt4s242ojiTX+676/+oHgzduva4k2tra14s+OC6cWbiIjZX/v34s0fjflZpWuVOucnC4o3Y75S7YDE4VscbteXPCkAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACA1NRqNxqd543m18gOvOEB8tvyAthX/+MPiTT2qHYBWxYsfll/rsu9fU7xpzNxRvHn+s/cWb6p6oPvI4s1f/+ji4s1Rt5Qf1kf/W1l/5BPf40kBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgDJgXhUsvm+GcWbF+d8vw/uZGDVKnxftXZ3c6VrffmerxRvjrlrY/Gm9+13ijccGByIB0ARUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASMMG+gY4MJ30rfJD02pzht73IC1N5YfbXfX8ZZWudczfbCje9O7cWelaHLyG3p9SACoTBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJKekEo1ZpxVvNl/QVrypR714ExHx8z0fFm/amhrFmwnNrcWbnvLLxPdm/Kh8FBFLT/xi+ajzp5WuxcHLkwIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQBIFAJID8QapYUdOqrR77Y4xxZuVpy8v3oyrjSjefPG/5xZvIiK2ffOY4s2bp5ff37989dvFmyq/Dme19hRvIiK6jx9VvDm0s9KlOIh5UgAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgAkUQAgiQIASRQASKIAQHIg3iD11u+VHwIXEbF8+h3FmzG14cWbb73VUbx5a+mU4k1EROvq9cWbSavLr3PWlGuKN5vm31l+oYremtFUvDn04T64EYY0TwoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEgOxOsHjVmnFW+euOk7la5V5XC7b/zirOLNi3NGFW9at5cfbNefhm9rHuhb+D8d9nxjoG+Bg4AnBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJAfi9YOt1/cUb8bVRlS61qKu2cWbN+eWf2/Qu31H8WawO3ZWV/Gmpan8EL0e59oxiHlSACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAklNSCzW1thZvjhjdXbypR714ExHxb6tPKd4ct31t8abKr0Pvmb9VvKnq5S+Vf2n/6/HLijc9jZHFm6q/t9AfPCkAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACA5EK9QU3Nz8WbM8F19cCf7990FPyjefO9zs4s3oyt8TncffVfxpn+VH/JXxc/3fFhpN/KX1XZQwpMCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEASBQCSA/EKNQ1vKd78ePOxxZvVEw8t3kREnDPy/fLN1BXFm1qF7yfqxYvB7/TblhRvJq3aUelazZ3PV9pBCU8KACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABITY1Go/Fp3nhebUFf3wu/pv67HZV2L19afmDfqvNvK95MHjayeLN2d3PxJiLi8qcWVdqVOun28oPqen+6sQ/uBPrGyvojn/geTwoAJFEAIIkCAEkUAEiiAEASBQCSKACQRAGAJAoAJFEAIIkCAEkUAEiiAEBySirAQcIpqQAUEQUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAEgUAkigAkEQBgCQKACRRACCJAgBJFABIogBAamo0Go2BvgkABgdPCgAkUQAgiQIASRQASKIAQBIFAJIoAJBEAYAkCgCk/wXfp1c8UuZEugAAAABJRU5ErkJggg==\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "code", - "source": [ - "# 로지스틱 회귀 모델 생성\n", - "class LogisticRegressionModel(nn.Module):\n", - " def __init__(self, input_dim, output_dim):\n", - " super(LogisticRegressionModel, self).__init__()\n", - " # 선형 계층 설정\n", - " self.linear = nn.Linear(input_dim, output_dim)\n", - " # 로지스틱 함수는 손실 함수에 포함되어 있으므로 별도로 정의할 필요 없음\n", - "\n", - " def forward(self, x):\n", - " out = self.linear(x)\n", - " return out\n", - "\n", - "# 모델 인스턴스화\n", - "input_dim = 28 * 28 # 이미지 크기 (픽셀 * 픽셀)\n", - "output_dim = 10 # 출력 라벨 (0~9)\n", - "\n", - "# 로지스틱 회귀 모델 생성\n", - "model = LogisticRegressionModel(input_dim, output_dim)\n", - "\n", - "# 크로스 엔트로피 손실 함수\n", - "error = nn.CrossEntropyLoss()\n", - "\n", - "# SGD 옵티마이저 설정\n", - "learning_rate = 0.001\n", - "optimizer = torch.optim.SGD(model.parameters(), lr=learning_rate)\n", - "## 힌트: 모델 파라미터를 model.parameters()로 넘겨줍니다\n", - "## 학습률(learning rate)은 훈련 속도를 결정합니다\n", - "## 최적화 함수가 SGD이므로, torch.optim.SGD를 사용합니다" - ], - "metadata": { - "id": "S73aSJuz8CZq" - }, - "execution_count": 47, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "# 모델 학습\n", - "count = 0\n", - "loss_list = []\n", - "iteration_list = []\n", - "for epoch in range(num_epochs):\n", - " for i, (images, labels) in enumerate(train_loader):\n", - "\n", - " # 변수 정의\n", - " train = Variable(images.view(-1, 28 * 28))\n", - " labels = Variable(labels)\n", - "\n", - " # 경사 초기화\n", - " optimizer.zero_grad()\n", - "\n", - " # 순전파\n", - " outputs = model(train)\n", - "\n", - " # 소프트맥스 및 크로스 엔트로피 손실 계산\n", - " loss = error(outputs, labels)\n", - "\n", - " # 역전파를 통한 경사 계산\n", - " loss.backward()\n", - "\n", - " # 가중치 업데이트\n", - " optimizer.step()\n", - "\n", - " count += 1\n", - "\n", - " # 정확도 측정\n", - " if count % 50 == 0:\n", - " correct = 0\n", - " total = 0\n", - " # 테스트 데이터셋 예측 수행\n", - " for images, labels in test_loader:\n", - " test = Variable(images.view(-1, 28 * 28))\n", - "\n", - " # 순전파\n", - " outputs = model(test)\n", - "\n", - " # 최댓값을 기준으로 예측값 결정\n", - " predicted = torch.max(outputs.data, 1)[1]\n", - "\n", - " # 전체 라벨 개수\n", - " total += len(labels)\n", - "\n", - " # 맞춘 개수 계산\n", - " correct += (predicted == labels).sum()\n", - "\n", - " accuracy = 100 * correct / float(total)\n", - "\n", - " # 손실 및 반복 횟수 저장\n", - " loss_list.append(loss.data)\n", - " iteration_list.append(count)\n", - "\n", - " # 500번마다 손실 출력\n", - " if count % 500 == 0:\n", - " print('Iteration: {} Loss: {} Accuracy: {}%'.format(count, loss.data, accuracy))" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/" - }, - "id": "Oc4X8eZt8CXq", - "outputId": "8b13d5a7-5018-49e0-aa4e-9d28fd4e9553" - }, - "execution_count": 48, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Iteration: 500 Loss: 1.836110234260559 Accuracy: 64.6547622680664%\n", - "Iteration: 1000 Loss: 1.6273987293243408 Accuracy: 73.48809814453125%\n", - "Iteration: 1500 Loss: 1.2990115880966187 Accuracy: 77.14286041259766%\n", - "Iteration: 2000 Loss: 1.2118804454803467 Accuracy: 79.38095092773438%\n", - "Iteration: 2500 Loss: 1.042091727256775 Accuracy: 80.63095092773438%\n", - "Iteration: 3000 Loss: 0.9411596655845642 Accuracy: 81.41666412353516%\n", - "Iteration: 3500 Loss: 0.9019818902015686 Accuracy: 82.1547622680664%\n", - "Iteration: 4000 Loss: 0.7589358687400818 Accuracy: 82.6547622680664%\n", - "Iteration: 4500 Loss: 0.9695380926132202 Accuracy: 83.11904907226562%\n", - "Iteration: 5000 Loss: 0.8137776255607605 Accuracy: 83.69047546386719%\n", - "Iteration: 5500 Loss: 0.752896249294281 Accuracy: 84.05952453613281%\n", - "Iteration: 6000 Loss: 0.8774868249893188 Accuracy: 84.33333587646484%\n", - "Iteration: 6500 Loss: 0.6695204973220825 Accuracy: 84.61904907226562%\n", - "Iteration: 7000 Loss: 0.7110457420349121 Accuracy: 84.96428680419922%\n", - "Iteration: 7500 Loss: 0.6371461749076843 Accuracy: 85.08333587646484%\n", - "Iteration: 8000 Loss: 0.7425190806388855 Accuracy: 85.20237731933594%\n", - "Iteration: 8500 Loss: 0.5442853569984436 Accuracy: 85.28571319580078%\n", - "Iteration: 9000 Loss: 0.6621425151824951 Accuracy: 85.51190185546875%\n", - "Iteration: 9500 Loss: 0.530427098274231 Accuracy: 85.61904907226562%\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "# 시각화\n", - "plt.plot(iteration_list,loss_list)\n", - "plt.xlabel(\"Number of iteration\")\n", - "plt.ylabel(\"Loss\")\n", - "plt.title(\"Logistic Regression: Loss vs Number of iteration\")\n", - "plt.show()" - ], - "metadata": { - "colab": { - "base_uri": "https://localhost:8080/", - "height": 472 - }, - "id": "FctKP-1E8CVh", - "outputId": "bb7461d3-8bb4-4401-bbf4-c14a051dfcca" - }, - "execution_count": 49, - "outputs": [ - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAk0AAAHHCAYAAACiOWx7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAnLpJREFUeJzs3Xd8U+X+B/BPkjZJV9K9J3sPQZAlIJWKiOJA5KoMt4LKxXX5eUW9ekVxXBwIogJuxYWbIVP2RjYUKC3QvdKdtnl+fyTnNGnSNi1t0/F5v159aU9OTp6cri/f5/t8H4UQQoCIiIiIaqV09QCIiIiIWgMGTUREREROYNBERERE5AQGTUREREROYNBERERE5AQGTUREREROYNBERERE5AQGTUREREROYNBERERE5AQGTdToRo0ahVGjRjXa9WJjYzF9+vRGux4BCoUCL7zwgquHQa1IbGwsbrjhBlcPw2mvv/46OnToAJVKhX79+tV43vTp0xEbG9ts42oMjf07lpzHoKkNW7FiBRQKBfbu3evqodRp+/bteOGFF5CXl9ekrxMbGwuFQiF/eHl5YdCgQfj000+b9HWpdqNGjUKvXr1cPQyXk74v33zzTbvHWtPPs6utXbsWTz/9NIYNG4bly5fjlVdecfq5xcXFeOGFF7Bp06amG6ATjh07hhdeeAFJSUkuHQfZcnP1AKjtWbt2bb2fs337drz44ouYPn06fH19bR47efIklMrGi+/79euHJ554AgCQmpqKjz76CNOmTUNZWRnuv//+RnudlqykpARubvzxb6lef/11PPzww/D09HT1UFqlDRs2QKlU4uOPP4Zara713A8//BAmk0n+vLi4GC+++CIAuDSbc+zYMbz44osYNWqUXSasIb9jqXEw00SNTq1W1/mLqj40Gg3c3d0b7XoRERG46667cNddd+Gpp57C1q1b4e3tjf/973+N9hrOKioqavbXBACtVsugqYXq168f0tPTsWTJElcPpdlVVFTAaDRe9nUyMjLg4eHh1O8hd3d3aDSay37NujTmz3pj/44l5zFoIhw4cADjxo2DTqeDt7c3xowZg507d9qd9/fff2PkyJHw8PBAZGQkXn75ZSxfvhwKhcImhexovv3dd99Fz5494enpCT8/PwwcOBBffvklAOCFF17AU089BQCIi4uTpyikazqqacrLy8M/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vP7665GWlmZTb1dRUYF3330X3t7eGDlypFNjo7ox09QOLFu2zGFNxeOPP46XX35Z7lnzyCOPwM3NDR988AHKysqwYMEC+dynn34an3/+Oa699lo8+uijcsuB6Oho5OTk1PqvorFjxyI0NBTDhg1DSEgIjh8/jvfeew/jx4+Hj48PAGDAgAEAgGeffRZ33HEH3N3dMWHCBPkXh7WnnnoK3333HSZNmoR77rkHAwYMQE5ODn7++WcsWbIEffv2rfc9GjduHHr16oW33noLM2fOxMiRI/Hggw9i/vz5OHjwIMaOHQt3d3ecPn0a3377Ld5++23cdtttCAkJweOPP44333wTN954I6677jocOnQIf/zxBwIDA53616JOp8PixYtx991344orrsAdd9yBoKAgJCcn47fffsOwYcPw3nvv4dSpUxgzZgxuv/129OjRA25ubvjxxx+Rnp4uL3f/5JNP8P777+Pmm29Gx44dUVBQgA8//BA6nU7+o+OIs98H9VHflgOZmZlyJshaXFwc7rzzTsydOxcvvvgirrvuOtx44404efIk3n//fVx55ZW46667AJg7Qc+aNQuTJk1Cly5dUFFRgc8++wwqlQq33norAOA///kPtmzZgvHjxyMmJgYZGRl4//33ERkZieHDh9c5zttvvx1PPvkknnzySfj7+9tlHe677z7k5OTgmmuuQWRkJM6fP493330X/fr1q3HJeG1GjhyJkSNH2hXzAsA999yDt956CwkJCbj33nuRkZGBJUuWoGfPnnbF+42hS5cuuPfee7Fnzx6EhIRg2bJlSE9Px/Lly+VznnrqKfz888+44YYbMH36dAwYMABFRUU4fPgwvvvuOyQlJdW7LQgA9O3bF9OmTcPSpUuRl5eHkSNHYvfu3fjkk08wceJEhz20GsLDwwM9evTAN998gy5dusDf3x+9evVCr169sGjRIgwfPhy9e/fG/fffjw4dOiA9PR07duzAhQsXcOjQoTqvf8MNN+Czzz6DXq9Hjx49sGPHDvz5558ICAiwOa9fv35QqVR47bXXkJ+fD41Gg2uuuQbBwcF213zggQfwwQcfYPr06di3bx9iY2Px3XffYdu2bVi4cKH8e5YagWsW7VFzkJa91vSRkpIihBBi//79IiEhQXh7ewtPT08xevRosX37drvrHThwQIwYMUJoNBoRGRkp5s+f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hIeHQ6FQYNWqVbWeP336dCgUCruPnj17yue88MILdo9369atid9Jy6NQKOT957IKy/DGmpNYse2ci0dFRETUerk0aCoqKkLfvn2xaNEip85/++23kZqaKn+kpKTA398fkyZNsjmvZ8+eNudt3bq1KYbf4kltB1YduIj3NibixV+PoaiswsWjIiIiap1cuvfcuHHjMG7cOKfP1+v10Ov18uerVq1Cbm4uZsyYYXOem5sbQkNDG22crZVU1/TpjvMAACGAk+kFuCLaz5XDIiIiapVadU3Txx9/jPj4eMTExNgcP336NMLDw9GhQwfceeedSE5OdtEIXUtaQVdWYZKPHU81uGo4RERErZpLM02X49KlS/jjjz/w5Zdf2hwfPHgwVqxYga5duyI1NRUvvvgiRowYgSNHjsDHx8fhtcrKylBWViZ/bjC0jcBCyjQBgEJhzjSdSC1w4YiIiIhar1abafrkk0/g6+uLiRMn2hwfN24cJk2ahD59+iAhIQG///478vLysHLlyhqvNX/+fHnqT6/XIyoqqolH3zyk/ecAYNqQWADAibS2ERASERE1t1YZNAkhsGzZMtx9991Qq9W1nuvr64suXbogMTGxxnPmzp2L/Px8+SMlJaWxh+wSoXoPAED/aF9MGRQNwJxpEkK4clhEREStUqucntu8eTMSExNx77331nluYWEhzpw5g7vvvrvGczQaDTQaTWMOsUW4pX8EcouMuLl/BEL1WrirFCgoq8CF3BJE+Xu6enhEREStikszTYWFhTh48CAOHjwIADh37hwOHjwoF27PnTsXU6dOtXvexx9/jMGDB6NXr152jz355JPYvHkzkpKSsH37dtx8881QqVSYMmVKk76XlshL44bHxnRGlL8n3FVKdAo213SxGJyIiKj+XBo07d27F/3790f//v0BAHPmzEH//v0xb948AEBqaqrdyrf8/Hx8//33NWaZLly4gClTpqBr1664/fbbERAQgJ07dyIoKKhp30wr0D3MHDSdSGMxOBERUX25dHpu1KhRtdbXrFixwu6YXq9HcXFxjc/5+uuvG2NobVL3UB2Ai8w0ERERNUCrLASnhukepgPATBMREVFDMGhqR7pZpueSsotQbOR2KkRERPXBoKkdCfTWINBbY95OhdkmIiKiemHQ1M70DDdP0R1KyXPtQIiIiFoZBk3tzKA4fwDA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hlJZlRDLzc3F/fffj7S0NPj5+WHAgAHYvn07evToIZ/z9NNPo6ioCA888ADy8vIwfPhwrF692q4JJhEREZGzFEII4epBtDQGgwF6vR75+fnQ6XSuHg4RERE5oan/fre61XNERERErsCgiYiIiMgJDJqIiIiInMCgiYiIiMgJDJqIiIiInMCgiYiIiMgJDJqIiIiInMCgiYiIiMgJDJqIiIiInMCgiYiIiMgJLt97riWSdpYxGAwuHgkRERE5S/q73VQ7xDFocqCgoAAAEBUV5eKREBERUX0VFBRAr9c3+nW5Ya8DJpMJly5dgo+PDxQKxWVfz2AwICoqCikpKdwAuBnxvjc/3nPX4H1vfrznrlHXfRdCoKCgAOHh4VAqG78CiZkmB5RKJSIjIxv9ujqdjj9cLsD73vx4z12D97358Z67Rm33vSkyTBIWghMRERE5gUETERERkRMYNDUDjUaD559/HhqNxtVDaVd435sf77lr8L43P95z13D1fWchOBEREZETmGkiIiIicgKDJiIiIiInMGgiIiIicgKDJiIiIiInMGhqBosWLUJsbCy0Wi0GDx6M3bt3u3pIrcL8+fNx5ZVXwsfHB8HBwZg4cSJOnjxpc05paSlmzpyJgIAAeHt749Zbb0V6errNOcnJyRg/fjw8PT0RHByMp556ChUVFTbnbNq0CVdccQU0Gg06deqEFStWNPXbaxVeffVVKBQKzJ49Wz7Ge940Ll68iLvuugsBAQHw8PBA7969sXfvXvlxIQTmzZuHsLAweHh4ID4+HqdPn7a5Rk5ODu68807odDr4+vri3nvvRWFhoc05f//9N0aMGAGtVouoqCgsWLCgWd5fS1NZWYnnnnsOcXFx8PDwQMeOHfHSSy/Z7FnGe375tmzZggkTJiA8PBwKhQKrVq2yebw57/G3336Lbt26QavVonfv3vj999/r/4YENamvv/5aqNVqsWzZMnH06FFx//33C19fX5Genu7qobV4CQkJYvny5eLIkSPi4MGD4vrrrxfR0dGisLBQPuehhx4SUVFRYv369WLv3r3iqquuEkOHDpUfr6ioEL169RLx8fHiwIED4vfffxeBgYFi7ty58jlnz54Vnp6eYs6cOeLYsWPi3XffFSqVSqxevbpZ329Ls3v3bhEbGyv69OkjHn/8cfk473njy8nJETExMWL69Oli165d4uzZs2LNmjUiMTFRPufVV18Ver1erFq1Shw6dEjceOONIi4uTpSUlMjnXHfddaJv375i586d4q+//hKdOnUSU6ZMkR/Pz88XISEh4s477xRHjhwRX331lfDw8BAffPBBs77fluC///2vCAgIEL/++qs4d+6c+Pbbb4W3t7d4++235XN4zy/f77//Lp599lnxww8/CADixx9/tHm8ue7xtm3bhEqlEgsWLBDHjh0T//73v4W7u7s4fPhwvd4Pg6YmNmjQIDFz5kz588rKShEeHi7mz5/vwlG1ThkZGQKA2Lx5sxBCiLy8POHu7i6+/fZb+Zzjx48LAGLHjh1CCPMPrFKpFGlpafI5ixcvFjqdTpSVlQkhhHj66adFz549bV5r8uTJIiEhoanfUotVUFAgOnfuLNatWydGjhwpB028503jmWeeEcOHD6/xcZPJJEJDQ8Xrr78uH8vLyxMajUZ89dVXQgghjh07JgCIPXv2yOf88ccfQqFQiIsXLwohhHj//feFn5+f/HWQXrtr166N/ZZavPHjx4t77rnH5tgtt9wi7rzzTiEE73lTqB40Nec9vv3228X48eNtxjN48GDx4IMP1us9cHquCRmNRuzbtw/x8fHyMaVSifj4eOzYscOFI2ud8vPzAQD+/v4AgH379qG8vNzm/nbr1g3R0dHy/d2xYwd69+6NkJAQ+ZyEhAQYDAYcPXpUPsf6GtI57flrNHPmTIwfP97uvvCeN42ff/4ZAwcOxKRJkxAcHIz+/fvjww8/lB8/d+4c0tLSbO6ZXq/H4MGDbe67r68vBg4cKJ8THx8PpVKJXbt2yedcffXVUKvV8jkJCQk4efIkcnNzm/pttihDhw7F+vXrcerUKQDAoUOHsHXrVowbNw4A73lzaM573Fi/cxg0NaGsrCxUVlba/PEAgJCQEKSlpbloVK2TyWTC7NmzMWzYMPTq1QsAkJaWBrVaDV9fX5tzre9vWlqaw/svPVbbOQaDASUlJU3xdlq0r7/+Gvv378f8+fPtHuM9bxpnz57F4sWL0blzZ6xZswYPP/wwHnvsMXzyyScAqu5bbb9L0tLSEBwcbPO4m5sb/P396/W1aS/+9a9/4Y477kC3bt3g7u6O/v37Y/bs2bjzzjsB8J43h+a8xzWdU9+vgVu9ziZykZkzZ+LIkSPYunWrq4fSpqWkpODxxx/HunXroNVqXT2cdsNkMmHgwIF45ZVXAAD9+/fHkSNHsGTJEkybNs3Fo2ubVq5ciS+++AJffvklevbsiYMHD2L27NkIDw/nPacaMdPUhAIDA6FSqexWFqWnpyM0NNRFo2p9Zs2ahV9//RUbN25EZGSkfDw0NBRGoxF5eXk251vf39DQUIf3X3qstnN0Oh08PDwa++20aPv27UNGRgauuOIKuLm5wc3NDZs3b8Y777wDNzc3hISE8J43gbCwMPTo0cPmWPfu3ZGcnAyg6r7V9rskNDQUGRkZNo9XVFQgJyenXl+b9uKpp56Ss029e/fG3XffjX/+859yhpX3vOk15z2u6Zz6fg0YNDUhtVqNAQMGYP369fIxk8mE9evXY8iQIS4cWesghMCsWbPw448/YsOGDYiLi7N5fMCAAXB3d7e5vydPnkRycrJ8f4cMGYLDhw/b/NCtW7cOOp1O/iM1ZMgQm2tI57THr9GYMWNw+PBhHDx4UP4YOHAg7rzzTvn/ec8b37Bhw+zaaZw6dQoxMTEAgLi4OISGhtrcM4PBgF27dtnc97y8POzbt08+Z8OGDTCZTBg8eLB8zpYtW1BeXi6fs27dOnTt2hV+fn5N9v5aouLiYiiVtn8CVSoVTCYTAN7z5tCc97jRfufUq2yc6u3rr78WGo1GrFixQhw7dkw88MADwtfX12ZlETn28MMPC71eLzZt2iRSU1Plj+LiYvmchx56SERHR4sNGzaIvXv3iiFDhoghQ4bIj0vL38eOHSsOHjwoVq9eLYKCghwuf3/qqafE8ePHxaJFi9r18vfqrFfPCcF73hR2794t3NzcxH//+19x+vRp8cUXXwhPT0/x+eefy+e8+uqrwtfXV/z000/i77//FjfddJPDpdn9+/cXu3btElu3bhWdO3e2WZqdl5cnQkJCxN133y2OHDkivv76a+Hp6dlulr9bmzZtmoiIiJBbDvzwww8iMDBQPP300/I5vOeXr6CgQBw4cEAcOHBAABBvvfWWOHDggDh//rwQovnu8bZt24Sbm5t44403xPHjx8Xzzz/PlgMt1bvvviuio6OFWq0WgwYNEjt37nT1kFoFAA4/li9fLp9TUlIiHnnkEeHn5yc8PT3FzTffLFJTU22uk5SUJMaNGyc8PDxEYGCgeOKJJ0R5ebnNORs3bhT9+vUTarVadOjQweY12rvqQRPvedP45ZdfRK9evYRGoxHdunUTS5cutXncZDKJ5557ToSEhAiNRiPGjBkjTp48aXNOdna2mDJlivD29hY6nU7MmDFDFBQU2Jxz6NAhMXz4cKHRaERERIR49dVXm/y9tUQGg0E8/vjjIjo6Wmi1WtGhQwfx7LPP2ixb5z2/fBs3bnT4e3zatGlCiOa9xytXrhRdunQRarVa9OzZU/z222/1fj8KIazanxIRERGRQ6xpIiIiInICgyYiIiIiJzBoIiIiInICgyYiIiIiJzBoIiIiInICgyYiIiIiJzBoIiIiInICgyYiahZJSUlQKBQ4ePCgq4ciO3HiBK666ipotVr069fP4TmjRo3C7Nmzm3VczlAoFFi1apWrh0HUrjBoImonpk+fDoVCgVdffdXm+Kr/b+9OQ6Ls2jiA/2c0l1xyxRRrhkpF1MY1MnPJwlFIE6wkxDQDjTSXTCzC1JHMKc2ljKgPjR9CJdInIVKIRFNbTFxxSQazRa1MI0aiGj3vh3jup3Esp+x9el+8fp/mnHPf51w3B4aLc5+Z89df4PF4fyiqPys7OxsGBgYYGhpSO5fqbzU1NcjLy+PKQqEQJSUl/1KEQE5OzoIJ3fj4OEJCQv61OAghlDQRsqzo6elBKpVienr6T4fy23z+/PmX75XL5di6dSsEAgHMzc0XvMbMzAxGRka/PMb3LCVu4Oup7bq6ur8pGkKIJihpImQZ2bFjB1avXo0zZ85895qFVjZKSkogFAq5cmxsLMLDw5Gfnw8rKyuYmJhAIpFAqVQiIyMDZmZmsLW1xbVr19T6HxwcxJYtW6CnpwdnZ2c0NTWptPf19SEkJASGhoawsrJCdHQ0JicnufaAgAAkJSUhNTUVFhYWEIvFCz7H3NwcJBIJbG1toaurC1dXV9TX13PtPB4PHR0dkEgk4PF4yMnJWbCfb1/PBQQEYHR0FGlpaeDxeCordC0tLfD19YW+vj7WrFmD5ORkzMzMcO1CoRB5eXnYv38/jI2NER8fDwDIzMyEvb09Vq5ciXXr1iErK4s7rV0mkyE3Nxfd3d3ceDKZjIv/29dzvb29CAwMhL6+PszNzREfHw+FQqE2Z4WFhbC2toa5uTkSExNVToYnhPwYJU2ELCNaWlrIz8/HhQsX8PLlyyX1de/ePYyNjaG5uRnnz59HdnY2du7cCVNTUzx69AiHDh1CQkKC2jgZGRlIT09HZ2cnvL29ERoainfv3gEA3r9/j8DAQLi5ueHJkyeor6/H69evsXfvXpU+KioqoKOjg9bWVly+fHnB+EpLS1FUVITCwkL09PRALBYjLCwMw8PDAL6+3nJyckJ6ejrGx8dx7NixRZ+5pqYGtra2kEgkGB8fx/j4OICvK1bBwcGIiIhAT08Pqqur0dLSgqSkJJX7CwsLIRKJ0NnZiaysLACAkZERZDIZ+vv7UVpaiqtXr6K4uBgAEBkZifT0dDg5OXHjRUZGqsU1MzMDsVgMU1NTtLe348aNG7h7967a+I2NjZDL5WhsbERFRQVkMhmXhBFCNPDTR/wSQv4vxcTEsF27djHGGNu8eTOLi4tjjDFWW1vLvv0qyM7OZiKRSOXe4uJiJhAIVPoSCARsdnaWq3NwcGC+vr5cWalUMgMDA1ZZWckYY2xkZIQBUDl9/MuXL8zW1pZJpVLGGGN5eXksKChIZewXL14wANzJ5/7+/szNzW3R57WxsWGnT59WqfPy8mKHDx/myiKRiGVnZ/+wH39/f5aSksKVBQIBKy4uVrnm4MGDLD4+XqXu/v37jM/ns48fP3L3hYeHLxr3uXPnmIeHB1deaD4YYwwAq62tZYwxduXKFWZqasoUCgXXfvv2bcbn89nExARj7J85UyqV3DV79uxhkZGRi8ZECPlK+8+mbISQP0EqlSIwMFCj1ZXvcXJyAp//z2K1lZUVnJ2dubKWlhbMzc3x5s0blfu8vb25z9ra2vD09MTAwAAAoLu7G42NjTA0NFQbTy6Xw97eHgDg4eHxw9g+fPiAsbEx+Pj4qNT7+Pigu7tbwyfUXHd3N3p6enD9+nWujjGGubk5jIyMwNHREQDg6empdm91dTXKysogl8uhUCigVCphbGz8U+MPDAxAJBLBwMCAq/Px8cHc3ByGhoZgZWUF4OucaWlpcddYW1ujt7f3p8YiZDmjpImQZcjPzw9isRgnTpxAbGysShufzwdjTKVuoX0vK1asUCnzeLwF6+bm5jSOS6FQIDQ0FFKpVK3N2tqa+/xtcvC/QKFQICEhAcnJyWpta9eu5T7Pj/vBgweIiopCbm4uxGIxVq1ahaqqKhQVFf1X4lzq/BCy3FHSRMgyVVBQAFdXVzg4OKjUW1paYmJiAowxbqPz7/xvpYcPH8LPzw8AoFQq0dHRwe29cXd3x82bNyEUCqGt/etfT8bGxrCxsUFrayv8/f25+tbWVmzatGlJ8evo6GB2dlalzt3dHf39/diwYcNP9dXW1gaBQICTJ09ydaOjo4uON5+joyNkMhlmZma4xKy1tRV8Pl9tfgkhv442ghOyTLm4uCAqKgplZWUq9QEBAXj79i3Onj0LuVyO8vJy3Llz57eNW15ejtraWgwODiIxMRHT09OIi4sDACQmJmJqagr79u1De3s75HI5GhoacODAgUUTh/kyMjIglUpRXV2NoaEhHD9+HF1dXUhJSVlS/EKhEM3NzXj16hX3q77MzEy0tbUhKSkJXV1dGB4exq1bt9Q2Ys9nZ2eH58+fo6qqCnK5HGVlZaitrVUbb2RkBF1dXZicnMSnT5/U+omKioKenh5iYmLQ19eHxsZGHDlyBNHR0dyrOULI0lHSRMgyJpFI1F7PODo64tKlSygvL4dIJMLjx4+XtPdpvoKCAhQUFEAkEqGlpQV1dXWwsLAAAG51aHZ2FkFBQXBxcUFqaipMTExU9k9pIjk5GUePHkV6ejpcXFxQX1+Puro62NnZLSl+iUSCZ8+eYf369bC0tAQAbNy4EU1NTXj69Cl8fX3h5uaGU6dOwcbG5od9hYWFIS0tDUlJSXB1dUVbWxv3q7q/RUREIDg4GNu2bYOlpSUqKyvV+lm5ciUaGhowNTUFLy8v7N69G9u3b8fFixeX9KyEEFU8Nn/zAiGEEEIIUUMrTYQQQgghGqCkiRBCCCFEA5Q0EUIIIYRogJImQgghhBANUNJECCGEEKIBSpoIIYQQQjRASRMhhBBCiAYoaSKEEEII0QAlTYQQQgghGqCkiRBCCCFEA5Q0EUIIIYRogJImQgghhBAN/AcrNg3sTFXzEQAAAABJRU5ErkJggg==\n" - }, - "metadata": {} - } - ] - } - ] -} \ No newline at end of file diff --git "a/Week1_\354\230\210\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.ipynb" "b/Week1_\354\230\210\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.ipynb" deleted file mode 100644 index 93c9aa9..0000000 --- "a/Week1_\354\230\210\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.ipynb" +++ /dev/null @@ -1,815 +0,0 @@ -{ - "nbformat": 4, - "nbformat_minor": 0, - "metadata": { - "colab": { - "provenance": [], - "gpuType": "T4" - }, - "kernelspec": { - "name": "python3", - "display_name": "Python 3" - }, - "language_info": { - "name": "python" - }, - "accelerator": "GPU" - }, - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "id": "yREXYLFLTh-r", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "f2c883a8-93b2-4e00-dfdc-b8c2a83d39c9" - }, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "PyTorch Version: 2.11.0+cu128\n", - "CUDA Available: True\n", - "Device Name: Tesla T4\n" - ] - } - ], - "source": [ - "import torch\n", - "\n", - "print(f\"PyTorch Version: {torch.__version__}\")\n", - "print(f\"CUDA Available: {torch.cuda.is_available()}\")\n", - "\n", - "if torch.cuda.is_available():\n", - " print(f\"Device Name: {torch.cuda.get_device_name(0)}\")" - ] - }, - { - "cell_type": "code", - "source": [ - "import torch\n", - "import torch.nn as nn\n", - "import numpy as np\n", - "import pandas as pd\n", - "import matplotlib.pyplot as plt\n", - "import seaborn as sns\n", - "%matplotlib inline" - ], - "metadata": { - "id": "b_E-cMZInOHA" - }, - "execution_count": 2, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "id": "5add2ae5", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "afb123e6-877e-4bf7-8614-d0de22cdb1ba" - }, - "source": [ - "from google.colab import drive\n", - "drive.mount('/content/drive')" - ], - "execution_count": 3, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Mounted at /content/drive\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "dataset = pd.read_csv('/content/drive/MyDrive/car_evaluation.csv')\n", - "dataset.head()" - ], - "metadata": { - "id": "F84iG-_qn5Jf", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 206 - }, - "outputId": "84ad17cc-cfc3-4c0f-ca97-44e58431cf5b" - }, - "execution_count": 4, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - " price maint doors persons lug_capacity safety output\n", - "0 vhigh vhigh 2 2 small low unacc\n", - "1 vhigh vhigh 2 2 small med unacc\n", - "2 vhigh vhigh 2 2 small high unacc\n", - "3 vhigh vhigh 2 2 med low unacc\n", - "4 vhigh vhigh 2 2 med med unacc" - ], - "text/html": [ - "\n", - "
\n", - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
pricemaintdoorspersonslug_capacitysafetyoutput
0vhighvhigh22smalllowunacc
1vhighvhigh22smallmedunacc
2vhighvhigh22smallhighunacc
3vhighvhigh22medlowunacc
4vhighvhigh22medmedunacc
\n", - "
\n", - "
\n", - "\n", - "
\n", - " \n", - "\n", - " \n", - "\n", - " \n", - "
\n", - "\n", - "\n", - "
\n", - "
\n" - ], - "application/vnd.google.colaboratory.intrinsic+json": { - "type": "dataframe", - "variable_name": "dataset", - "summary": "{\n \"name\": \"dataset\",\n \"rows\": 1728,\n \"fields\": [\n {\n \"column\": \"price\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"high\",\n \"low\",\n \"vhigh\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"maint\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"high\",\n \"low\",\n \"vhigh\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"doors\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"3\",\n \"5more\",\n \"2\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"persons\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"2\",\n \"4\",\n \"more\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"lug_capacity\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"small\",\n \"med\",\n \"big\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"safety\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 3,\n \"samples\": [\n \"low\",\n \"med\",\n \"high\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n },\n {\n \"column\": \"output\",\n \"properties\": {\n \"dtype\": \"category\",\n \"num_unique_values\": 4,\n \"samples\": [\n \"acc\",\n \"good\",\n \"unacc\"\n ],\n \"semantic_type\": \"\",\n \"description\": \"\"\n }\n }\n ]\n}" - } - }, - "metadata": {}, - "execution_count": 4 - } - ] - }, - { - "cell_type": "code", - "source": [ - "fig_size = plt.rcParams[\"figure.figsize\"]\n", - "fig_size[0] = 8\n", - "fig_size[1] = 6\n", - "plt.rcParams[\"figure.figsize\"] = fig_size\n", - "dataset.output.value_counts().plot(kind='pie', autopct='%0.05f%%', colors=['lightblue', 'lightgreen', 'orange', 'pink'], explode=(0.05, 0.05, 0.05, 0.05))" - ], - "metadata": { - "id": "1lc9DD2KpXxN", - "colab": { - "base_uri": "https://localhost:8080/", - "height": 517 - }, - "outputId": "4c91f36b-ee5d-4065-90a9-c64cc9dd52e4" - }, - "execution_count": 5, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "" - ] - }, - "metadata": {}, - "execution_count": 5 - }, - { - "output_type": "display_data", - "data": { - "text/plain": [ - "
" - ], - "image/png": "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3vj4sGHDWLRoEWVlZc1eP2zYMD799NP2Klek1RQYRESiKDMzk+zsbJ566ilWr17NZ599xtVXX934+FlnnUV+fj4nn3wyc+fOZe3atbzxxhvMmzcPgFtvvZWXX36ZW2+9lWXLlrFkyRLuvfdeoz4ckUYKDCIiUWQ2m3nllVdYsGABQ4cO5fe//z33339/4+N2u53Zs2eTm5vLcccdx0EHHcQ999yDxWIBYPLkybz22mu88847jBgxgilTpvDtt98a9eGINNIuCREREWmRRhhERESkRQoMIiIi0iIFBhEREWmRAoOIiIi0SIFBREREWqTAICIiIi1SYBAREZEWKTCIiIhIixQYREREpEUKDCIiItIiBQYRERFpkQKDiIiItEiBQURERFqkwCAiIiItUmAQERGRFikwiIiISIsUGERERKRFCgwiIiLSIgUGERERaZECg4iIiLRIgUFERERapMAgIiIiLVJgEBERkRYpMIiIiEiLFBhERESkRQoMIiIi0iIFBhEREWmRAoOIiIi0SIFBREREWqTAICIiIi1SYBAREZEWKTCIiIhIixQYREREpEUKDCIiItIiBQYRERFpkQKDiIiItEiBQURERFqkwCAiIiItUmAQERGRFv0//gQjxv718/0AAAAASUVORK5CYII=\n" - }, - "metadata": {} - } - ] - }, - { - "cell_type": "code", - "source": [ - "categorical_columns = ['price', 'maint', 'doors', 'persons', 'lug_capacity', 'safety']\n", - "\n", - "for category in categorical_columns:\n", - " dataset [category] = dataset [category].astype('category')\n", - "\n", - "price = dataset['price'].cat.codes.values\n", - "maint = dataset['maint'].cat.codes.values\n", - "doors = dataset['doors'].cat.codes.values\n", - "persons = dataset['persons'].cat.codes.values\n", - "lug_capacity = dataset['lug_capacity'].cat.codes.values\n", - "safety = dataset['safety'].cat.codes.values\n", - "\n", - "categorical_data = np.stack([price, maint, doors, persons, lug_capacity, safety], 1)\n", - "categorical_data[10]" - ], - "metadata": { - "id": "XXwq-VfepuHq", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "14a59612-3f78-4c96-9248-1e7182dd971a" - }, - "execution_count": 6, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "array([3, 3, 0, 1, 2, 2], dtype=int8)" - ] - }, - "metadata": {}, - "execution_count": 6 - } - ] - }, - { - "cell_type": "code", - "source": [ - "categorical_data = torch.tensor(categorical_data, dtype=torch.int64)\n", - "categorical_data[:10]" - ], - "metadata": { - "id": "s8I6mL8kqvwk", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "b1a70882-a927-4211-fa3b-3eec57614f1c" - }, - "execution_count": 7, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "tensor([[3, 3, 0, 0, 2, 1],\n", - " [3, 3, 0, 0, 2, 2],\n", - " [3, 3, 0, 0, 2, 0],\n", - " [3, 3, 0, 0, 1, 1],\n", - " [3, 3, 0, 0, 1, 2],\n", - " [3, 3, 0, 0, 1, 0],\n", - " [3, 3, 0, 0, 0, 1],\n", - " [3, 3, 0, 0, 0, 2],\n", - " [3, 3, 0, 0, 0, 0],\n", - " [3, 3, 0, 1, 2, 1]])" - ] - }, - "metadata": {}, - "execution_count": 7 - } - ] - }, - { - "cell_type": "code", - "source": [ - "outputs = pd.get_dummies(dataset.output)\n", - "outputs = torch.tensor(outputs.values).long()\n", - "outputs = torch.argmax(outputs, dim=1)\n", - "\n", - "print(categorical_data.shape)\n", - "print(outputs.shape)" - ], - "metadata": { - "id": "JIwlI73vrXqV", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "0e080201-b15d-4156-86ac-ebefc514f6ec" - }, - "execution_count": 17, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "torch.Size([1728, 6])\n", - "torch.Size([1728])\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "categorical_column_sizes = [len(dataset[column].cat.categories) for column in categorical_columns]\n", - "categorical_embedding_sizes = [(col_size, min(50, (col_size+1)//2)) for col_size in categorical_column_sizes]\n", - "\n", - "print(categorical_embedding_sizes)" - ], - "metadata": { - "id": "Ibq3E1worh0B", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "b112a0c1-d794-4225-fe9e-f8c871d2c27c" - }, - "execution_count": 9, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[(4, 2), (4, 2), (4, 2), (3, 2), (3, 2), (3, 2)]\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "total_records = 1728\n", - "train_records = 1383\n", - "test_records = total_records - train_records\n", - "\n", - "categorical_train_data = categorical_data[:train_records]\n", - "categorical_test_data = categorical_data[train_records:total_records]\n", - "train_outputs = outputs[:train_records]\n", - "test_outputs = outputs[train_records:total_records]" - ], - "metadata": { - "id": "eWQmSt-Pr6Zb" - }, - "execution_count": 22, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "print(len(categorical_train_data))\n", - "print(len(train_outputs))\n", - "print(len(categorical_test_data))\n", - "print(len(test_outputs))" - ], - "metadata": { - "id": "YTB1ryM6sAVR", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "addd9702-67b2-4c0a-84cd-f10504c2619f" - }, - "execution_count": 23, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "1383\n", - "1383\n", - "345\n", - "345\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "class Model(nn.Module):\n", - " def __init__(self, embedding_size, output_size, layers, p=0.4):\n", - " super().__init__()\n", - " self.all_embeddings = nn.ModuleList([nn.Embedding(ni, nf) for ni, nf in embedding_size])\n", - " self.embedding_dropout = nn.Dropout(p)\n", - "\n", - " all_layers = [ ]\n", - " num_categorical_cols = sum((nf for ni, nf in embedding_size))\n", - " input_size = num_categorical_cols\n", - "\n", - "\n", - " for i in layers:\n", - " all_layers.append(nn.Linear(input_size, i))\n", - " all_layers.append(nn.ReLU(inplace=True))\n", - " all_layers.append(nn.BatchNorm1d(i))\n", - " all_layers.append(nn.Dropout(p))\n", - " input_size = i\n", - "\n", - " all_layers.append(nn.Linear(layers[-1], output_size))\n", - " self.layers = nn.Sequential(*all_layers)\n", - "\n", - " def forward(self, x_categorical):\n", - " embeddings = []\n", - " for i,e in enumerate(self.all_embeddings):\n", - " embeddings.append(e(x_categorical[:,i].to(e.weight.device)))\n", - " x = torch.cat(embeddings, 1)\n", - " x = self.embedding_dropout(x)\n", - " x = self.layers(x) #\n", - " return x" - ], - "metadata": { - "id": "hWoEIznWsCuc" - }, - "execution_count": 39, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "model = Model(categorical_embedding_sizes, 4, [200,100,50], p=0.4)\n", - "model.to(device)\n", - "print(model)" - ], - "metadata": { - "id": "_5YOhUngslx4", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "f44eb53e-474f-4321-dd64-f4023810721a" - }, - "execution_count": 40, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Model(\n", - " (all_embeddings): ModuleList(\n", - " (0-2): 3 x Embedding(4, 2)\n", - " (3-5): 3 x Embedding(3, 2)\n", - " )\n", - " (embedding_dropout): Dropout(p=0.4, inplace=False)\n", - " (layers): Sequential(\n", - " (0): Linear(in_features=12, out_features=200, bias=True)\n", - " (1): ReLU(inplace=True)\n", - " (2): BatchNorm1d(200, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (3): Dropout(p=0.4, inplace=False)\n", - " (4): Linear(in_features=200, out_features=100, bias=True)\n", - " (5): ReLU(inplace=True)\n", - " (6): BatchNorm1d(100, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (7): Dropout(p=0.4, inplace=False)\n", - " (8): Linear(in_features=100, out_features=50, bias=True)\n", - " (9): ReLU(inplace=True)\n", - " (10): BatchNorm1d(50, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n", - " (11): Dropout(p=0.4, inplace=False)\n", - " (12): Linear(in_features=50, out_features=4, bias=True)\n", - " )\n", - ")\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "loss_function = nn.CrossEntropyLoss()\n", - "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)" - ], - "metadata": { - "id": "v00aoa19s2Lk" - }, - "execution_count": 42, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "if torch.cuda.is_available():\n", - " device = torch.device('cuda')\n", - "else:\n", - " device = torch.device('cpu')" - ], - "metadata": { - "id": "lY_VdmHftIwT" - }, - "execution_count": 43, - "outputs": [] - }, - { - "cell_type": "code", - "source": [ - "epochs = 500\n", - "aggregated_losses = []\n", - "\n", - "categorical_train_data = categorical_train_data.to(device=device, dtype=torch.int64)\n", - "train_outputs = train_outputs.to(device=device, dtype=torch.int64)\n", - "\n", - "for i in range(epochs):\n", - " y_pred = model(categorical_train_data)\n", - " single_loss = loss_function(y_pred, train_outputs)\n", - " aggregated_losses.append(single_loss)\n", - "\n", - " if (i + 1) % 25 == 0:\n", - " print(f'epoch: {i + 1:3} loss: {single_loss.item():10.8f}')\n", - "\n", - " optimizer.zero_grad()\n", - " single_loss.backward()\n", - " optimizer.step()\n", - "print(f'epoch: {epochs:3} loss:{single_loss.item():10.10f}')" - ], - "metadata": { - "id": "54-0L9lptMaY", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "0b1608ec-8c04-4c24-f559-98aabb9b199a" - }, - "execution_count": 44, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "epoch: 25 loss: 1.14448082\n", - "epoch: 50 loss: 1.04919159\n", - "epoch: 75 loss: 0.90600532\n", - "epoch: 100 loss: 0.83328182\n", - "epoch: 125 loss: 0.76812547\n", - "epoch: 150 loss: 0.62757272\n", - "epoch: 175 loss: 0.62975472\n", - "epoch: 200 loss: 0.59459174\n", - "epoch: 225 loss: 0.56217074\n", - "epoch: 250 loss: 0.50559610\n", - "epoch: 275 loss: 0.49815249\n", - "epoch: 300 loss: 0.49279273\n", - "epoch: 325 loss: 0.48264143\n", - "epoch: 350 loss: 0.44920322\n", - "epoch: 375 loss: 0.46457860\n", - "epoch: 400 loss: 0.45471418\n", - "epoch: 425 loss: 0.45297441\n", - "epoch: 450 loss: 0.42665958\n", - "epoch: 475 loss: 0.42313859\n", - "epoch: 500 loss: 0.40890431\n", - "epoch: 500 loss:0.4089043140\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "test_outputs = test_outputs.to(device=device, dtype=torch.int64)\n", - "categorical_test_data = categorical_test_data.to(device=device, dtype=torch.int64)\n", - "with torch.no_grad():\n", - " y_val = model(categorical_test_data)\n", - " loss = loss_function(y_val, test_outputs)\n", - "print(f'Loss: {loss:.8f}')" - ], - "metadata": { - "id": "bl2J3HvquAUs", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "c70ac5f0-afa6-4be9-c9a9-429870620db3" - }, - "execution_count": 45, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "Loss: 1.37529147\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "print(y_val[:5])" - ], - "metadata": { - "id": "UApgW6kxu9Ue", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "a48f29da-d068-4857-e664-4529fa3d58ce" - }, - "execution_count": 46, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "tensor([[-0.1212, -2.9414, 3.5049, -3.0028],\n", - " [-6.7732, -3.2424, 6.9518, -1.3304],\n", - " [-1.5343, -3.0426, 3.9739, -2.7679],\n", - " [-3.3236, -2.0604, 4.3475, -1.5797],\n", - " [-0.2250, -1.3527, 1.8793, -1.3625]], device='cuda:0')\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "y_val = torch.argmax(y_val, axis=1).cpu().numpy()\n", - "print(y_val[:5])" - ], - "metadata": { - "id": "S7rYbyrku929", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "82bff409-3d45-450c-bbec-b152599e052c" - }, - "execution_count": 47, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[2 2 2 2 2]\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [ - "from sklearn.metrics import classification_report, confusion_matrix, accuracy_score\n", - "print(confusion_matrix(test_outputs.cpu().numpy(),y_val))\n", - "print(classification_report(test_outputs.cpu().numpy(),y_val))\n", - "print(accuracy_score(test_outputs.cpu().numpy(), y_val))" - ], - "metadata": { - "id": "MWJNP3qYu__f", - "colab": { - "base_uri": "https://localhost:8080/" - }, - "outputId": "c0459b82-13de-4fc1-abe4-5f11155c05f9" - }, - "execution_count": 49, - "outputs": [ - { - "output_type": "stream", - "name": "stdout", - "text": [ - "[[ 12 0 51 0]\n", - " [ 22 1 23 0]\n", - " [ 8 0 189 0]\n", - " [ 22 0 14 3]]\n", - " precision recall f1-score support\n", - "\n", - " 0 0.19 0.19 0.19 63\n", - " 1 1.00 0.02 0.04 46\n", - " 2 0.68 0.96 0.80 197\n", - " 3 1.00 0.08 0.14 39\n", - "\n", - " accuracy 0.59 345\n", - " macro avg 0.72 0.31 0.29 345\n", - "weighted avg 0.67 0.59 0.51 345\n", - "\n", - "0.5942028985507246\n" - ] - } - ] - }, - { - "cell_type": "code", - "source": [], - "metadata": { - "id": "QpxosE20vBx1" - }, - "execution_count": null, - "outputs": [] - } - ] -} diff --git "a/Week1_\354\230\210\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.pdf" "b/Week1_\354\230\210\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.pdf" deleted file mode 100644 index fa61a5d..0000000 Binary files "a/Week1_\354\230\210\354\212\265\352\263\274\354\240\234_\352\263\275\354\261\204\354\233\220.pdf" and /dev/null differ