From da8b003d0770413fc77b81919bfea6ea4d30dd22 Mon Sep 17 00:00:00 2001
From: Sophie Bessac <sophie.bessac@ecl20.ec-lyon.fr>
Date: Fri, 10 Nov 2023 23:38:52 +0100
Subject: [PATCH] mlp

---
 .gitignore         |   2 +-
 MOD_4_6_TD_1.ipynb | 157 +++++++++++++++++++
 knn.py             |  39 ++---
 mlp.py             | 377 +++++++++++++++++++++++++++++++++++++++++++++
 read_cifar.py      |  17 +-
 results/knn.png    | Bin 28568 -> 28329 bytes
 results/mlp.png    | Bin 0 -> 12583 bytes
 7 files changed, 560 insertions(+), 32 deletions(-)
 create mode 100644 MOD_4_6_TD_1.ipynb
 create mode 100644 mlp.py
 create mode 100644 results/mlp.png

diff --git a/.gitignore b/.gitignore
index f81f24f..73a73ad 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
 /data
 /.vscode
 /__pycache__
-MOD_4_6_TD_1.ipynb
\ No newline at end of file
+Solution_TD1_mpl.pdf
diff --git a/MOD_4_6_TD_1.ipynb b/MOD_4_6_TD_1.ipynb
new file mode 100644
index 0000000..6edd524
--- /dev/null
+++ b/MOD_4_6_TD_1.ipynb
@@ -0,0 +1,157 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Imports"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import read_cifar as rc\n",
+    "import knn as knn\n",
+    "import mlp as mlp\n",
+    "import matplotlib.pyplot as plt\n",
+    "from tqdm import tqdm"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# k-nearest neighbours"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Question 4"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
+   "source": [
+    "def plot_accuracy(data, labels, split_factor=0.9, n=[1, 20]):\n",
+    "    \"\"\"Plot the variation of the accuracy as a function of k from n[0] to n[1].\n",
+    "    Save the plot as an image named knn.png in the directory results.\n",
+    "\n",
+    "    Args:\n",
+    "        data: A numpy array of shape batch_size x data_size containing the data.\n",
+    "        labels: A numpy array of shape batch_size containing the labels.\n",
+    "        split_factor: The ratio of the size of the validation set over the size of the whole dataset. Must be a float between 0 and 1.\n",
+    "        n: A list of two integers, the first and the last value of k.\n",
+    "    \"\"\"\n",
+    "    data_train, labels_train, data_test, labels_test = rc.split_dataset(\n",
+    "        data, labels, split_factor\n",
+    "    )\n",
+    "    accuracies = []\n",
+    "    for k in range(n[0], n[1] + 1):\n",
+    "        accuracy = knn.evaluate_knn(data_train, labels_train, data_test, labels_test, k)\n",
+    "        accuracies.append(accuracy)\n",
+    "    plt.plot(range(n[0], n[1] + 1), accuracies)\n",
+    "    plt.xlabel(\"k\")\n",
+    "    plt.ylabel(\"accuracy\")\n",
+    "    plt.savefig(r\"results\\knn.png\")\n",
+    "    plt.show()\n",
+    "\n",
+    "data, labels = rc.read_cifar(r\"data\\cifar-10-batches-py\")\n",
+    "plot_accuracy(data, labels, split_factor=0.9, n=[1,20])"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Artificial Neural Network"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Question 16"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 13,
+   "metadata": {},
+   "outputs": [
+    {
+     "ename": "ValueError",
+     "evalue": "operands could not be broadcast together with shapes (48000,64) (12000,64) ",
+     "output_type": "error",
+     "traceback": [
+      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
+      "\u001b[1;31mValueError\u001b[0m                                Traceback (most recent call last)",
+      "\u001b[1;32mc:\\Users\\sophi\\OneDrive\\Documents\\ETUDES\\6-ECL\\3A\\MOD\\4_6\\TD_1\\MOD_4_6_TD_1.ipynb Cell 8\u001b[0m line \u001b[0;36m6\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/sophi/OneDrive/Documents/ETUDES/6-ECL/3A/MOD/4_6/TD_1/MOD_4_6_TD_1.ipynb#X10sZmlsZQ%3D%3D?line=3'>4</a>\u001b[0m learning_rate \u001b[39m=\u001b[39m \u001b[39m0.2\u001b[39m\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/sophi/OneDrive/Documents/ETUDES/6-ECL/3A/MOD/4_6/TD_1/MOD_4_6_TD_1.ipynb#X10sZmlsZQ%3D%3D?line=4'>5</a>\u001b[0m num_epoch \u001b[39m=\u001b[39m \u001b[39m100\u001b[39m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/Users/sophi/OneDrive/Documents/ETUDES/6-ECL/3A/MOD/4_6/TD_1/MOD_4_6_TD_1.ipynb#X10sZmlsZQ%3D%3D?line=5'>6</a>\u001b[0m train_accuracies, test_accuracy, losses \u001b[39m=\u001b[39m mlp\u001b[39m.\u001b[39;49mrun_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epoch)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/sophi/OneDrive/Documents/ETUDES/6-ECL/3A/MOD/4_6/TD_1/MOD_4_6_TD_1.ipynb#X10sZmlsZQ%3D%3D?line=6'>7</a>\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mok 3\u001b[39m\u001b[39m\"\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/Users/sophi/OneDrive/Documents/ETUDES/6-ECL/3A/MOD/4_6/TD_1/MOD_4_6_TD_1.ipynb#X10sZmlsZQ%3D%3D?line=7'>8</a>\u001b[0m plt\u001b[39m.\u001b[39mplot(\u001b[39mrange\u001b[39m(num_epoch), train_accuracies)\n",
+      "File \u001b[1;32mc:\\Users\\sophi\\OneDrive\\Documents\\ETUDES\\6-ECL\\3A\\MOD\\4_6\\TD_1\\mlp.py:287\u001b[0m, in \u001b[0;36mrun_mlp_training\u001b[1;34m(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epoch)\u001b[0m\n\u001b[0;32m    285\u001b[0m b2 \u001b[39m=\u001b[39m np\u001b[39m.\u001b[39mzeros((\u001b[39m1\u001b[39m, d_out))  \u001b[39m# second layer biaises\u001b[39;00m\n\u001b[0;32m    286\u001b[0m \u001b[39m# Train the network\u001b[39;00m\n\u001b[1;32m--> 287\u001b[0m w1, b1, w2, b2, train_accuracies, losses \u001b[39m=\u001b[39m train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epoch)\n\u001b[0;32m    288\u001b[0m \u001b[39m# Test the network\u001b[39;00m\n\u001b[0;32m    289\u001b[0m test_accuracy \u001b[39m=\u001b[39m test_mlp(w1, b1, w2, b2, data_test, labels_test)\n",
+      "File \u001b[1;32mc:\\Users\\sophi\\OneDrive\\Documents\\ETUDES\\6-ECL\\3A\\MOD\\4_6\\TD_1\\mlp.py:251\u001b[0m, in \u001b[0;36mtest_mlp\u001b[1;34m(w1, b1, w2, b2, data_test, labels_test)\u001b[0m\n\u001b[0;32m    239\u001b[0m def test_mlp(w1, b1, w2, b2, data_test, labels_test):\n\u001b[0;32m    240\u001b[0m     \"\"\"Test the neural network on the given test set.\n\u001b[0;32m    241\u001b[0m     Args:\n\u001b[0;32m    242\u001b[0m         w1: A np.float32 array of shape d_in x d_h, the first layer weights.\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    249\u001b[0m         test_accuracy: The accuracy of the network on the given test set.\n\u001b[0;32m    250\u001b[0m     \"\"\"\n\u001b[1;32m--> 251\u001b[0m     # Forward pass\n\u001b[0;32m    252\u001b[0m     a0 = data_test # the data are the input of the first layer\n\u001b[0;32m    253\u001b[0m     z1 = np.matmul(a0, w1) + b1 # input of the hidden layer\n",
+      "\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (48000,64) (12000,64) "
+     ]
+    }
+   ],
+   "source": [
+    "data, labels = rc.read_cifar(r\"data\\cifar-10-batches-py\")\n",
+    "split_factor = 0.9\n",
+    "data_train, labels_train, data_test, labels_test = rc.split_dataset(data, labels, split_factor)\n",
+    "d_h = 64\n",
+    "learning_rate = 0.1\n",
+    "num_epoch = 100\n",
+    "train_accuracies, test_accuracy, losses = mlp.run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epoch)\n",
+    "print(\"ok 3\")\n",
+    "plt.plot(range(num_epoch), train_accuracies)\n",
+    "plt.xlabel(\"epoch\")\n",
+    "plt.ylabel(\"accuracy\")\n",
+    "plt.savefig(r\"results\\mlp.png\")\n",
+    "plt.show()\n",
+    "\n",
+    "plt.plot(range(num_epoch), losses)\n",
+    "plt.xlabel(\"epoch\")\n",
+    "plt.ylabel(\"loss\")\n",
+    "plt.show()\n"
+   ]
+  }
+ ],
+ "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.11.5"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/knn.py b/knn.py
index 20fe832..fa5a686 100644
--- a/knn.py
+++ b/knn.py
@@ -1,5 +1,7 @@
-# imports
+## Imports
 import numpy as np
+import matplotlib.pyplot as plt
+
 
 ## QUESTION 1
 def distance_matrix(m1, m2):
@@ -14,9 +16,14 @@ def distance_matrix(m1, m2):
     m1 = m1.reshape(m1.shape[0], -1)
     m2 = m2.reshape(m2.shape[0], -1)
     # Compute distance matrix
-    dists = np.sqrt(np.sum(m1**2, axis=1) + np.sum(m2**2, axis=1, keepdims=True) - 2 * np.dot(m2, m1.T))
+    dists = np.sqrt(
+        np.sum(m1**2, axis=1)
+        + np.sum(m2**2, axis=1, keepdims=True)
+        - 2 * np.dot(m2, m1.T)
+    )
     return dists
 
+
 ## QUESTION 2
 def knn_predict(dists, labels_train, k):
     """Predict the label of data_test using k-nearest neighbors.
@@ -35,6 +42,7 @@ def knn_predict(dists, labels_train, k):
         Ypred[i] = np.argmax(np.bincount(nearest_y))
     return Ypred
 
+
 ## QUESTION 3
 def evaluate_knn(data_train, labels_train, data_test, labels_test, k):
     """Evaluate the performance of k-nearest neighbors on the given dataset.
@@ -52,10 +60,12 @@ def evaluate_knn(data_train, labels_train, data_test, labels_test, k):
     accuracy = np.mean(y_test_pred == labels_test)
     return accuracy
 
+
 if __name__ == "__main__":
     # test distance_matrix
     m1 = np.array([[1, 1], [1, 0], [0, 1]])
     m2 = np.array([[0, 2], [1, 1]])
+    print(m2**2)
     print(distance_matrix(m1, m2))
     print(distance_matrix(m1, m2).shape)
 
@@ -65,28 +75,3 @@ if __name__ == "__main__":
     k = 2
     print(knn_predict(dists, labels_train, k))
 
-    ## QUESTION 4
-    import read_cifar as rc
-    import matplotlib.pyplot as plt
-    data, labels = rc.read_cifar(r"data\cifar-10-batches-py")
-
-    def plot_accuracy(data, labels, split_factor=0.9, n=[1,20]):
-        """Plot the variation of the accuracy as a function of k from n[0] to n[1].
-        Save the plot as an image named knn.png in the directory results.
-        
-        Args:
-            split_factor: The ratio of the size of the validation set over the size of the whole dataset. Must be a float between 0 and 1.
-            n: A list of two integers, the first and the last value of k.
-        """
-        data_train, labels_train, data_test, labels_test = rc.split_dataset(data, labels, split_factor)
-        accuracies = []
-        for k in range(n[0], n[1] + 1):
-            accuracy = evaluate_knn(data_train, labels_train, data_test, labels_test, k)
-            accuracies.append(accuracy)
-        plt.plot(range(n[0], n[1] + 1), accuracies)
-        plt.xlabel("k")
-        plt.ylabel("accuracy")
-        plt.savefig(r"results\knn.png")
-        plt.show()
-    
-    plot_accuracy(data, labels)
diff --git a/mlp.py b/mlp.py
new file mode 100644
index 0000000..19c8108
--- /dev/null
+++ b/mlp.py
@@ -0,0 +1,377 @@
+## Imports
+import numpy as np
+
+
+## QUESTION 10
+def learn_once_mse(w1, b1, w2, b2, data, targets, learning_rate):
+    """Perform one gradient descent step of the neural network using the MSE cost.
+    Args:
+        w1: A np.float32 array of shape d_in x d_h, the first layer weights.
+        b1: A np.float32 array of shape 1 x d_h, the first layer biaises.
+        w2: A np.float32 array of shape d_h x d_out, the second layer weights.
+        b2: A np.float32 array of shape 1 x d_out, the second layer biaises.
+        data: A np.float32 array of shape batch_size x d_in, the input data.
+        targets: A np.float32 array of shape batch_size x d_out, the targets.
+        learning_rate: The learning rate.
+    Returns:
+        w1: A np.float32 array of shape d_in x d_h, the updated first layer weights.
+        b1: A np.float32 array of shape 1 x d_h, the updated first layer biaises.
+        w2: A np.float32 array of shape d_h x d_out, the updated second layer weights.
+        b2: A np.float32 array of shape 1 x d_out, the updated second layer biaises.
+        loss: The cost of the network on the given data.
+    """
+    # Check shapes
+    assert w1.shape[0] == data.shape[1] # d_in
+    assert w1.shape[1] == b1.shape[1] # d_h
+    assert b1.shape[0] == 1
+    assert w2.shape[0] == b1.shape[1] # d_h
+    assert w2.shape[1] == b2.shape[1] # d_out
+    assert b2.shape[0] == 1
+    assert data.shape[0] == targets.shape[0] # batch_size
+
+    N = data.shape[0] # batch_size
+    d_in = data.shape[1] # Number of input neurons
+    d_h = w1.shape[1] # Number of hidden neurons
+    d_out = w2.shape[1] # Number of output neurons
+
+    # Forward pass
+    a0 = data # the data are the input of the first layer
+    z1 = np.matmul(a0, w1) + b1 # input of the hidden layer
+    a1 = 1 / (1 + np.exp(-z1)) # output of the hidden layer (sigmoid activation function)
+    z2 = np.matmul(a1, w2) + b2 # input of the output layer
+    a2 = 1 / (1 + np.exp(-z2)) # output of the output layer (sigmoid activation function)
+    predictions = a2 # shape batch_size x d_out
+
+    # Compute loss (MSE)
+    loss = np.mean(np.square(predictions - targets)) # scalar
+
+    # Backward pass
+    # Compute gradients
+
+    ## QUESTION 2
+    dcost_da2 = 2 * (predictions - targets) / d_out # shape batch_size x d_out
+    # print("dcost_da2.shape = ", dcost_da2.shape)
+
+    ## QUESTION 3
+    da2_dz2 = a2 * (1 - a2) # shape batch_size x d_out
+    # print("da2_dz2.shape = ", da2_dz2.shape)
+    dcost_dz2 = dcost_da2 * da2_dz2 # shape batch_size x d_out
+    # print("dcost_dz2.shape = ", dcost_dz2.shape)
+
+    ## QUESTION 4
+    dz2_dw2 = np.transpose(a1) #shape d_h x batch_size
+    # print("dz2_dw2.shape = ", dz2_dw2.shape)
+    dcost_dw2 = np.matmul(dz2_dw2, dcost_dz2) # shape d_h x d_out for batch_size = 1
+    # print("dcost_dw2.shape = ", dcost_dw2.shape)
+
+    ## QUESTION 5
+    dz2_db2 = np.ones((d_out)) # shape d_out
+    # print("dz2_db2.shape = ", dz2_db2.shape)
+    dcost_db2 = dcost_dz2 * dz2_db2 # shape batch_size x d_out
+    # print("dcost_db2.shape = ", dcost_db2.shape)
+
+    ## QUESTION 6
+    dz2_da1 = np.transpose(w2) # shape d_h x d_out
+    # print("dz2_da1.shape = ", dz2_da1.shape)
+    dcost_da1 = np.matmul(dcost_dz2, dz2_da1) # shape batch_size x d_h
+    # print("dcost_da1.shape = ", dcost_da1.shape)
+
+    ## QUESTION 7
+    da1_dz1 = a1 * (1 - a1) # shape batch_size x d_h
+    # print("da1_dz1.shape = ", da1_dz1.shape)
+    dcost_dz1 = dcost_da1 * da1_dz1 # shape batch_size x d_h
+    # print("dcost_dz1.shape = ", dcost_dz1.shape)
+
+    ## QUESTION 8
+    dz1_dw1 = np.transpose(a0) # shape batch_size x d_in
+    # print("dz1_dw1.shape = ", dz1_dw1.shape)
+    dcost_dw1 = np.matmul(dz1_dw1, dcost_dz1) # shape d_in x d_h
+    # print("dcost_dw1.shape = ", dcost_dw1.shape)
+
+    ## QUESTION 9
+    dz1_db1 = np.ones((d_h)) # shape d_h
+    # print("dz1_db1.shape = ", dz1_db1.shape)
+    dcost_db1 = dcost_dz1 * dz1_db1 # shape batch_size x d_h    
+    # print("dcost_db1.shape = ", dcost_db1.shape)
+
+    # Update weights and biaises
+    w1 = w1 - learning_rate * dcost_dw1
+    b1 = b1 - learning_rate * dcost_db1
+    w2 = w2 - learning_rate * dcost_dw2
+    b2 = b2 - learning_rate * dcost_db2
+
+    return w1, b1, w2, b2, loss
+
+
+## QUESTION 11
+def one_hot(labels):
+    """Convert a vector of labels to a one-hot matrix, taking a (n)-D array as parameters and returning the corresponding (n+1)-D one-hot matrix.
+    Args:
+        labels: A np.int64 array of shape batch_size, the labels.
+    Returns:
+        b: A np.int64 array of shape batch_size x (labels.max() + 1), the one-hot matrix.
+    """
+    b = np.zeros((labels.size, labels.max() + 1))
+    b[np.arange(labels.size), labels] = 1
+    return b
+
+
+## QUESTION 12
+def learn_once_cross_entropy(w1, b1, w2, b2, data, labels_train, learning_rate):
+    """Perform one gradient descent step of the neural network using a binary cross-entropy loss.
+    The last activation layer of the network is a softmax layer.
+    Args:
+        w1: A np.float32 array of shape d_in x d_h, the first layer weights.
+        b1: A np.float32 array of shape 1 x d_h, the first layer biaises.
+        w2: A np.float32 array of shape d_h x d_out, the second layer weights.
+        b2: A np.float32 array of shape 1 x d_out, the second layer biaises.
+        data: A np.float32 array of shape batch_size x d_in, the input data.
+        labels_train: A np.int64 array of shape batch_size, the labels of the training set.
+        learning_rate: The learning rate.
+    Returns:
+        w1: A np.float32 array of shape d_in x d_h, the updated first layer weights.
+        b1: A np.float32 array of shape 1 x d_h, the updated first layer biaises.
+        w2: A np.float32 array of shape d_h x d_out, the updated second layer weights.
+        b2: A np.float32 array of shape 1 x d_out, the updated second layer biaises.
+        loss: The loss of the network on the given data.
+    """
+    N = data.shape[0] # batch_size
+    d_h = w1.shape[1] # Number of hidden neurons
+    d_out = labels_train.max() + 1 # Number of output neurons
+
+    # Forward pass
+    a0 = data # the data are the input of the first layer
+    z1 = np.matmul(a0, w1) + b1 # input of the hidden layer
+    a1 = 1 / (1 + np.exp(-z1)) # output of the hidden layer (sigmoid activation function)
+    z2 = np.matmul(a1, w2) + b2 # input of the output layer
+    a2 = np.exp(z2) / np.sum(np.exp(z2), axis=1, keepdims=True) # output of the output layer (softmax activation function)
+    predictions = a2 # shape batch_size x d_out
+    # print("predictions.shape = ", predictions.shape)
+
+    # Compute loss (cross-entropy)
+    labels_train_one_hot = one_hot(labels_train) # shape batch_size x d_out
+    loss = - np.mean(labels_train_one_hot * np.log(predictions) + (1 - labels_train_one_hot) * np.log(1 - predictions)) # scalar
+
+    # Backward pass
+    # Compute gradients
+    # print("labels_train.shape =", labels_train.shape)
+    # dloss_dz2 = predictions - labels_train # shape batch_size x d_out
+    dloss_dz2 = predictions - labels_train_one_hot # shape batch_size x d_out
+    # print("dloss_dz2.shape = ", dloss_dz2.shape)
+
+    dz2_dw2 = np.transpose(a1) # shape d_h x batch_size
+    # print("dz2_dw2.shape = ", dz2_dw2.shape)
+    dloss_dw2 = np.matmul(dz2_dw2, dloss_dz2) # shape d_h x d_out
+    # print("dloss_dw2.shape = ", dloss_dw2.shape)
+
+    dz2_db2 = np.ones((d_out)) # shape 1 x d_out
+    # print("dz2_db2.shape = ", dz2_db2.shape)
+    dloss_db2 = np.sum(dloss_dz2 * dz2_db2, axis=0, keepdims=True) # 1 x d_out
+    # print("dloss_db2.shape = ", dloss_db2.shape)
+
+    dz2_da1 = np.transpose(w2) # shape d_out x d_h
+    # print("dz2_da1.shape = ", dz2_da1.shape)
+    dloss_da1 = np.matmul(dloss_dz2, dz2_da1) # shape batch_size x d_h
+    # print("dloss_da1.shape = ", dloss_da1.shape)
+
+    da1_dz1 = a1 * (1 - a1) # shape batch_size x d_h
+    # print("da1_dz1.shape = ", da1_dz1.shape)
+    dloss_dz1 = dloss_da1 * da1_dz1 # shape batch_size x d_h
+    # print("dloss_dz1.shape = ", dloss_dz1.shape)
+
+    dz1_dw1 = np.transpose(a0) # shape d_in x batch_size
+    # print("dz1_dw1.shape = ", dz1_dw1.shape)
+    dloss_dw1 = np.matmul(dz1_dw1, dloss_dz1) # shape d_in x d_h
+    # print("dloss_dw1.shape = ", dloss_dw1.shape)
+
+    dz1_db1 = np.ones((d_h)) # shape 1 x d_h
+    # print("dz1_db1.shape = ", dz1_db1.shape)
+    dloss_db1 = np.sum(dloss_dz1 * dz1_db1, axis=0, keepdims=True) # 1 x d_h
+    # print("dloss_db1.shape = ", dloss_db1.shape)
+
+    # Update weights and biaises
+    w1 = w1 - learning_rate * dloss_dw1
+    b1 = b1 - learning_rate * dloss_db1
+    w2 = w2 - learning_rate * dloss_dw2
+    b2 = b2 - learning_rate * dloss_db2
+    return w1, b1, w2, b2, loss
+
+
+## QUESTION 13
+def train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epoch):
+    """Perform num_epoch of training steps of the neural network using the binary cross_entropy loss.
+    Args:
+        w1: A np.float32 array of shape d_in x d_h, the first layer weights.
+        b1: A np.float32 array of shape 1 x d_h, the first layer biaises.
+        w2: A np.float32 array of shape d_h x d_out, the second layer weights.
+        b2: A np.float32 array of shape 1 x d_out, the second layer biaises.
+        data_train: A np.float32 array of shape batch_size x d_in, the training set.
+        labels_train: A np.int64 array of shape batch_size, the labels of the training set.
+        learning_rate: The learning rate.
+        num_epoch: The number of training epochs.
+    Returns:
+        w1: A np.float32 array of shape d_in x d_h, the updated first layer weights.
+        b1: A np.float32 array of shape 1 x d_h, the updated first layer biaises.
+        w2: A np.float32 array of shape d_h x d_out, the updated second layer weights.
+        b2: A np.float32 array of shape 1 x d_out, the updated second layer biaises.
+        train_accuracies: A list of the training accuracies across epochs as a list of floats.
+    """
+    #print("data_train.shape = ", data_train.shape)
+    #print("labels_train.shape = ", labels_train.shape)
+    #print("w1.shape = ", w1.shape)
+    #print("b1.shape = ", b1.shape)
+    #print("w2.shape = ", w2.shape)
+    #print("b2.shape = ", b2.shape)
+    train_accuracies = []
+    losses = []
+    for epoch in range(num_epoch):
+        w1, b1, w2, b2, loss = learn_once_cross_entropy(w1, b1, w2, b2, data_train, labels_train, learning_rate) 
+        # Compute accuracy
+        # Forward pass
+        a0 = data_train # the data are the input of the first layer
+        z1 = np.matmul(a0, w1) + b1 # input of the hidden layer
+        a1 = 1 / (1 + np.exp(-z1)) # output of the hidden layer (sigmoid activation function)
+        z2 = np.matmul(a1, w2) + b2 # input of the output layer
+        a2 = np.exp(z2) / np.sum(np.exp(z2), axis=1, keepdims=True) # output of the output layer (softmax activation function)
+        predictions = a2 # shape batch_size x d_out
+        y_pred = np.argmax(predictions, axis=1)
+        train_accuracy = np.mean(y_pred == labels_train)
+        train_accuracies.append(train_accuracy)
+        losses.append(loss)
+        if epoch % 10 == 0:
+            print(f'train_accuracy à l epoch {epoch}: {train_accuracy}')
+
+        # print("Epoch %d, loss = %f, train accuracy = %f" % (epoch, loss, train_accuracy))
+    return w1, b1, w2, b2, train_accuracies, losses
+
+
+## QUESTION 14
+def test_mlp(w1, b1, w2, b2, data_test, labels_test):
+    """Test the neural network on the given test set.
+    Args:
+        w1: A np.float32 array of shape d_in x d_h, the first layer weights.
+        b1: A np.float32 array of shape 1 x d_h, the first layer biaises.
+        w2: A np.float32 array of shape d_h x d_out, the second layer weights.
+        b2: A np.float32 array of shape 1 x d_out, the second layer biaises.
+        data_test: A np.float32 array of shape batch_size x d_in, the test set.
+        labels_test: A np.int64 array of shape batch_size, the labels of the test set.
+    Returns:
+        test_accuracy: The accuracy of the network on the given test set.
+    """
+    #print("data_test.shape = ", data_test.shape)
+    #print("labels_test.shape = ", labels_test.shape)
+    #print("w1.shape = ", w1.shape)
+    #print("b1.shape = ", b1.shape)
+    #print("w2.shape = ", w2.shape)
+    #print("b2.shape = ", b2.shape)
+    # Forward pass
+    a0 = data_test # the data are the input of the first layer
+    z1 = np.matmul(a0, w1) + b1 # input of the hidden layer
+    a1 = 1 / (1 + np.exp(-z1)) # output of the hidden layer (sigmoid activation function)
+    z2 = np.matmul(a1, w2) + b2 # input of the output layer
+    a2 = 1 / (1 + np.exp(-z2)) # output of the output layer (sigmoid activation function)
+    predictions = a2
+    # Compute accuracy
+    y_pred = np.argmax(predictions, axis=1)
+    test_accuracy = np.mean(y_pred == labels_test)
+    return test_accuracy
+
+
+## QUESTION 15
+def run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epoch):
+    """Train an MLP classifier and return the trainig accuracies across epochs as a list of floats and the final testing accuracy as a float.
+    Args:
+        data_train: A np.float32 array of shape batch_size x d_in, the training set.
+        labels_train: A np.int64 array of shape batch_size, the labels of the training set.
+        data_test: A np.float32 array of shape batch_size x d_in, the test set.
+        labels_test: A np.int64 array of shape batch_size, the labels of the test set.
+        d_h: The number of neurons in the hidden layer.
+        learning_rate: The learning rate.
+        num_epoch: The number of training epochs.
+    Returns:
+        train_accuracies: A list of the training accuracies across epochs as a list of floats.
+        test_accuracy: The accuracy of the network on the given test set.
+    """
+    # Random initialization of the network weights and biaises
+    d_in = data_train.shape[1]  # input dimension
+    d_out = labels_train.max() + 1  # output dimension (number of neurons of the output layer)
+    w1 = 2 * np.random.rand(d_in, d_h) - 1  # first layer weights
+    b1 = np.zeros((1, d_h))  # first layer biaises
+    w2 = 2 * np.random.rand(d_h, d_out) - 1  # second layer weights
+    b2 = np.zeros((1, d_out))  # second layer biaises
+    # Train the network
+    w1, b1, w2, b2, train_accuracies, losses = train_mlp(w1, b1, w2, b2, data_train, labels_train, learning_rate, num_epoch)
+    # Test the network
+    test_accuracy = test_mlp(w1, b1, w2, b2, data_test, labels_test)
+    return train_accuracies, test_accuracy, losses
+
+
+if __name__ == "__main__":
+    # Define input data
+    w1 = np.array([[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]]) # d_in = 3, d_h = 2
+    b1 = np.array([[0.1, 0.2]]) # d_h = 2
+    w2 = np.array([[0.1, 0.2, 0.3, 0.4, 0.5], [0.4, 0.5, 0.6, 0.7, 0.8]]) # d_h = 2, d_out = 5
+    b2 = np.array([[0.1, 0.2, 0.3, 0.4, 0.5]]) # d_out = 5
+    data = np.array([[0.1, 0.2, 0.3]]) # batch_size = 1, d_in = 3
+    targets = np.array([[0.1, 0.2, 0.3, 0.4, 0.5]]) # batch_size = 1, d_out = 5
+    learning_rate = 0.1
+
+    # Call function
+    w1, b1, w2, b2, cost = learn_once_mse(w1, b1, w2, b2, data, targets, learning_rate)
+
+    # Check output shapes
+    assert w1.shape == (3, 2)
+    assert b1.shape == (1, 2)
+    assert w2.shape == (2, 5)
+    assert b2.shape == (1, 5)
+    assert cost.shape == ()
+
+    # Test one_hot
+    labels = np.array([0, 4, 2, 3])
+    print(one_hot(labels))
+
+    # Define input data
+    w1 = np.array([[0.1, 0.2], [0.3, 0.4], [0.5, 0.6]]) # d_in = 3, d_h = 2
+    b1 = np.array([[0.1, 0.2]]) # d_h = 2
+    w2 = np.array([[0.1, 0.2, 0.3, 0.4, 0.5], [0.4, 0.5, 0.6, 0.7, 0.8]]) # d_h = 2, d_out = 5
+    b2 = np.array([[0.1, 0.2, 0.3, 0.4, 0.5]]) # d_out = 5
+    data = np.array([[0.1, 0.2, 0.3]]) # batch_size = 1, d_in = 3
+    labels_train = np.array([4]) # batch_size = 1
+    learning_rate = 0.1
+
+    # Test learn_once_cross_entropy
+    w1, b1, w2, b2, loss = learn_once_cross_entropy(w1, b1, w2, b2, data, labels_train, learning_rate)
+    print(w1, b1, w2, b2, loss)
+
+    # Test train_mlp
+    w1, b1, w2, b2, train_accuracies, losses = train_mlp(w1, b1, w2, b2, data, labels_train, learning_rate, 10)
+    print(train_accuracies)
+
+    # Test test_mlp
+    w1, b1, w2, b2, train_accuracies, losses = train_mlp(w1, b1, w2, b2, data, labels_train, learning_rate, 10)
+    print(train_accuracies)
+
+    # Test run_mlp_training
+    train_accuracies, test_accuracy, losses = run_mlp_training(data, labels_train, data, labels_train, 2, 0.1, 10)
+    print(train_accuracies, test_accuracy)
+
+    import read_cifar as rc
+    import matplotlib.pyplot as plt
+    data, labels = rc.read_cifar(r"data\cifar-10-batches-py")
+    split_factor = 0.9
+    data_train, labels_train, data_test, labels_test = rc.split_dataset(data, labels, split_factor)
+    d_h = 64
+    learning_rate = 0.1
+    num_epoch = 100
+    train_accuracies, test_accuracy, losses = run_mlp_training(data_train, labels_train, data_test, labels_test, d_h, learning_rate, num_epoch)
+    print("ok 3")
+    plt.plot(range(num_epoch), train_accuracies)
+    plt.xlabel("epoch")
+    plt.ylabel("accuracy")
+    plt.savefig(r"results\mlp.png")
+    plt.show()
+
+    plt.plot(range(num_epoch), losses)
+    plt.xlabel("epoch")
+    plt.ylabel("loss")
+    plt.show()
diff --git a/read_cifar.py b/read_cifar.py
index 0dee379..574c63d 100644
--- a/read_cifar.py
+++ b/read_cifar.py
@@ -1,14 +1,16 @@
-# imports
+## Imports
 import numpy as np
 import pickle
 
+
 ## QUESTION 2
 def unpickle(file):
     # Source: https://www.cs.toronto.edu/~kriz/cifar.html
-    with open(file, 'rb') as fo:
-        dict = pickle.load(fo, encoding='bytes')
+    with open(file, "rb") as fo:
+        dict = pickle.load(fo, encoding="bytes")
     return dict
 
+
 def read_cifar_batch(file):
     """Read a batch of the CIFAR dataset.
     Args:
@@ -22,6 +24,7 @@ def read_cifar_batch(file):
     labels = np.array(dict[b"labels"], dtype=np.int64)
     return data, labels
 
+
 ## QUESTION 3
 def read_cifar(path):
     """Read the whole CIFAR dataset.
@@ -44,6 +47,7 @@ def read_cifar(path):
     labels = np.concatenate(label_batches, axis=0)
     return data, labels
 
+
 ## QUESTION 4
 def split_dataset(data, labels, split):
     """Split the dataset into a training set and a validation set. Data are shuffled before splitting.
@@ -57,7 +61,7 @@ def split_dataset(data, labels, split):
         data_test: A np.float32 array of shape (1 - split) x batch_size x data_size, the validation set.
         labels_test: A np.int64 array of shape (1 - split) x batch_size, the labels of the validation set.
     """
-    assert 0 <= split <= 1 # split must be between 0 and 1
+    assert 0 <= split <= 1  # split must be between 0 and 1
     data_size = data.shape[0]
     # shuffle data and labels
     indices = np.arange(data_size)
@@ -70,8 +74,13 @@ def split_dataset(data, labels, split):
     labels_train = labels[:split_index]
     data_test = data[split_index:]
     labels_test = labels[split_index:]
+    print("data_train.shape: ", data_train.shape)
+    print("labels_train.shape: ", labels_train.shape)
+    print("data_test.shape: ", data_test.shape)
+    print("labels_test.shape: ", labels_test.shape)
     return data_train, labels_train, data_test, labels_test
 
+
 if __name__ == "__main__":
     dict = unpickle(r"data\cifar-10-batches-py\data_batch_1")
     print(dict.keys())
diff --git a/results/knn.png b/results/knn.png
index f3f3baa44e08700a8fed7fd892428b92b0377a72..8522fe74e7d61084b41020a38e4f42140494f818 100644
GIT binary patch
literal 28329
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
advEuWb1zIjr7$osFnGH9xvX<aXaWE*s<CPS

literal 28568
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
E0I-))#sB~S

diff --git a/results/mlp.png b/results/mlp.png
new file mode 100644
index 0000000000000000000000000000000000000000..b437dd9a7b45a0bafdeefb972aa4adcdb3814e03
GIT binary patch
literal 12583
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
T{8;oHXiI>ntDnm{r-UW|K*AJs

literal 0
HcmV?d00001

-- 
GitLab