diff --git "a/03_Pytorch_Logistic_Regression_from_Scratch.ipynb" "b/03_Pytorch_Logistic_Regression_from_Scratch.ipynb" new file mode 100644--- /dev/null +++ "b/03_Pytorch_Logistic_Regression_from_Scratch.ipynb" @@ -0,0 +1,1049 @@ +{ + "cells": [ + { + "cell_type": "raw", + "metadata": {}, + "source": [ + "---\n", + "title: 04 Logistic Regression from Scratch\n", + "description: An implementation of logistic regression from scratch\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Colab\"" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "3XjaQuuS2QVQ" + }, + "source": [ + "# Implementing A Logistic Regression Model from Scratch with PyTorch\n", + "\n", + "![alt text](https://drive.google.com/uc?export=view&id=11Bv3uhZtVgRVYVWDl9_ZAYQ0GU36LhM9)\n", + "\n", + "\n", + "In this tutorial, we are going to implement a logistic regression model from scratch with PyTorch. The model will be designed with neural networks in mind and will be used for a simple image classification task. I believe this is a great approach to begin understanding the fundamental building blocks behind a neural network. Additionally, we will also look at best practices on how to use PyTorch for training neural networks.\n", + "\n", + "After completing this tutorial the learner is expected to know the basic building blocks of a logistic regression model. The learner is also expected to apply the logistic regression model to a binary image classification problem of their choice using PyTorch code.\n", + "\n", + "---\n", + "\n", + "**Author:** Elvis Saravia ( [Twitter](https://twitter.com/omarsar0) | [LinkedIn](https://www.linkedin.com/in/omarsar/))\n", + "\n", + "**Complete Code Walkthrough:** [Blog post](https://medium.com/dair-ai/implementing-a-logistic-regression-model-from-scratch-with-pytorch-24ea062cd856?source=friends_link&sk=49dcddb17d1d021d2d677f3666c88463)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "6gnyYNkr2Vub" + }, + "outputs": [], + "source": [ + "## Import the usual libraries\n", + "import torch\n", + "import torchvision\n", + "import torch.nn as nn\n", + "from torchvision import datasets, models, transforms\n", + "import os\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "\n", + "%matplotlib inline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "L7Boavtx22CS", + "outputId": "f01d483a-55bd-4f47-f612-3cd639eb3013" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "cuda:0\n" + ] + } + ], + "source": [ + "## configuration to detect cuda or cpu\n", + "device = torch.device(\"cuda:0\" if torch.cuda.is_available() else \"cpu\")\n", + "print (device)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tSpmMANNj5Uz" + }, + "source": [ + "## Importing Dataset\n", + "In this tutorial we will be working on an image classification problem. You can find the public dataset [here](https://download.pytorch.org/tutorial/hymenoptera_data.zip). \n", + "\n", + "The objective of our model is to learn to classify between \"bee\" vs. \"no bee\" images.\n", + "\n", + "Uncomment the code below to download and unzip the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6tcFUZjHeY0Z", + "outputId": "0b1c126a-c367-43dd-b7e9-83c2018a7031" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2022-04-03 14:26:01-- https://download.pytorch.org/tutorial/hymenoptera_data.zip\n", + "Resolving download.pytorch.org (download.pytorch.org)... 13.32.207.27, 13.32.207.54, 13.32.207.111, ...\n", + "Connecting to download.pytorch.org (download.pytorch.org)|13.32.207.27|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 47286322 (45M) [application/zip]\n", + "Saving to: ‘hymenoptera_data.zip’\n", + "\n", + "hymenoptera_data.zi 100%[===================>] 45.10M 69.5MB/s in 0.6s \n", + "\n", + "2022-04-03 14:26:01 (69.5 MB/s) - ‘hymenoptera_data.zip’ saved [47286322/47286322]\n", + "\n", + "Archive: hymenoptera_data.zip\n", + " creating: hymenoptera_data/\n", + " creating: hymenoptera_data/train/\n", + " creating: hymenoptera_data/train/ants/\n", + " inflating: hymenoptera_data/train/ants/0013035.jpg \n", + " inflating: hymenoptera_data/train/ants/1030023514_aad5c608f9.jpg \n", + " inflating: hymenoptera_data/train/ants/1095476100_3906d8afde.jpg \n", + " inflating: hymenoptera_data/train/ants/1099452230_d1949d3250.jpg \n", + " inflating: hymenoptera_data/train/ants/116570827_e9c126745d.jpg \n", + " inflating: hymenoptera_data/train/ants/1225872729_6f0856588f.jpg \n", + " inflating: hymenoptera_data/train/ants/1262877379_64fcada201.jpg \n", + " inflating: hymenoptera_data/train/ants/1269756697_0bce92cdab.jpg \n", + " inflating: hymenoptera_data/train/ants/1286984635_5119e80de1.jpg \n", + " inflating: hymenoptera_data/train/ants/132478121_2a430adea2.jpg \n", + " inflating: hymenoptera_data/train/ants/1360291657_dc248c5eea.jpg \n", + " inflating: hymenoptera_data/train/ants/1368913450_e146e2fb6d.jpg \n", + " inflating: hymenoptera_data/train/ants/1473187633_63ccaacea6.jpg \n", + " inflating: hymenoptera_data/train/ants/148715752_302c84f5a4.jpg \n", + " inflating: hymenoptera_data/train/ants/1489674356_09d48dde0a.jpg \n", + " inflating: hymenoptera_data/train/ants/149244013_c529578289.jpg \n", + " inflating: hymenoptera_data/train/ants/150801003_3390b73135.jpg \n", + " inflating: hymenoptera_data/train/ants/150801171_cd86f17ed8.jpg \n", + " inflating: hymenoptera_data/train/ants/154124431_65460430f2.jpg \n", + " inflating: hymenoptera_data/train/ants/162603798_40b51f1654.jpg \n", + " inflating: hymenoptera_data/train/ants/1660097129_384bf54490.jpg \n", + " inflating: hymenoptera_data/train/ants/167890289_dd5ba923f3.jpg \n", + " inflating: hymenoptera_data/train/ants/1693954099_46d4c20605.jpg \n", + " inflating: hymenoptera_data/train/ants/175998972.jpg \n", + " inflating: hymenoptera_data/train/ants/178538489_bec7649292.jpg \n", + " inflating: hymenoptera_data/train/ants/1804095607_0341701e1c.jpg \n", + " inflating: hymenoptera_data/train/ants/1808777855_2a895621d7.jpg \n", + " inflating: hymenoptera_data/train/ants/188552436_605cc9b36b.jpg \n", + " inflating: hymenoptera_data/train/ants/1917341202_d00a7f9af5.jpg \n", + " inflating: hymenoptera_data/train/ants/1924473702_daa9aacdbe.jpg \n", + " inflating: hymenoptera_data/train/ants/196057951_63bf063b92.jpg \n", + " inflating: hymenoptera_data/train/ants/196757565_326437f5fe.jpg \n", + " inflating: hymenoptera_data/train/ants/201558278_fe4caecc76.jpg \n", + " inflating: hymenoptera_data/train/ants/201790779_527f4c0168.jpg \n", + " inflating: hymenoptera_data/train/ants/2019439677_2db655d361.jpg \n", + " inflating: hymenoptera_data/train/ants/207947948_3ab29d7207.jpg \n", + " inflating: hymenoptera_data/train/ants/20935278_9190345f6b.jpg \n", + " inflating: hymenoptera_data/train/ants/224655713_3956f7d39a.jpg \n", + " inflating: hymenoptera_data/train/ants/2265824718_2c96f485da.jpg \n", + " inflating: hymenoptera_data/train/ants/2265825502_fff99cfd2d.jpg \n", + " inflating: hymenoptera_data/train/ants/226951206_d6bf946504.jpg \n", + " inflating: hymenoptera_data/train/ants/2278278459_6b99605e50.jpg \n", + " inflating: hymenoptera_data/train/ants/2288450226_a6e96e8fdf.jpg \n", + " inflating: hymenoptera_data/train/ants/2288481644_83ff7e4572.jpg \n", + " inflating: hymenoptera_data/train/ants/2292213964_ca51ce4bef.jpg \n", + " inflating: hymenoptera_data/train/ants/24335309_c5ea483bb8.jpg \n", + " inflating: hymenoptera_data/train/ants/245647475_9523dfd13e.jpg \n", + " inflating: hymenoptera_data/train/ants/255434217_1b2b3fe0a4.jpg \n", + " inflating: hymenoptera_data/train/ants/258217966_d9d90d18d3.jpg \n", + " inflating: hymenoptera_data/train/ants/275429470_b2d7d9290b.jpg \n", + " inflating: hymenoptera_data/train/ants/28847243_e79fe052cd.jpg \n", + " inflating: hymenoptera_data/train/ants/318052216_84dff3f98a.jpg \n", + " inflating: hymenoptera_data/train/ants/334167043_cbd1adaeb9.jpg \n", + " inflating: hymenoptera_data/train/ants/339670531_94b75ae47a.jpg \n", + " inflating: hymenoptera_data/train/ants/342438950_a3da61deab.jpg \n", + " inflating: hymenoptera_data/train/ants/36439863_0bec9f554f.jpg \n", + " inflating: hymenoptera_data/train/ants/374435068_7eee412ec4.jpg \n", + " inflating: hymenoptera_data/train/ants/382971067_0bfd33afe0.jpg \n", + " inflating: hymenoptera_data/train/ants/384191229_5779cf591b.jpg \n", + " inflating: hymenoptera_data/train/ants/386190770_672743c9a7.jpg \n", + " inflating: hymenoptera_data/train/ants/392382602_1b7bed32fa.jpg \n", + " inflating: hymenoptera_data/train/ants/403746349_71384f5b58.jpg \n", + " inflating: hymenoptera_data/train/ants/408393566_b5b694119b.jpg \n", + " inflating: hymenoptera_data/train/ants/424119020_6d57481dab.jpg \n", + " inflating: hymenoptera_data/train/ants/424873399_47658a91fb.jpg \n", + " inflating: hymenoptera_data/train/ants/450057712_771b3bfc91.jpg \n", + " inflating: hymenoptera_data/train/ants/45472593_bfd624f8dc.jpg \n", + " inflating: hymenoptera_data/train/ants/459694881_ac657d3187.jpg \n", + " inflating: hymenoptera_data/train/ants/460372577_f2f6a8c9fc.jpg \n", + " inflating: hymenoptera_data/train/ants/460874319_0a45ab4d05.jpg \n", + " inflating: hymenoptera_data/train/ants/466430434_4000737de9.jpg \n", + " inflating: hymenoptera_data/train/ants/470127037_513711fd21.jpg \n", + " inflating: hymenoptera_data/train/ants/474806473_ca6caab245.jpg \n", + " inflating: hymenoptera_data/train/ants/475961153_b8c13fd405.jpg \n", + " inflating: hymenoptera_data/train/ants/484293231_e53cfc0c89.jpg \n", + " inflating: hymenoptera_data/train/ants/49375974_e28ba6f17e.jpg \n", + " inflating: hymenoptera_data/train/ants/506249802_207cd979b4.jpg \n", + " inflating: hymenoptera_data/train/ants/506249836_717b73f540.jpg \n", + " inflating: hymenoptera_data/train/ants/512164029_c0a66b8498.jpg \n", + " inflating: hymenoptera_data/train/ants/512863248_43c8ce579b.jpg \n", + " inflating: hymenoptera_data/train/ants/518773929_734dbc5ff4.jpg \n", + " inflating: hymenoptera_data/train/ants/522163566_fec115ca66.jpg \n", + " inflating: hymenoptera_data/train/ants/522415432_2218f34bf8.jpg \n", + " inflating: hymenoptera_data/train/ants/531979952_bde12b3bc0.jpg \n", + " inflating: hymenoptera_data/train/ants/533848102_70a85ad6dd.jpg \n", + " inflating: hymenoptera_data/train/ants/535522953_308353a07c.jpg \n", + " inflating: hymenoptera_data/train/ants/540889389_48bb588b21.jpg \n", + " inflating: hymenoptera_data/train/ants/541630764_dbd285d63c.jpg \n", + " inflating: hymenoptera_data/train/ants/543417860_b14237f569.jpg \n", + " inflating: hymenoptera_data/train/ants/560966032_988f4d7bc4.jpg \n", + " inflating: hymenoptera_data/train/ants/5650366_e22b7e1065.jpg \n", + " inflating: hymenoptera_data/train/ants/6240329_72c01e663e.jpg \n", + " inflating: hymenoptera_data/train/ants/6240338_93729615ec.jpg \n", + " inflating: hymenoptera_data/train/ants/649026570_e58656104b.jpg \n", + " inflating: hymenoptera_data/train/ants/662541407_ff8db781e7.jpg \n", + " inflating: hymenoptera_data/train/ants/67270775_e9fdf77e9d.jpg \n", + " inflating: hymenoptera_data/train/ants/6743948_2b8c096dda.jpg \n", + " inflating: hymenoptera_data/train/ants/684133190_35b62c0c1d.jpg \n", + " inflating: hymenoptera_data/train/ants/69639610_95e0de17aa.jpg \n", + " inflating: hymenoptera_data/train/ants/707895295_009cf23188.jpg \n", + " inflating: hymenoptera_data/train/ants/7759525_1363d24e88.jpg \n", + " inflating: hymenoptera_data/train/ants/795000156_a9900a4a71.jpg \n", + " inflating: hymenoptera_data/train/ants/822537660_caf4ba5514.jpg \n", + " inflating: hymenoptera_data/train/ants/82852639_52b7f7f5e3.jpg \n", + " inflating: hymenoptera_data/train/ants/841049277_b28e58ad05.jpg \n", + " inflating: hymenoptera_data/train/ants/886401651_f878e888cd.jpg \n", + " inflating: hymenoptera_data/train/ants/892108839_f1aad4ca46.jpg \n", + " inflating: hymenoptera_data/train/ants/938946700_ca1c669085.jpg \n", + " inflating: hymenoptera_data/train/ants/957233405_25c1d1187b.jpg \n", + " inflating: hymenoptera_data/train/ants/9715481_b3cb4114ff.jpg \n", + " inflating: hymenoptera_data/train/ants/998118368_6ac1d91f81.jpg \n", + " inflating: hymenoptera_data/train/ants/ant photos.jpg \n", + " inflating: hymenoptera_data/train/ants/Ant_1.jpg \n", + " inflating: hymenoptera_data/train/ants/army-ants-red-picture.jpg \n", + " inflating: hymenoptera_data/train/ants/formica.jpeg \n", + " inflating: hymenoptera_data/train/ants/hormiga_co_por.jpg \n", + " inflating: hymenoptera_data/train/ants/imageNotFound.gif \n", + " inflating: hymenoptera_data/train/ants/kurokusa.jpg \n", + " inflating: hymenoptera_data/train/ants/MehdiabadiAnt2_600.jpg \n", + " inflating: hymenoptera_data/train/ants/Nepenthes_rafflesiana_ant.jpg \n", + " inflating: hymenoptera_data/train/ants/swiss-army-ant.jpg \n", + " inflating: hymenoptera_data/train/ants/termite-vs-ant.jpg \n", + " inflating: hymenoptera_data/train/ants/trap-jaw-ant-insect-bg.jpg \n", + " inflating: hymenoptera_data/train/ants/VietnameseAntMimicSpider.jpg \n", + " creating: hymenoptera_data/train/bees/\n", + " inflating: hymenoptera_data/train/bees/1092977343_cb42b38d62.jpg \n", + " inflating: hymenoptera_data/train/bees/1093831624_fb5fbe2308.jpg \n", + " inflating: hymenoptera_data/train/bees/1097045929_1753d1c765.jpg \n", + " inflating: hymenoptera_data/train/bees/1232245714_f862fbe385.jpg \n", + " inflating: hymenoptera_data/train/bees/129236073_0985e91c7d.jpg \n", + " inflating: hymenoptera_data/train/bees/1295655112_7813f37d21.jpg \n", + " inflating: hymenoptera_data/train/bees/132511197_0b86ad0fff.jpg \n", + " inflating: hymenoptera_data/train/bees/132826773_dbbcb117b9.jpg \n", + " inflating: hymenoptera_data/train/bees/150013791_969d9a968b.jpg \n", + " inflating: hymenoptera_data/train/bees/1508176360_2972117c9d.jpg \n", + " inflating: hymenoptera_data/train/bees/154600396_53e1252e52.jpg \n", + " inflating: hymenoptera_data/train/bees/16838648_415acd9e3f.jpg \n", + " inflating: hymenoptera_data/train/bees/1691282715_0addfdf5e8.jpg \n", + " inflating: hymenoptera_data/train/bees/17209602_fe5a5a746f.jpg \n", + " inflating: hymenoptera_data/train/bees/174142798_e5ad6d76e0.jpg \n", + " inflating: hymenoptera_data/train/bees/1799726602_8580867f71.jpg \n", + " inflating: hymenoptera_data/train/bees/1807583459_4fe92b3133.jpg \n", + " inflating: hymenoptera_data/train/bees/196430254_46bd129ae7.jpg \n", + " inflating: hymenoptera_data/train/bees/196658222_3fffd79c67.jpg \n", + " inflating: hymenoptera_data/train/bees/198508668_97d818b6c4.jpg \n", + " inflating: hymenoptera_data/train/bees/2031225713_50ed499635.jpg \n", + " inflating: hymenoptera_data/train/bees/2037437624_2d7bce461f.jpg \n", + " inflating: hymenoptera_data/train/bees/2053200300_8911ef438a.jpg \n", + " inflating: hymenoptera_data/train/bees/205835650_e6f2614bee.jpg \n", + " inflating: hymenoptera_data/train/bees/208702903_42fb4d9748.jpg \n", + " inflating: hymenoptera_data/train/bees/21399619_3e61e5bb6f.jpg \n", + " inflating: hymenoptera_data/train/bees/2227611847_ec72d40403.jpg \n", + " inflating: hymenoptera_data/train/bees/2321139806_d73d899e66.jpg \n", + " inflating: hymenoptera_data/train/bees/2330918208_8074770c20.jpg \n", + " inflating: hymenoptera_data/train/bees/2345177635_caf07159b3.jpg \n", + " inflating: hymenoptera_data/train/bees/2358061370_9daabbd9ac.jpg \n", + " inflating: hymenoptera_data/train/bees/2364597044_3c3e3fc391.jpg \n", + " inflating: hymenoptera_data/train/bees/2384149906_2cd8b0b699.jpg \n", + " inflating: hymenoptera_data/train/bees/2397446847_04ef3cd3e1.jpg \n", + " inflating: hymenoptera_data/train/bees/2405441001_b06c36fa72.jpg \n", + " inflating: hymenoptera_data/train/bees/2445215254_51698ff797.jpg \n", + " inflating: hymenoptera_data/train/bees/2452236943_255bfd9e58.jpg \n", + " inflating: hymenoptera_data/train/bees/2467959963_a7831e9ff0.jpg \n", + " inflating: hymenoptera_data/train/bees/2470492904_837e97800d.jpg \n", + " inflating: hymenoptera_data/train/bees/2477324698_3d4b1b1cab.jpg \n", + " inflating: hymenoptera_data/train/bees/2477349551_e75c97cf4d.jpg \n", + " inflating: hymenoptera_data/train/bees/2486729079_62df0920be.jpg \n", + " inflating: hymenoptera_data/train/bees/2486746709_c43cec0e42.jpg \n", + " inflating: hymenoptera_data/train/bees/2493379287_4100e1dacc.jpg \n", + " inflating: hymenoptera_data/train/bees/2495722465_879acf9d85.jpg \n", + " inflating: hymenoptera_data/train/bees/2528444139_fa728b0f5b.jpg \n", + " inflating: hymenoptera_data/train/bees/2538361678_9da84b77e3.jpg \n", + " inflating: hymenoptera_data/train/bees/2551813042_8a070aeb2b.jpg \n", + " inflating: hymenoptera_data/train/bees/2580598377_a4caecdb54.jpg \n", + " inflating: hymenoptera_data/train/bees/2601176055_8464e6aa71.jpg \n", + " inflating: hymenoptera_data/train/bees/2610833167_79bf0bcae5.jpg \n", + " inflating: hymenoptera_data/train/bees/2610838525_fe8e3cae47.jpg \n", + " inflating: hymenoptera_data/train/bees/2617161745_fa3ebe85b4.jpg \n", + " inflating: hymenoptera_data/train/bees/2625499656_e3415e374d.jpg \n", + " inflating: hymenoptera_data/train/bees/2634617358_f32fd16bea.jpg \n", + " inflating: hymenoptera_data/train/bees/2638074627_6b3ae746a0.jpg \n", + " inflating: hymenoptera_data/train/bees/2645107662_b73a8595cc.jpg \n", + " inflating: hymenoptera_data/train/bees/2651621464_a2fa8722eb.jpg \n", + " inflating: hymenoptera_data/train/bees/2652877533_a564830cbf.jpg \n", + " inflating: hymenoptera_data/train/bees/266644509_d30bb16a1b.jpg \n", + " inflating: hymenoptera_data/train/bees/2683605182_9d2a0c66cf.jpg \n", + " inflating: hymenoptera_data/train/bees/2704348794_eb5d5178c2.jpg \n", + " inflating: hymenoptera_data/train/bees/2707440199_cd170bd512.jpg \n", + " inflating: hymenoptera_data/train/bees/2710368626_cb42882dc8.jpg \n", + " inflating: hymenoptera_data/train/bees/2722592222_258d473e17.jpg \n", + " inflating: hymenoptera_data/train/bees/2728759455_ce9bb8cd7a.jpg \n", + " inflating: hymenoptera_data/train/bees/2756397428_1d82a08807.jpg \n", + " inflating: hymenoptera_data/train/bees/2765347790_da6cf6cb40.jpg \n", + " inflating: hymenoptera_data/train/bees/2781170484_5d61835d63.jpg \n", + " inflating: hymenoptera_data/train/bees/279113587_b4843db199.jpg \n", + " inflating: hymenoptera_data/train/bees/2792000093_e8ae0718cf.jpg \n", + " inflating: hymenoptera_data/train/bees/2801728106_833798c909.jpg \n", + " inflating: hymenoptera_data/train/bees/2822388965_f6dca2a275.jpg \n", + " inflating: hymenoptera_data/train/bees/2861002136_52c7c6f708.jpg \n", + " inflating: hymenoptera_data/train/bees/2908916142_a7ac8b57a8.jpg \n", + " inflating: hymenoptera_data/train/bees/29494643_e3410f0d37.jpg \n", + " inflating: hymenoptera_data/train/bees/2959730355_416a18c63c.jpg \n", + " inflating: hymenoptera_data/train/bees/2962405283_22718d9617.jpg \n", + " inflating: hymenoptera_data/train/bees/3006264892_30e9cced70.jpg \n", + " inflating: hymenoptera_data/train/bees/3030189811_01d095b793.jpg \n", + " inflating: hymenoptera_data/train/bees/3030772428_8578335616.jpg \n", + " inflating: hymenoptera_data/train/bees/3044402684_3853071a87.jpg \n", + " inflating: hymenoptera_data/train/bees/3074585407_9854eb3153.jpg \n", + " inflating: hymenoptera_data/train/bees/3079610310_ac2d0ae7bc.jpg \n", + " inflating: hymenoptera_data/train/bees/3090975720_71f12e6de4.jpg \n", + " inflating: hymenoptera_data/train/bees/3100226504_c0d4f1e3f1.jpg \n", + " inflating: hymenoptera_data/train/bees/342758693_c56b89b6b6.jpg \n", + " inflating: hymenoptera_data/train/bees/354167719_22dca13752.jpg \n", + " inflating: hymenoptera_data/train/bees/359928878_b3b418c728.jpg \n", + " inflating: hymenoptera_data/train/bees/365759866_b15700c59b.jpg \n", + " inflating: hymenoptera_data/train/bees/36900412_92b81831ad.jpg \n", + " inflating: hymenoptera_data/train/bees/39672681_1302d204d1.jpg \n", + " inflating: hymenoptera_data/train/bees/39747887_42df2855ee.jpg \n", + " inflating: hymenoptera_data/train/bees/421515404_e87569fd8b.jpg \n", + " inflating: hymenoptera_data/train/bees/444532809_9e931e2279.jpg \n", + " inflating: hymenoptera_data/train/bees/446296270_d9e8b93ecf.jpg \n", + " inflating: hymenoptera_data/train/bees/452462677_7be43af8ff.jpg \n", + " inflating: hymenoptera_data/train/bees/452462695_40a4e5b559.jpg \n", + " inflating: hymenoptera_data/train/bees/457457145_5f86eb7e9c.jpg \n", + " inflating: hymenoptera_data/train/bees/465133211_80e0c27f60.jpg \n", + " inflating: hymenoptera_data/train/bees/469333327_358ba8fe8a.jpg \n", + " inflating: hymenoptera_data/train/bees/472288710_2abee16fa0.jpg \n", + " inflating: hymenoptera_data/train/bees/473618094_8ffdcab215.jpg \n", + " inflating: hymenoptera_data/train/bees/476347960_52edd72b06.jpg \n", + " inflating: hymenoptera_data/train/bees/478701318_bbd5e557b8.jpg \n", + " inflating: hymenoptera_data/train/bees/507288830_f46e8d4cb2.jpg \n", + " inflating: hymenoptera_data/train/bees/509247772_2db2d01374.jpg \n", + " inflating: hymenoptera_data/train/bees/513545352_fd3e7c7c5d.jpg \n", + " inflating: hymenoptera_data/train/bees/522104315_5d3cb2758e.jpg \n", + " inflating: hymenoptera_data/train/bees/537309131_532bfa59ea.jpg \n", + " inflating: hymenoptera_data/train/bees/586041248_3032e277a9.jpg \n", + " inflating: hymenoptera_data/train/bees/760526046_547e8b381f.jpg \n", + " inflating: hymenoptera_data/train/bees/760568592_45a52c847f.jpg \n", + " inflating: hymenoptera_data/train/bees/774440991_63a4aa0cbe.jpg \n", + " inflating: hymenoptera_data/train/bees/85112639_6e860b0469.jpg \n", + " inflating: hymenoptera_data/train/bees/873076652_eb098dab2d.jpg \n", + " inflating: hymenoptera_data/train/bees/90179376_abc234e5f4.jpg \n", + " inflating: hymenoptera_data/train/bees/92663402_37f379e57a.jpg \n", + " inflating: hymenoptera_data/train/bees/95238259_98470c5b10.jpg \n", + " inflating: hymenoptera_data/train/bees/969455125_58c797ef17.jpg \n", + " inflating: hymenoptera_data/train/bees/98391118_bdb1e80cce.jpg \n", + " creating: hymenoptera_data/val/\n", + " creating: hymenoptera_data/val/ants/\n", + " inflating: hymenoptera_data/val/ants/10308379_1b6c72e180.jpg \n", + " inflating: hymenoptera_data/val/ants/1053149811_f62a3410d3.jpg \n", + " inflating: hymenoptera_data/val/ants/1073564163_225a64f170.jpg \n", + " inflating: hymenoptera_data/val/ants/1119630822_cd325ea21a.jpg \n", + " inflating: hymenoptera_data/val/ants/1124525276_816a07c17f.jpg \n", + " inflating: hymenoptera_data/val/ants/11381045_b352a47d8c.jpg \n", + " inflating: hymenoptera_data/val/ants/119785936_dd428e40c3.jpg \n", + " inflating: hymenoptera_data/val/ants/1247887232_edcb61246c.jpg \n", + " inflating: hymenoptera_data/val/ants/1262751255_c56c042b7b.jpg \n", + " inflating: hymenoptera_data/val/ants/1337725712_2eb53cd742.jpg \n", + " inflating: hymenoptera_data/val/ants/1358854066_5ad8015f7f.jpg \n", + " inflating: hymenoptera_data/val/ants/1440002809_b268d9a66a.jpg \n", + " inflating: hymenoptera_data/val/ants/147542264_79506478c2.jpg \n", + " inflating: hymenoptera_data/val/ants/152286280_411648ec27.jpg \n", + " inflating: hymenoptera_data/val/ants/153320619_2aeb5fa0ee.jpg \n", + " inflating: hymenoptera_data/val/ants/153783656_85f9c3ac70.jpg \n", + " inflating: hymenoptera_data/val/ants/157401988_d0564a9d02.jpg \n", + " inflating: hymenoptera_data/val/ants/159515240_d5981e20d1.jpg \n", + " inflating: hymenoptera_data/val/ants/161076144_124db762d6.jpg \n", + " inflating: hymenoptera_data/val/ants/161292361_c16e0bf57a.jpg \n", + " inflating: hymenoptera_data/val/ants/170652283_ecdaff5d1a.jpg \n", + " inflating: hymenoptera_data/val/ants/17081114_79b9a27724.jpg \n", + " inflating: hymenoptera_data/val/ants/172772109_d0a8e15fb0.jpg \n", + " inflating: hymenoptera_data/val/ants/1743840368_b5ccda82b7.jpg \n", + " inflating: hymenoptera_data/val/ants/181942028_961261ef48.jpg \n", + " inflating: hymenoptera_data/val/ants/183260961_64ab754c97.jpg \n", + " inflating: hymenoptera_data/val/ants/2039585088_c6f47c592e.jpg \n", + " inflating: hymenoptera_data/val/ants/205398178_c395c5e460.jpg \n", + " inflating: hymenoptera_data/val/ants/208072188_f293096296.jpg \n", + " inflating: hymenoptera_data/val/ants/209615353_eeb38ba204.jpg \n", + " inflating: hymenoptera_data/val/ants/2104709400_8831b4fc6f.jpg \n", + " inflating: hymenoptera_data/val/ants/212100470_b485e7b7b9.jpg \n", + " inflating: hymenoptera_data/val/ants/2127908701_d49dc83c97.jpg \n", + " inflating: hymenoptera_data/val/ants/2191997003_379df31291.jpg \n", + " inflating: hymenoptera_data/val/ants/2211974567_ee4606b493.jpg \n", + " inflating: hymenoptera_data/val/ants/2219621907_47bc7cc6b0.jpg \n", + " inflating: hymenoptera_data/val/ants/2238242353_52c82441df.jpg \n", + " inflating: hymenoptera_data/val/ants/2255445811_dabcdf7258.jpg \n", + " inflating: hymenoptera_data/val/ants/239161491_86ac23b0a3.jpg \n", + " inflating: hymenoptera_data/val/ants/263615709_cfb28f6b8e.jpg \n", + " inflating: hymenoptera_data/val/ants/308196310_1db5ffa01b.jpg \n", + " inflating: hymenoptera_data/val/ants/319494379_648fb5a1c6.jpg \n", + " inflating: hymenoptera_data/val/ants/35558229_1fa4608a7a.jpg \n", + " inflating: hymenoptera_data/val/ants/412436937_4c2378efc2.jpg \n", + " inflating: hymenoptera_data/val/ants/436944325_d4925a38c7.jpg \n", + " inflating: hymenoptera_data/val/ants/445356866_6cb3289067.jpg \n", + " inflating: hymenoptera_data/val/ants/459442412_412fecf3fe.jpg \n", + " inflating: hymenoptera_data/val/ants/470127071_8b8ee2bd74.jpg \n", + " inflating: hymenoptera_data/val/ants/477437164_bc3e6e594a.jpg \n", + " inflating: hymenoptera_data/val/ants/488272201_c5aa281348.jpg \n", + " inflating: hymenoptera_data/val/ants/502717153_3e4865621a.jpg \n", + " inflating: hymenoptera_data/val/ants/518746016_bcc28f8b5b.jpg \n", + " inflating: hymenoptera_data/val/ants/540543309_ddbb193ee5.jpg \n", + " inflating: hymenoptera_data/val/ants/562589509_7e55469b97.jpg \n", + " inflating: hymenoptera_data/val/ants/57264437_a19006872f.jpg \n", + " inflating: hymenoptera_data/val/ants/573151833_ebbc274b77.jpg \n", + " inflating: hymenoptera_data/val/ants/649407494_9b6bc4949f.jpg \n", + " inflating: hymenoptera_data/val/ants/751649788_78dd7d16ce.jpg \n", + " inflating: hymenoptera_data/val/ants/768870506_8f115d3d37.jpg \n", + " inflating: hymenoptera_data/val/ants/800px-Meat_eater_ant_qeen_excavating_hole.jpg \n", + " inflating: hymenoptera_data/val/ants/8124241_36b290d372.jpg \n", + " inflating: hymenoptera_data/val/ants/8398478_50ef10c47a.jpg \n", + " inflating: hymenoptera_data/val/ants/854534770_31f6156383.jpg \n", + " inflating: hymenoptera_data/val/ants/892676922_4ab37dce07.jpg \n", + " inflating: hymenoptera_data/val/ants/94999827_36895faade.jpg \n", + " inflating: hymenoptera_data/val/ants/Ant-1818.jpg \n", + " inflating: hymenoptera_data/val/ants/ants-devouring-remains-of-large-dead-insect-on-red-tile-in-Stellenbosch-South-Africa-closeup-1-DHD.jpg \n", + " inflating: hymenoptera_data/val/ants/desert_ant.jpg \n", + " inflating: hymenoptera_data/val/ants/F.pergan.28(f).jpg \n", + " inflating: hymenoptera_data/val/ants/Hormiga.jpg \n", + " creating: hymenoptera_data/val/bees/\n", + " inflating: hymenoptera_data/val/bees/1032546534_06907fe3b3.jpg \n", + " inflating: hymenoptera_data/val/bees/10870992_eebeeb3a12.jpg \n", + " inflating: hymenoptera_data/val/bees/1181173278_23c36fac71.jpg \n", + " inflating: hymenoptera_data/val/bees/1297972485_33266a18d9.jpg \n", + " inflating: hymenoptera_data/val/bees/1328423762_f7a88a8451.jpg \n", + " inflating: hymenoptera_data/val/bees/1355974687_1341c1face.jpg \n", + " inflating: hymenoptera_data/val/bees/144098310_a4176fd54d.jpg \n", + " inflating: hymenoptera_data/val/bees/1486120850_490388f84b.jpg \n", + " inflating: hymenoptera_data/val/bees/149973093_da3c446268.jpg \n", + " inflating: hymenoptera_data/val/bees/151594775_ee7dc17b60.jpg \n", + " inflating: hymenoptera_data/val/bees/151603988_2c6f7d14c7.jpg \n", + " inflating: hymenoptera_data/val/bees/1519368889_4270261ee3.jpg \n", + " inflating: hymenoptera_data/val/bees/152789693_220b003452.jpg \n", + " inflating: hymenoptera_data/val/bees/177677657_a38c97e572.jpg \n", + " inflating: hymenoptera_data/val/bees/1799729694_0c40101071.jpg \n", + " inflating: hymenoptera_data/val/bees/181171681_c5a1a82ded.jpg \n", + " inflating: hymenoptera_data/val/bees/187130242_4593a4c610.jpg \n", + " inflating: hymenoptera_data/val/bees/203868383_0fcbb48278.jpg \n", + " inflating: hymenoptera_data/val/bees/2060668999_e11edb10d0.jpg \n", + " inflating: hymenoptera_data/val/bees/2086294791_6f3789d8a6.jpg \n", + " inflating: hymenoptera_data/val/bees/2103637821_8d26ee6b90.jpg \n", + " inflating: hymenoptera_data/val/bees/2104135106_a65eede1de.jpg \n", + " inflating: hymenoptera_data/val/bees/215512424_687e1e0821.jpg \n", + " inflating: hymenoptera_data/val/bees/2173503984_9c6aaaa7e2.jpg \n", + " inflating: hymenoptera_data/val/bees/220376539_20567395d8.jpg \n", + " inflating: hymenoptera_data/val/bees/224841383_d050f5f510.jpg \n", + " inflating: hymenoptera_data/val/bees/2321144482_f3785ba7b2.jpg \n", + " inflating: hymenoptera_data/val/bees/238161922_55fa9a76ae.jpg \n", + " inflating: hymenoptera_data/val/bees/2407809945_fb525ef54d.jpg \n", + " inflating: hymenoptera_data/val/bees/2415414155_1916f03b42.jpg \n", + " inflating: hymenoptera_data/val/bees/2438480600_40a1249879.jpg \n", + " inflating: hymenoptera_data/val/bees/2444778727_4b781ac424.jpg \n", + " inflating: hymenoptera_data/val/bees/2457841282_7867f16639.jpg \n", + " inflating: hymenoptera_data/val/bees/2470492902_3572c90f75.jpg \n", + " inflating: hymenoptera_data/val/bees/2478216347_535c8fe6d7.jpg \n", + " inflating: hymenoptera_data/val/bees/2501530886_e20952b97d.jpg \n", + " inflating: hymenoptera_data/val/bees/2506114833_90a41c5267.jpg \n", + " inflating: hymenoptera_data/val/bees/2509402554_31821cb0b6.jpg \n", + " inflating: hymenoptera_data/val/bees/2525379273_dcb26a516d.jpg \n", + " inflating: hymenoptera_data/val/bees/26589803_5ba7000313.jpg \n", + " inflating: hymenoptera_data/val/bees/2668391343_45e272cd07.jpg \n", + " inflating: hymenoptera_data/val/bees/2670536155_c170f49cd0.jpg \n", + " inflating: hymenoptera_data/val/bees/2685605303_9eed79d59d.jpg \n", + " inflating: hymenoptera_data/val/bees/2702408468_d9ed795f4f.jpg \n", + " inflating: hymenoptera_data/val/bees/2709775832_85b4b50a57.jpg \n", + " inflating: hymenoptera_data/val/bees/2717418782_bd83307d9f.jpg \n", + " inflating: hymenoptera_data/val/bees/272986700_d4d4bf8c4b.jpg \n", + " inflating: hymenoptera_data/val/bees/2741763055_9a7bb00802.jpg \n", + " inflating: hymenoptera_data/val/bees/2745389517_250a397f31.jpg \n", + " inflating: hymenoptera_data/val/bees/2751836205_6f7b5eff30.jpg \n", + " inflating: hymenoptera_data/val/bees/2782079948_8d4e94a826.jpg \n", + " inflating: hymenoptera_data/val/bees/2809496124_5f25b5946a.jpg \n", + " inflating: hymenoptera_data/val/bees/2815838190_0a9889d995.jpg \n", + " inflating: hymenoptera_data/val/bees/2841437312_789699c740.jpg \n", + " inflating: hymenoptera_data/val/bees/2883093452_7e3a1eb53f.jpg \n", + " inflating: hymenoptera_data/val/bees/290082189_f66cb80bfc.jpg \n", + " inflating: hymenoptera_data/val/bees/296565463_d07a7bed96.jpg \n", + " inflating: hymenoptera_data/val/bees/3077452620_548c79fda0.jpg \n", + " inflating: hymenoptera_data/val/bees/348291597_ee836fbb1a.jpg \n", + " inflating: hymenoptera_data/val/bees/350436573_41f4ecb6c8.jpg \n", + " inflating: hymenoptera_data/val/bees/353266603_d3eac7e9a0.jpg \n", + " inflating: hymenoptera_data/val/bees/372228424_16da1f8884.jpg \n", + " inflating: hymenoptera_data/val/bees/400262091_701c00031c.jpg \n", + " inflating: hymenoptera_data/val/bees/416144384_961c326481.jpg \n", + " inflating: hymenoptera_data/val/bees/44105569_16720a960c.jpg \n", + " inflating: hymenoptera_data/val/bees/456097971_860949c4fc.jpg \n", + " inflating: hymenoptera_data/val/bees/464594019_1b24a28bb1.jpg \n", + " inflating: hymenoptera_data/val/bees/485743562_d8cc6b8f73.jpg \n", + " inflating: hymenoptera_data/val/bees/540976476_844950623f.jpg \n", + " inflating: hymenoptera_data/val/bees/54736755_c057723f64.jpg \n", + " inflating: hymenoptera_data/val/bees/57459255_752774f1b2.jpg \n", + " inflating: hymenoptera_data/val/bees/576452297_897023f002.jpg \n", + " inflating: hymenoptera_data/val/bees/586474709_ae436da045.jpg \n", + " inflating: hymenoptera_data/val/bees/590318879_68cf112861.jpg \n", + " inflating: hymenoptera_data/val/bees/59798110_2b6a3c8031.jpg \n", + " inflating: hymenoptera_data/val/bees/603709866_a97c7cfc72.jpg \n", + " inflating: hymenoptera_data/val/bees/603711658_4c8cd2201e.jpg \n", + " inflating: hymenoptera_data/val/bees/65038344_52a45d090d.jpg \n", + " inflating: hymenoptera_data/val/bees/6a00d8341c630a53ef00e553d0beb18834-800wi.jpg \n", + " inflating: hymenoptera_data/val/bees/72100438_73de9f17af.jpg \n", + " inflating: hymenoptera_data/val/bees/759745145_e8bc776ec8.jpg \n", + " inflating: hymenoptera_data/val/bees/936182217_c4caa5222d.jpg \n", + " inflating: hymenoptera_data/val/bees/abeja.jpg \n" + ] + } + ], + "source": [ + "# download the data\n", + "!wget https://download.pytorch.org/tutorial/hymenoptera_data.zip\n", + "!unzip hymenoptera_data.zip" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "doUww-u_37dw" + }, + "source": [ + "## Data Transformation\n", + "This is an image classification task, which means that we need to perform a few transformations on our dataset before we train our models. I used similar transformations as used in this [tutorial](https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html#transfer-learning-for-computer-vision-tutorial). For a detailed overview of each transformation take a look at the official torchvision [documentation](https://pytorch.org/docs/stable/torchvision/transforms.html).\n", + "\n", + "The following code block performs the following operations:\n", + "- The `data_transforms` contains a series of transformations that will be performed on each image found in the dataset. This includes cropping the image, resizing the image, converting it to tensor, reshaping it, and normalizing it. \n", + "- Once those transformations have been defined, then the `DataLoader` function is used to automatically load the datasets and perform any additional configuration such as shuffling, batches, etc.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "501gdjiu6v24" + }, + "outputs": [], + "source": [ + "# configure root folder on your gdrive\n", + "data_dir = 'hymenoptera_data'\n", + "\n", + "# custom transformer to flatten the image tensors\n", + "class ReshapeTransform:\n", + " def __init__(self, new_size):\n", + " self.new_size = new_size\n", + "\n", + " def __call__(self, img):\n", + " result = torch.reshape(img, self.new_size)\n", + " return result\n", + "\n", + "# transformations used to standardize and normalize the datasets\n", + "data_transforms = {\n", + " 'train': transforms.Compose([\n", + " transforms.Resize(224),\n", + " transforms.CenterCrop(224),\n", + " transforms.ToTensor(),\n", + " ReshapeTransform((-1,)) # flattens the data\n", + " ]),\n", + " 'val': transforms.Compose([\n", + " transforms.Resize(224),\n", + " transforms.CenterCrop(224),\n", + " transforms.ToTensor(),\n", + " ReshapeTransform((-1,)) # flattens the data\n", + " ]),\n", + "}\n", + "\n", + "# load the correspoding folders\n", + "image_datasets = {x: datasets.ImageFolder(os.path.join(data_dir, x),\n", + " data_transforms[x])\n", + " for x in ['train', 'val']}\n", + "\n", + "# load the entire dataset; we are not using minibatches here\n", + "train_dataset = torch.utils.data.DataLoader(image_datasets['train'],\n", + " batch_size=len(image_datasets['train']),\n", + " shuffle=True)\n", + "\n", + "test_dataset = torch.utils.data.DataLoader(image_datasets['val'],\n", + " batch_size=len(image_datasets['val']),\n", + " shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OZ3r9BfLp9pH", + "outputId": "9a0dc4bc-0859-48c6-8078-8b59f11a15eb" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(244, 153)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(image_datasets['train']), len(image_datasets['val'])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OP9zr48w9xZ3" + }, + "source": [ + "## Print sample\n", + "It's always a good practise to take a quick look at the dataset before training your models. Below we print out an example of one of the images from the `train_dataset`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 321 + }, + "id": "BY3MOpT-5U4Q", + "outputId": "00f1257f-de98-4ad8-8b2a-453083246019" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dimension of image: torch.Size([244, 150528]) \n", + " Dimension of labels torch.Size([244])\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "# load the entire dataset\n", + "x, y = next(iter(train_dataset))\n", + "\n", + "# print one example\n", + "dim = x.shape[1]\n", + "print(\"Dimension of image:\", x.shape, \"\\n\", \n", + " \"Dimension of labels\", y.shape)\n", + "\n", + "plt.imshow(x[160].reshape(1, 3, 224, 224).squeeze().T.numpy())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "bNKG-_uLZtQ7" + }, + "source": [ + "## Building the Model\n", + "Let's now implement our [logistic regression](https://en.wikipedia.org/wiki/Logistic_regression) model. Logistic regression is one in a family of machine learning techniques that are used to train binary classifiers. They are also a great way to understand the fundamental building blocks of neural networks, thus they can also be considered the simplest of neural networks where the model performs a `forward` and `backward` propagation to train the model on the data provided. \n", + "\n", + "If you don't fully understand the structure of the code below, I strongly recommend you to read the following [tutorial](https://medium.com/dair-ai/pytorch-1-2-introduction-guide-f6fa9bb7597c), which I wrote for PyTorch beginners. You can also check out [Week 2](https://www.coursera.org/learn/neural-networks-deep-learning/home/week/2) of Andrew Ng's Deep Learning Specialization course for all the explanation, intuitions, and details of the different parts of the neural network such as the `forward`, `sigmoid`, `backward`, and `optimization` steps. \n", + "\n", + "In short:\n", + "- The `__init__` function initializes all the parameters (`W`, `b`, `grad`) that will be used to train the model through backpropagation. \n", + "- The goal is to learn the `W` and `b` that minimimizes the cost function which is computed as seen in the `loss` function below.\n", + "\n", + "Note that this is a very detailed implementation of a logistic regression model so I had to explicitly move a lot of the computations into the GPU for faster calcuation, `to(device)` takes care of this in PyTorch. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "lH1_IRKwR8Zm" + }, + "outputs": [], + "source": [ + "class LR(nn.Module):\n", + " def __init__(self, dim, lr=torch.scalar_tensor(0.01)):\n", + " super(LR, self).__init__()\n", + " # intialize parameters\n", + " self.w = torch.zeros(dim, 1, dtype=torch.float).to(device)\n", + " self.b = torch.scalar_tensor(0).to(device)\n", + " self.grads = {\"dw\": torch.zeros(dim, 1, dtype=torch.float).to(device),\n", + " \"db\": torch.scalar_tensor(0).to(device)}\n", + " self.lr = lr.to(device)\n", + "\n", + " def forward(self, x):\n", + " # compute forward\n", + " z = torch.mm(self.w.T, x) + self.b\n", + " a = self.sigmoid(z)\n", + " return a\n", + "\n", + " def sigmoid(self, z):\n", + " # compute sigmoid\n", + " return 1/(1 + torch.exp(-z))\n", + "\n", + " def backward(self, x, yhat, y):\n", + " # compute backward\n", + " self.grads[\"dw\"] = (1/x.shape[1]) * torch.mm(x, (yhat - y).T)\n", + " self.grads[\"db\"] = (1/x.shape[1]) * torch.sum(yhat - y)\n", + " \n", + " def optimize(self):\n", + " # optimization step\n", + " self.w = self.w - self.lr * self.grads[\"dw\"]\n", + " self.b = self.b - self.lr * self.grads[\"db\"]\n", + "\n", + "## utility functions\n", + "def loss(yhat, y):\n", + " m = y.size()[1]\n", + " return -(1/m)* torch.sum(y*torch.log(yhat) + (1 - y)* torch.log(1-yhat))\n", + "\n", + "def predict(yhat, y):\n", + " y_prediction = torch.zeros(1, y.size()[1])\n", + " for i in range(yhat.size()[1]):\n", + " if yhat[0, i] <= 0.5:\n", + " y_prediction[0, i] = 0\n", + " else:\n", + " y_prediction[0, i] = 1\n", + " return 100 - torch.mean(torch.abs(y_prediction - y)) * 100" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "N8SZXITgS5sQ" + }, + "source": [ + "## Pretesting the Model\n", + "It is also good practice to test your model and make sure the right steps are taking place before training the entire model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "L40JX-aXS3cP", + "outputId": "4697f480-251a-489a-be84-394ad0fc6d4f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "torch.Size([244])\n", + "torch.Size([150528, 244]) 150528 torch.Size([1, 244])\n", + "Cost: tensor(0.6931)\n", + "Accuracy: tensor(50.4098)\n" + ] + } + ], + "source": [ + "# model pretesting\n", + "x, y = next(iter(train_dataset))\n", + "\n", + "# flatten/transform the data\n", + "x_flatten = x.T\n", + "y = y.unsqueeze(0) \n", + "\n", + "# num_px is the dimension of the images\n", + "dim = x_flatten.shape[0]\n", + "\n", + "# model instance\n", + "model = LR(dim)\n", + "model.to(device)\n", + "yhat = model.forward(x_flatten.to(device))\n", + "yhat = yhat.data.cpu()\n", + "\n", + "# calculate loss\n", + "cost = loss(yhat, y)\n", + "prediction = predict(yhat, y)\n", + "print(\"Cost: \", cost)\n", + "print(\"Accuracy: \", prediction)\n", + "\n", + "# backpropagate\n", + "model.backward(x_flatten.to(device), yhat.to(device), y.to(device))\n", + "model.optimize()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pJiwRC7ecBBw" + }, + "source": [ + "## Train the Model\n", + "It's now time to train the model. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true, + "base_uri": "https://localhost:8080/" + }, + "id": "K4pS54kMTT0n", + "outputId": "d884dcba-bcfe-43c1-be03-2ac8185d673e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Cost after iteration 0: 0.6931472420692444 | Train Acc: 50.40983581542969 | Test Acc: 45.75163269042969\n", + "Cost after iteration 10: 0.6691470742225647 | Train Acc: 64.3442611694336 | Test Acc: 54.24836730957031\n", + "Cost after iteration 20: 0.6513182520866394 | Train Acc: 68.44261932373047 | Test Acc: 54.24836730957031\n", + "Cost after iteration 30: 0.6367825269699097 | Train Acc: 68.03278350830078 | Test Acc: 54.24836730957031\n", + "Cost after iteration 40: 0.6245337128639221 | Train Acc: 69.67213439941406 | Test Acc: 54.90196228027344\n", + "Cost after iteration 50: 0.6139225959777832 | Train Acc: 70.90164184570312 | Test Acc: 56.20914840698242\n", + "Cost after iteration 60: 0.6045235991477966 | Train Acc: 72.54098510742188 | Test Acc: 56.86274337768555\n", + "Cost after iteration 70: 0.5960512161254883 | Train Acc: 74.18032836914062 | Test Acc: 57.51633834838867\n", + "Cost after iteration 80: 0.5883085131645203 | Train Acc: 73.77049255371094 | Test Acc: 57.51633834838867\n", + "Cost after iteration 90: 0.5811557769775391 | Train Acc: 74.59016418457031 | Test Acc: 58.1699333190918\n", + "Cost after iteration 100: 0.5744912028312683 | Train Acc: 75.0 | Test Acc: 59.47712326049805\n", + "Cost after iteration 110: 0.5682382583618164 | Train Acc: 75.40983581542969 | Test Acc: 60.13071823120117\n", + "Cost after iteration 120: 0.5623382925987244 | Train Acc: 75.81967163085938 | Test Acc: 60.13071823120117\n", + "Cost after iteration 130: 0.5567453503608704 | Train Acc: 75.81967163085938 | Test Acc: 59.47712326049805\n", + "Cost after iteration 140: 0.5514224767684937 | Train Acc: 75.81967163085938 | Test Acc: 59.47712326049805\n", + "Cost after iteration 150: 0.5463393926620483 | Train Acc: 76.22950744628906 | Test Acc: 58.82352828979492\n", + "Cost after iteration 160: 0.5414712429046631 | Train Acc: 76.63934326171875 | Test Acc: 58.82352828979492\n", + "Cost after iteration 170: 0.5367969274520874 | Train Acc: 77.04917907714844 | Test Acc: 58.82352828979492\n", + "Cost after iteration 180: 0.5322986245155334 | Train Acc: 77.04917907714844 | Test Acc: 58.82352828979492\n", + "Cost after iteration 190: 0.5279611349105835 | Train Acc: 77.45901489257812 | Test Acc: 58.82352828979492\n", + "Cost after iteration 200: 0.5237710475921631 | Train Acc: 78.2786865234375 | Test Acc: 58.1699333190918\n", + "Cost after iteration 210: 0.5197169780731201 | Train Acc: 78.2786865234375 | Test Acc: 58.1699333190918\n", + "Cost after iteration 220: 0.5157885551452637 | Train Acc: 79.09835815429688 | Test Acc: 57.51633834838867\n", + "Cost after iteration 230: 0.511976957321167 | Train Acc: 79.91802978515625 | Test Acc: 57.51633834838867\n", + "Cost after iteration 240: 0.5082740783691406 | Train Acc: 79.91802978515625 | Test Acc: 60.13071823120117\n", + "Cost after iteration 250: 0.5046727657318115 | Train Acc: 79.91802978515625 | Test Acc: 60.13071823120117\n", + "Cost after iteration 260: 0.5011667013168335 | Train Acc: 80.73770141601562 | Test Acc: 60.7843132019043\n", + "Cost after iteration 270: 0.49775001406669617 | Train Acc: 81.14753723144531 | Test Acc: 60.7843132019043\n", + "Cost after iteration 280: 0.49441757798194885 | Train Acc: 81.557373046875 | Test Acc: 60.7843132019043\n", + "Cost after iteration 290: 0.49116453528404236 | Train Acc: 81.557373046875 | Test Acc: 61.43790817260742\n", + "Cost after iteration 300: 0.48798662424087524 | Train Acc: 81.557373046875 | Test Acc: 61.43790817260742\n", + "Cost after iteration 310: 0.48487988114356995 | Train Acc: 81.96721649169922 | Test Acc: 61.43790817260742\n", + "Cost after iteration 320: 0.4818406105041504 | Train Acc: 81.96721649169922 | Test Acc: 61.43790817260742\n", + "Cost after iteration 330: 0.4788656234741211 | Train Acc: 82.37704467773438 | Test Acc: 61.43790817260742\n", + "Cost after iteration 340: 0.4759516716003418 | Train Acc: 82.37704467773438 | Test Acc: 61.43790817260742\n", + "Cost after iteration 350: 0.47309616208076477 | Train Acc: 83.19672393798828 | Test Acc: 62.09150314331055\n", + "Cost after iteration 360: 0.4702962040901184 | Train Acc: 84.01639556884766 | Test Acc: 62.09150314331055\n", + "Cost after iteration 370: 0.46754953265190125 | Train Acc: 84.01639556884766 | Test Acc: 62.09150314331055\n", + "Cost after iteration 380: 0.46485376358032227 | Train Acc: 84.01639556884766 | Test Acc: 61.43790817260742\n", + "Cost after iteration 390: 0.4622068703174591 | Train Acc: 84.01639556884766 | Test Acc: 61.43790817260742\n", + "Cost after iteration 400: 0.4596068859100342 | Train Acc: 84.01639556884766 | Test Acc: 61.43790817260742\n", + "Cost after iteration 410: 0.45705193281173706 | Train Acc: 84.01639556884766 | Test Acc: 61.43790817260742\n", + "Cost after iteration 420: 0.4545402526855469 | Train Acc: 84.42623138427734 | Test Acc: 61.43790817260742\n", + "Cost after iteration 430: 0.4520702660083771 | Train Acc: 84.83606719970703 | Test Acc: 61.43790817260742\n", + "Cost after iteration 440: 0.4496404826641083 | Train Acc: 84.83606719970703 | Test Acc: 61.43790817260742\n", + "Cost after iteration 450: 0.4472493827342987 | Train Acc: 85.24590301513672 | Test Acc: 61.43790817260742\n", + "Cost after iteration 460: 0.4448956847190857 | Train Acc: 85.6557388305664 | Test Acc: 61.43790817260742\n", + "Cost after iteration 470: 0.4425780773162842 | Train Acc: 85.6557388305664 | Test Acc: 61.43790817260742\n", + "Cost after iteration 480: 0.44029539823532104 | Train Acc: 85.6557388305664 | Test Acc: 61.43790817260742\n", + "Cost after iteration 490: 0.4380464255809784 | Train Acc: 85.6557388305664 | Test Acc: 61.43790817260742\n" + ] + } + ], + "source": [ + "# hyperparams\n", + "costs = []\n", + "dim = x_flatten.shape[0]\n", + "learning_rate = torch.scalar_tensor(0.0001).to(device)\n", + "num_iterations = 500\n", + "lrmodel = LR(dim, learning_rate)\n", + "lrmodel.to(device)\n", + "\n", + "# transform the data\n", + "def transform_data(x, y):\n", + " x_flatten = x.T\n", + " y = y.unsqueeze(0) \n", + " return x_flatten, y \n", + "\n", + "# train the model\n", + "for i in range(num_iterations):\n", + " x, y = next(iter(train_dataset))\n", + " test_x, test_y = next(iter(test_dataset))\n", + " x, y = transform_data(x, y)\n", + " test_x, test_y = transform_data(test_x, test_y)\n", + "\n", + " # forward\n", + " yhat = lrmodel.forward(x.to(device))\n", + " cost = loss(yhat.data.cpu(), y)\n", + " train_pred = predict(yhat, y)\n", + " \n", + " # backward\n", + " lrmodel.backward(x.to(device), \n", + " yhat.to(device), \n", + " y.to(device))\n", + " lrmodel.optimize()\n", + "\n", + " # test\n", + " yhat_test = lrmodel.forward(test_x.to(device))\n", + " test_pred = predict(yhat_test, test_y)\n", + "\n", + " if i % 10 == 0:\n", + " costs.append(cost)\n", + "\n", + " if i % 10 == 0:\n", + " print(\"Cost after iteration {}: {} | Train Acc: {} | Test Acc: {}\".format(i, \n", + " cost, \n", + " train_pred,\n", + " test_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CN5v7F1h1uuz" + }, + "source": [ + "## Result\n", + "From the loss curve below you can see that the model is sort of learning to classify the images given the decreas in the loss. I only ran the model for `100` iterations. Train the model for many more rounds and analyze the results. In fact, I have suggested a couple of experiments and exercises at the end of the tutorial that you can try to get a more improved model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "colab": { + "background_save": true + }, + "id": "sN-m0_a8mx8Z", + "outputId": "0e497a86-39c1-49e8-d24f-dc553a13ca0e" + }, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "## the trend in the context of loss\n", + "plt.plot(costs)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Lsfjo1DQLQBJ" + }, + "source": [ + "## Some Notes\n", + "There are many improvements and different experiments that you can perform on top of this notebook to keep practising ML:\n", + "- It is always good to normalize/standardize your images which helps with learning. As an experiment, you can research and try different ways to standarize the dataset. We have normalized the dataset with the builtin PyTorch [normalizer](https://pytorch.org/docs/stable/torchvision/transforms.html#torchvision.transforms.Normalize) which uses the mean and standard deviation. Play around with different transformations or normalization techniques. What effect does this have on learning in terms of speed and loss?\n", + "- You can try many things to help with learning such as playing around with the learning rate. Try to decrease and increase the learning rate and observe the effect of this in learning? \n", + "- If you explored the dataset further, you may have noticed that all the \"no-bee\" images are actually \"ant\" images. If you would like to create a more robust model, you may want to make your \"no-bee\" images more random and diverse through some data augmentation technique. This is a more advanced approach but there is a lot of good content to try out this idea. \n", + "- The model is not really performing well just using simple logistic regression model. It could be because of the dataset I am using and because I didn't train it for long enough. Hyperparameters may also be off. It is a relatively small dataset but the performance could get better with more data and training over time. A more challenging task involves adopting the model to other datasets. Give it a try!\n", + "- Another important part that is missing in this tutorial is the comprehensive analysis of the model results. If you understand the code, it should be easy to figure out how to test with a few examples. In fact, it would also be great if you can put aside a small testing dataset for this part of the exercise, so as to test the generalization capabilities of the model.\n", + "- We built the logistic regression model from scratch but with libraries like PyTorch, these days you can simply leverage the high-level functions that implement certain parts of the neural network for you. This simplifies your code and minimizes the amount of bugs in your code. Plus you don't have to code your neural networks from scratch all the time. As a bonus exercise, try to adapt PyTorch builtin modules and functions for implementing a simpler, more concise version of the above logistic regression model. I will also add this as a to-do task for myself and post a solution soon. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "CXs3Nx0BIQYZ" + }, + "source": [ + "## References\n", + "- [Understanding the Impact of Learning Rate on Neural Network Performance](https://machinelearningmastery.com/understand-the-dynamics-of-learning-rate-on-deep-learning-neural-networks/)\n", + "- [Transfer Learning for Computer Vision Tutorial](https://pytorch.org/tutorials/beginner/transfer_learning_tutorial.html#transfer-learning-for-computer-vision-tutorial)\n", + "- [Deep Learning Specialization by Andrew Ng](https://www.coursera.org/learn/neural-networks-deep-learning/home/welcome)" + ] + } + ], + "metadata": { + "accelerator": "GPU", + "colab": { + "collapsed_sections": [], + "name": "Pytorch Logistic Regression from Scratch.ipynb", + "provenance": [] + }, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.12" + } + }, + "nbformat": 4, + "nbformat_minor": 1 +}