From a95ddb61b8b4c683d43e8145ffc78764694a4fdc Mon Sep 17 00:00:00 2001 From: judsonupchurch Date: Mon, 27 Jan 2025 02:14:20 +0000 Subject: [PATCH] Lecture 28. Overfitting and generalization --- lecture25_27/notes_25.ipynb | 210 ++++++++-------- lecture28_31/notes_28.ipynb | 461 ++++++++++++++++++++++++++++++++++++ lecture28_31/notes_28.pdf | Bin 0 -> 68964 bytes lecture28_31/notes_28.py | 375 +++++++++++++++++++++++++++++ 4 files changed, 944 insertions(+), 102 deletions(-) create mode 100644 lecture28_31/notes_28.ipynb create mode 100644 lecture28_31/notes_28.pdf create mode 100644 lecture28_31/notes_28.py diff --git a/lecture25_27/notes_25.ipynb b/lecture25_27/notes_25.ipynb index 1f52de0..8c27574 100644 --- a/lecture25_27/notes_25.ipynb +++ b/lecture25_27/notes_25.ipynb @@ -786,114 +786,120 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "epoch: 0, acc: 0.327, loss: 1.099, lr: 0.02\n", - "epoch: 100, acc: 0.523, loss: 0.941, lr: 0.01998021958261321\n", - "epoch: 200, acc: 0.517, loss: 0.854, lr: 0.019960279044701046\n", - "epoch: 300, acc: 0.630, loss: 0.753, lr: 0.019940378268975763\n", - "epoch: 400, acc: 0.693, loss: 0.699, lr: 0.01992051713662487\n", - "epoch: 500, acc: 0.693, loss: 0.658, lr: 0.01990069552930875\n", - "epoch: 600, acc: 0.707, loss: 0.632, lr: 0.019880913329158343\n", - "epoch: 700, acc: 0.707, loss: 0.612, lr: 0.019861170418772778\n", - "epoch: 800, acc: 0.720, loss: 0.572, lr: 0.019841466681217078\n", - "epoch: 900, acc: 0.737, loss: 0.558, lr: 0.01982180200001982\n", - "epoch: 1000, acc: 0.730, loss: 0.548, lr: 0.019802176259170884\n", - "epoch: 1100, acc: 0.730, loss: 0.540, lr: 0.01978258934311912\n", - "epoch: 1200, acc: 0.733, loss: 0.529, lr: 0.01976304113677013\n", - "epoch: 1300, acc: 0.733, loss: 0.521, lr: 0.019743531525483964\n", - "epoch: 1400, acc: 0.750, loss: 0.517, lr: 0.01972406039507293\n", - "epoch: 1500, acc: 0.750, loss: 0.518, lr: 0.019704627631799327\n", - "epoch: 1600, acc: 0.743, loss: 0.508, lr: 0.019685233122373254\n", - "epoch: 1700, acc: 0.723, loss: 0.505, lr: 0.019665876753950384\n", - "epoch: 1800, acc: 0.740, loss: 0.502, lr: 0.01964655841412981\n", - "epoch: 1900, acc: 0.740, loss: 0.498, lr: 0.019627277990951823\n", - "epoch: 2000, acc: 0.730, loss: 0.493, lr: 0.019608035372895814\n", - "epoch: 2100, acc: 0.753, loss: 0.491, lr: 0.01958883044887805\n", - "epoch: 2200, acc: 0.760, loss: 0.488, lr: 0.019569663108249594\n", - "epoch: 2300, acc: 0.757, loss: 0.487, lr: 0.01955053324079414\n", - "epoch: 2400, acc: 0.743, loss: 0.482, lr: 0.019531440736725945\n", - "epoch: 2500, acc: 0.743, loss: 0.479, lr: 0.019512385486687673\n", - "epoch: 2600, acc: 0.760, loss: 0.479, lr: 0.019493367381748363\n", - "epoch: 2700, acc: 0.797, loss: 0.462, lr: 0.019474386313401298\n", - "epoch: 2800, acc: 0.787, loss: 0.439, lr: 0.019455442173562\n", - "epoch: 2900, acc: 0.790, loss: 0.436, lr: 0.019436534854566128\n", - "epoch: 3000, acc: 0.800, loss: 0.435, lr: 0.01941766424916747\n", - "epoch: 3100, acc: 0.787, loss: 0.433, lr: 0.019398830250535893\n", - "epoch: 3200, acc: 0.793, loss: 0.430, lr: 0.019380032752255354\n", - "epoch: 3300, acc: 0.800, loss: 0.429, lr: 0.01936127164832186\n", - "epoch: 3400, acc: 0.790, loss: 0.427, lr: 0.01934254683314152\n", - "epoch: 3500, acc: 0.790, loss: 0.426, lr: 0.019323858201528515\n", - "epoch: 3600, acc: 0.783, loss: 0.428, lr: 0.019305205648703173\n", - "epoch: 3700, acc: 0.790, loss: 0.424, lr: 0.01928658907028997\n", - "epoch: 3800, acc: 0.773, loss: 0.428, lr: 0.01926800836231563\n", - "epoch: 3900, acc: 0.787, loss: 0.420, lr: 0.019249463421207133\n", - "epoch: 4000, acc: 0.797, loss: 0.417, lr: 0.019230954143789846\n", - "epoch: 4100, acc: 0.797, loss: 0.415, lr: 0.019212480427285565\n", - "epoch: 4200, acc: 0.807, loss: 0.414, lr: 0.019194042169310647\n", - "epoch: 4300, acc: 0.810, loss: 0.412, lr: 0.019175639267874092\n", - "epoch: 4400, acc: 0.807, loss: 0.413, lr: 0.019157271621375684\n", - "epoch: 4500, acc: 0.793, loss: 0.411, lr: 0.0191389391286041\n", - "epoch: 4600, acc: 0.810, loss: 0.413, lr: 0.019120641688735073\n", - "epoch: 4700, acc: 0.810, loss: 0.409, lr: 0.019102379201329525\n", - "epoch: 4800, acc: 0.790, loss: 0.408, lr: 0.01908415156633174\n", - "epoch: 4900, acc: 0.810, loss: 0.408, lr: 0.01906595868406753\n", - "epoch: 5000, acc: 0.800, loss: 0.406, lr: 0.01904780045524243\n", - "epoch: 5100, acc: 0.793, loss: 0.407, lr: 0.019029676780939874\n", - "epoch: 5200, acc: 0.787, loss: 0.405, lr: 0.019011587562619416\n", - "epoch: 5300, acc: 0.793, loss: 0.405, lr: 0.01899353270211493\n", - "epoch: 5400, acc: 0.797, loss: 0.404, lr: 0.018975512101632844\n", - "epoch: 5500, acc: 0.810, loss: 0.405, lr: 0.018957525663750367\n", - "epoch: 5600, acc: 0.793, loss: 0.403, lr: 0.018939573291413745\n", - "epoch: 5700, acc: 0.790, loss: 0.403, lr: 0.018921654887936498\n", - "epoch: 5800, acc: 0.790, loss: 0.402, lr: 0.018903770356997706\n", - "epoch: 5900, acc: 0.793, loss: 0.401, lr: 0.018885919602640248\n", - "epoch: 6000, acc: 0.813, loss: 0.404, lr: 0.018868102529269144\n", - "epoch: 6100, acc: 0.807, loss: 0.401, lr: 0.018850319041649778\n", - "epoch: 6200, acc: 0.807, loss: 0.402, lr: 0.018832569044906263\n", - "epoch: 6300, acc: 0.810, loss: 0.401, lr: 0.018814852444519702\n", - "epoch: 6400, acc: 0.810, loss: 0.399, lr: 0.018797169146326564\n", - "epoch: 6500, acc: 0.793, loss: 0.401, lr: 0.01877951905651696\n", - "epoch: 6600, acc: 0.797, loss: 0.399, lr: 0.018761902081633034\n", - "epoch: 6700, acc: 0.807, loss: 0.398, lr: 0.018744318128567278\n", - "epoch: 6800, acc: 0.790, loss: 0.399, lr: 0.018726767104560903\n", - "epoch: 6900, acc: 0.810, loss: 0.398, lr: 0.018709248917202218\n", - "epoch: 7000, acc: 0.807, loss: 0.398, lr: 0.018691763474424996\n", - "epoch: 7100, acc: 0.807, loss: 0.399, lr: 0.018674310684506857\n", - "epoch: 7200, acc: 0.790, loss: 0.398, lr: 0.01865689045606769\n", - "epoch: 7300, acc: 0.790, loss: 0.398, lr: 0.01863950269806802\n", - "epoch: 7400, acc: 0.803, loss: 0.396, lr: 0.018622147319807447\n", - "epoch: 7500, acc: 0.790, loss: 0.399, lr: 0.018604824230923075\n", - "epoch: 7600, acc: 0.793, loss: 0.398, lr: 0.01858753334138793\n", - "epoch: 7700, acc: 0.810, loss: 0.396, lr: 0.018570274561509396\n", - "epoch: 7800, acc: 0.810, loss: 0.395, lr: 0.018553047801927663\n", - "epoch: 7900, acc: 0.803, loss: 0.395, lr: 0.018535852973614212\n", - "epoch: 8000, acc: 0.790, loss: 0.395, lr: 0.01851868998787026\n", - "epoch: 8100, acc: 0.813, loss: 0.395, lr: 0.018501558756325222\n", - "epoch: 8200, acc: 0.790, loss: 0.395, lr: 0.01848445919093522\n", - "epoch: 8300, acc: 0.793, loss: 0.395, lr: 0.018467391203981567\n", - "epoch: 8400, acc: 0.793, loss: 0.395, lr: 0.018450354708069265\n", - "epoch: 8500, acc: 0.813, loss: 0.394, lr: 0.018433349616125496\n", - "epoch: 8600, acc: 0.813, loss: 0.395, lr: 0.018416375841398172\n", - "epoch: 8700, acc: 0.793, loss: 0.394, lr: 0.01839943329745444\n", - "epoch: 8800, acc: 0.783, loss: 0.398, lr: 0.01838252189817921\n", - "epoch: 8900, acc: 0.793, loss: 0.393, lr: 0.018365641557773718\n", - "epoch: 9000, acc: 0.797, loss: 0.393, lr: 0.018348792190754044\n", - "epoch: 9100, acc: 0.813, loss: 0.394, lr: 0.0183319737119497\n", - "epoch: 9200, acc: 0.813, loss: 0.393, lr: 0.018315186036502167\n", - "epoch: 9300, acc: 0.810, loss: 0.393, lr: 0.018298429079863496\n", - "epoch: 9400, acc: 0.793, loss: 0.395, lr: 0.018281702757794862\n", - "epoch: 9500, acc: 0.800, loss: 0.392, lr: 0.018265006986365174\n", - "epoch: 9600, acc: 0.797, loss: 0.393, lr: 0.018248341681949654\n", - "epoch: 9700, acc: 0.807, loss: 0.392, lr: 0.018231706761228456\n", - "epoch: 9800, acc: 0.817, loss: 0.393, lr: 0.018215102141185255\n", - "epoch: 9900, acc: 0.817, loss: 0.395, lr: 0.018198527739105907\n", - "epoch: 10000, acc: 0.790, loss: 0.392, lr: 0.018181983472577025\n" + "epoch: 0, acc: 0.383, loss: 1.099, lr: 0.02\n", + "epoch: 100, acc: 0.517, loss: 0.941, lr: 0.01998021958261321\n", + "epoch: 200, acc: 0.707, loss: 0.705, lr: 0.019960279044701046\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch: 300, acc: 0.723, loss: 0.591, lr: 0.019940378268975763\n", + "epoch: 400, acc: 0.750, loss: 0.535, lr: 0.01992051713662487\n", + "epoch: 500, acc: 0.777, loss: 0.488, lr: 0.01990069552930875\n", + "epoch: 600, acc: 0.787, loss: 0.460, lr: 0.019880913329158343\n", + "epoch: 700, acc: 0.810, loss: 0.441, lr: 0.019861170418772778\n", + "epoch: 800, acc: 0.810, loss: 0.425, lr: 0.019841466681217078\n", + "epoch: 900, acc: 0.827, loss: 0.403, lr: 0.01982180200001982\n", + "epoch: 1000, acc: 0.823, loss: 0.390, lr: 0.019802176259170884\n", + "epoch: 1100, acc: 0.827, loss: 0.383, lr: 0.01978258934311912\n", + "epoch: 1200, acc: 0.830, loss: 0.377, lr: 0.01976304113677013\n", + "epoch: 1300, acc: 0.837, loss: 0.375, lr: 0.019743531525483964\n", + "epoch: 1400, acc: 0.833, loss: 0.369, lr: 0.01972406039507293\n", + "epoch: 1500, acc: 0.830, loss: 0.366, lr: 0.019704627631799327\n", + "epoch: 1600, acc: 0.833, loss: 0.362, lr: 0.019685233122373254\n", + "epoch: 1700, acc: 0.827, loss: 0.359, lr: 0.019665876753950384\n", + "epoch: 1800, acc: 0.837, loss: 0.357, lr: 0.01964655841412981\n", + "epoch: 1900, acc: 0.833, loss: 0.355, lr: 0.019627277990951823\n", + "epoch: 2000, acc: 0.843, loss: 0.353, lr: 0.019608035372895814\n", + "epoch: 2100, acc: 0.833, loss: 0.352, lr: 0.01958883044887805\n", + "epoch: 2200, acc: 0.843, loss: 0.350, lr: 0.019569663108249594\n", + "epoch: 2300, acc: 0.840, loss: 0.349, lr: 0.01955053324079414\n", + "epoch: 2400, acc: 0.837, loss: 0.347, lr: 0.019531440736725945\n", + "epoch: 2500, acc: 0.837, loss: 0.346, lr: 0.019512385486687673\n", + "epoch: 2600, acc: 0.847, loss: 0.344, lr: 0.019493367381748363\n", + "epoch: 2700, acc: 0.837, loss: 0.343, lr: 0.019474386313401298\n", + "epoch: 2800, acc: 0.833, loss: 0.343, lr: 0.019455442173562\n", + "epoch: 2900, acc: 0.837, loss: 0.341, lr: 0.019436534854566128\n", + "epoch: 3000, acc: 0.843, loss: 0.339, lr: 0.01941766424916747\n", + "epoch: 3100, acc: 0.843, loss: 0.338, lr: 0.019398830250535893\n", + "epoch: 3200, acc: 0.843, loss: 0.337, lr: 0.019380032752255354\n", + "epoch: 3300, acc: 0.840, loss: 0.336, lr: 0.01936127164832186\n", + "epoch: 3400, acc: 0.847, loss: 0.335, lr: 0.01934254683314152\n", + "epoch: 3500, acc: 0.853, loss: 0.336, lr: 0.019323858201528515\n", + "epoch: 3600, acc: 0.850, loss: 0.334, lr: 0.019305205648703173\n", + "epoch: 3700, acc: 0.847, loss: 0.332, lr: 0.01928658907028997\n", + "epoch: 3800, acc: 0.847, loss: 0.331, lr: 0.01926800836231563\n", + "epoch: 3900, acc: 0.850, loss: 0.330, lr: 0.019249463421207133\n", + "epoch: 4000, acc: 0.847, loss: 0.329, lr: 0.019230954143789846\n", + "epoch: 4100, acc: 0.843, loss: 0.329, lr: 0.019212480427285565\n", + "epoch: 4200, acc: 0.850, loss: 0.327, lr: 0.019194042169310647\n", + "epoch: 4300, acc: 0.847, loss: 0.326, lr: 0.019175639267874092\n", + "epoch: 4400, acc: 0.843, loss: 0.327, lr: 0.019157271621375684\n", + "epoch: 4500, acc: 0.850, loss: 0.325, lr: 0.0191389391286041\n", + "epoch: 4600, acc: 0.850, loss: 0.325, lr: 0.019120641688735073\n", + "epoch: 4700, acc: 0.847, loss: 0.324, lr: 0.019102379201329525\n", + "epoch: 4800, acc: 0.847, loss: 0.324, lr: 0.01908415156633174\n", + "epoch: 4900, acc: 0.837, loss: 0.325, lr: 0.01906595868406753\n", + "epoch: 5000, acc: 0.847, loss: 0.321, lr: 0.01904780045524243\n", + "epoch: 5100, acc: 0.847, loss: 0.322, lr: 0.019029676780939874\n", + "epoch: 5200, acc: 0.847, loss: 0.320, lr: 0.019011587562619416\n", + "epoch: 5300, acc: 0.850, loss: 0.320, lr: 0.01899353270211493\n", + "epoch: 5400, acc: 0.847, loss: 0.319, lr: 0.018975512101632844\n", + "epoch: 5500, acc: 0.843, loss: 0.318, lr: 0.018957525663750367\n", + "epoch: 5600, acc: 0.847, loss: 0.317, lr: 0.018939573291413745\n", + "epoch: 5700, acc: 0.840, loss: 0.318, lr: 0.018921654887936498\n", + "epoch: 5800, acc: 0.847, loss: 0.316, lr: 0.018903770356997706\n", + "epoch: 5900, acc: 0.847, loss: 0.316, lr: 0.018885919602640248\n", + "epoch: 6000, acc: 0.843, loss: 0.315, lr: 0.018868102529269144\n", + "epoch: 6100, acc: 0.850, loss: 0.315, lr: 0.018850319041649778\n", + "epoch: 6200, acc: 0.850, loss: 0.315, lr: 0.018832569044906263\n", + "epoch: 6300, acc: 0.843, loss: 0.314, lr: 0.018814852444519702\n", + "epoch: 6400, acc: 0.847, loss: 0.315, lr: 0.018797169146326564\n", + "epoch: 6500, acc: 0.847, loss: 0.313, lr: 0.01877951905651696\n", + "epoch: 6600, acc: 0.847, loss: 0.313, lr: 0.018761902081633034\n", + "epoch: 6700, acc: 0.847, loss: 0.312, lr: 0.018744318128567278\n", + "epoch: 6800, acc: 0.853, loss: 0.314, lr: 0.018726767104560903\n", + "epoch: 6900, acc: 0.850, loss: 0.323, lr: 0.018709248917202218\n", + "epoch: 7000, acc: 0.850, loss: 0.312, lr: 0.018691763474424996\n", + "epoch: 7100, acc: 0.847, loss: 0.311, lr: 0.018674310684506857\n", + "epoch: 7200, acc: 0.853, loss: 0.312, lr: 0.01865689045606769\n", + "epoch: 7300, acc: 0.850, loss: 0.310, lr: 0.01863950269806802\n", + "epoch: 7400, acc: 0.850, loss: 0.311, lr: 0.018622147319807447\n", + "epoch: 7500, acc: 0.853, loss: 0.310, lr: 0.018604824230923075\n", + "epoch: 7600, acc: 0.847, loss: 0.307, lr: 0.01858753334138793\n", + "epoch: 7700, acc: 0.847, loss: 0.308, lr: 0.018570274561509396\n", + "epoch: 7800, acc: 0.847, loss: 0.307, lr: 0.018553047801927663\n", + "epoch: 7900, acc: 0.847, loss: 0.306, lr: 0.018535852973614212\n", + "epoch: 8000, acc: 0.850, loss: 0.305, lr: 0.01851868998787026\n", + "epoch: 8100, acc: 0.853, loss: 0.305, lr: 0.018501558756325222\n", + "epoch: 8200, acc: 0.847, loss: 0.305, lr: 0.01848445919093522\n", + "epoch: 8300, acc: 0.843, loss: 0.306, lr: 0.018467391203981567\n", + "epoch: 8400, acc: 0.857, loss: 0.304, lr: 0.018450354708069265\n", + "epoch: 8500, acc: 0.850, loss: 0.304, lr: 0.018433349616125496\n", + "epoch: 8600, acc: 0.853, loss: 0.303, lr: 0.018416375841398172\n", + "epoch: 8700, acc: 0.843, loss: 0.304, lr: 0.01839943329745444\n", + "epoch: 8800, acc: 0.843, loss: 0.303, lr: 0.01838252189817921\n", + "epoch: 8900, acc: 0.850, loss: 0.302, lr: 0.018365641557773718\n", + "epoch: 9000, acc: 0.850, loss: 0.303, lr: 0.018348792190754044\n", + "epoch: 9100, acc: 0.857, loss: 0.302, lr: 0.0183319737119497\n", + "epoch: 9200, acc: 0.843, loss: 0.302, lr: 0.018315186036502167\n", + "epoch: 9300, acc: 0.847, loss: 0.303, lr: 0.018298429079863496\n", + "epoch: 9400, acc: 0.857, loss: 0.301, lr: 0.018281702757794862\n", + "epoch: 9500, acc: 0.853, loss: 0.290, lr: 0.018265006986365174\n", + "epoch: 9600, acc: 0.867, loss: 0.280, lr: 0.018248341681949654\n", + "epoch: 9700, acc: 0.857, loss: 0.275, lr: 0.018231706761228456\n", + "epoch: 9800, acc: 0.863, loss: 0.272, lr: 0.018215102141185255\n", + "epoch: 9900, acc: 0.873, loss: 0.269, lr: 0.018198527739105907\n", + "epoch: 10000, acc: 0.870, loss: 0.268, lr: 0.018181983472577025\n" ] } ], diff --git a/lecture28_31/notes_28.ipynb b/lecture28_31/notes_28.ipynb new file mode 100644 index 0000000..5caaf9d --- /dev/null +++ b/lecture28_31/notes_28.ipynb @@ -0,0 +1,461 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Previous Class Definitions" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# imports\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import nnfs\n", + "from nnfs.datasets import spiral_data, vertical_data\n", + "nnfs.init()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "class Layer_Dense:\n", + " def __init__(self, n_inputs, n_neurons):\n", + " # Initialize the weights and biases\n", + " self.weights = 0.01 * np.random.randn(n_inputs, n_neurons) # Normal distribution of weights\n", + " self.biases = np.zeros((1, n_neurons))\n", + "\n", + " def forward(self, inputs):\n", + " # Calculate the output values from inputs, weights, and biases\n", + " self.inputs = inputs\n", + " self.output = np.dot(inputs, self.weights) + self.biases # Weights are already transposed\n", + " \n", + " def backward(self, dvalues):\n", + " '''Calculated the gradient of the loss with respect to the weights and biases of this layer.\n", + " dvalues is equiavelent to a transposed dl_dZ. It is the gradient \n", + " of the loss with respect to the outputs of this layer.'''\n", + " self.dweights = np.dot(self.inputs.T, dvalues)\n", + " self.dbiases = np.sum(dvalues, axis=0, keepdims=0)\n", + " self.dinputs = np.dot(dvalues, self.weights.T)\n", + "\n", + "class Activation_ReLU:\n", + " def forward(self, inputs):\n", + " self.inputs = inputs\n", + " self.output = np.maximum(0, inputs)\n", + " \n", + " def backward(self, dvalues):\n", + " '''Calculated the gradient of the loss with respect to this layer's activation function\n", + " dvalues is equiavelent to a transposed dl_dZ. It is the gradient \n", + " of the loss with respect to the outputs of this layer.'''\n", + " self.dinputs = dvalues.copy()\n", + " self.dinputs[self.inputs <= 0] = 0\n", + " \n", + "class Activation_Softmax:\n", + " def forward(self, inputs):\n", + " # Get the unnormalized probabilities\n", + " # Subtract max from the row to prevent larger numbers\n", + " exp_values = np.exp(inputs - np.max(inputs, axis=1, keepdims=True))\n", + "\n", + " # Normalize the probabilities with element wise division\n", + " probabilities = exp_values / np.sum(exp_values, axis=1,keepdims=True)\n", + " self.output = probabilities\n", + " \n", + "# Base class for Loss functions\n", + "class Loss:\n", + " '''Calculates the data and regularization losses given\n", + " model output and ground truth values'''\n", + " def calculate(self, output, y):\n", + " sample_losses = self.forward(output, y)\n", + " data_loss = np.average(sample_losses)\n", + " return data_loss\n", + "\n", + "class Loss_CategoricalCrossEntropy(Loss):\n", + " def forward(self, y_pred, y_true):\n", + " '''y_pred is the neural network output\n", + " y_true is the ideal output of the neural network'''\n", + " samples = len(y_pred)\n", + " # Bound the predicted values \n", + " y_pred_clipped = np.clip(y_pred, 1e-7, 1-1e-7)\n", + " \n", + " if len(y_true.shape) == 1: # Categorically labeled\n", + " correct_confidences = y_pred_clipped[range(samples), y_true]\n", + " elif len(y_true.shape) == 2: # One hot encoded\n", + " correct_confidences = np.sum(y_pred_clipped*y_true, axis=1)\n", + "\n", + " # Calculate the losses\n", + " negative_log_likelihoods = -np.log(correct_confidences)\n", + " return negative_log_likelihoods\n", + " \n", + " def backward(self, dvalues, y_true):\n", + " samples = len(dvalues)\n", + "\n", + " # Number of lables in each sample\n", + " labels = len(dvalues[0])\n", + "\n", + " # if the labels are sparse, turn them into a one-hot vector\n", + " if len(y_true.shape) == 1:\n", + " y_true = np.eye(labels)[y_true]\n", + "\n", + " # Calculate the gradient then normalize\n", + " self.dinputs = -y_true / dvalues\n", + " self.dinputs = self.dinputs / samples\n", + "\n", + "class Activation_Softmax_Loss_CategoricalCrossentropy():\n", + " def __init__(self):\n", + " self.activation = Activation_Softmax()\n", + " self.loss = Loss_CategoricalCrossEntropy()\n", + "\n", + " def forward(self, inputs, y_true):\n", + " self.activation.forward(inputs)\n", + " self.output = self.activation.output\n", + " return self.loss.calculate(self.output, y_true)\n", + " \n", + " def backward(self, dvalues, y_true):\n", + " samples = len(dvalues)\n", + "\n", + " # if the samples are one-hot encoded, turn them into discrete values\n", + " if len(y_true.shape) == 2:\n", + " y_true = np.argmax(y_true, axis=1)\n", + " \n", + " # Copy so we can safely modify\n", + " self.dinputs = dvalues.copy()\n", + " \n", + " # Calculate and normalize gradient \n", + " self.dinputs[range(samples), y_true] -= 1\n", + " self.dinputs = self.dinputs / samples\n", + "\n", + "class Optimizer_SGD():\n", + " def __init__(self, learning_rate=0.5, decay=0.0, momentum=0.0):\n", + " self.initial_rate = learning_rate\n", + " self.current_learning_rate = self.initial_rate\n", + " self.decay = decay\n", + " self.iterations = 0\n", + " self.momentum = momentum\n", + "\n", + " def pre_update_params(self):\n", + " # Update the current_learning_rate before updating params\n", + " if self.decay:\n", + " self.current_learning_rate = self.initial_rate / (1 + self.decay * self.iterations)\n", + "\n", + " def update_params(self, layer):\n", + " if self.momentum:\n", + " # For each layer, we need to use its last momentums\n", + "\n", + " # First check if the layer has a last momentum stored\n", + " if not hasattr(layer, 'weight_momentums'):\n", + " layer.weight_momentums = np.zeros_like(layer.weights)\n", + " layer.bias_momentums = np.zeros_like(layer.biases)\n", + " \n", + " weight_updates = self.momentum * layer.weight_momentums - \\\n", + " self.current_learning_rate * layer.dweights\n", + " layer.weight_momentums = weight_updates\n", + "\n", + " bias_updates = self.momentum * layer.bias_momentums - \\\n", + " self.current_learning_rate * layer.dbiases\n", + " layer.bias_momentums = bias_updates\n", + " \n", + " # Not using momentum\n", + " else:\n", + " weight_updates = -self.current_learning_rate * layer.dweights\n", + " bias_updates = -self.current_learning_rate * layer.dbiases\n", + "\n", + " layer.weights += weight_updates\n", + " layer.biases += bias_updates\n", + "\n", + " def post_update_params(self):\n", + " # Update the self.iterations for use with decay\n", + " self.iterations += 1\n", + "\n", + "class Optimizer_Adagrad():\n", + " def __init__(self, learning_rate=0.5, decay=0.0, epsilon=1e-7):\n", + " self.initial_learning_rate = learning_rate\n", + " self.current_learning_rate = self.initial_learning_rate\n", + " self.decay = decay\n", + " self.iterations = 0\n", + " self.epsilon = epsilon\n", + "\n", + " def pre_update_params(self):\n", + " if self.decay:\n", + " self.current_learning_rate = self.initial_learning_rate / (1 + self.decay * self.iterations)\n", + "\n", + " def update_params(self, layer):\n", + " if not hasattr(layer, 'weight_cache'):\n", + " layer.weight_cache = np.zeros_like(layer.weights)\n", + " layer.bias_cache = np.zeros_like(layer.biases)\n", + "\n", + " layer.weight_cache += layer.dweights**2\n", + " layer.bias_cache += layer.dbiases**2\n", + "\n", + " layer.weights += -self.current_learning_rate * layer.dweights / (np.sqrt(layer.weight_cache) + self.epsilon)\n", + " layer.biases += -self.current_learning_rate * layer.dbiases / (np.sqrt(layer.bias_cache) + self.epsilon)\n", + "\n", + " def post_update_params(self):\n", + " self.iterations += 1\n", + "\n", + "class Optimizer_RMSProp():\n", + " def __init__(self, learning_rate=1e-3, decay=0.0, epsilon=1e-7, rho=0.9):\n", + " self.initial_learning_rate = learning_rate\n", + " self.current_learning_rate = self.initial_learning_rate\n", + " self.decay = decay\n", + " self.iterations = 0\n", + " self.epsilon = epsilon\n", + " self.rho = rho\n", + "\n", + " def pre_update_params(self):\n", + " if self.decay:\n", + " self.current_learning_rate = self.initial_learning_rate / (1 + self.decay * self.iterations)\n", + "\n", + " def update_params(self, layer):\n", + " if not hasattr(layer, 'weight_cache'):\n", + " layer.weight_cache = np.zeros_like(layer.weights)\n", + " layer.bias_cache = np.zeros_like(layer.biases)\n", + "\n", + " layer.weight_cache = self.rho * layer.weight_cache + (1 - self.rho) * layer.dweights**2\n", + " layer.bias_cache = self.rho * layer.bias_cache + (1 - self.rho) * layer.dbiases**2\n", + "\n", + " layer.weights += -self.current_learning_rate * layer.dweights / (np.sqrt(layer.weight_cache) + self.epsilon)\n", + " layer.biases += -self.current_learning_rate * layer.dbiases / (np.sqrt(layer.bias_cache) + self.epsilon)\n", + "\n", + " def post_update_params(self):\n", + " self.iterations += 1\n", + "\n", + "# Adam optimizer\n", + "class Optimizer_Adam():\n", + " def __init__(self, learning_rate=0.001, decay=0.0, epsilon=1e-7, beta_1=0.9, beta_2=0.999):\n", + " self.initial_learning_rate = learning_rate\n", + " self.current_learning_rate = learning_rate\n", + " self.decay = decay\n", + " self.iterations = 0\n", + " self.epsilon = epsilon\n", + " self.beta_1 = beta_1\n", + " self.beta_2 = beta_2\n", + "\n", + " def pre_update_params(self):\n", + " if self.decay:\n", + " self.current_learning_rate = self.initial_learning_rate * (1. / (1. + self.decay * self.iterations))\n", + "\n", + " def update_params(self, layer):\n", + " # If layer does not contain cache arrays, create them filled with zeros\n", + " if not hasattr(layer, 'weight_cache'):\n", + " layer.weight_momentums = np.zeros_like(layer.weights)\n", + " layer.weight_cache = np.zeros_like(layer.weights)\n", + " layer.bias_momentums = np.zeros_like(layer.biases)\n", + " layer.bias_cache = np.zeros_like(layer.biases)\n", + "\n", + " # Update momentum with current gradients\n", + " layer.weight_momentums = self.beta_1 * layer.weight_momentums + (1 - self.beta_1) * layer.dweights\n", + " layer.bias_momentums = self.beta_1 * layer.bias_momentums + (1 - self.beta_1) * layer.dbiases\n", + "\n", + " # Get corrected momentum\n", + " # use self.iteration + 1 because we start at iteration 0\n", + " weight_momentums_corrected = layer.weight_momentums / (1 - self.beta_1 ** (self.iterations + 1))\n", + " bias_momentums_corrected = layer.bias_momentums / (1 - self.beta_1 ** (self.iterations + 1))\n", + "\n", + " # Update cache with squared current gradients\n", + " layer.weight_cache = self.beta_2 * layer.weight_cache + (1 - self.beta_2) * layer.dweights**2\n", + " layer.bias_cache = self.beta_2 * layer.bias_cache + (1 - self.beta_2) * layer.dbiases**2\n", + "\n", + " # Get corrected cache\n", + " weight_cache_corrected = layer.weight_cache / (1 - self.beta_2 ** (self.iterations + 1))\n", + " bias_cache_corrected = layer.bias_cache / (1 - self.beta_2 ** (self.iterations + 1))\n", + "\n", + " # Vanilla SGD parameter update + normalization with square rooted cache\n", + " layer.weights += -self.current_learning_rate * weight_momentums_corrected / (np.sqrt(weight_cache_corrected) + self.epsilon)\n", + " layer.biases += -self.current_learning_rate * bias_momentums_corrected / (np.sqrt(bias_cache_corrected) + self.epsilon)\n", + "\n", + " # Call once after any parameter updates\n", + " def post_update_params(self):\n", + " self.iterations += 1\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Generalization and Overfitting\n", + "Overfitting can occur when the neural network tries to fit every training data perfectly. If the training data was perfect, this would not be an issue. However, because some training data is bad or should not be expected to be identified perfectly, the neural network can sacrifice generability to trying to identify all training data.\n", + "\n", + "If we could assign uncertainty to training data, I believe this would help.\n", + "\n", + "## Out of Sample Data\n", + "Rather than use all of our data for training, we can set aside some for out of sample testing so we can better understand how well the network generalizes." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Run the Adam Optimizer with the 100 Samples of Training Data" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "epoch: 10000, acc: 0.883, loss: 0.230, lr: 0.01818181818181818\n" + ] + } + ], + "source": [ + "# Create dataset\n", + "X, y = spiral_data(samples=100, classes=3)\n", + "\n", + "# Create Dense layer with 2 input features and 64 output values\n", + "dense1 = Layer_Dense(2, 64)\n", + "\n", + "# Create ReLU activation (to be used with Dense layer)\n", + "activation1 = Activation_ReLU()\n", + "\n", + "# Create second Dense layer with 64 input features (as we take output\n", + "# of previous layer here) and 3 output values (output values)\n", + "dense2 = Layer_Dense(64, 3)\n", + "\n", + "# Create Softmax classifier's combined loss and activation\n", + "loss_activation = Activation_Softmax_Loss_CategoricalCrossentropy()\n", + "\n", + "# Create optimizer\n", + "optimizer = Optimizer_Adam(learning_rate=0.02, decay=1e-5)\n", + "\n", + "# Train in loop\n", + "for epoch in range(10001):\n", + " # Perform a forward pass of our training data through this layer\n", + " dense1.forward(X)\n", + " \n", + " # Perform a forward pass through activation function\n", + " # takes the output of first dense layer here\n", + " activation1.forward(dense1.output)\n", + " \n", + " # Perform a forward pass through second Dense layer\n", + " # takes outputs of activation function of first layer as inputs\n", + " dense2.forward(activation1.output)\n", + " \n", + " # Perform a forward pass through the activation/loss function\n", + " # takes the output of second dense layer here and returns loss\n", + " loss = loss_activation.forward(dense2.output, y)\n", + " \n", + " # Calculate accuracy from output of activation2 and targets\n", + " # calculate values along first axis\n", + " predictions = np.argmax(loss_activation.output, axis=1)\n", + " if len(y.shape) == 2:\n", + " y = np.argmax(y, axis=1)\n", + " accuracy = np.mean(predictions == y)\n", + " \n", + " # Backward pass\n", + " loss_activation.backward(loss_activation.output, y)\n", + " dense2.backward(loss_activation.dinputs)\n", + " activation1.backward(dense2.dinputs)\n", + " dense1.backward(activation1.dinputs)\n", + " \n", + " # Update weights and biases\n", + " optimizer.pre_update_params()\n", + " optimizer.update_params(dense1)\n", + " optimizer.update_params(dense2)\n", + " optimizer.post_update_params()\n", + "\n", + "print(f'epoch: {epoch}, ' +\n", + " f'acc: {accuracy:.3f}, ' +\n", + " f'loss: {loss:.3f}, ' +\n", + " f'lr: {optimizer.current_learning_rate}')\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Now Use Different Found Biases and Weights on Out of Sample Data" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "validation, acc: 0.797, loss: 0.672\n" + ] + } + ], + "source": [ + "# Create test dataset\n", + "X_test, y_test = spiral_data(samples=100, classes=3)\n", + "# Perform a forward pass of our testing data through this layer\n", + "dense1.forward(X_test)\n", + "# Perform a forward pass through activation function\n", + "# takes the output of first dense layer here\n", + "activation1.forward(dense1.output)\n", + "# Perform a forward pass through second Dense layer\n", + "# takes outputs of activation function of first layer as inputs\n", + "dense2.forward(activation1.output)\n", + "# Perform a forward pass through the activation/loss function\n", + "# takes the output of second dense layer here and returns loss\n", + "loss = loss_activation.forward(dense2.output, y_test)\n", + "# Calculate accuracy from output of activation2 and targets\n", + "# calculate values along first axis\n", + "predictions = np.argmax(loss_activation.output, axis=1)\n", + "if len(y_test.shape) == 2:\n", + " y_test = np.argmax(y_test, axis=1)\n", + "accuracy = np.mean(predictions == y_test)\n", + "print(f'validation, acc: {accuracy:.3f}, loss: {loss:.3f}')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Observations\n", + "The out of sample accuracy is about 0.1% lower than the training data, with a loss almost 3x the training data." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Preventing Overfitting\n", + "## Reducing Network Complexity\n", + "Simpler models are more robust against overfitting and can provide more generalizability. This can be reducing the number of neurons in a layer or the total layers. Effectively, you reduce the granularity of functions that the network can model.\n", + "\n", + "## Reduce the Number of Epochs\n", + "By allowing less training iterations to occur, the network isn't given the time or opportunity to fit data points that might not be valid.\n", + "\n", + "These \"hyper-parameters\" can be adjusted after testing with out of sample data." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "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.10.12" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/lecture28_31/notes_28.pdf b/lecture28_31/notes_28.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d072b0f6548807641c203d10dfa0c20e5b24605 GIT binary patch literal 68964 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 o@aNe_!At7(%{