From f817e2c57a50d67c1d7642300134744a401360c0 Mon Sep 17 00:00:00 2001 From: Lars Bogner Date: Wed, 8 Oct 2025 09:02:43 +0200 Subject: [PATCH] Do ex for week 41 --- doc/LectureNotes/exercisesweek41.html | 8876 ++++++++++++++++++++++++ doc/LectureNotes/exercisesweek41.ipynb | 444 +- pyproject.toml | 1 + uv.lock | 14 + 4 files changed, 9264 insertions(+), 71 deletions(-) create mode 100644 doc/LectureNotes/exercisesweek41.html diff --git a/doc/LectureNotes/exercisesweek41.html b/doc/LectureNotes/exercisesweek41.html new file mode 100644 index 000000000..e2207ec9b --- /dev/null +++ b/doc/LectureNotes/exercisesweek41.html @@ -0,0 +1,8876 @@ + + + + + +exercisesweek41 + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/doc/LectureNotes/exercisesweek41.ipynb b/doc/LectureNotes/exercisesweek41.ipynb index fccc64f45..b4de8f3b2 100644 --- a/doc/LectureNotes/exercisesweek41.ipynb +++ b/doc/LectureNotes/exercisesweek41.ipynb @@ -17,6 +17,9 @@ "source": [ "# Exercises week 41\n", "\n", + "**Python Code can be found at https://github.uio.no/larsbog/FYS-STK4155**\n", + "\n", + "\n", "**October 6-10, 2025**\n", "\n", "Date: **Deadline is Friday October 10 at midnight**\n" @@ -40,7 +43,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "c6f61b09", "metadata": {}, "outputs": [], @@ -86,7 +89,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "37f30740", "metadata": {}, "outputs": [], @@ -105,6 +108,16 @@ "**a)** Given the shape of the first layer weight matrix, what is the input shape of the neural network? What is the output shape of the first layer?\n" ] }, + { + "cell_type": "markdown", + "id": "b3fc5895", + "metadata": {}, + "source": [ + "
\n", + " The input shape is (batch_size, 2) and the output shape of the first layer is (batch_size, 4)\n", + "
\n" + ] + }, { "cell_type": "markdown", "id": "edf7217b", @@ -115,12 +128,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "id": "2129c19f", "metadata": {}, "outputs": [], "source": [ - "b1 = ..." + "b1 = np.random.randn(4) # first layer biases" ] }, { @@ -133,12 +146,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "6837119b", "metadata": {}, "outputs": [], "source": [ - "z1 = ..." + "z1 = W1 @ x + b1" ] }, { @@ -151,12 +164,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "8d41ed19", "metadata": {}, "outputs": [], "source": [ - "a1 = ..." + "a1 = ReLU(z1)" ] }, { @@ -169,10 +182,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "id": "4d2f54b4", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], "source": [ "sol1 = np.array([0.60610368, 4.0076268, 0.0, 0.56469864])\n", "\n", @@ -188,20 +209,37 @@ "\n", "Now we will add a layer to the network with an output of length 8 and ReLU activation.\n", "\n", - "**a)** What is the input of the second layer? What is its shape?\n", + "**a)** What is the input of the second layer? What is its shape?\n" + ] + }, + { + "cell_type": "markdown", + "id": "d31b0c69", + "metadata": {}, + "source": [ + "
\n", + " The input of the second layer is the output of layer 1, and its shape is (batch_size, 4)\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "ba622cc6", + "metadata": {}, + "source": [ "\n", "**b)** Define the weight and bias of the second layer with the right shapes.\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "id": "00063acf", "metadata": {}, "outputs": [], "source": [ - "W2 = ...\n", - "b2 = ..." + "W2 = np.random.randn(8, 4)\n", + "b2 = np.random.randn(8)" ] }, { @@ -214,13 +252,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "id": "2fd0383d", "metadata": {}, "outputs": [], "source": [ - "z2 = ...\n", - "a2 = ..." + "z2 = W2 @ a1 + b2\n", + "a2 = ReLU(z2)" ] }, { @@ -233,10 +271,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "f7f2f8a1", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "True\n" + ] + } + ], "source": [ "print(\n", " np.allclose(np.exp(len(a2)), 2980.9579870417283)\n", @@ -257,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "c58f10f9", "metadata": {}, "outputs": [], @@ -267,8 +313,8 @@ "\n", " i_size = network_input_size\n", " for layer_output_size in layer_output_sizes:\n", - " W = ...\n", - " b = ...\n", + " W = np.random.randn(layer_output_size, i_size)\n", + " b = np.random.randn(layer_output_size)\n", " layers.append((W, b))\n", "\n", " i_size = layer_output_size\n", @@ -285,7 +331,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "id": "5262df05", "metadata": {}, "outputs": [], @@ -293,8 +339,8 @@ "def feed_forward_all_relu(layers, input):\n", " a = input\n", " for W, b in layers:\n", - " z = ...\n", - " a = ...\n", + " z = W @ a + b\n", + " a = ReLU(z)\n", " return a" ] }, @@ -308,17 +354,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "89a8f70d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[5.36337158 0. ]\n" + ] + } + ], "source": [ - "input_size = ...\n", - "layer_output_sizes = [...]\n", + "input_size = 8\n", + "layer_output_sizes = [10, 16, 6, 2]\n", "\n", "x = np.random.rand(input_size)\n", - "layers = ...\n", - "predict = ...\n", + "layers = create_layers(input_size, layer_output_sizes)\n", + "predict = feed_forward_all_relu(layers, x)\n", "print(predict)" ] }, @@ -330,6 +384,16 @@ "**d)** Why is a neural network with no activation functions always mathematically equivelent to a neural network with only one layer?\n" ] }, + { + "cell_type": "markdown", + "id": "c14ab4e7", + "metadata": {}, + "source": [ + "
\n", + " Because without an activation function, the output of every layer is a linear combination of inputs. And as the linear combination of linear combinations is also a linear combination, the entire network is just a single linear combination of the input.\n", + "
\n" + ] + }, { "cell_type": "markdown", "id": "306d8b7c", @@ -356,7 +420,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "de062369", "metadata": {}, "outputs": [], @@ -364,8 +428,8 @@ "def feed_forward(input, layers, activation_funcs):\n", " a = input\n", " for (W, b), activation_func in zip(layers, activation_funcs):\n", - " z = ...\n", - " a = ...\n", + " z = W @ a + b\n", + " a = activation_func(z)\n", " return a" ] }, @@ -381,15 +445,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "301b46dc", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.05228192, 1. , 0.59999186, 0.93457593, 0.99786026,\n", + " 0.99999997])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "network_input_size = ...\n", - "layer_output_sizes = [...]\n", + "network_input_size = 8\n", + "layer_output_sizes = [10, 16, 6]\n", "activation_funcs = [ReLU, ReLU, sigmoid]\n", - "layers = ...\n", + "layers = create_layers(network_input_size, layer_output_sizes)\n", "\n", "x = np.random.randn(network_input_size)\n", "feed_forward(x, layers, activation_funcs)" @@ -403,6 +479,29 @@ "**c)** How does the output of the network change if you use sigmoid in the hidden layers and ReLU in the output layer?\n" ] }, + { + "cell_type": "code", + "execution_count": 15, + "id": "80eb2557", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0. , 2.72771082, 4.25366266, 0.65139649, 0. ,\n", + " 0.98143355])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "activation_funcs = [sigmoid, sigmoid, ReLU]\n", + "feed_forward(x, layers, activation_funcs)" + ] + }, { "cell_type": "markdown", "id": "a8d6c425", @@ -431,7 +530,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "a241fd79", "metadata": {}, "outputs": [], @@ -441,8 +540,8 @@ "\n", " i_size = network_input_size\n", " for layer_output_size in layer_output_sizes:\n", - " W = ...\n", - " b = ...\n", + " W = np.random.randn(i_size, layer_output_size)\n", + " b = np.random.randn(layer_output_size)\n", " layers.append((W, b))\n", "\n", " i_size = layer_output_size\n", @@ -459,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "425f3bcc", "metadata": {}, "outputs": [], @@ -470,8 +569,8 @@ "def feed_forward_batch(inputs, layers, activation_funcs):\n", " a = inputs\n", " for (W, b), activation_func in zip(layers, activation_funcs):\n", - " z = ...\n", - " a = ...\n", + " z = a @ W + b\n", + " a = activation_func(z)\n", " return a" ] }, @@ -485,14 +584,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "id": "ce6fcc2f", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([[4.04577472e-02, 2.35901721e-04, 9.59306351e-01],\n", + " [2.45071088e-03, 2.87778858e-05, 9.97520511e-01],\n", + " [6.62736443e-01, 3.36936307e-01, 3.27249462e-04],\n", + " ...,\n", + " [1.12888793e-01, 6.92686503e-04, 8.86418520e-01],\n", + " [4.33867835e-03, 6.20348500e-06, 9.95655118e-01],\n", + " [9.13896494e-01, 8.07059531e-03, 7.80329107e-02]], shape=(1000, 3))" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "network_input_size = ...\n", - "layer_output_sizes = [...]\n", - "activation_funcs = [...]\n", + "network_input_size = 4\n", + "layer_output_sizes = [12, 10, 3]\n", + "activation_funcs = [ReLU, ReLU, softmax]\n", "layers = create_layers_batch(network_input_size, layer_output_sizes)\n", "\n", "x = np.random.randn(network_input_size)\n", @@ -527,10 +643,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "id": "6bd4c148", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "iris = datasets.load_iris()\n", "\n", @@ -544,7 +671,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "id": "ed3e2fc9", "metadata": {}, "outputs": [], @@ -566,6 +693,30 @@ " return accuracy_score(one_hot_predictions, targets)" ] }, + { + "cell_type": "code", + "execution_count": 21, + "id": "f98fdfdc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['sepal length (cm)',\n", + " 'sepal width (cm)',\n", + " 'petal length (cm)',\n", + " 'petal width (cm)']" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "iris.feature_names" + ] + }, { "cell_type": "markdown", "id": "0362c4a9", @@ -574,6 +725,16 @@ "**a)** What should the input size for the network be with this dataset? What should the output size of the last layer be?\n" ] }, + { + "cell_type": "markdown", + "id": "ecfa1a37", + "metadata": {}, + "source": [ + "
\n", + " The input of the net should be of size 4 and the output of size 3.\n", + "
\n" + ] + }, { "cell_type": "markdown", "id": "bf62607e", @@ -584,13 +745,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "id": "5366d4ae", "metadata": {}, "outputs": [], "source": [ - "...\n", - "layers = ..." + "input_size = 4\n", + "layer_output_sizes = [8, 3]\n", + "layers = create_layers_batch(input_size, layer_output_sizes)\n", + "activation_funcs = [ReLU, softmax]\n", + "\n", + "inputs = iris.data" ] }, { @@ -603,7 +768,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "id": "6c783105", "metadata": {}, "outputs": [], @@ -621,10 +786,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "id": "a2612b82", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.11333333333333333\n" + ] + } + ], "source": [ "print(accuracy(predictions, targets))" ] @@ -649,7 +822,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 25, "id": "f30e6e2c", "metadata": {}, "outputs": [], @@ -685,7 +858,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 26, "id": "56bef776", "metadata": {}, "outputs": [], @@ -703,14 +876,31 @@ "id": "7b1b74bc", "metadata": {}, "source": [ - "**a)** What shape should the gradient of the cost function wrt. weights and biases be?\n", + "**a)** What shape should the gradient of the cost function wrt. weights and biases be?\n" + ] + }, + { + "cell_type": "markdown", + "id": "39303e78", + "metadata": {}, + "source": [ + "
\n", + " The gradient wrt. weights should have the same shape as the weights, and the gradient wrt. biases should have the same shape as the biases. This is because in the end we will subtract a small multiple of the gradient from the weights and biases to update them, and we can only subtract two arrays of the same shape.\n", + "
\n" + ] + }, + { + "cell_type": "markdown", + "id": "1921da22", + "metadata": {}, + "source": [ "\n", "**b)** Use the `gradient_func` function to take the gradient of the cross entropy wrt. the weights and biases of the network. Check the shapes of what's inside. What does the `grad` func from autograd actually do?\n" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "id": "841c9e87", "metadata": {}, "outputs": [], @@ -720,6 +910,45 @@ ") # Don't change this" ] }, + { + "cell_type": "code", + "execution_count": 28, + "id": "e0c156c0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(array([[ -29.5215926 , 0. , -1.25926853, 0. ,\n", + " 0. , -295.11350004, 230.00061475, 0. ],\n", + " [ 10.70435261, 0. , 0.91714136, 0. ,\n", + " 0. , -214.71193821, 89.39001608, 0. ],\n", + " [-129.46931847, 0. , -1.22975204, 0. ,\n", + " 0. , -89.29053394, 191.02427505, 0. ],\n", + " [ -68.01404496, 0. , 0.5141147 , 0. ,\n", + " 0. , -8.6332998 , 61.15270843, 0. ]]),\n", + " array([ 1.82076576e-14, 0.00000000e+00, 2.40779618e-15, 0.00000000e+00,\n", + " 0.00000000e+00, -6.15980156e+01, 3.29093525e+01, 0.00000000e+00])),\n", + " (array([[-62.69553593, -41.76076053, 38.74976712],\n", + " [ 0. , 0. , 0. ],\n", + " [ 99.97325122, 18.24422461, -78.90479325],\n", + " [ 0. , 0. , 0. ],\n", + " [ 0. , 0. , 0. ],\n", + " [-12.80588601, 1.7632586 , 10.94015839],\n", + " [ 35.13790747, -19.03234894, -13.32782351],\n", + " [ 0. , 0. , 0. ]]),\n", + " array([-6.66133815e-16, -3.33066907e-16, -3.28626015e-14]))]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "layers_grad" + ] + }, { "cell_type": "markdown", "id": "adc9e9be", @@ -730,7 +959,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "id": "6e4d38d3", "metadata": {}, "outputs": [], @@ -741,8 +970,11 @@ " for i in range(epochs):\n", " layers_grad = gradient_func(inputs, layers, activation_funcs, targets)\n", " for (W, b), (W_g, b_g) in zip(layers, layers_grad):\n", - " W -= ...\n", - " b -= ..." + " W -= learning_rate * W_g\n", + " b -= learning_rate * b_g\n", + " yield accuracy(\n", + " feed_forward_batch(inputs, layers, activation_funcs), targets\n", + " )" ] }, { @@ -753,6 +985,16 @@ "**e)** What do we call the gradient method used above?\n" ] }, + { + "cell_type": "markdown", + "id": "52333319", + "metadata": {}, + "source": [ + "
\n", + " We call it gradient descent.\n", + "
\n" + ] + }, { "cell_type": "markdown", "id": "7059dd8c", @@ -763,12 +1005,40 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "id": "5027c7a5", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "Text(0, 0.5, 'Accuracy')" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "..." + "epochs = 200\n", + "accuracies = np.zeros(epochs)\n", + "for i, a in enumerate(train_network(inputs, layers, activation_funcs, targets, epochs=epochs)):\n", + " accuracies[i] = a\n", + "\n", + "plt.plot(accuracies)\n", + "plt.xlabel(\"Epoch\")\n", + "plt.ylabel(\"Accuracy\")" ] }, { @@ -778,11 +1048,43 @@ "source": [ "**e)** How high of an accuracy is it possible to acheive with a neural network on this dataset, if we use the whole thing as training data?\n" ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "2661cfff", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Number of data points: 150\n", + "Number of degrees of freedom: 67\n" + ] + } + ], + "source": [ + "number_of_dpts = len(iris.data)\n", + "number_of_dof = sum(W.size + b.size for W, b in layers)\n", + "print(f\"Number of data points: {number_of_dpts}\")\n", + "print(f\"Number of degrees of freedom: {number_of_dof}\")" + ] + }, + { + "cell_type": "markdown", + "id": "068eb389", + "metadata": {}, + "source": [ + "
\n", + " Since our network has not more parameters than data points, the problem is still overconstrained and we can not always get perfect accuracy. On the other hand using the entire dataset as training data we will still get a very high accuracy.\n", + "
\n" + ] } ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "lecture-materials", "language": "python", "name": "python3" }, @@ -796,7 +1098,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.15" + "version": "3.13.7" } }, "nbformat": 4, diff --git a/pyproject.toml b/pyproject.toml index b52606085..7985c877f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,6 +3,7 @@ name = "lecture-materials" version = "0.1.0" requires-python = ">=3.13" dependencies = [ + "autograd>=1.8.0", "ipykernel>=6.30.1", "jupyter>=1.1.1", "matplotlib>=3.10.5", diff --git a/uv.lock b/uv.lock index 3a6ddcd53..73874765a 100644 --- a/uv.lock +++ b/uv.lock @@ -161,6 +161,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl", hash = "sha256:427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3", size = 63815, upload-time = "2025-03-13T11:10:21.14Z" }, ] +[[package]] +name = "autograd" +version = "1.8.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/67/1c/3c24ec03c8ba4decc742b1df5a10c52f98c84ca8797757f313e7bdcdf276/autograd-1.8.0.tar.gz", hash = "sha256:107374ded5b09fc8643ac925348c0369e7b0e73bbed9565ffd61b8fd04425683", size = 2562146, upload-time = "2025-05-05T12:49:02.502Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/ea/e16f0c423f7d83cf8b79cae9452040fb7b2e020c7439a167ee7c317de448/autograd-1.8.0-py3-none-any.whl", hash = "sha256:4ab9084294f814cf56c280adbe19612546a35574d67c574b04933c7d2ecb7d78", size = 51478, upload-time = "2025-05-05T12:49:00.585Z" }, +] + [[package]] name = "babel" version = "2.17.0" @@ -1012,6 +1024,7 @@ name = "lecture-materials" version = "0.1.0" source = { virtual = "." } dependencies = [ + { name = "autograd" }, { name = "ipykernel" }, { name = "jupyter" }, { name = "matplotlib" }, @@ -1024,6 +1037,7 @@ dependencies = [ [package.metadata] requires-dist = [ + { name = "autograd", specifier = ">=1.8.0" }, { name = "ipykernel", specifier = ">=6.30.1" }, { name = "jupyter", specifier = ">=1.1.1" }, { name = "matplotlib", specifier = ">=3.10.5" },