diff --git a/01_materials/labs/lab_1.ipynb b/01_materials/labs/lab_1.ipynb index 667fd306e..2d7f3c735 100644 --- a/01_materials/labs/lab_1.ipynb +++ b/01_materials/labs/lab_1.ipynb @@ -1,853 +1,1929 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Training Neural Networks with Keras\n", - "\n", - "Welcome to the first practical session of the course! In this session, we will learn how to train neural networks with Keras. We will start with a simple example of a feedforward neural network for classification and then we will study the impact of the initialization of the weights on the convergence of the training algorithm.\n", - "\n", - "Keras is a high-level neural network API, built on top of TensorFlow 2.0. It provides a user-friendly interface to build, train and deploy deep learning models. Keras is designed to be modular, fast and easy to use.\n", - "\n", - "Throughout this course, we will focus on using Keras and TensorFlow for building and training neural networks. However, there are other popular deep learning frameworks such as PyTorch, MXNet, CNTK, etc. that you can also use to build and train neural networks.\n", - "\n", - "In order to use our code on Google Colab, we will need to ensure that any required packages are installed. We will use the following packages in this session:\n", - "\n", - "- `tensorflow`: an open-source library for numerical computation and large-scale machine learning.\n", - "- `matplotlib`: a plotting library for the Python programming language and its numerical mathematics extension NumPy.\n", - "- `numpy`: a library for scientific computing in Python.\n", - "- `scikit-learn`: a machine learning library for the Python programming language.\n", - "- `pandas`: a library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.\n", - "\n", - "Today, we will be working with the famous MNIST dataset. MNIST (Modified National Institute of Standards and Technology) is a database of low resolution images of handwritten digits. The history here is interesting - the dataset was originally created in the 1980s, when researchers from the aforementioned institute collected samples from American Census Bureau employees and high school students. The dataset was then modified in the 1990s (hence the M in MNIST), and has since become a popular benchmark for machine learning algorithms. \n", - "\n", - "The dataset contains images, each of which is a 28x28 grayscale image of a handwritten digit. The goal is to classify each image into one of the 10 possible classes (0-9).\n", - "\n", - "![MNIST](https://upload.wikimedia.org/wikipedia/commons/2/27/MnistExamples.png)\n", - "\n", - "The Scikit-Learn library provides a convenient function to download and load the MNIST dataset. The following cell will download the dataset. Then we will take a look at the shape of the data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "from sklearn.datasets import load_digits\n", - "\n", - "digits = load_digits()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits.images.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "This means that we have 1797 images, each of which is a 8x8 image. For basic image processing, we will need to flatten the images into a 1D array. In this case, Scikit-Learn has already provided the data in this format too:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits.data.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "For each image, we also have the corresponding label (or target, or class) in `digits.target`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "digits.target.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "We can take a look at some random images from the dataset. The following cell will select 9 random images and plot them in a 3x3 grid (meaning that you can rerun the cell to see different images)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Selecting 9 random indices\n", - "random_indices = np.random.choice(len(digits.images), 9, replace=False)\n", - "\n", - "# Creating a 3x3 grid plot\n", - "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", - "\n", - "for i, ax in enumerate(axes.flat):\n", - " ax.imshow(digits.images[random_indices[i]], cmap=plt.cm.gray_r, interpolation='nearest')\n", - " ax.set_title(f\"Label: {digits.target[random_indices[i]]}\")\n", - "\n", - " # Removing axis labels\n", - " ax.set_xticks([])\n", - " ax.set_yticks([])\n", - "\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "As you can see, these images are very low resolution. This is because they were originally scanned from paper forms, and then scaled down to 8x8 pixels. This is a common problem in machine learning - the quality of the data is often a limiting factor in the performance of the model. In this case, the low resolution of the images makes it difficult to distinguish between some digits, even for humans. For example, the following images are all labelled as 9, but they look very different:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Selecting 9 random indices of images labelled as 9\n", - "random_indices = np.random.choice(np.where(digits.target == 9)[0], 9, replace=False)\n", - "\n", - "# Creating a 3x3 grid plot\n", - "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", - "\n", - "for i, ax in enumerate(axes.flat):\n", - " ax.imshow(digits.images[random_indices[i]], cmap=plt.cm.gray_r, interpolation='nearest')\n", - " ax.set_title(f\"Label: {digits.target[random_indices[i]]}\")\n", - "\n", - " # Removing axis labels\n", - " ax.set_xticks([])\n", - " ax.set_yticks([])\n", - " \n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "While we are plotting the samples as images, remember that our model is only going to see a 1D array of numbers. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Train / Test Split\n", - "\n", - "In order to understand how well our model performs on _new_ data, we need to split our dataset into a training set and a test set. The training set will be used to train the model, and the test set will be used to evaluate the performance of the model.\n", - "\n", - "Let's keep some held-out data to be able to measure the generalization performance of our model. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "\n", - "\n", - "X_train, X_test, y_train, y_test = train_test_split(\n", - " digits.data, \n", - " digits.target,\n", - " test_size=0.2, # 20% of the data is used for testing\n", - " random_state=42 # Providing a value here means getting the same \"random\" split every time\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Let's confirm that the data has been split correctly:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "print(f'X_train shape: {X_train.shape}')\n", - "print(f'y_train shape: {y_train.shape}')\n", - "print(f'X_test shape: {X_test.shape}')\n", - "print(f'y_test shape: {y_test.shape}')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "This is what we expected to see. It's always good to check as you go, to make sure that you haven't made a mistake somewhere - this is something that working in a notebook like this makes it easy to do." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Preprocessing of the Target Data\n", - "\n", - "The labels that we have are integers between 0 and 9. However, we want to train a neural network to classify the images into one of 10 classes. It can be a little counter-intuitive because we are dealing with numbers, but our classes are not ordinal.\n", - "\n", - "What do we mean by that? Let's imagine we were trying to predict the height of a building (separated into classes) from images. If a given building was actually 10m tall, and our model predicted 9m, we would consider that to be a better prediction than if it predicted 1m. This is because the classes are ordinal - there is meaning in the difference between the classes.\n", - "\n", - "In our case, even though we are dealing with numbers, the classes are not ordinal. If a given image is actually a 9, and our model predicts 8, we would consider that to be just as bad as if it predicted 1. This is because the classes are not ordered, and the difference between the classes is not meaningful.\n", - "\n", - "Because of this, we need to convert our labels from an integer value into a one-hot encoded vector. This means that each label will be represented as a vector of length 10, with a 1 in the position corresponding to the class, and 0s everywhere else. For example, the label 9 would be represented as `[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]`. This is a common way of representing categorical data in machine learning. By doing this, we ensure that our model is taught the correct relationship between the classes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tensorflow.keras.utils import to_categorical\n", - "\n", - "print(f'Before one-hot encoding: {y_train[0]}')\n", - "y_train = to_categorical(y_train, num_classes=10)\n", - "y_test = to_categorical(y_test, num_classes=10)\n", - "print(f'After one-hot encoding: {y_train[0]}')" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Feed Forward Neural Networks with Keras\n", - "\n", - "Now that we have prepared our data, it's time to build a simple neural network! In this section, we will use the Keras API to build a simple feed forward neural network. We will then train the model on the MNIST dataset, and evaluate its performance on the test set.\n", - "\n", - "In most modern deep learning frameworks, the process of building a model can be broken down into a few steps:\n", - "\n", - "- Define the model architecture: this is where we define the layers of the model, and how they are connected to each other.\n", - "- Compile the model: this is where we define the loss function, the optimizer, and the metrics that we want to use to evaluate the model.\n", - "- Train the model: this is where we train the model on the training data.\n", - "\n", - "Let's start with defining the model architecture. There are two ways to do this in Keras - the Sequential API and the Functional API. The Sequential API is the simplest way to build a model, and is suitable for most use cases. The Functional API is more flexible, and allows you to build more complex models. We will start with the Sequential API, and then we will look at the Functional API later in the course.\n", - "\n", - "Our simple neural network will be \"fully-connected\". This means that each neuron in a given layer is connected to every neuron in the next layer. This is also known as a \"dense\" layer. We will use the `Dense` class from Keras to define our layers." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "from tensorflow.keras.models import Sequential\n", - "from tensorflow.keras.layers import Input, Dense\n", - "\n", - "model = Sequential()\n", - "\n", - "# Input layer\n", - "model.add(Input(shape=(64,))) # Input tensor specifying the shape\n", - "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", - "\n", - "# Hidden layer\n", - "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", - "\n", - "# Output layer\n", - "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", - "\n", - "model.summary()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Congratulations! You have just built your first neural network with Keras. As we can confirm from the `model.summary()` output, our model has 3 layers. The first layer has 64 neurons, the second layer has 64 neurons, and the output layer has 10 neurons. The output layer uses the softmax activation function, which is commonly used for multi-class classification problems. The other layers use the ReLU activation function, which is commonly used for hidden layers in neural networks.\n", - "\n", - "Next, we need to compile the model. This is where we define the loss function, the optimizer, and the metrics that we want to use to evaluate the model. We will use the `compile` method of the model to do this." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "model.compile(\n", - " loss='categorical_crossentropy', # Loss function\n", - " optimizer='sgd', # Optimizer\n", - " metrics=['accuracy'] # Metrics to evaluate the model\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Because we are predicting which class a sample belongs to, we will use the `categorical_crossentropy` function. This loss function is commonly used for multi-class classification problems. \n", - "\n", - "For our optimizer, we are using the standard stochastic gradient descent (SGD) algorithm. This is a simple optimizer that works well for many problems. We will look at more advanced optimizers later in the course.\n", - "\n", - "Finally, we are using the `accuracy` metric to evaluate the model. This is a common metric for classification problems, and it is simply the fraction of samples that are correctly classified. This is an easier metric for us to understand, but it's not quite as useful for actually training the model (for example, it doesn't tell us how \"confident\" the model is in its predictions).\n", - "\n", - "Now that we have (a) defined the model architecture and (b) compiled the model, we are ready to train the model. We will use the `fit` method of the model to do this." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "model.fit(\n", - " X_train, # Training data\n", - " y_train, # Training labels\n", - " epochs=5, # Number of epochs\n", - " batch_size=32, # Number of samples per batch\n", - " validation_split=0.2 # Use 20% of the data for validation\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "We have now trained our model! We can see that the model has been trained for 5 epochs, and the loss and accuracy have been printed for each epoch. We can also see that the model has been evaluated on the validation data at the end of each epoch. This is useful for us to see how the model is performing on data that it hasn't seen during training.\n", - "\n", - "Once the model is trained, it's time to evaluate the model on the test set. We can use the `evaluate` method of the model to do this. If you were building a model for a real-world application, this is the very last thing you would do, and the result here would be the figure you'd report in your paper or presentation." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "loss, accuracy = model.evaluate(X_test, y_test)\n", - "\n", - "print(f'Loss: {loss:.2f}')\n", - "print(f'Accuracy: {accuracy*100:.2f}%')" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Hopefully you have achieved an accuracy of around 95%. This is pretty good, but we can do better! In the next section, we will look at how we can improve the performance of our model by using a more advanced optimizer. But before we get there, let's do one other thing - let's look at the predictions that our model is making on the test set. When you are building a model, it's often useful to have a look at some of the examples your model is getting wrong. Sometimes this can reveal problems with the data, or it can give you ideas for how to improve your model." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Get the predictions for the test data\n", - "predictions = model.predict(X_test)\n", - "\n", - "# Get the index of the largest probability (i.e. the predicted class)\n", - "predicted_classes = np.argmax(predictions, axis=1)\n", - "true_classes = np.argmax(y_test, axis=1)\n", - "misclassified_indices = np.where(predicted_classes != true_classes)[0]\n", - "\n", - "# Get the misclassified samples themselves\n", - "misclassified_samples = X_test[misclassified_indices]\n", - "misclassified_labels = np.argmax(y_test[misclassified_indices], axis=1)\n", - "\n", - "# Pick 9 random misclassified samples\n", - "random_indices = np.random.choice(len(misclassified_indices), 9, replace=False)\n", - "\n", - "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", - "for i, ax in enumerate(axes.flat):\n", - " ax.imshow(misclassified_samples[random_indices[i]].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')\n", - " ax.set_title(f\"Pred: {predicted_classes[misclassified_indices[random_indices[i]]]}, Real: {misclassified_labels[random_indices[i]]}\")\n", - "\n", - " # Removing axis labels\n", - " ax.set_xticks([])\n", - " ax.set_yticks([])\n", - " \n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "What do you think? Would you have made the same mistakes as the model? Determining whether the mistakes are \"understandable\" is a rough way of seeing if you could improve the model further, or if this is the best you can do with the data you have." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### b) Exercises: Impact of the Optimizer\n", - "\n", - "In this section, you will play around with the optimizer and see how it affects the performance of the model. We will start with the standard SGD optimizer, and then we will look at more advanced optimizers.\n", - "\n", - "1. Try decreasing the learning rate of the SGD optimizer by a factor of 10, or 100. What do you observe?\n", - "2. Try increasing the learning rate of the SGD optimizer. What happens?\n", - "3. The SGD optimizer has a momentum parameter. In a nutshell, this parameter controls how much the gradient from the previous step affects the current step. Try enabling momentum in the SGD optimizer with a value of 0.9. What happens?\n", - " \n", - "**Notes**: \n", - "\n", - "The keras API documentation is available at:\n", - "\n", - "https://www.tensorflow.org/api_docs/python/tf/keras\n", - "\n", - "It is also possible to learn more about the parameters of a class by using the question mark: type and evaluate:\n", - "\n", - "```python\n", - "optimizers.SGD?\n", - "```\n", - "\n", - "in a jupyter notebook cell.\n", - "\n", - "It is also possible to type the beginning of a function call / constructor and type \"shift-tab\" after the opening paren:\n", - "\n", - "```python\n", - "optimizers.SGD(\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# 1. Decreasing the learning rate\n", - "from tensorflow.keras.optimizers import SGD\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# 2. Increasing the learning rate\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# 3. SGD with momentum\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Next, let's try a more advanced optimizer. Adam is likely the most popular optimizer for deep learning. It is an adaptive learning rate optimizer, which means that it automatically adjusts the learning rate based on how the training is going. This can be very useful, as it means that we don't need to manually tune the learning rate. Let's see how it performs on our model.\n", - "\n", - "\n", - "1. Replace the SGD optimizer by the Adam optimizer from keras and run it\n", - " with the default parameters.\n", - "\n", - "2. Add another hidden layer with ReLU activation and 64 neurons. Does it improve the model performance?\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Adam optimizer\n", - "from tensorflow.keras.optimizers import Adam" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Extra hidden layer\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Exercises: Forward Pass and Generalization\n", - "\n", - "Let's look in more detail at how the model makes predictions on the test set. We will walk through each step of making predictions, examining exactly what's going on.\n", - "\n", - "To start, we will apply our model to the test set, and look at what we get as output:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "predictions_tf = model(X_test)\n", - "predictions_tf[:5]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "type(predictions_tf), predictions_tf.shape" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The raw output of the model is a tensor of shape `(360, 10)`. This means that we have 360 samples, and for each sample we have 10 values. Each of these values represents the probability that the sample belongs to a given class. This means that we have 10 probabilities for each sample, and the sum of these probabilities is 1. We can confirm this by summing the probabilities for each sample:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import tensorflow as tf\n", - "\n", - "tf.reduce_sum(predictions_tf, axis=1)[:5]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "...okay, there might be a small rounding error here and there. This is to do with how floating point numbers are represented in computers, and it's not something we need to worry about for now." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also extract the label with the highest probability using the tensorflow API:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "predicted_labels_tf = tf.argmax(predictions_tf, axis=1)\n", - "predicted_labels_tf[:5]" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "One helpful aspect of this approach is that we don't just get the prediction, but also a sense of how confident the model is in its prediction. To see this in practice, let's take a look at some of the predictions the model is highly confident about (i.e. a lot of the probability mass is on one class):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Get the values corresponding to the predicted labels for each sample\n", - "predicted_values_tf = tf.reduce_max(predictions_tf, axis=1)\n", - "\n", - "# Get the indices of the samples with the highest predicted values\n", - "most_confident_indices_tf = tf.argsort(predicted_values_tf, direction='DESCENDING').numpy()[:9]\n", - "\n", - "# Get the 9 most confident samples\n", - "most_confident_samples_tf = X_test[most_confident_indices_tf]\n", - "\n", - "# Get the true labels for the 9 most confident samples\n", - "most_confident_labels_tf = np.argmax(y_test[most_confident_indices_tf], axis=1)\n", - "\n", - "# Plot the 9 most confident samples\n", - "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", - "\n", - "for i, ax in enumerate(axes.flat):\n", - " ax.imshow(most_confident_samples_tf[i].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')\n", - " ax.set_title(f\"{most_confident_labels_tf[i]}\")\n", - "\n", - " # Removing axis labels\n", - " ax.set_xticks([])\n", - " ax.set_yticks([])\n", - " \n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Impact of Initialization\n", - "\n", - "Let's study the impact of a bad initialization when training\n", - "a deep feed forward network.\n", - "\n", - "By default, Keras dense layers use the \"Glorot Uniform\" initialization\n", - "strategy to initialize the weight matrices:\n", - "\n", - "- each weight coefficient is randomly sampled from [-scale, scale]\n", - "- scale is proportional to $\\frac{1}{\\sqrt{n_{in} + n_{out}}}$\n", - "\n", - "This strategy is known to work well to initialize deep neural networks\n", - "with \"tanh\" or \"relu\" activation functions and then trained with\n", - "standard SGD.\n", - "\n", - "To assess the impact of initialization let us plug an alternative init\n", - "scheme into a 2 hidden layers networks with \"tanh\" activations.\n", - "For the sake of the example let's use normal distributed weights\n", - "with a manually adjustable scale (standard deviation) and see the\n", - "impact the scale value:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from tensorflow.keras import initializers\n", - "from tensorflow.keras import optimizers\n", - "\n", - "input_dim = 64\n", - "hidden_dim = 64\n", - "output_dim = 10\n", - "\n", - "normal_init = initializers.TruncatedNormal(stddev=0.01, seed=42)\n", - "\n", - "model = Sequential()\n", - "model.add(Dense(hidden_dim, input_dim=input_dim, activation=\"tanh\",\n", - " kernel_initializer=normal_init))\n", - "model.add(Dense(hidden_dim, activation=\"tanh\",\n", - " kernel_initializer=normal_init))\n", - "model.add(Dense(output_dim, activation=\"softmax\",\n", - " kernel_initializer=normal_init))\n", - "\n", - "model.compile(optimizer=optimizers.SGD(learning_rate=0.1),\n", - " loss='categorical_crossentropy', metrics=['accuracy'])" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.layers" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's have a look at the parameters of the first layer after initialization but before any training has happened:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.layers[0].weights" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "w = model.layers[0].weights[0].numpy()\n", - "w" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "w.std()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "b = model.layers[0].weights[1].numpy()\n", - "b" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "history = model.fit(X_train, y_train, epochs=15, batch_size=32)\n", - "\n", - "plt.figure(figsize=(12, 4))\n", - "plt.plot(history.history['loss'], label=\"Truncated Normal init\")\n", - "plt.legend();" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Once the model has been fit, the weights have been updated and notably the biases are no longer 0:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.layers[0].weights" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "#### Questions:\n", - "\n", - "- Try the following initialization schemes and see whether\n", - " the SGD algorithm can successfully train the network or\n", - " not:\n", - " \n", - " - a very small e.g. `stddev=1e-3`\n", - " - a larger scale e.g. `stddev=1` or `10`\n", - " - initialize all weights to 0 (constant initialization)\n", - " \n", - "- What do you observe? Can you find an explanation for those\n", - " outcomes?\n", - "\n", - "- Are more advanced solvers such as SGD with momentum or Adam able\n", - " to deal better with such bad initializations?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - } - ], - "metadata": { - "file_extension": ".py", - "kernelspec": { - "display_name": ".venv", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "3fkeidVkrfjg" + }, + "source": [ + "# Training Neural Networks with Keras\n", + "\n", + "Welcome to the first practical session of the course! In this session, we will learn how to train neural networks with Keras. We will start with a simple example of a feedforward neural network for classification and then we will study the impact of the initialization of the weights on the convergence of the training algorithm.\n", + "\n", + "Keras is a high-level neural network API, built on top of TensorFlow 2.0. It provides a user-friendly interface to build, train and deploy deep learning models. Keras is designed to be modular, fast and easy to use.\n", + "\n", + "Throughout this course, we will focus on using Keras and TensorFlow for building and training neural networks. However, there are other popular deep learning frameworks such as PyTorch, MXNet, CNTK, etc. that you can also use to build and train neural networks.\n", + "\n", + "In order to use our code on Google Colab, we will need to ensure that any required packages are installed. We will use the following packages in this session:\n", + "\n", + "- `tensorflow`: an open-source library for numerical computation and large-scale machine learning.\n", + "- `matplotlib`: a plotting library for the Python programming language and its numerical mathematics extension NumPy.\n", + "- `numpy`: a library for scientific computing in Python.\n", + "- `scikit-learn`: a machine learning library for the Python programming language.\n", + "- `pandas`: a library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.\n", + "\n", + "Today, we will be working with the famous MNIST dataset. MNIST (Modified National Institute of Standards and Technology) is a database of low resolution images of handwritten digits. The history here is interesting - the dataset was originally created in the 1980s, when researchers from the aforementioned institute collected samples from American Census Bureau employees and high school students. The dataset was then modified in the 1990s (hence the M in MNIST), and has since become a popular benchmark for machine learning algorithms.\n", + "\n", + "The dataset contains images, each of which is a 28x28 grayscale image of a handwritten digit. The goal is to classify each image into one of the 10 possible classes (0-9).\n", + "\n", + "![MNIST](https://upload.wikimedia.org/wikipedia/commons/2/27/MnistExamples.png)\n", + "\n", + "The Scikit-Learn library provides a convenient function to download and load the MNIST dataset. The following cell will download the dataset. Then we will take a look at the shape of the data." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "HXp0OTKwrfji" + }, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "from sklearn.datasets import load_digits\n", + "\n", + "digits = load_digits()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "g_wfEKuwrfjj", + "outputId": "1902b2d4-2850-4e2a-a735-2e207cc35abb" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 8, 8)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "digits.images.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "Fl6zKtO9rfjj" + }, + "source": [ + "This means that we have 1797 images, each of which is a 8x8 image. For basic image processing, we will need to flatten the images into a 1D array. In this case, Scikit-Learn has already provided the data in this format too:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "PwSjlFuwrfjj", + "outputId": "d383d921-b612-40e3-e7b3-5f6e7ecb94f3" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 64)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "digits.data.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "7MPZd7qwrfjk" + }, + "source": [ + "For each image, we also have the corresponding label (or target, or class) in `digits.target`:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tJsI5tSbrfjk", + "outputId": "a1af18f3-8beb-42bf-8332-cfd34fbe6ac5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797,)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "digits.target.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "Sfxu90oErfjk" + }, + "source": [ + "We can take a look at some random images from the dataset. The following cell will select 9 random images and plot them in a 3x3 grid (meaning that you can rerun the cell to see different images)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 521 + }, + "id": "jQMFdQxprfjk", + "outputId": "0f6cf017-bee2-4825-91c1-17c563aab9b7" + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Selecting 9 random indices\n", + "random_indices = np.random.choice(len(digits.images), 9, replace=False)\n", + "\n", + "# Creating a 3x3 grid plot\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(digits.images[random_indices[i]], cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"Label: {digits.target[random_indices[i]]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "8pIvNQYnrfjk" + }, + "source": [ + "As you can see, these images are very low resolution. This is because they were originally scanned from paper forms, and then scaled down to 8x8 pixels. This is a common problem in machine learning - the quality of the data is often a limiting factor in the performance of the model. In this case, the low resolution of the images makes it difficult to distinguish between some digits, even for humans. For example, the following images are all labelled as 9, but they look very different:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 521 + }, + "id": "KuWP5tqNrfjk", + "outputId": "b68e9848-59e5-40d0-dce9-d460047ba2c4" + }, + "outputs": [ + { + "data": { + "image/png": "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wIEDKi8v1w8//KAjR45o3bp1Sk1NlWTnS+QRP+YRljCPBiX5CcGIxfMM0DnnKisrXV5enktNTR149iTJLViwYGCb/meAO3bsGHT9hx9+2KWlpTnn/veMcKg/x44dc85d/hngcMRiMXffffddkv3QQw+5+++/30lynZ2dI8rF6GAeO0eUi9HBPHaOKDfZxvWnrN955x0VFxcrGo3q6aef1uzZszV58mTt3LlTJ0+eHHZe//sSTz31lAoLCy+7zcKFC73W3C8zM1MffPCBfvrpJzU3NyscDiscDqugoECzZs1SVlZWIPtB4jCPsIR5tGdcF/LBgweVm5urQ4cOXfJpvNLS0stuf+LEiUGXff/998rJyZEk5ebmSpJSU1N11113Bb/gy5g/f77mz58vSYrFYvr666/1wAMPJGTfCBbzCEuYR3vG/XvI0qUnhq6rq9PRo0cvu311dfUl73HU19errq5Od999tyRp9uzZikQiev311/XLL78Mun57e/uQ64n3Y/1Xsn37dvX29mrr1q0juj6Si3mEJcyjPWP+CPmtt97SJ598MujyJ598UkVFRTp06JDWrFmje+65R6dOndK+fft0880369y5c4Ous3DhQi1fvlxbtmxRT0+PKioqdO211+qZZ54Z2Oa1117T8uXLlZeXp82bNys3N1enT5/W0aNH1draquPHj19xrfX19Vq1apVKS0uv+sGFXbt2qbGxUUuXLlVKSoqqq6v16aef6vnnn9ftt98e/x2EhGIeYQnzOMYk+T3sEev/0MKV/rS0tLi+vj73wgsvuHA47NLS0tyiRYvc4cOH3YYNG1w4HB7I6v/QwosvvujKy8tddna2S0tLcytWrHDHjx8ftO+TJ0+6Rx55xN1www0uNTXVzZ071xUVFbmDBw8ObOPzsX7nnDt8+LBbsmSJy8jIcFOnTnXLli1z7733ns9dhlHEPMIS5nFsCjn3p9crAABAUozr95ABABgrKGQAAAygkAEAMIBCBgDAAAoZAAADKGQAAAyI64tB+vr61NbWpoyMjEu+Yg2Q/vtNP93d3ZozZ44mTRr953jMI4bCPMKS4cxjXIXc1tam7OzsQBaH8aulpUXz5s0b9f0wj4gH8whL4pnHuAo5IyNjIHDGjBn+K/Pw448/emfs3LnTO+Nf//qXd8by5cu9M/bt2+ed4aurq0vZ2dkDczLa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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Selecting 9 random indices of images labelled as 9\n", + "random_indices = np.random.choice(np.where(digits.target == 9)[0], 9, replace=False)\n", + "\n", + "# Creating a 3x3 grid plot\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(digits.images[random_indices[i]], cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"Label: {digits.target[random_indices[i]]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "EG9uja8Vrfjl" + }, + "source": [ + "While we are plotting the samples as images, remember that our model is only going to see a 1D array of numbers." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "1egUchrGrfjl" + }, + "source": [ + "## Train / Test Split\n", + "\n", + "In order to understand how well our model performs on _new_ data, we need to split our dataset into a training set and a test set. The training set will be used to train the model, and the test set will be used to evaluate the performance of the model.\n", + "\n", + "Let's keep some held-out data to be able to measure the generalization performance of our model." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "TPKX2RIgrfjl" + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " digits.data,\n", + " digits.target,\n", + " test_size=0.2, # 20% of the data is used for testing\n", + " random_state=42 # Providing a value here means getting the same \"random\" split every time\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "oO9lHZ8Irfjl" + }, + "source": [ + "Let's confirm that the data has been split correctly:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZU4jJfpkrfjl", + "outputId": "7089edc2-59b3-4838-ff61-e1100bb3004b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train shape: (1437, 64)\n", + "y_train shape: (1437,)\n", + "X_test shape: (360, 64)\n", + "y_test shape: (360,)\n" + ] + } + ], + "source": [ + "print(f'X_train shape: {X_train.shape}')\n", + "print(f'y_train shape: {y_train.shape}')\n", + "print(f'X_test shape: {X_test.shape}')\n", + "print(f'y_test shape: {y_test.shape}')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "ZNQ6r9werfjl" + }, + "source": [ + "This is what we expected to see. It's always good to check as you go, to make sure that you haven't made a mistake somewhere - this is something that working in a notebook like this makes it easy to do." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "751KlHDarfjm" + }, + "source": [ + "## Preprocessing of the Target Data\n", + "\n", + "The labels that we have are integers between 0 and 9. However, we want to train a neural network to classify the images into one of 10 classes. It can be a little counter-intuitive because we are dealing with numbers, but our classes are not ordinal.\n", + "\n", + "What do we mean by that? Let's imagine we were trying to predict the height of a building (separated into classes) from images. If a given building was actually 10m tall, and our model predicted 9m, we would consider that to be a better prediction than if it predicted 1m. This is because the classes are ordinal - there is meaning in the difference between the classes.\n", + "\n", + "In our case, even though we are dealing with numbers, the classes are not ordinal. If a given image is actually a 9, and our model predicts 8, we would consider that to be just as bad as if it predicted 1. This is because the classes are not ordered, and the difference between the classes is not meaningful.\n", + "\n", + "Because of this, we need to convert our labels from an integer value into a one-hot encoded vector. This means that each label will be represented as a vector of length 10, with a 1 in the position corresponding to the class, and 0s everywhere else. For example, the label 9 would be represented as `[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]`. This is a common way of representing categorical data in machine learning. By doing this, we ensure that our model is taught the correct relationship between the classes." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "L_O1KvR-rfjm", + "outputId": "71ee149d-656f-422a-b55c-8b22f8f502a3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Before one-hot encoding: 6\n", + "After one-hot encoding: [0. 0. 0. 0. 0. 0. 1. 0. 0. 0.]\n" + ] + } + ], + "source": [ + "from tensorflow.keras.utils import to_categorical\n", + "\n", + "print(f'Before one-hot encoding: {y_train[0]}')\n", + "y_train = to_categorical(y_train, num_classes=10)\n", + "y_test = to_categorical(y_test, num_classes=10)\n", + "print(f'After one-hot encoding: {y_train[0]}')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "epqb5vQFrfjm" + }, + "source": [ + "## Feed Forward Neural Networks with Keras\n", + "\n", + "Now that we have prepared our data, it's time to build a simple neural network! In this section, we will use the Keras API to build a simple feed forward neural network. We will then train the model on the MNIST dataset, and evaluate its performance on the test set.\n", + "\n", + "In most modern deep learning frameworks, the process of building a model can be broken down into a few steps:\n", + "\n", + "- Define the model architecture: this is where we define the layers of the model, and how they are connected to each other.\n", + "- Compile the model: this is where we define the loss function, the optimizer, and the metrics that we want to use to evaluate the model.\n", + "- Train the model: this is where we train the model on the training data.\n", + "\n", + "Let's start with defining the model architecture. There are two ways to do this in Keras - the Sequential API and the Functional API. The Sequential API is the simplest way to build a model, and is suitable for most use cases. The Functional API is more flexible, and allows you to build more complex models. We will start with the Sequential API, and then we will look at the Functional API later in the course.\n", + "\n", + "Our simple neural network will be \"fully-connected\". This means that each neuron in a given layer is connected to every neuron in the next layer. This is also known as a \"dense\" layer. We will use the `Dense` class from Keras to define our layers." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 225 + }, + "id": "xQr8GsYsrfjn", + "outputId": "0c8ec6b6-8bb6-4fa8-b9c9-a2420e32d38a" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential\"\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃\n",
+              "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "β”‚ dense (Dense)                   β”‚ (None, 64)             β”‚         4,160 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_1 (Dense)                 β”‚ (None, 64)             β”‚         4,160 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_2 (Dense)                 β”‚ (None, 10)             β”‚           650 β”‚\n",
+              "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n",
+              "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "β”‚ dense (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m4,160\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_1 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m4,160\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_2 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) β”‚ \u001b[38;5;34m650\u001b[0m β”‚\n", + "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 8,970 (35.04 KB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m8,970\u001b[0m (35.04 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 8,970 (35.04 KB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m8,970\u001b[0m (35.04 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Input, Dense\n", + "\n", + "model = Sequential()\n", + "\n", + "# Input layer\n", + "model.add(Input(shape=(64,))) # Input tensor specifying the shape\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "N2w4Z5z-rfjn" + }, + "source": [ + "Congratulations! You have just built your first neural network with Keras. As we can confirm from the `model.summary()` output, our model has 3 layers. The first layer has 64 neurons, the second layer has 64 neurons, and the output layer has 10 neurons. The output layer uses the softmax activation function, which is commonly used for multi-class classification problems. The other layers use the ReLU activation function, which is commonly used for hidden layers in neural networks.\n", + "\n", + "Next, we need to compile the model. This is where we define the loss function, the optimizer, and the metrics that we want to use to evaluate the model. We will use the `compile` method of the model to do this." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "id": "-chbjcxzrfjn" + }, + "outputs": [], + "source": [ + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer='sgd', # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "KxRtCl3qrfjn" + }, + "source": [ + "Because we are predicting which class a sample belongs to, we will use the `categorical_crossentropy` function. This loss function is commonly used for multi-class classification problems.\n", + "\n", + "For our optimizer, we are using the standard stochastic gradient descent (SGD) algorithm. This is a simple optimizer that works well for many problems. We will look at more advanced optimizers later in the course.\n", + "\n", + "Finally, we are using the `accuracy` metric to evaluate the model. This is a common metric for classification problems, and it is simply the fraction of samples that are correctly classified. This is an easier metric for us to understand, but it's not quite as useful for actually training the model (for example, it doesn't tell us how \"confident\" the model is in its predictions).\n", + "\n", + "Now that we have (a) defined the model architecture and (b) compiled the model, we are ready to train the model. We will use the `fit` method of the model to do this." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "-jfLJFWvrfjn", + "outputId": "92364fe3-0110-4fcb-e3b3-865cbca587df" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 43ms/step - accuracy: 0.3001 - loss: 3.0279 - val_accuracy: 0.6736 - val_loss: 0.9703\n", + "Epoch 2/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 24ms/step - accuracy: 0.7494 - loss: 0.7852 - val_accuracy: 0.7986 - val_loss: 0.6208\n", + "Epoch 3/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 15ms/step - accuracy: 0.8300 - loss: 0.5411 - val_accuracy: 0.8438 - val_loss: 0.4811\n", + "Epoch 4/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - accuracy: 0.8972 - loss: 0.3906 - val_accuracy: 0.8438 - val_loss: 0.4448\n", + "Epoch 5/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 19ms/step - accuracy: 0.8990 - loss: 0.3381 - val_accuracy: 0.8681 - val_loss: 0.3668\n", + "Epoch 6/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 13ms/step - accuracy: 0.9300 - loss: 0.2643 - val_accuracy: 0.8819 - val_loss: 0.3551\n", + "Epoch 7/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 21ms/step - accuracy: 0.9312 - loss: 0.2347 - val_accuracy: 0.8854 - val_loss: 0.3306\n", + "Epoch 8/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 26ms/step - accuracy: 0.9481 - loss: 0.2212 - val_accuracy: 0.9097 - val_loss: 0.2931\n", + "Epoch 9/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 30ms/step - accuracy: 0.9566 - loss: 0.1904 - val_accuracy: 0.8958 - val_loss: 0.2775\n", + "Epoch 10/10\n", + "\u001b[1m18/18\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 23ms/step - accuracy: 0.9716 - loss: 0.1682 - val_accuracy: 0.8924 - val_loss: 0.2728\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.fit(\n", + " X_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=10, # Number of epochs\n", + " batch_size=64, # Number of samples per batch\n", + " validation_split=0.2 # Use 20% of the data for validation\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "rf7p_wFZrfjn" + }, + "source": [ + "We have now trained our model! We can see that the model has been trained for 5 epochs, and the loss and accuracy have been printed for each epoch. We can also see that the model has been evaluated on the validation data at the end of each epoch. This is useful for us to see how the model is performing on data that it hasn't seen during training.\n", + "\n", + "Once the model is trained, it's time to evaluate the model on the test set. We can use the `evaluate` method of the model to do this. If you were building a model for a real-world application, this is the very last thing you would do, and the result here would be the figure you'd report in your paper or presentation." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "eZO-pdnUrfjn", + "outputId": "bdfc9d47-9131-46ea-b74d-7faecb03274f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9357 - loss: 0.2093 \n", + "Loss: 0.24\n", + "Accuracy: 93.06%\n" + ] + } + ], + "source": [ + "loss, accuracy = model.evaluate(X_test, y_test)\n", + "\n", + "print(f'Loss: {loss:.2f}')\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "JbyhNXnFrfjn" + }, + "source": [ + "Hopefully you have achieved an accuracy of around 95%. This is pretty good, but we can do better! In the next section, we will look at how we can improve the performance of our model by using a more advanced optimizer. But before we get there, let's do one other thing - let's look at the predictions that our model is making on the test set. When you are building a model, it's often useful to have a look at some of the examples your model is getting wrong. Sometimes this can reveal problems with the data, or it can give you ideas for how to improve your model." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 538 + }, + "id": "sWmqkXTorfjo", + "outputId": "105c57f3-f7b1-4271-b468-0506026ce2a9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step \n" + ] + }, + { + "data": { + "image/png": "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/ESZmZkaMWKETp06pcWLF+uee+7R0qVLddddd11w3aHuj/fff1/x8fG64YYbgqZ369Yt8P+33357iFtcBU+fr+0/h2RWrlxpJSUltmfPHlu8eLE1btzY4uLibO/evWZmNnLkSJNkEyZMCFp+zZo1JskWLVoUNH358uVB0w8ePGgxMTF21113WXl5eWC+J554wiRVOgSRmppqqampIW/HD37wA5MUePTr18927959CXsimCR78MEHraSkxA4ePGh/+9vf7M4776x0qOaXv/yl1alTx9asWRO0/Lx580ySrV27NjDt+PHjldYzcOBAu+6664KmVXWIsHfv3hbK0/2d73zH6tSpY8XFxUHT77vvPpNkY8eOvWiN2nSl9KOZ/4esw7EfzcyWLl1qzZs3D3p9Dhw40I4cORLS8rUp3Ptx165dNmDAACsoKLBXX33V8vPzrWXLllanTh1bunRpNfbIfw5Z5+XlWUlJiX388ce2Zs0au/XWW02Svfzyy4F5p0yZYvHx8bZ169agGhMmTLDIyMig9+hz+/HUqVN20003Wd++fYOmV3XIOtT9cdddd1XqbzOzY8eOVfn8XSrfAvncR2pqqi1fvjwwX0XD7dq1K2j5Rx55xK655ho7ePCglZSUBD3q169vDz30kJmZFRUVmaSgmmZnG7GqhrtUxcXF9sYbb1hRUZENHz7c+vXrZ1u2bKl2var2SXR0tOXk5FhZWVlgvszMTOvQoUOlbd+6datJsqlTp1ZZv7S01EpKSmz69OkmyUpLSwP/5+U7u40bN1p0dLR169bN1q5da9u3b7fp06dbbGxs4E3dZVdKP5r5H8jh2I9mZn/5y18sIyPDpk2bZkuWLLHc3FyrV6+eDRs2rNo1L5crqR8rfPLJJ9asWTNr3759tZavCORzH/Xr17dnnnkmaN5OnTrZnXfeWWnbV65caZLsxRdfrHIdn376qZWUlNjDDz9siYmJQf/n5Tvkvn372g033FBpellZmUmycePGVatuBd8OWf/sZz9Tu3btFBUVpWbNmql9+/aqUyf4K+qoqCi1aNEiaNq2bdt06NAhNW3atMq6Bw8elCTt2rVLktS2bdug/2/SpEnQIY7qSk1NVWpqqqSzZ/+NHj1ad9xxh7Zs2VLtw9ZDhgzR2LFjderUKb333nuaPn26jh8/HrRftm3bpg8//FBNmjSpskbF9kvS2rVrNXnyZL377rs6fvx40HyHDh3SNddcU61xflGnTp1UVFSkb33rW+rRo4ck6dprr1V+fr4efvhh1a9f3/M6Lodw78eaEI79+K9//Ut9+vTRL37xC/3P//xPYDsqfku6bNkyDRo0yPN6atqV1I+NGjXSqFGjNGPGDO3du7fSmEM1evRo3XPPPTpx4oT++Mc/6qc//anKysqC5tm2bZs++OCDkPpx6dKlmjp1qjZs2BB0vkNERES1xleVuLi4SudSSNKJEycC/++Fb4HcrVs33XLLLRecJzY2tlITlpeXq2nTplq0aFGVy5zviahpw4YN04IFC/SnP/2p2j8JadGiReA7royMDCUlJWns2LHq06ePvvrVr0o6u/0dO3bUj3/84yprpKSkSDr7nVO/fv10/fXX68c//rFSUlIUExOj119/XbNmzap0goMXw4YNU2ZmpjZu3KiysjJ16dJFq1evliS1a9fOt/XUpCutH/0Qjv24cOFCnThxQoMHDw6anpmZKensHwXhEMhXWj9W9MGnn35a7UBu27ZtoB8HDx6syMhITZgwQX369Ansq4qfveXk5FRZo+L9aM2aNcrMzFSvXr00d+5cNW/eXNHR0SosLFRRUVG1xleV5s2ba9WqVTKzoKD/6KOPJEnJycme6tfYSV2hat26tVauXKkePXpc8K+Lik+v27Zt03XXXReYXlJSUulsQz98/vnnks7+pe+X7OxszZo1S5MmTdLdd9+tiIgItW7dWhs3blS/fv0u+Jfca6+9ppMnT+rVV19Vy5YtA9NXrVrl2/i+KCYmRrfeemvg3ytXrpSksD2JJlSu9mNNCId+PHDggMys0ien06dPSzp7ItSVzNV+/Ne//iXJ3z8InnzySS1YsECTJk3S8uXLJZ3d/qNHj170fec3v/mN6tatqxUrVig2NjYwvbCw0LfxSVLnzp317LPP6sMPP9SNN94YmP6Xv/wl8P9e1PqlM++9916VlZVpypQplf7vzJkzKi0tlXQ2CKKjozV79uygMzO/eJbdF4V6GntJSUmV05977jlFRESoS5cuF9+IEEVFRemxxx7Thx9+qFdeeUXS2e3ft2+fFixYUGn+ijO/JSkyMlKSgrb90KFDITdcqD8zqcq2bds0b948DR48OGw+IVdXbffj5RQO/diuXTuZmX71q18FTa+4MtLNN98c0vrCVW33Y1Xvj/v27dPzzz+vTp06BX5+5ofExERlZ2drxYoV2rBhg6Sz2//uu+9WeYGc0tLSwB9kkZGRioiICPrDrbi4OOhXARcS6v4YMmSIoqOjNXfu3MA0M9O8efP0X//1X7rttttCWt95efoG2s7/w/dzjRw50uLj46v8v+zs7MAFCmbNmmVz5syxcePGWXJyctAZdxMnTjRJlpGRYXPmzLEHH3zQkpOTLSkpqdpnzY0bN85uueUWmzRpks2fP99mzJgRONvvO9/5TtC8q1atCvkkG1VxIQazs2cCJiUl2Ze//GUzO3syQEZGhkVERNh9991ns2fPtvz8fPvWt75ljRo1CuzXzZs3W0xMjHXs2NHmzJljM2bMsNatW9uXvvQlkxS4mISZ97Nab7jhBnvqqafs2WeftSeffNIaNWpkqampgTNCXRbu/Whm9otf/MKmTJkSqN+nTx+bMmWKTZkyJejs96uhH//973/btddeazExMfbII4/Yz3/+c8vOzrbIyEjr0KFD2F6o5lyu9mNWVpb17NnTcnNzbf78+fbEE09Y48aNLSYmxlatWlXlthYWFl6w5oUuNrJv3z6LiYmxr33ta2Z29uzlLl26WFRUlD300ENWUFBgM2fODOyvkpISMzN78803TZL17NnTCgoKLC8vz5o2bWqdOnWq1GdezrI2M3v88cdNko0ePdoWLFhgd911V5VnwleHE4FsZjZ//nzr2rWrxcXFWUJCgnXs2NFycnJs//79gXnKysosLy/PmjdvbnFxcZaenm6bNm3ytIP/8Ic/2ODBgy05Odmio6MtISHBevToYYWFhUE/HzAze+2110ySzZs376J1z/cGaGaWm5trkgINferUKXv66aetQ4cOFhsbaw0bNrSuXbtaXl6eHTp0KLDcq6++ap06dbK6detaWlqaPf3004ErFvkZyPfdd5+lpKRYTEyMJScn27e+9S07cOBASMvWtnDvR7P/PFdVPb74Jni19OPevXvtG9/4hrVq1cpiYmKsefPm9s1vfjPwZuyycO/HoqIi69WrlzVp0sSioqIsKSnJ7r77blu3bl2leWfPnl3lmd7nutjVv7KysiwyMtK2b99uZmZHjhyxiRMnWps2bSwmJsaSkpLstttus5kzZ9qpU6cCyz333HPWtm1bi42Nteuvv94KCwtt8uTJvgdyWVmZTZ8+3VJT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81wD1bdhwwbPNbKyspwYR35+vucaubm5nmtcTnxCBgDAAQQyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDgAAIZAAAHEMgAADiAQAYAwAEEMgAADiCQAQBwAIEMAIADCGQAABxAIAMA4AACGQAABxDIAAA4IKq2B1AbEhMTPdfo3bu394EAktLT0z3XKC4u9lxjyZIlnmukpaV5roHqy8/P91zjhRde8FxjyJAhnmuMHz/ec41wwydkAAAcQCADAOAAAhkAAAcQyAAAOIBABgDAAQQyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDgAAIZAAAHEMgAADiAQAYAwAEEMgAADiCQAQBwQEj3QzYzSdLhw4drdDCXy4kTJzzXOHPmjOcaV8r+rNiOij6paVdaP/rRS+Xl5Z5rHDt2zHMNF56Tq7kfT506VdtDkCSdPn3ac42rsR8jLIS59u7dq5SUFO8jwxVtz549atGiRY2vh35EKOhHuCSUfgwpkMvLy7V//34lJCQoIiLCtwHiymBmOnLkiJKTk1WnTs1/C0I/4kLoR7jkUvoxpEAGAAA1i5O6AABwAIEMAIADrohATktLU1ZWVm0Pwxnp6elKT0+v7WFctejHYOyP2sX+D+by/vAcyAsXLlRERETgUbduXbVr105jx47VgQMH/Bhjjdq/f78eeOABtW/fXgkJCUpMTFS3bt30wgsvePrZxBf3SUREhBo0aKDevXvr97//vY+j99+ePXuUl5enbt26qWHDhkpKSlJ6erpWrlxZ20MLSbj3Y4UdO3Zo+PDhatq0qeLi4tS2bVs9+eST1apVXFwctE/q1KmjRo0aadCgQXr33Xd9Hrn/PvroI40ePVqtWrVSXFycWrdurUcffVSffPJJbQ/toq6Efty+fbuGDRumhg0bql69err99tu1atWqatcL5348d+xffCxevNhz/ZB+hxyK73//+2rVqpVOnDiht99+WwUFBXr99de1adMm1atXz6/V+O7f//639u7dq2HDhqlly5Y6ffq03njjDWVlZWnLli2aPn16tWv3799fX//612Vm2rVrlwoKCvSVr3xFy5Yt08CBA33cCv+88sorevrppzV06FCNHDlSZ86c0S9+8Qv1799fzz//vEaNGlXbQwxJuPajJG3YsEHp6en6r//6Lz322GNq3Lixdu/erT179niqe//99ysjI0NlZWXaunWr5s6dqz59+ui9995Tx44dfRq9v44eParu3bvr2LFjGjNmjFJSUrRx40bNmTNHq1at0rp16y7LmdRehWs/7tmzR927d1dkZKQef/xxxcfHq7CwUAMGDNCbb76pXr16Vbt2OPZjhYqxf1H37t29FzaPCgsLTZK99957QdMfffRRk2RFRUXnXfbo0aNeV29mZqmpqTZy5EhfalUYPHiwxcfH25kzZ6q1vCT79re/HTTtn//8p0myQYMG+THE8+rdu7f17t27Wstu2rTJSkpKgqadOHHCrr/+emvRooUPo6tZ4d6PZWVldtNNN9l///d/2/Hjx30Zz86dO02S/ehHPwqavmzZMpNkDz/8sC/rOR8v+2PRokUmyZYuXRo0/amnnjJJtn79eh9GWHPCvR/HjBljUVFRtnnz5sC0Y8eOWUpKinXp0qVaNcO5H883dr/U2J+Wffv2lSTt3LlTkpSVlaX69etrx44dysjIUEJCgkaMGCHp7O/48vPz1aFDB9WtW1fNmjVTdna2Pvvss3P/eNDUqVPVokUL1atXT3369NE//vGPKte/Y8cO7dixo9rjT0tL0/Hjx3298s0NN9ygpKSkSuM6efKkJk+erDZt2ig2NlYpKSnKycnRyZMng+YrLCxU37591bRpU8XGxurGG29UQUFBSOvevXu3Nm/efNH5OnTooKSkpKBpsbGxysjI0N69e3XkyJGQ1ueacOnHP/zhD9q0aZMmT56suLg4HT9+XGVlZV42/bx69uwZGNsXlZaWavz48UpJSVFsbKzatGmjp59+utLVwGbOnKnbbrtNjRs3VlxcnLp27apf//rXIa071P1RcZWjZs2aBU1v3ry5JCkuLi6k9bkmXPpxzZo1uvnmm9W+ffvAtHr16ikzM1Pr16/Xtm3bqrX9VQmHfvyiY8eO+X5lNN8OWZ+rYuMaN24cmHbmzBkNHDhQt99+u2bOnBk4VJOdna2FCxdq1KhReuSRR7Rz507NmTNH77//vtauXavo6GhJ0lNPPaWpU6cqIyNDGRkZWr9+vQYMGFDlTunXr5+ks8f8Q/H555/r2LFjOnr0qN566y0VFhaqe/fuvr7gDx06pM8++0ytW7cOTCsvL1dmZqbefvttjR49WjfccIP+/ve/a9asWdq6dauWLFkSmLegoEAdOnRQZmamoqKi9Nprr2nMmDEqLy/Xt7/97Quu++tf/7reeuutan8v/vHHH6tevXpOH167kHDpx4rv6mNjY3XLLbdo3bp1iomJ0d133625c+eqUaNGnvdFhYqxNGzYMDDt+PHj6t27t/bt26fs7Gy1bNlS77zzjiZOnKiPPvpI+fn5gXl/8pOfKDMzUyNGjNCpU6e0ePFi3XPPPVq6dKnuuuuuC6471P3Rq1cv1alTR+PGjdMzzzyjFi1a6IMPPtC0adM0dOhQXX/99dXa9toWLv148uTJoP6oUDG2devWqW3btpe+A6oQDv1YIS8vT48//rgiIiLUtWtXTZs2TQMGDLik7a2S14/YFYdkVq5caSUlJbZnzx5bvHixNW7c2OLi4mzv3r1mZjZy5EiTZBMmTAhafs2aNSbJFi1aFDR9+fLlQdMPHjxoMTExdtddd1l5eXlgvieeeMIkVToEkZqaaqmpqSFvxw9+8AOTFHj069fPdu/efQl7Ipgke/DBB62kpMQOHjxof/vb3+zOO++sdLjjl7/8pdWpU8fWrFkTtPy8efNMkq1duzYwrapDmAMHDrTrrrsuaFpVh6x79+5t1X26t23bZnXr1rX/9//+X7WWv5zCvR8zMzNNkjVu3NhGjBhhv/71r+173/ueRUVF2W233Ra0rlBVHGbLy8uzkpIS+/jjj23NmjV26623miR7+eWXA/NOmTLF4uPjbevWrUE1JkyYYJGRkUGviXP78dSpU3bTTTdZ3759K227l9fns88+a4mJiUGvz5EjR9rp06dDWr42hXs/fuUrX7HExEQ7fPhw0PTu3bubJJs5c2aouyIgnPtx165dNmDAACsoKLBXX33V8vPzrWXLllanTp1KX6tUh2+BfO4jNTXVli9fHpivouF27doVtPwjjzxi11xzjR08eNBKSkqCHvXr17eHHnrIzMyKiopMUlBNs7ONWFXDXari4mJ74403rKioyIYPH279+vWzLVu2VLteVfskOjracnJyrKysLDBfZmamdejQodK2b9261STZ1KlTq6xfWlpqJSUlNn36dJNkpaWlgf/z8h3yuY4dO2adO3e2hg0b2r59+3ypWZPCvR/79u1rkuzOO+8Mml7xB+Mbb7xxyTUr3gDPfdSvX9+eeeaZoHk7depkd955Z6VtX7lypUmyF198scp1fPrpp1ZSUmIPP/ywJSYmBv2f13M8li1bZgMGDLD8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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the predictions for the test data\n", + "predictions = model.predict(X_test)\n", + "\n", + "# Get the index of the largest probability (i.e. the predicted class)\n", + "predicted_classes = np.argmax(predictions, axis=1)\n", + "true_classes = np.argmax(y_test, axis=1)\n", + "misclassified_indices = np.where(predicted_classes != true_classes)[0]\n", + "\n", + "# Get the misclassified samples themselves\n", + "misclassified_samples = X_test[misclassified_indices]\n", + "misclassified_labels = np.argmax(y_test[misclassified_indices], axis=1)\n", + "\n", + "# Pick 9 random misclassified samples\n", + "random_indices = np.random.choice(len(misclassified_indices), 9, replace=False)\n", + "\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(misclassified_samples[random_indices[i]].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"Pred: {predicted_classes[misclassified_indices[random_indices[i]]]}, Real: {misclassified_labels[random_indices[i]]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "xTUKjwDlrfjo" + }, + "source": [ + "What do you think? Would you have made the same mistakes as the model? Determining whether the mistakes are \"understandable\" is a rough way of seeing if you could improve the model further, or if this is the best you can do with the data you have." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "A0Ron8JHrfjo" + }, + "source": [ + "### b) Exercises: Impact of the Optimizer\n", + "\n", + "In this section, you will play around with the optimizer and see how it affects the performance of the model. We will start with the standard SGD optimizer, and then we will look at more advanced optimizers.\n", + "\n", + "1. Try decreasing the learning rate of the SGD optimizer by a factor of 10, or 100. What do you observe?\n", + "2. Try increasing the learning rate of the SGD optimizer. What happens?\n", + "3. The SGD optimizer has a momentum parameter. In a nutshell, this parameter controls how much the gradient from the previous step affects the current step. Try enabling momentum in the SGD optimizer with a value of 0.9. What happens?\n", + " \n", + "**Notes**:\n", + "\n", + "The keras API documentation is available at:\n", + "\n", + "https://www.tensorflow.org/api_docs/python/tf/keras\n", + "\n", + "It is also possible to learn more about the parameters of a class by using the question mark: type and evaluate:\n", + "\n", + "```python\n", + "optimizers.SGD?\n", + "```\n", + "\n", + "in a jupyter notebook cell.\n", + "\n", + "It is also possible to type the beginning of a function call / constructor and type \"shift-tab\" after the opening paren:\n", + "\n", + "```python\n", + "optimizers.SGD(\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 225 + }, + "id": "vBGfMp77rfjo", + "outputId": "95bdc23a-dbce-4d38-858e-725fea112c40" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_1\"\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃\n",
+              "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "β”‚ dense_3 (Dense)                 β”‚ (None, 32)             β”‚         2,080 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_4 (Dense)                 β”‚ (None, 128)            β”‚         4,224 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_5 (Dense)                 β”‚ (None, 10)             β”‚         1,290 β”‚\n",
+              "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n",
+              "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "β”‚ dense_3 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m32\u001b[0m) β”‚ \u001b[38;5;34m2,080\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_4 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) β”‚ \u001b[38;5;34m4,224\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_5 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) β”‚ \u001b[38;5;34m1,290\u001b[0m β”‚\n", + "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 7,594 (29.66 KB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m7,594\u001b[0m (29.66 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 7,594 (29.66 KB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m7,594\u001b[0m (29.66 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "model = Sequential()\n", + "\n", + "# Input layer\n", + "model.add(Input(shape=(64,))) # Input tensor specifying the shape\n", + "\n", + "model.add(Dense(32, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(128, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "BXUxj6kGrfjo", + "outputId": "80d443b4-0875-411d-bd5b-21831bc4220d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Small LR - Final training accuracy: 0.9503916501998901\n", + "Small LR - Final validation accuracy: 0.9097222089767456\n" + ] + } + ], + "source": [ + "# 1. Decreasing the learning rate\n", + "from tensorflow.keras.optimizers import SGD\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate=0.001, momentum=0.9), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "\n", + "\n", + "history_small_lr = model.fit(\n", + " X_train, y_train,\n", + " epochs=10, batch_size=64, validation_split=0.2, verbose=0\n", + ")\n", + "\n", + "print(\"Small LR - Final training accuracy:\", history_small_lr.history['accuracy'][-1])\n", + "print(\"Small LR - Final validation accuracy:\", history_small_lr.history['val_accuracy'][-1])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3VQchck6rfjo", + "outputId": "330f409f-5918-467c-bb2d-78b9d84883ea" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Large LR - Final training accuracy: 0.0826805904507637\n", + "Large LR - Final validation accuracy: 0.0833333358168602\n" + ] + } + ], + "source": [ + "# 2. Increasing the learning rate\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer=SGD(learning_rate=10.0), # Very large LR\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "history_large_lr = model.fit(\n", + " X_train, y_train,\n", + " epochs=10, batch_size=64, validation_split=0.2, verbose=0\n", + ")\n", + "\n", + "print(\"Large LR - Final training accuracy:\", history_large_lr.history['accuracy'][-1])\n", + "print(\"Large LR - Final validation accuracy:\", history_large_lr.history['val_accuracy'][-1])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qvbEZ8Murfjo", + "outputId": "c159e91f-a579-4aa4-82c4-ab24cc63e55e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Momentum - Final training accuracy: 0.10182767361402512\n", + "Momentum - Final validation accuracy: 0.1076388880610466\n" + ] + } + ], + "source": [ + "# 3. SGD with momentum\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer=SGD(learning_rate=0.1, momentum=0.9),\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "history_momentum = model.fit(\n", + " X_train, y_train,\n", + " epochs=10, batch_size=64, validation_split=0.2, verbose=0\n", + ")\n", + "\n", + "print(\"Momentum - Final training accuracy:\", history_momentum.history['accuracy'][-1])\n", + "print(\"Momentum - Final validation accuracy:\", history_momentum.history['val_accuracy'][-1])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xN3yBQdnrfjo" + }, + "source": [ + "Next, let's try a more advanced optimizer. Adam is likely the most popular optimizer for deep learning. It is an adaptive learning rate optimizer, which means that it automatically adjusts the learning rate based on how the training is going. This can be very useful, as it means that we don't need to manually tune the learning rate. Let's see how it performs on our model.\n", + "\n", + "\n", + "1. Replace the SGD optimizer by the Adam optimizer from keras and run it\n", + " with the default parameters.\n", + "\n", + "2. Add another hidden layer with ReLU activation and 64 neurons. Does it improve the model performance?\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "id": "hcltDD7Erfjo" + }, + "outputs": [], + "source": [ + "# Adam optimizer\n", + "from tensorflow.keras.optimizers import Adam" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZD1wIyyCrfjp", + "outputId": "56451ec2-768c-411b-c425-f3dd46cf9c9f" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Extra Layer + Adam - Final training accuracy: 0.1070496067404747\n", + "Extra Layer + Adam - Final validation accuracy: 0.1076388880610466\n" + ] + } + ], + "source": [ + "# Extra hidden layer\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer=Adam(),\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "history_extra_layer = model.fit(\n", + " X_train, y_train,\n", + " epochs=10, batch_size=64, validation_split=0.2, verbose=0\n", + ")\n", + "\n", + "print(\"Extra Layer + Adam - Final training accuracy:\", history_extra_layer.history['accuracy'][-1])\n", + "print(\"Extra Layer + Adam - Final validation accuracy:\", history_extra_layer.history['val_accuracy'][-1])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "OQHll3yWrfjp" + }, + "source": [ + "### Exercises: Forward Pass and Generalization\n", + "\n", + "Let's look in more detail at how the model makes predictions on the test set. We will walk through each step of making predictions, examining exactly what's going on.\n", + "\n", + "To start, we will apply our model to the test set, and look at what we get as output:" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dgHyHIf7rfjp", + "outputId": "9d0351a3-cc9a-47d8-8701-ae5b6125036d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions_tf = model(X_test)\n", + "predictions_tf[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "RKiaRfR8rfjp", + "outputId": "0544e762-cfcb-4512-ce73-937b4497c00f" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensorflow.python.framework.ops.EagerTensor, TensorShape([360, 10]))" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(predictions_tf), predictions_tf.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "LJNCnhm7rfjp" + }, + "source": [ + "The raw output of the model is a tensor of shape `(360, 10)`. This means that we have 360 samples, and for each sample we have 10 values. Each of these values represents the probability that the sample belongs to a given class. This means that we have 10 probabilities for each sample, and the sum of these probabilities is 1. We can confirm this by summing the probabilities for each sample:" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "4oSmtYxyrfjp", + "outputId": "c0785f7b-0b73-4ef9-bd53-2c047b180ea1" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import tensorflow as tf\n", + "\n", + "tf.reduce_sum(predictions_tf, axis=1)[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "UN5Zbujorfjp" + }, + "source": [ + "...okay, there might be a small rounding error here and there. This is to do with how floating point numbers are represented in computers, and it's not something we need to worry about for now." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "2EFCOrfqrfjp" + }, + "source": [ + "We can also extract the label with the highest probability using the tensorflow API:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Gz6CeHGLrfjq", + "outputId": "8b68fd45-c974-4802-aa52-22e80bc87090" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predicted_labels_tf = tf.argmax(predictions_tf, axis=1)\n", + "predicted_labels_tf[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "E6feT5Inrfjq" + }, + "source": [ + "One helpful aspect of this approach is that we don't just get the prediction, but also a sense of how confident the model is in its prediction. To see this in practice, let's take a look at some of the predictions the model is highly confident about (i.e. a lot of the probability mass is on one class):" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 521 + }, + "id": "jQ84yVAtrfjq", + "outputId": "f8434c28-31f1-4466-b1fb-59ba65d60fbf" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH4CAYAAACbup4ZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAHTVJREFUeJzt3X9s3XW9+PFXRxm/1m4K/qorFKPAZQyHxNxs8qNeDRf0jk2ELXAJ69Xkiqj3Fkxu1MRs10TRxJs7uMRcjV4643ZV/FGE+JM/One5m06xuyKS4bwl28q4Xu89a8eEjbX3j5tx5Yv6Pe37s35e3Xk8Ev7p2Kuvtu/zeXLacj5tk5OTkwEA1GpO3QsAAIIMACkIMgAkIMgAkIAgA0ACggwACQgyACQgyACQgCADQAKCDAAJCPIUPfTQQ3H11VfHi1/84jj11FPjggsuiDvvvLPutWhBP/7xj+PKK6+Mzs7O6OjoiCuuuCKGh4frXosW9LOf/Syuu+66eNWrXhWnnnpqnHHGGXHZZZfFfffdV/dqs0p73QvMJt/97ndj+fLlcdFFF8WHP/zhmDdvXuzatSv27NlT92q0mIceeiguueSS6O7ujrVr18bExER86lOfissvvzx++MMfxrnnnlv3irSQxx9/PMbHx2PNmjXR1dUVBw8ejK9+9atx9dVXx6c//en4y7/8y7pXnBXa3FyiOWNjY3HOOefEsmXL4itf+UrMmeObC9TnrW99a2zdujUee+yxOP300yMi4oknnohzzjknrrjiivjqV79a84a0uiNHjsTFF18cTz/9dDz66KN1rzMrqEqTNm3aFE8++WR89KMfjTlz5sRTTz0VExMTda9Fi9qyZUu8+c1vfi7GERGveMUr4vLLL4/7778/Dhw4UON2EHHCCSdEd3d3NBqNuleZNQS5SQ888EB0dnbG3r1749xzz4158+ZFZ2dnvPvd746nn3667vVoMc8880yccsopL3j7qaeeGocOHYqHH364hq1odU899VT853/+Z+zatSv+/u//Pr71rW/Fm970prrXmjX8DLlJjz32WDz77LOxYsWKeOc73xm33357DA0NxT/8wz9Eo9GIf/7nf657RVrIueeeG9u2bYsjR47ECSecEBERhw4dih/84AcREbF3794616NFvf/9749Pf/rTERExZ86cuOaaa+Kuu+6qeavZwzPkJh04cCAOHjwYN910U9x5551xzTXXxJ133hnvete74otf/GI89thjda9IC7nlllti586d8c53vjMeeeSRePjhh+Omm26KJ554IiIifvOb39S8Ia2ov78/vve978WGDRviqquuiiNHjsShQ4fqXmvWEOQmHf324PXXX/+8t99www0REbF169YZ34nWdfPNN8eHPvSh2LRpUyxatCgWL14cu3btir/5m7+JiIh58+bVvCGt6Lzzzos3v/nNcdNNNz33uwzLly8PvzvcHEFuUldXV0REvOxlL3ve21/60pdGRMR///d/z/hOtLaPfvSj8eSTT8aWLVvi3/7t32L79u3P/aLhOeecU/N2EHHttdfG9u3bY+fOnXWvMisIcpMuvvjiiHjhz+ZGR0cjIuIlL3nJjO8EL3rRi+KSSy6JxYsXR8T//vLhwoUL47zzzqt5M/i/H53s37+/5k1mB0Fu0qpVqyIi4nOf+9zz3v7Zz3422tvbo7e3t4at4P986Utfiu3bt0d/f7//T54Z9R//8R8veNvhw4fj85//fJxyyilx/vnn17DV7OO3rJt00UUXxTve8Y74p3/6p3j22Wfj8ssvj6Ghobjnnnvigx/84HPf0oaZ8P3vfz8+8pGPxBVXXBGnn356bNu2Le6+++648sor46//+q/rXo8W8653vSvGxsbisssui1e+8pWxb9++2LhxYzz66KPxd3/3d36noUleqWsKDh8+HB/72Mfi7rvvjtHR0TjrrLPiPe95T/T399e9Gi1m165dccstt8RDDz0U4+PjcfbZZ8eaNWvitttui7lz59a9Hi3mi1/8Ynzuc5+Ln/70p/HrX/86Ojo64uKLL473ve99cfXVV9e93qwhyACQgB80AUACggwACQgyACQgyACQgCADQAKCDAAJNPXCIBMTEzE6OhodHR3R1tZ2rHdilpmcnIzx8fHo6uqakVeIch75Q5xHMpnKeWwqyKOjo9Hd3V3Jchy/du/eHQsXLjzm78d5pBnOI5k0cx6bCnJHR8dzAzs7O8s3q9mnPvWp4hn3339/8YxvfvObxTMyGBsbi+7u7ufOybGW6Tz+v7fjnI4qzsEHPvCB4hkf/OAHi2dk0Mrn8fbbby+eUcX18ejNTkpUcR4vvfTS4hmlpnIemwry0W/DdHZ21n7gqnDyyScXz2hvL38Z8OPhc/nbZurbdZnO44knnljr+z/qpJNOKp5R9+eyaq14Hqs4B1V83qq4Pp522mnFM+r+evy2Zj6vfqkLABIQZABIQJABIAFBBoAEBBkAEhBkAEhAkAEgAUEGgAQEGQASEGQASECQASABQQaABAQZABIQZABIoPweWTNsaGioeMatt95aPGPt2rXFM6jXwMBA8Yx77723eMaKFSuKZwwODhbPaDQaxTPWr19fPKNVVfE1rOJMV7FHFedgeHi4eEZvb2/xjJnkGTIAJCDIAJCAIANAAoIMAAkIMgAkIMgAkIAgA0ACggwACQgyACQgyACQgCADQAKCDAAJCDIAJCDIAJCAIANAAoIMAAm0173AVK1bt654RhU3hK9iD+rVaDTqXiEiqrkhfH9/f/GMO+64o3hGFTemb1UrV65MMaOKx8Xw8HDxjFa8xnqGDAAJCDIAJCDIAJCAIANAAoIMAAkIMgAkIMgAkIAgA0ACggwACQgyACQgyACQgCADQAKCDAAJCDIAJCDIAJCAIANAAu11LzBVVdz4uoqbeFdx8+yenp7iGVV8LAsWLCieMRtlOQe9vb3FMzZv3lw8owpVPD6XLFlSPKNVjYyMFM+o4vNfxTWliuvjbOMZMgAkIMgAkIAgA0ACggwACQgyACQgyACQgCADQAKCDAAJCDIAJCDIAJCAIANAAoIMAAkIMgAkIMgAkIAgA0ACggwACbTXvUAdNmzYUDxj7dq1xTOGhoaKZ1RxQ/J169YVz5iNqrgB+sDAQPGMKr6GK1euLJ5x6623Fs9oNBrFM5i+Ks50f39/8YzBwcHiGX19fSn2mEmeIQNAAoIMAAkIMgAkIMgAkIAgA0ACggwACQgyACQgyACQgCADQAKCDAAJCDIAJCDIAJCAIANAAoIMAAkIMgAkIMgAkEB73QtM1YIFC4pnrFu3rnhGFTfxrkJvb2/dK7S0lStX1r1CROS5EXuj0ah7BQpVcX2sYsaSJUuKZ1TxuJjJx7hnyACQgCADQAKCDAAJCDIAJCDIAJCAIANAAoIMAAkIMgAkIMgAkIAgA0ACggwACQgyACQgyACQgCADQAKCDAAJCDIAJNBe9wJT1dfXVzxjaGioeEZ/f3/xjCpunr158+biGSMjI0V/f3x8vHiH2Wp4eLh4RhXn8dZbby2esWLFiuIZM3kzd16ot7e3eMbAwEDxjEajUTxjwYIFxTNKr20zzTNkAEhAkAEgAUEGgAQEGQASEGQASECQASABQQaABAQZABIQZABIQJABIAFBBoAEBBkAEhBkAEhAkAEgAUEGgAQEGQASaK97galat25d8Yz+/v7iGT09PcUzqvD1r3+9eEbpxzI2Nla8w2zV19dXPGPHjh3FM1asWFE8o4ob01OvRqNRPOPss88unjF//vziGVVcp6uYMZM8QwaABAQZABIQZABIQJABIAFBBoAEBBkAEhBkAEhAkAEgAUEGgAQEGQASEGQASECQASABQQaABAQZABIQZABIoKn7IU9OTkbE8XPf22eeeaZ4xsTERAWblDt48GDxjNKv69G/f/ScHGuZzuORI0fqXiEiIg4fPlw8o4rP55w59f83vvNYvyo+91VcpzN8TaZyHtsmm/i39uzZE93d3eWbcVzbvXt3LFy48Ji/H+eRZjiPZNLMeWwqyBMTEzE6OhodHR3R1tZW2YIcHyYnJ2N8fDy6urpm5BmS88gf4jySyVTOY1NBBgCOrfp/4AMACDIAZCDIAJCAIDepr68v2trafu8/e/furXtFWsj27dvjve99byxatChOO+20OPPMM2PVqlWxc+fOulejRR04cCDWrl0bV155Zbz4xS+Otra2GBgYqHutWcUvdTVp69atsWvXrue9bXJyMm6++ebo6emJn/3sZzVtRiu69tpr48EHH4zrrrsuLrzwwti3b1/cddddceDAgdi2bVtccMEFda9IixkZGYmzzz47zjzzzHjVq14VQ0NDcffdd0dfX1/dq80aTb0wCBFLly6NpUuXPu9t//Iv/xIHDx6MP//zP69pK1rVbbfdFps2bYq5c+c+97bVq1fH4sWL4+Mf/3h84QtfqHE7WtErXvGKeOKJJ+LlL395/OhHP4rXv/71da806whygU2bNkVbW1vccMMNda9Ci1m2bNkL3vaa17wmFi1aFD//+c9r2IhWd9JJJ8XLX/7yuteY1fwMeZoOHz4cX/7yl2PZsmXR09NT9zoQk5OT8eSTT8YZZ5xR9yrANAjyNH3nO9+JX//6175dTRobN26MvXv3xurVq+teBZgGQZ6mTZs2xYknnhirVq2qexWIRx99NN7znvfE0qVLY82aNXWvA0yDIE/DgQMH4t57740//dM/jdNPP73udWhx+/bti7e+9a0xf/78+MpXvhInnHBC3SsB0+CXuqZh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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Get the values corresponding to the predicted labels for each sample\n", + "predicted_values_tf = tf.reduce_max(predictions_tf, axis=1)\n", + "\n", + "# Get the indices of the samples with the highest predicted values\n", + "most_confident_indices_tf = tf.argsort(predicted_values_tf, direction='DESCENDING').numpy()[:9]\n", + "\n", + "# Get the 9 most confident samples\n", + "most_confident_samples_tf = X_test[most_confident_indices_tf]\n", + "\n", + "# Get the true labels for the 9 most confident samples\n", + "most_confident_labels_tf = np.argmax(y_test[most_confident_indices_tf], axis=1)\n", + "\n", + "# Plot the 9 most confident samples\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(most_confident_samples_tf[i].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"{most_confident_labels_tf[i]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "-rY50zWsrfjq" + }, + "source": [ + "## Impact of Initialization\n", + "\n", + "Let's study the impact of a bad initialization when training\n", + "a deep feed forward network.\n", + "\n", + "By default, Keras dense layers use the \"Glorot Uniform\" initialization\n", + "strategy to initialize the weight matrices:\n", + "\n", + "- each weight coefficient is randomly sampled from [-scale, scale]\n", + "- scale is proportional to $\\frac{1}{\\sqrt{n_{in} + n_{out}}}$\n", + "\n", + "This strategy is known to work well to initialize deep neural networks\n", + "with \"tanh\" or \"relu\" activation functions and then trained with\n", + "standard SGD.\n", + "\n", + "To assess the impact of initialization let us plug an alternative init\n", + "scheme into a 2 hidden layers networks with \"tanh\" activations.\n", + "For the sake of the example let's use normal distributed weights\n", + "with a manually adjustable scale (standard deviation) and see the\n", + "impact the scale value:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "OIgT7Yeirfjq", + "outputId": "707cf7df-832e-4721-ac08-8d22e908096b" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ], + "source": [ + "from tensorflow.keras import initializers\n", + "from tensorflow.keras import optimizers\n", + "\n", + "input_dim = 64\n", + "hidden_dim = 64\n", + "output_dim = 10\n", + "\n", + "normal_init = initializers.TruncatedNormal(stddev=0.01, seed=42)\n", + "\n", + "model = Sequential()\n", + "model.add(Dense(hidden_dim, input_dim=input_dim, activation=\"tanh\",\n", + " kernel_initializer=normal_init))\n", + "model.add(Dense(hidden_dim, activation=\"tanh\",\n", + " kernel_initializer=normal_init))\n", + "model.add(Dense(output_dim, activation=\"softmax\",\n", + " kernel_initializer=normal_init))\n", + "\n", + "model.compile(optimizer=optimizers.SGD(learning_rate=0.1),\n", + " loss='categorical_crossentropy', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dNP0Y5pJrfjq", + "outputId": "98e7dbb9-36c9-454b-cfba-c9ba1ede8307" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ]" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VFmQO-qirfjq" + }, + "source": [ + "Let's have a look at the parameters of the first layer after initialization but before any training has happened:" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "tEq392Ryrfjq", + "outputId": "5b12e8d9-7781-4bbd-c61c-398df284d329" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers[0].weights" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "2CYqExRArfjq", + "outputId": "5681819e-4b72-422e-a632-0d38b936a829" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 0.00015817, -0.01590087, 0.00103594, ..., 0.00962818,\n", + " 0.00624957, 0.00994726],\n", + " [ 0.0081879 , 0.00756818, -0.00668142, ..., 0.01084459,\n", + " -0.00317478, -0.00549116],\n", + " [-0.00086618, -0.00287623, 0.00391693, ..., 0.00064558,\n", + " -0.00420471, 0.00174566],\n", + " ...,\n", + " [-0.0029006 , -0.0091218 , 0.00804327, ..., -0.01407086,\n", + " 0.00952832, -0.01348555],\n", + " [ 0.00375078, 0.00967842, 0.00098119, ..., -0.00413454,\n", + " 0.01695471, 0.00025196],\n", + " [ 0.00459809, 0.01223094, -0.00213172, ..., 0.01246831,\n", + " -0.00714749, -0.00868595]], dtype=float32)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w = model.layers[0].weights[0].numpy()\n", + "w" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "srsw1Q-_rfjr", + "outputId": "0d6fd5d0-2905-421c-90ff-f91032e35ce6" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float32(0.008835949)" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.std()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "MUIDkt_-rfjr", + "outputId": "9795ca19-0409-4c27-ad9e-de7ec14cca99" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n", + " 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.], dtype=float32)" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = model.layers[0].weights[1].numpy()\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 878 + }, + "id": "CpkbnMcyrfjr", + "outputId": "9f558879-55f6-4c62-9bca-6e42cb621f59" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 3ms/step - accuracy: 0.1508 - loss: 2.2983\n", + "Epoch 2/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.4091 - loss: 1.9549\n", + "Epoch 3/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.6459 - loss: 1.1585\n", + "Epoch 4/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.8376 - loss: 0.5748\n", + "Epoch 5/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9173 - loss: 0.3451\n", + "Epoch 6/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9430 - loss: 0.2227\n", + "Epoch 7/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9483 - loss: 0.1764\n", + "Epoch 8/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9740 - loss: 0.1227\n", + "Epoch 9/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9779 - loss: 0.0974\n", + "Epoch 10/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9902 - loss: 0.0651\n", + "Epoch 11/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.9618 - loss: 0.1114\n", + "Epoch 12/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9897 - loss: 0.0520\n", + "Epoch 13/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9862 - loss: 0.0566\n", + "Epoch 14/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9928 - loss: 0.0392\n", + "Epoch 15/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9934 - loss: 0.0323\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9UAAAFfCAYAAABA/u+IAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAR65JREFUeJzt3Xd8FHXixvFndje7KaQQIA0SuiAQQkfgFFSUs91hQzmlWO7UA4VDaZ6gnqccp5ygqIjlh+U4O+jhiSJNpRepUqWXhJpsetnd3x8JC4EE2JBkks3n/XrNK2R2ZvbZ7MXLs/Od7xgej8cjAAAAAADgM4vZAQAAAAAAqK4o1QAAAAAAlBGlGgAAAACAMqJUAwAAAABQRpRqAAAAAADKiFINAAAAAEAZUaoBAAAAACgjm9kBLobb7dahQ4cUGhoqwzDMjgMAAAAA8HMej0fp6emKi4uTxVL6+ehqUaoPHTqk+Ph4s2MAAAAAAGqY/fv3q0GDBqU+Xi1KdWhoqKTCFxMWFmZyGgAAAACAv3M6nYqPj/f20dJUi1J9ash3WFgYpRoAAAAAUGkudAkyE5UBAAAAAFBGlGoAAAAAAMqIUg0AAAAAQBlVi2uqAQAAAFw6l8ul/Px8s2MAVUJAQICsVuslH4dSDQAAAPg5j8ej5ORkpaammh0FqFIiIiIUExNzwcnIzodSDQAAAPi5U4U6KipKwcHBl1QgAH/g8XiUlZWlI0eOSJJiY2PLfCxKNQAAAODHXC6Xt1DXqVPH7DhAlREUFCRJOnLkiKKioso8FJyJygAAAAA/duoa6uDgYJOTAFXPqd+LS5lrgFINAAAA1AAM+QbOVR6/F5TqcuR2e5ST7zI7BgAAAACgklCqy0lOvktD/7NWQ2f+LJfbY3YcAAAAAEAloFSXk51HMvT9liP6fkuKJvxvi9lxAAAAAFRzvXr10vDhw82OUSEMw9Ds2bNLfdzX175nzx4ZhqF169ZdcjZfUarLSZv64Zp0Z5Ik6e2fduvfK/aanAgAAACongzDOO/yzDPPmB2xVJVZhGfMmCHDMPTb3/622PrU1FQZhqFFixZVSo6K8MUXX+i555676O3j4+N1+PBhtWnTRpK0aNEiGYZRKfdm55Za5eiWpDjtOZapSfO2a/yXm5UQGawrm9czOxYAAABQrRw+fNj7748//ljjx4/Xtm3bvOtq1arl/bfH45HL5ZLNVjOrjc1m0/fff6+FCxfq6quvLrfj5uXlyW63l9vxfBUZGenT9larVTExMRWU5vw4U13Ohl7TTLe1ry+X26M/f7hWO1LSzY4EAAAAeHk8HmXlFZiyeDwXN/dQTEyMdwkPD5dhGN7vt27dqtDQUH3zzTfq2LGjHA6HfvrpJw0ePFh9+/Ytdpzhw4erV69e3u979eqlxx57TKNGjVJkZKRiYmLOOeudmpqqhx56SNHR0QoMDFSbNm00Z84cSdLx48fVv39/1a9fX8HBwUpMTNR//vMf776DBw/W4sWLNWXKFO9Z9T179kiSNm3apBtuuEG1atVSdHS0BgwYoGPHjnn3zczM1MCBA1WrVi3FxsZq0qRJF/WzCgkJ0f33368xY8acd7uNGzfqmmuuUVBQkOrUqaM//elPysjIKJa9b9++ev755xUXF6cWLVp4h1R/8sknuvLKKxUUFKTOnTtr+/btWrVqlTp16qRatWrphhtu0NGjR73HWrVqla677jrVrVtX4eHh6tmzp9auXXtRr+eUs8/4N2rUSC+88ILuv/9+hYaGKiEhQdOnT/c+fubw7z179ng/YKhdu7YMw9DgwYN9en5f1MyPcyqQYRiacHui9p/M0qo9J3X/e6s06889VLeWw+xoAAAAgLLzXWo1/ltTnvuXv/VRsL18KsiYMWP00ksvqUmTJqpdu/ZF7/fee+9pxIgRWrFihZYtW6bBgwerR48euu666+R2u3XDDTcoPT1dH374oZo2bapffvlFVqtVkpSTk6OOHTtq9OjRCgsL09dff60BAwaoadOm6tKli6ZMmaLt27erTZs2+tvf/iZJqlevnlJTU3XNNdfowQcf1Msvv6zs7GyNHj1a/fr104IFCyRJI0eO1OLFi/Xll18qKipKTz75pNauXat27dpd8DU988wzatasmT777DPdcccd5zyemZmpPn36qFu3blq1apWOHDmiBx98UEOHDtWMGTO8282fP19hYWGaN29esf2ffvppTZ48WQkJCbr//vv1hz/8QaGhoZoyZYqCg4PVr18/jR8/Xm+88YYkKT09XYMGDdKrr74qj8ejSZMm6cYbb9SOHTsUGhp60e/V2SZNmqTnnntOTz75pD777DM98sgj6tmzp1q0aFFsu/j4eH3++ee6/fbbtW3bNoWFhSkoKKjMz3shlOoK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oaGhMgzD7Dilcjqdio+P1/79+7n220/xHvs/3mP/xvvr/3iP/R/vsf/jPfZv1en99Xg8Sk9PV1xcXLHJuM9WLc5UWywWNWjQwOwYFy0sLKzK/w8El4b32P/xHvs33l//x3vs/3iP/R/vsX+rLu/v+c5Qn8JEZQAAAAAAlBGlGgAAAACAMqJUlyOHw6Gnn35aDofD7CioILzH/o/32L/x/vo/3mP/x3vs/3iP/Zs/vr/VYqIyAAAAAACqIs5UAwAAAABQRpRqAAAAAADKiFINAAAAAEAZUaoBAAAAACgjSjUAAAAAAGVEqS4nr732mho1aqTAwEB17dpVK1euNDsSysmECRPUuXNnhYaGKioqSn379tW2bdvMjoUK9I9//EOGYWj48OFmR0E5OnjwoO69917VqVNHQUFBSkxM1OrVq82OhXLicrk0btw4NW7cWEFBQWratKmee+45cZOT6uuHH37QLbfcori4OBmGodmzZxd73OPxaPz48YqNjVVQUJB69+6tHTt2mBMWPjvf+5ufn6/Ro0crMTFRISEhiouL08CBA3Xo0CHzAsNnF/odPtPDDz8swzA0efLkSstXnijV5eDjjz/WiBEj9PTTT2vt2rVKSkpSnz59dOTIEbOjoRwsXrxYQ4YM0fLlyzVv3jzl5+fr+uuvV2ZmptnRUAFWrVqlN998U23btjU7CsrRyZMn1aNHDwUEBOibb77RL7/8okmTJql27dpmR0M5mThxot544w1NnTpVW7Zs0cSJE/XPf/5Tr776qtnRUEaZmZlKSkrSa6+9VuLj//znP/XKK69o2rRpWrFihUJCQtSnTx/l5ORUclKUxfne36ysLK1du1bjxo3T2rVr9cUXX2jbtm363e9+Z0JSlNWFfodPmTVrlpYvX664uLhKSlb+uE91Oejatas6d+6sqVOnSpLcbrfi4+P16KOPasyYMSanQ3k7evSooqKitHjxYl111VVmx0E5ysjIUIcOHfT666/r73//u9q1a1dtPzFFcWPGjNGSJUv0448/mh0FFeTmm29WdHS03nnnHe+622+/XUFBQfrwww9NTIbyYBiGZs2apb59+0oqPEsdFxenxx9/XE888YQkKS0tTdHR0ZoxY4buvvtuE9PCV2e/vyVZtWqVunTpor179yohIaHywqFclPYeHzx4UF27dtW3336rm266ScOHD6+WIwU5U32J8vLytGbNGvXu3du7zmKxqHfv3lq2bJmJyVBR0tLSJEmRkZEmJ0F5GzJkiG666aZiv8/wD1999ZU6deqkO++8U1FRUWrfvr3eeusts2OhHHXv3l3z58/X9u3bJUnr16/XTz/9pBtuuMHkZKgIu3fvVnJycrH/XoeHh6tr1678/eWn0tLSZBiGIiIizI6CcuJ2uzVgwACNHDlSrVu3NjvOJbGZHaC6O3bsmFwul6Kjo4utj46O1tatW01KhYridrs1fPhw9ejRQ23atDE7DsrRRx99pLVr12rVqlVmR0EF2LVrl9544w2NGDFCTz75pFatWqXHHntMdrtdgwYNMjseysGYMWPkdDrVsmVLWa1WuVwuPf/887rnnnvMjoYKkJycLEkl/v116jH4j5ycHI0ePVr9+/dXWFiY2XFQTiZOnCibzabHHnvM7CiXjFIN+GDIkCHatGmTfvrpJ7OjoBzt379fw4YN07x58xQYGGh2HFQAt9utTp066YUXXpAktW/fXps2bdK0adMo1X7ik08+0b///W/NnDlTrVu31rp16zR8+HDFxcXxHgPVWH5+vvr16yePx6M33njD7DgoJ2vWrNGUKVO0du1aGYZhdpxLxvDvS1S3bl1ZrValpKQUW5+SkqKYmBiTUqEiDB06VHPmzNHChQvVoEEDs+OgHK1Zs0ZHjhxRhw4dZLPZZLPZtHjxYr3yyiuy2WxyuVxmR8Qlio2NVatWrYqtu/zyy7Vv3z6TEqG8jRw5UmPGjNHdd9+txMREDRgwQH/5y180YcIEs6OhApz6G4u/v/zbqUK9d+9ezZs3j7PUfuTHH3/UkSNHlJCQ4P3ba+/evXr88cfVqFEjs+P5jFJ9iex2uzp27Kj58+d717ndbs2fP1/dunUzMRnKi8fj0dChQzVr1iwtWLBAjRs3NjsSytm1116rjRs3at26dd6lU6dOuueee7Ru3TpZrVazI+IS9ejR45xb4W3fvl0NGzY0KRHKW1ZWliyW4n/WWK1Wud1ukxKhIjVu3FgxMTHF/v5yOp1asWIFf3/5iVOFeseOHfr+++9Vp04dsyOhHA0YMEAbNmwo9rdXXFycRo4cqW+//dbseD5j+Hc5GDFihAYNGqROnTqpS5cumjx5sjIzM3XfffeZHQ3lYMiQIZo5c6a+/PJLhYaGeq/VCg8PV1BQkMnpUB5CQ0PPuUY+JCREderU4dp5P/GXv/xF3bt31wsvvKB+/fpp5cqVmj59uqZPn252NJSTW265Rc8//7wSEhLUunVr/fzzz/rXv/6l+++/3+xoKKOMjAzt3LnT+/3u3bu1bt06RUZGKiEhQcOHD9ff//53NW/eXI0bN9a4ceMUFxd33hmkUXWc7/2NjY3VHXfcobVr12rOnDlyuVzev78iIyNlt9vNig0fXOh3+OwPSgICAhQTE6MWLVpUdtRL50G5ePXVVz0JCQkeu93u6dKli2f58uVmR0I5kVTi8n//939mR0MF6tmzp2fYsGFmx0A5+u9//+tp06aNx+FweFq2bOmZPn262ZFQjpxOp2fYsGGehIQET2BgoKdJkyaev/71r57c3Fyzo6GMFi5cWOL//w4aNMjj8Xg8brfbM27cOE90dLTH4XB4rr32Ws+2bdvMDY2Ldr73d/fu3aX+/bVw4UKzo+MiXeh3+GwNGzb0vPzyy5Wasbxwn2oAAAAAAMqIa6oBAAAAACgjSjUAAAAAAGVEqQYAAAAAoIwo1QAAAAAAlBGlGgAAAACAMqJUAwAAAABQRpRqAAAAAADKiFINAAAAAEAZUaoBAAAAACgjSjUAAAAAAGVEqQYAAAAAoIz+H3VZarn+9IlzAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "history = model.fit(X_train, y_train, epochs=15, batch_size=32)\n", + "\n", + "plt.figure(figsize=(12, 4))\n", + "plt.plot(history.history['loss'], label=\"Truncated Normal init\")\n", + "plt.legend();" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "I2l1KdB9rfjr" + }, + "source": [ + "Once the model has been fit, the weights have been updated and notably the biases are no longer 0:" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Sv27OYaRrfjr", + "outputId": "545db0d6-5c7d-4812-b761-e4846047971b" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers[0].weights" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ACxM1ClLrfjr" + }, + "source": [ + "#### Questions:\n", + "\n", + "- Try the following initialization schemes and see whether\n", + " the SGD algorithm can successfully train the network or\n", + " not:\n", + " \n", + " - a very small e.g. `stddev=1e-3`\n", + " - a larger scale e.g. `stddev=1` or `10`\n", + " - initialize all weights to 0 (constant initialization)\n", + " \n", + "- What do you observe? Can you find an explanation for those\n", + " outcomes?\n", + "\n", + "- Are more advanced solvers such as SGD with momentum or Adam able\n", + " to deal better with such bad initializations?" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "Zern5rp2rfjr", + "outputId": "11bc9238-545d-4d20-c54e-d48810fac5bf" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Testing Very Small (1e-3) initialization...\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/keras/src/layers/core/dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Very Small (1e-3) - Final accuracy: 0.5296\n", + "\n", + "Testing Small (0.01) initialization...\n", + "Small (0.01) - Final accuracy: 0.9944\n", + "\n", + "Testing Large (1.0) initialization...\n", + "Large (1.0) - Final accuracy: 0.8219\n", + "\n", + "Testing Very Large (10.0) initialization...\n", + "Very Large (10.0) - Final accuracy: 0.1969\n", + "\n", + "Testing Zeros initialization...\n", + "Zeros - Final accuracy: 0.1051\n", + "\n", + "Testing Glorot Uniform initialization...\n", + "Glorot Uniform - Final accuracy: 0.9993\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+QAAAK9CAYAAACtq6aaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAyR9JREFUeJzs3Xd4FNX/9vH3pvdCCEmAQEKRJh1FQBBpURRpihSFIALSg6BU6V3pKEWkCQhiA7+iAiJKE1BEEBQEQiehpRDSs/v84Y99iKEkITAp9+u69pI9e2bmnj27MZ/MnBmTxWKxICIiIiIiIiIPlY3RAUREREREREQKIhXkIiIiIiIiIgZQQS4iIiIiIiJiABXkIiIiIiIiIgZQQS4iIiIiIiJiABXkIiIiIiIiIgZQQS4iIiIiIiJiABXkIiIiIiIiIgZQQS4iIiIiIiJiABXkIiKSIz7++GPKly+Pvb09Xl5eRsehYcOGNGzYMNvLPvroozkbKAeYTCbGjBmTqb5BQUGEhoZmeRunTp3CZDKxbNkya9uYMWMwmUxZXtf9Mmq7+cmyZcswmUycOnUqy8tu27YNk8nEtm3bcjyXiIj8SwW5iMg93PyF9tdffzU6yn3buHFjpgu6rPj7778JDQ2ldOnSfPjhhyxatOi2/aZNm4bJZOL3339P126xWPD29sZkMhEeHp7utcTERBwdHenYsWOO575fFy5cYMyYMRw4cCBT/XP6s7Rr1y7GjBlDdHR0jqzPCPHx8YwZM6bAFX0NGzbEZDLd8/Egvq95QX76uSsicjd2RgcQEZGHZ+PGjbz//vs5/kv+tm3bMJvNzJ49mzJlytyx35NPPgnAjh07qF69urX98OHDREdHY2dnx86dOwkODra+tm/fPpKTk63LZtamTZuyuBdZd+HCBcaOHUtQUBDVqlV74NtLSEjAzu7//697165djB07ltDQ0AxnJRw9ehQbm5z5u/vIkSMZOnRojqzrv+Lj4xk7dixAhjMaHuR2jTZixAhef/116/N9+/YxZ84chg8fToUKFaztVapUua/tvPrqq7Rv3x5HR8csL9ugQQMSEhJwcHC4rwwiInJnKshFROS+Xbp0CeCep6rXqlULJycnduzYQb9+/aztO3fuxMfHh1q1arFjxw5eeeUV62s7duwAyHJBnh+LCCcnp0z3zU4Bdid2dnbp/hDwsBi13YehadOm6Z47OTkxZ84cmjZtetepFjdu3MDV1TXT27G1tcXW1jZbGW1sbLL0mRMRkazTKesiItkQGhqKm5sbZ86c4fnnn8fNzY1ixYrx/vvvA3Do0CEaNWqEq6srJUuWZPXq1emWv3k65s8//0zPnj3x8fHBw8ODzp07ExUVla7v+vXree655yhatCiOjo6ULl2a8ePHk5aWliHXnj17aN68Od7e3ri6ulKlShVmz55tzXwz362nxN7LBx98QKVKlXB0dKRo0aL06dMn3SnSQUFBjB49GgBfX9+7nmbr4ODAY489xs6dO9O179y5kzp16lCvXr3bvubl5WWd0202m5k1axaVKlXCyckJPz8/evbsmeF9u90c8tOnT/PCCy/g6upKkSJFGDhwIN9///0d58keOXKEp59+GhcXF4oVK8a0adOsr23bto3HHnsMgK5du1rfz1vnXmfGzc/S+fPnadWqFW5ubvj6+jJ48OAMY3zreztmzBjeeustAIKDg63bvzlX+L9zyK9du8bgwYOpXLkybm5ueHh48Oyzz/LHH3/cM+N/53KHhobe8xTr5ORkRo0aRc2aNfH09MTV1ZX69evz448/Wtdz6tQpfH19ARg7dmyGddxuDnlqairjx4+ndOnSODo6EhQUxPDhw0lKSkrXLygoiOeff54dO3bw+OOP4+TkRKlSpVixYsU99xf+LXwHDRpEYGAgjo6OlCtXjvfeew+LxZKun8lkom/fvnz11Vc8+uijODo6UqlSJb777rtMbedubu7/kSNH6NixI97e3tY/TB08eJDQ0FBKlSqFk5MT/v7+vPbaa1y9ejXdOm43hzyz783t5pDfvL7C3b4bN2X1+5Ydv//+O88++yweHh64ubnRuHFjfvnll3R9UlJSGDt2LGXLlsXJyQkfHx+efPJJNm/ebO0TERFB165dKV68OI6OjgQEBNCyZctszb0XEcmK/PlnZxGRhyAtLY1nn32WBg0aMG3aNFatWkXfvn1xdXVlxIgRdOrUiTZt2rBgwQI6d+5MnTp10p2KDdC3b1+8vLwYM2YMR48eZf78+Zw+fdr6izD8+wu1m5sbb775Jm5ubmzdupVRo0YRGxvLu+++a13X5s2bef755wkICGDAgAH4+/vz119/8b///Y8BAwbQs2dPLly4wObNm/n4448ztY9jxoxh7NixNGnS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HHHvvfdq4MCBKigo0Lhx47Rs2TK7S0IHue2221RZWani4mL16tVLF1xwgdavX293Wegkv/71r2UYhq677jq7S0EH2rp1qy699FKVl5fL5/Np5MiRWr58ud1loYNEo1HddNNNGjRokHw+n4YMGaJbb71V3Pe263rttdc0ffp09e3bV4Zh6Nlnn02bb1mWfvazn6lPnz7y+XyaOHGiPvroI3uKxUHZ1zEOh8O6/vrrNXLkSBUWFqpv3776xje+oW3bttlXMA7I/n6HU1111VUyDEN33XXXYauvIxHIc8CTTz6p2bNn6+c//7lWrlypUaNGadKkSdq5c6fdpaEDLF68WLNmzdLSpUu1cOFChcNhnXPOOQoGg3aXhg5WVVWlP/7xjzrxxBPtLgUdaO/evTrttNPkdru1YMECvf/++/rd736n7t27210aOsjtt9+uOXPm6J577tG6det0++236ze/+Y3uvvtuu0vDQQoGgxo1apTuvfferPN/85vf6A9/+IPuv/9+vf322yosLNSkSZPU1NR0mCvFwdrXMW5oaNDKlSt10003aeXKlXr66ae1fv16nXfeeTZUioOxv9/hhGeeeUZLly5V3759D1NlHY+vPcsB48aNU2Vlpe655x5Jkmma6tevn6655hrdcMMNNleHjrZr1y716tVLixcv1umnn253Oegg9fX1OuWUU3Tffffpl7/8pU466aQu21OLdDfccIOWLFmi119/3e5S0EmmTZum3r1766GHHkpOmzFjhnw+nx577DEbK0NHMAxDzzzzjC644AJJsbPjffv21fe//3394Ac/kCTV1taqd+/e+vOf/6yvfe1rNlaLg5F5jLOpqqrS2LFjtXnzZvXv3//wFYdD1tbx3bp1q8aNG6eXXnpJ5557rq677roueYUiZ8htFgqFtGLFCk2cODE5zeFwaOLEiXrrrbdsrAydpba2VpJUVlZmcyXoSLNmzdK5556b9ruM/PD8889rzJgxuvDCC9WrVy+dfPLJevDBB+0uCx3o1FNP1aJFi/Thhx9Kkt5991298cYbmjJlis2VoTNs2rRJ27dvT/t7XVpaqnHjxvHeK4/V1tbKMAx169bN7lLQAUzT1GWXXaYf/vCHGj58uN3lHBKX3QUc6aqrqxWNRtW7d++06b1799YHH3xgU1XoLKZp6rrrrtNpp52mESNG2F0OOsgTTzyhlStXqqqqyu5S0Ak2btyoOXPmaPbs2frxj3+sqqoqffe735XH49HMmTPtLg8d4IYbblAgENDQoUPldDoVjUb1v//7v7rkkkvsLg2dYPv27ZKU9b1XYh7yS1NTk66//np9/etfV0lJid3loAPcfvvtcrlc+u53v2t3KYeMQA4cRrNmzdLatWv1xhtv2F0KOsiWLVt07bXXauHChSooKLC7HHQC0zQ1ZswY/epXv5IknXzyyVq7dq3uv/9+Anme+Pvf/66//vWvevzxxzV8+HCtWrVK1113nfr27csxBrq4cDisiy66SJZlac6cOXaXgw6wYsUK/f73v9fKlStlGIbd5RwyLlm3WY8ePeR0OrVjx4606Tt27FBFRYVNVaEzXH311Zo3b55effVVHX300XaXgw6yYsUK7dy5U6eccopcLpdcLpcWL16sP/zhD3K5XIpGo3aXiEPUp08fnXDCCWnThg0bpk8//dSmitDRfvjDH+qGG27Q1772NY0cOVKXXXaZvve97+m2226zuzR0gsT7K9575b9EGN+8ebMWLlzI2fE88frrr2vnzp3q379/8r3X5s2b9f3vf18DBw60u7wDRiC3mcfj0ejRo7Vo0aLkNNM0tWjRIk2YMMHGytBRLMvS1VdfrWeeeUavvPKKBg0aZHdJ6EBnnXWW1qxZo1WrViUfY8aM0SWXXKJVq1bJ6XTaXSIO0Wmnndbqqwo//PBDDRgwwKaK0NEaGhrkcKS/JXI6nTJN06aK0JkGDRqkioqKtPdegUBAb7/9Nu+98kgijH/00Ud6+eWXVV5ebndJ6CCXXXaZVq9enfbeq2/fvvrhD3+ol156ye7yDhiXrOeA2bNna+bMmRozZozGjh2ru+66S8FgUFdccYXdpaEDzJo1S48//riee+45FRcXJz+fVlpaKp/PZ3N1OFTFxcWt7gdQWFio8vJy7hOQJ773ve/p1FNP1a9+9StddNFFWrZsmR544AE98MADdpeGDjJ9+nT97//+r/r376/hw4frnXfe0R133KFvfvObdpeGg1RfX6+PP/44Ob5p0yatWrVKZWVl6t+/v6677jr98pe/1LHHHqtBgwbppptuUt++ffd5l27kln0d4z59+ugrX/mKVq5cqXnz5ikajSbff5WVlcnj8dhVNtppf7/DmR0sbrdbFRUVOv744w93qYfOQk64++67rf79+1sej8caO3astXTpUrtLQgeRlPXxyCOP2F0aOskXvvAF69prr7W7DHSguXPnWiNGjLC8Xq81dOhQ64EHHrC7JHSgQCBgXXvttVb//v2tgoICa/DgwdZPfvITq7m52e7ScJBeffXVrP/2zpw507IsyzJN07rpppus3r17W16v1zrrrLOs9evX21s0Dsi+jvGmTZvafP/16quv2l062mF/v8OZBgwYYN15552HtcaOwveQAwAAAABgAz5DDgAAAACADQjkAAAAAADYgEAOAAAAAIANCOQAAAAAANiAQA4AAAAAgA0I5AAAAAAA2IBADgAAAACADQjkAAAAAADYgEAOAAA6lGEYevbZZ+0uAwCAnEcgBwAgj1x++eUyDKPVY/LkyXaXBgAAMrjsLgAAAHSsyZMn65FHHkmb5vV6baoGAAC0hTPkAADkGa/Xq4qKirRH9+7dJcUuJ58zZ46mTJkin8+nwYMH6x//+Efa8mvWrNGZZ54pn8+n8vJyXXnllaqvr09r8/DDD2v48OHyer3q06ePrr766rT51dXV+tKXviS/369jjz1Wzz//fOfuNAAAXRCBHACAI8xNN92kGTNm6N1339Ull1yir33ta1q3bp0kKRgMatKkSerevbuqqqr01FNP6eWXX04L3HPmzNGsWbN05ZVXas2aNXr++ed1zDHHpG3jlltu0UUXXaTVq1dr6tSpuuSSS7Rnz57Dup8AAOQ6w7Isy+4iAABAx7j88sv12GOPqaCgIG36j3/8Y/34xz+WYRi66qqrNGfOnOS88ePH65RTTtF9992nBx98UNdff722bNmiwsJCSdL8+fM1ffp0bdu2Tb1799ZRRx2lK664Qr/85S+z1mAYhn7605/q1ltvlRQL+UVFRVqwYAGfZQcAIAWfIQcAIM988YtfTAvcklRWVpYcnjBhQtq8CRMmaNWqVZKkdevWadSoUckwLkmnnXaaTNPU+vXrZRiGtm3bprPOOmufNZx44onJ4cLCQpWUlGjnzp0Hu0sAAOQlAjkAAHmmsLCw1SXkHcXn87WrndvtThs3DEOmaXZGSQAAdFl8hhwAgCPM0qVLW40PGzZMkjRs2DC9++67CgaDyflLliyRw+HQ8ccfr+LiYg0cOFCLFi06rDUDAJCPOEMOAECeaW5u1vbt29OmuVwu9ejRQ5L01FNPacyYMfrc5z6nv/71r1q2bJkeeughSdIll1yin//855o5c6Zuvvlm7dq1S9dcc40uu+wy9e7dW5J0880366qrrlKvXr00ZcoU1dXVacmSJbrmmmsO744CANDFEcgBAMgzL774ovr06ZM27fjjj9cHH3wgKXYH9CeeeELf+c531KdPH/3tb3/TCSecIEny+/166aWXdO2116qyslJ+v18zZszQHXfckVzXzJkz1dTUpDvvvFM/+MEP1KNHD33lK185fDsIAECe4C7rAAAcQQzD0DPPPKMLLrjA7lIAADji8RlyAAAAAABsQCAHAAAAAMAGfIYcAIAjCJ9UAwAgd3CGHAAAAAAAGxDIAQAAAACwAYEcAAAAAAAbEMgBAAAAALABgRwAAAAAABsQyAEAAAAAsAGBHAAAAAAAGxDIAQAAAACwwf8Hj7CvKlVHqfAAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def create_model(initializer, activation='tanh', optimizer='sgd', lr=0.1):\n", + " model = Sequential()\n", + " model.add(Dense(64, input_dim=64, activation=activation, kernel_initializer=initializer))\n", + " model.add(Dense(64, activation=activation, kernel_initializer=initializer))\n", + " model.add(Dense(10, activation='softmax', kernel_initializer=initializer))\n", + "\n", + " if optimizer == 'sgd':\n", + " opt = SGD(learning_rate=lr)\n", + " elif optimizer == 'adam':\n", + " opt = Adam(learning_rate=lr)\n", + " elif optimizer == 'sgd_momentum':\n", + " opt = SGD(learning_rate=lr, momentum=0.9)\n", + "\n", + " model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n", + " return model\n", + "\n", + "# Test different initialization schemes\n", + "initializers_to_test = {\n", + " 'Very Small (1e-3)': initializers.TruncatedNormal(stddev=1e-3),\n", + " 'Small (0.01)': initializers.TruncatedNormal(stddev=0.01),\n", + " 'Large (1.0)': initializers.TruncatedNormal(stddev=1.0),\n", + " 'Very Large (10.0)': initializers.TruncatedNormal(stddev=10.0),\n", + " 'Zeros': initializers.Zeros(),\n", + " 'Glorot Uniform': 'glorot_uniform' # Default\n", + "}\n", + "\n", + "histories = {}\n", + "\n", + "for name, init in initializers_to_test.items():\n", + " print(f\"\\nTesting {name} initialization...\")\n", + "\n", + " model = create_model(init, activation='tanh', optimizer='sgd')\n", + " history = model.fit(X_train, y_train, epochs=15, batch_size=32, verbose=0)\n", + " histories[name] = history\n", + "\n", + " final_acc = history.history['accuracy'][-1]\n", + " print(f\"{name} - Final accuracy: {final_acc:.4f}\")\n", + "\n", + "# Plot the results\n", + "plt.figure(figsize=(12, 8))\n", + "for name, history in histories.items():\n", + " plt.plot(history.history['loss'], label=name)\n", + "\n", + "plt.title('Impact of Weight Initialization on Training Loss')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Loss')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 37, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 758 + }, + "id": "s8scToYrrfjr", + "outputId": "8df35b95-cc04-4697-fb84-596328462e02" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Testing Zeros with SGD...\n", + "Zeros + SGD - Final accuracy: 0.1072\n", + "\n", + "Testing Zeros with SGD + Momentum...\n", + "Zeros + SGD + Momentum - Final accuracy: 0.1072\n", + "\n", + "Testing Zeros with Adam...\n", + "Zeros + Adam - Final accuracy: 0.1072\n", + "\n", + "Testing Very Large (10.0) with SGD...\n", + "Very Large (10.0) + SGD - Final accuracy: 0.1496\n", + "\n", + "Testing Very Large (10.0) with SGD + Momentum...\n", + "Very Large (10.0) + SGD + Momentum - Final accuracy: 0.2032\n", + "\n", + "Testing Very Large (10.0) with Adam...\n", + "Very Large (10.0) + Adam - Final accuracy: 0.4711\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAHqCAYAAADrpwd3AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzs3Xd4FNXbxvHvbnqHJJAESKP3jqEX6UWqBX+AoAgWwN5AkaoINiyvYkFAsUtRQXrvTUKR3mtCSIA0UnfeP2JWYxJqNhvg/lxXLnZnzsw8c3ZDzj575hmTYRgGIiIiIiIiIiIiIiKSi9neAYiIiIiIiIiIiIiIFFVKoouIiIiIiIiIiIiI5ENJdBERERERERERERGRfCiJLiIiIiIiIiIiIiKSDyXRRURERERERERERETyoSS6iIiIiIiIiIiIiEg+lEQXEREREREREREREcmHkugiIiIiIiIiIiIiIvlQEl1EREREREREREREJB9KoouIFAEmk4nRo0dfU9uwsDAGDBhw3cc4duwYJpOJ6dOnW5eNHj0ak8l03fu6WfY6roiIiIhcP41V5U6WmJhIyZIl+fbbb+0dyhX17t2b+++/395hiNy2lEQXESkA06dPx2QysXXr1gLZ3/r16xk9ejQXL14skP3ZQ3JyMqNHj2blypX2DuWqwsLCMJlMV/y5kQ+DIiIiIkWBxqq53Spj1aeeegqTycShQ4fybfPqq69iMpnYuXNnIUaWt7CwMLp06WLvMArUBx98gJeXF71797YuO3v2LK+88gqtWrXCy8sLk8l0xffS+vXradq0Ke7u7gQGBvLUU0+RmJh4zTFMnTqVKlWq4OrqSoUKFfjoo49ytXn55ZeZNWsWO3bsuK7zE5FroyS6iEgRcPnyZV577TXr8/Xr1zNmzJg8P5js37+fL774okCO+9prr3H58uUC2dd/JScnM2bMmDwHk7Y87o2YPHky33zzTZ4/ERERADRs2NDOUYqIiIjYh8aq9tOnTx8Avvvuu3zbfP/999SoUYOaNWsWVlh3jPT0dD744AMeffRRHBwcrMv379/PxIkTOX36NDVq1LjiPiIjI2ndujXJycm89957PProo3z++efcd9991xTDZ599xqOPPkq1atX46KOPaNSoEU899RQTJ07M0a5OnTrUr1+fd9999/pPVESuytHeAYiICLi6ul5zWxcXlwI7rqOjI46Ohf+nwF7HzU/37t3zXL548WI2b95M165defzxxwvkWMnJybi7uxfIvkREREQKg8aq9hMREUH58uX5/vvvef3113Ot37BhA0ePHuWtt966qeNYLBbS0tKu67W2h6SkJDw8PArtePPmzSMmJiZXmZR69eoRGxuLr68vv/zyyxUT4iNGjKB48eKsXLkSb29vIGvG/qBBg1i8eDHt2rXLd9vLly/z6quv0rlzZ3755RcABg0ahMViYdy4cQwePJjixYtb299///2MGjWKTz75BE9Pz5s5dRH5D81EFxGxkQEDBuDp6cnp06fp3r07np6elChRghdeeIHMzMwcbf9dZ3L06NG8+OKLAISHh1vLiRw7dgzIXWcyLi6OF154gRo1auDp6Ym3tzcdO3a8psv4/lvvccCAAfmWM8mOLy0tjddff5169erh4+ODh4cHzZo1Y8WKFdb9HDt2jBIlSgAwZsyYXPvIq85kRkYG48aNo1y5cri4uBAWFsaIESNITU3N0S77EtG1a9dy11134erqStmyZfn6669znd/hw4c5fPjwVfshL1FRUfTr14/SpUszbdq0XOtnzpxJvXr1cHNzw9fXl969e3Py5MkcbVq2bEn16tXZtm0bzZs3x93dnREjRgBw7tw5Bg4cSEBAAK6urtSqVYsZM2bkOs4PP/xAvXr18PLywtvbmxo1avDBBx/c0DmJiIiIZNNY9dYZq/bp04d9+/bx559/5lr33XffYTKZePDBBwFITU1l1KhRlC9fHhcXF4KDg3nppZdyxWkymRg6dCjffvst1apVw8XFhQULFhAWFka3bt1yHSclJQUfHx8ee+yxq8Z7NWvWrOG+++4jJCTEGuOzzz6ba/Z/9nv08OHDdOrUCS8vL+vM/MuXL/PUU0/h7++Pl5cXXbt25fTp03nW7z99+jSPPPIIAQEBuLi4UK1aNb766qtrinXu3LmEhYVRrly5HMu9vLzw9fW96vbx8fEsWbKEvn37WhPoAA899BCenp789NNPV9x+xYoVxMbG8uSTT+ZYPmTIEJKSkpg/f36O5W3btiUpKYklS5ZcNTYRuT5F46tVEZHbVGZmJu3btyciIoJ33nmHpUuX8u6771KuXDmeeOKJPLfp2bMnBw4c4Pvvv+f999/H398fwDrQ/68jR44wd+5c7rvvPsLDw4mOjuaz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e/bsWe6//36aNm3K22+/ne/xIOdMmk2bNrFhw4Yc7dzd3YFrO4fsAeF/B+fZs2iulNS+ksOHD1/TjKMtW7YwfPhw6tWrx1tvvXXFtj179sTBwYExY8bk6nfDMIiNjb3q8Tp16kRUVBQ//vijdVlGRgYfffQRnp6e1stZ/7svs9lsnS2T1yWhIiIiIoVBY9UshTVWzda9e3fc3d355JNPWLBgAT179sTV1dW6/v777+f06dN88cUXuba9fPkySUlJ13ysfv36sWfPHl588UUcHBzo3bv3NW97JXm9PoZh8MEHH1zzPtq3bw/AJ598kmP5Rx99lOtYvXr1YtasWezevTvXfmJiYq56rEaNGrF169Zrju2/fHx8aNOmDTNnziQhIcG6/JtvviExMdFazx4gOTmZffv25ahnfvfdd+Pr68unn36aY7+ffvop7u7uud57e/bsISUlhcaNG99wzCKSN81EFxEpgurVqwfAq6++Su/evXFycuKee+6xfmD5ty5dujB27FgefvhhGjduzK5du/j2228pW7bsdR/3qaeeIiYmhpdeeokffvghx7qaNWtSs2ZNunTpwuzZs+nRowedO3fm6NGjTJkyhapVq5KYmGht7+bmRtWqVfnxxx+pWLEivr6+VK9enerVq+c6bq1atejfvz+ff/45Fy9epEWLFmzevJkZM2bQvXt3WrVqdd3nAtC6dWuAK96wKTk5mQceeID09HS6dOnCTz/9lGe7gIAA2rZtS7ly5Rg/fjzDhw/n2LFjdO/eHS8vL44ePcqcOXMYPHgwL7zwwhXjGjx4MJ999hkDBgxg27ZthIWF8csvv1hn+Xh5eQHw6KOPEhcXx913302ZMmU4fvw4H330EbVr184xC0pERESkMGmsWnhj1X/z9PSke/fu1rro/52J369fP3766Scef/xxVqxYQZMmTcjMzGTfvn389NNPLFq0iPr161/TsTp37oyfnx8///wzHTt2zFFK5GoOHTrE+PHjcy2vU6cO7dq1o1y5crzwwgucPn0ab29vZs2adV0lU+rVq0evXr2YPHkysbGxNGzYkFWrVnHgwAEg51UGb731FitWrCAiIoJBgwZRtWpV4uLi+PPPP1m6dClxcXFXPFa3bt345ptvOHDgQK6rULPP8a+//gKyEuNr164F4LXXXrO2e+ONN2jcuDEtWrRg8ODBnDp1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snTr1o25c+cSERHBwIEDycy07WzR/v3788MPP3D58mXrsq+++or+/fvnartr1y7uvvtu3Nzc8PPzY/DgwSQmJlrXDxgwgO7du/Pmm28SEBBAsWLFGDt2LBkZGbz44ov4+vpSpkwZpk2blmO/J0+e5P7776dYsWL4+vrSrVs3jh07lmu/77zzDkFBQfj5+TFkyBDS09MBaNmyJcePH+fZZ5+1zvYBGD16NLVr185xrA8++ICwsLCbjlmkqDKZTIT4udO9TmnGdKvO78Oasnt0e34c3JBXOlamXdUA/D1dsmarn7rE9PXHeOr77TSbtIK73lzGY99s5bNVh9mi2eoiImIHGm9rvG0rSqLfQTqW7YiLgwuHLh5i9/nd9g5HRESkYBkGpCXZ5+cav5z29PTE09OTuXPnkpqammebxYsXExsby0svvZTvfq4209NsNjNs2DCOHz/Otm3brim2G1WvXj3CwsKYNWsWACdOnGD16tX065fzqrekpCTat29P8eLF2bJlCz///DNLly5l6NChOdotX76cM2fOsHr1at577z1GjRpFly5dKF68OJs2beLxxx/nscce49SpUwCkp6fTvn17vLy8WLNmDevWrcPT05MOHTqQlpZm3e+KFSs4fPgwK1asYMaMGUyfPp3p06cDMHv2bMqUKcPYsWM5e/YsZ8+eva4+uN6YRW41bs4ORJT14/EW5fj8ofpsebU1a15qxQe9azOgcRg1y/jgaDYRk5DKor+imbBgH/dN2UD1UYvo+vFaRv/2F79GnuZkXLIm84iI3Mo03rbSePvOG2+rnMsdxNvZm7ahbZl3ZB6zD82mRoka9g5JRESk4KQnw5ul7HPsEWfA2eOqzRwdHZk+fTqDBg1iypQp1K1blxYtWtC7d29q1qwJwIEDBwCoVKmSdbstW7bQqlUr6/MffviBLl26XPFYlStXBrIuG73rrruu+5SuxyOPPMJXX31F3759mT59Op06daJEiRI52nz33XekpKTw9ddf4+GR1Vcff/wx99xzDxMnTiQgIAAAX19fPvzwQ8xmM5UqVWLSpEkkJyczYsQIAIYPH85bb73F2rVr6d27Nz/++CMWi4Uvv/zS+mFn2rRpFCtWjJUrV9KuXTsAihcvzscff4yDgwOVK1emc+fOLFu2jEGDBuHr64uDgwNeXl4EBgZe9/lfb8witzqTyUSw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iIiIdEEhej9z7733MmzYMHw+H9OnT+fTTz+Nd5P6tNtvv50jjzySQCBARkYG5513Hvn5+fFuVr/y//7f/8OyLK6//vp4N6VfKCgo4LLLLiMtLQ2/38+kSZP47LPP4t2sPqulpYWbbrqJvLw8/H4/I0aM4JZbbkHLiRyY9957j3POOYecnBwsy+KFF17odL9t2/zqV78iOzsbv9/PKaecwrp16+LT2D5kb/0aDof56U9/yqRJk0hMTCQnJ4dvfvObFBYWxq/BfcS+fl47uuqqq7Asi7vvvrvH2ifxp/F299J4O/Y03u4+Gmt3P423u4fG27Gh8XZs9NXxtkL0fuRf//oXN9xwA7/+9a9ZunQpkydPZvbs2ZSUlMS7aX3WwoULmTt3LosWLWL+/PmEw2FOO+00QqFQvJvWLyxevJj777+fww47LN5N6RcqKiqYNWsWbreb1157jVWrVvHHP/6RAQMGxLtpfdYdd9zBvHnz+Otf/8rq1au54447uPPOO/nLX/4S76b1KaFQiMmTJ3Pvvffu8f4777yTe+65h7/97W988sknJCYmMnv2bBoaGnq4pX3L3vq1rq6OpUuXctNNN7F06VKee+458vPzOffcc+PQ0r5lXz+vbZ5//nkWLVpETk5OD7VMegONt7ufxtuxpfF299FYOzY03u4eGm/HhsbbsdFnx9u29BtHHXWUPXfu3OjtlpYWOycnx7799tvj2Kr+paSkxAbshQsXxrspfV5NTY09atQoe/78+fbxxx9vX3fddfFuUp/305/+1D7mmGPi3Yx+5ayzzrK//e1vd9p3wQUX2JdeemmcWtT3Afbzzz8fvR2JROysrCz797//fXRfZWWl7fV67SeffDIOLeybdu3XPfn0009twN6yZUvPNKof6Kpft2/fbufm5torV660hw4dat9111093jaJD423Y0/j7e6j8Xb30lg7NjTe7n4ab8eGxtux0ZfG25qJ3k80NTWxZMkSTjnllOg+h8PBKaecwscffxzHlvUvVVVVAKSmpsa5JX3f3LlzOeusszr9zMrBeemll5g2bRpf/epXycjIYMqUKTz44IPxblafNnPmTBYsWMDatWsB+OKLL/jggw8444wz4tyy/mPTpk0UFRV1+l0QDAaZPn26/n51s6qqKizLIiUlJd5N6dMikQiXX345P/7xj5kwYUK8myM9SOPtnqHxdvfReLt7aawdGxpvx57G2z1H4+3u0VvH2654N0C6R2lpKS0tLWRmZnban5mZyZo1a+LUqv4lEolw/fXXM2vWLCZOnBjv5vRpTz31FEuXLmXx4sXxbkq/snHjRubNm8cNN9zAjTfeyOLFi/nBD36Ax+Nhzpw58W5en/Szn/2M6upqxo4di9PppKWlhd/97ndceuml8W5av1FUVASwx79fbffJwWtoaOCnP/0pX//610lOTo53c/q0O+64A5fLxQ9+8IN4N0V6mMbbsafxdvfReLv7aawdGxpvx57G2z1D4+3u01vH2wrRRfbT3LlzWblyJR988EG8m9Knbdu2jeuuu4758+fj8/ni3Zx+JRKJMG3aNG677TYApkyZwsqVK/nb3/6mgf1/6d///jePP/44TzzxBBMmTGDZsmVcf/315OTkqE+lzwiHw1x88cXYts28efPi3Zw+bcmSJfz5z39m6dKlWJYV7+aI9Dsab3cPjbdjQ2Pt2NB4W/oDjbe7T28eb6ucSz+Rnp6O0+mkuLi40/7i4mKysrLi1Kr+45prruHll1/mnXfeYdCgQfFuTp+2ZMkSSkpKOOKII3C5XLhcLhYuXMg999yDy+WipaUl3k3ss7Kzsxk/fnynfePGjWPr1q1xalHf9+Mf/5if/exnXHLJJUyaNInLL7+cH/7wh9x+++3xblq/0fY3Sn+/YqNtQL9lyxbmz5+vWTEH6f3336ekpIQhQ4ZE/4Zt2bKFH/3oRwwbNizezZMY03g7tjTe7j4ab8eGxtqxofF27Gm8HVsab3ev3jzeVojeT3g8HqZOncqCBQui+yKRCAsWLODoo4+OY8v6Ntu2ueaaa3j++ed5++23ycvLi3eT+ryTTz6ZFStWsGzZsug2bdo0Lr30UpYtW4bT6Yx3E/usWbNmkZ+f32nf2rVrGTp0aJxa1PfV1dXhcHT+U+l0OolEInFqUf+Tl5dHVlZWp79f1dXVfPLJJ/r7dZDaBvTr1q3jrbfeIi0tLd5N6vMuv/xyli9f3ulvWE5ODj/+8Y9544034t08iTGNt2ND4+3up/F2bGisHRsab8eextuxo/F29+vN422Vc+lHbrjhBubMmcO0adM46qijuPvuuwmFQnzrW9+Kd9P6rLlz5/LEE0/w4osvEggEovXCgsEgfr8/zq3rmwKBwG41LhMTE0lLS1Pty4P0wx/+kJkzZ3Lbbbdx8cUX8+mnn/LAAw/wwAMPxLtpfdY555zD7373O4YMGcKECRP4/PPP+dOf/sS3v/3teDetT6mtrWX9+vXR25s2bWLZsmWkpqYyZMgQrr/+em699VZGjRpFXl4eN910Ezk5OZx33nnxa3QfsLd+zc7O5qKLLmLp0qW8/PLLtLS0RP+Gpaam4vF44tXsXm9fP6+7fjhyu91kZWUxZsyYnm6qxIHG291P4+3up/F2bGisHRsab3cPjbdjQ+Pt2Oiz421b+pW//OUv9pAhQ2yPx2MfddRR9qJFi+LdpD4N2OP2yCOPxLtp/crxxx9vX3fddfFuRr/wn//8x544caLt9XrtsWPH2g888EC8m9SnVVdX29ddd509ZMgQ2+fz2cOHD7d/8Ytf2I2NjfFuWp/yzjvv7PF36Zw5c2zbtu1IJGLfdNNNdmZmpu31eu2TTz7Zzs/Pj2+j+4C99eumTZu6/Bv2zjvvxLvpvdq+fl53NXToUPuuu+7q0TZKfGm83b003u4ZGm93D421u5/G291D4+3Y0Hg7NvrqeNuybdvuzlBeRERERERERERERKS/UE10EREREREREREREZEuKEQXEREREREREREREemCQnQRERERERERERERkS4oRBcRERERERERERER6YJCdBERERERERERERGRLihEFxERERERERERERHpgkJ0EREREREREREREZEuKEQXEREREREREREREemCQnQREelzLMvihRdeiHczRERERET6JY23RUQ6U4guIiIH5IorrsCyrN22008/Pd5NExERERHp8zTeFhHpfVzxboCIiPQ9p59+Oo888kinfV6vN06tERERERHpXzTeFhHpXTQTXUREDpjX6yUrK6vTNmDAAMCc+jlv3jzOOOMM/H4/w4cP55lnnun0+BUrVnDSSSfh9/tJS0vjyiuvpLa2ttMxDz/8MBMmTMDr9ZKdnc0111zT6f7S0lLOP/98EhISGDVqFC+99FJs37SIiIiISA/ReFtEpHdRiC4iIt3upptu4sILL+SLL77g0ksv5ZJLLmH16tUAhEIhZs+ezYABA1i8eDFPP/00b731VqdB+7x585g7dy5XXnklK1as4KWXXmLkyJGdXuPmm2/m4osvZvny5Zx55plceumllJeX9+j7FBERERGJB423RUR6lmXbth3vRoiISN9xxRVX8Nhjj+Hz+Trtv/HGG7nxxhuxLIurrrqKefPmRe+bMWMGRxxxBPfddx8PPvggP/3pT9m2bRuJiYkAvPrqq5xzzjkUFhaSmZlJbm4u3/rWt7j11lv32AbLsvjlL3/JLbfcApgPCklJSbz22muqFSkiIiIifZrG2yIivY9qoouIyAE78cQTOw3aAVJTU6PXjz766E73HX300SxbtgyA1atXM3ny5OiAHmDWrFlEIhHy8/OxLIvCwkJOPvnkvbbhsMMOi15PTEwkOTmZkpKS//YtiYiIiIj0Ghpvi4j0LgrRRUTkgCUmJu52umd38fv9+3Wc2+3udNuyLCKRSCyaJCIiIiLSozTeFhHpXVQTXUREut2iRYt2uz1u3DgAxo0bxxdffEEoFIre/+GHH+JwOBgzZgyBQIBhw4axYMGCHm2ziIiIiEhfofG2iEjP0kx0ERE5YI2NjRQVFXXa53K5SE9PB+Dpp59m2rRpHHPMMTz++ON8+umnPPTQQwBceuml/PrXv2bOnDn85je/YefOnVx77bVcfvnlZGZmAvCb3/yGq666ioyMDM444wxqamr48MMPufbaa3v2jYqIiIiIxIHG2yIivYtCdBEROWCvv/462dnZnfaNGTOGNWvWAHDzzTfz1FNP8f3vf5/s7GyefPJJxo8fD0BCQgJvvPEG1113HUceeSQJCQlceOGF/OlPf4o+15w5c2hoaOCuu+7if//3f0lPT+eiiy7quTcoIiIiIhJHGm+LiPQulm3bdrwbISIi/YdlWTz//POcd9558W6KiIiIiEi/o/G2iEjPU010EREREREREREREZEuKEQXEREREREREREREemCyrmIiIiIiIiIiIiIiHRBM9FFRERERERERERERLqgEF1EREREREREREREpAsK0UVEREREREREREREuqAQXURERERERERERESkCwrRRURERERERERERES6oBBdRERERERERERERKQLCtFFRERERERERERERLqgEF1EREREREREREREpAsK0UVEREREREREREREuvD/AY7CjCSGblQ7AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Test if advanced optimizers can handle bad initializations better\n", + "bad_initializers = {\n", + " 'Zeros': initializers.Zeros(),\n", + " 'Very Large (10.0)': initializers.TruncatedNormal(stddev=10.0)\n", + "}\n", + "\n", + "optimizers_to_test = {\n", + " 'SGD': 'sgd',\n", + " 'SGD + Momentum': 'sgd_momentum',\n", + " 'Adam': 'adam'\n", + "}\n", + "\n", + "results = {}\n", + "\n", + "for init_name, init in bad_initializers.items():\n", + " results[init_name] = {}\n", + " for opt_name, opt in optimizers_to_test.items():\n", + " print(f\"\\nTesting {init_name} with {opt_name}...\")\n", + "\n", + " model = create_model(init, activation='tanh', optimizer=opt, lr=0.01)\n", + " history = model.fit(X_train, y_train, epochs=15, batch_size=32, verbose=0)\n", + " results[init_name][opt_name] = history\n", + "\n", + " final_acc = history.history['accuracy'][-1]\n", + " print(f\"{init_name} + {opt_name} - Final accuracy: {final_acc:.4f}\")\n", + "\n", + "# Plot comparison\n", + "fig, axes = plt.subplots(1, 2, figsize=(15, 5))\n", + "\n", + "for i, (init_name, opt_histories) in enumerate(results.items()):\n", + " for opt_name, history in opt_histories.items():\n", + " axes[i].plot(history.history['loss'], label=opt_name)\n", + " axes[i].set_title(f'Initialization: {init_name}')\n", + " axes[i].set_xlabel('Epoch')\n", + " axes[i].set_ylabel('Loss')\n", + " axes[i].legend()\n", + " axes[i].grid(True)\n", + "\n", + "plt.tight_layout()\n", + "plt.show()" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "file_extension": ".py", + "kernelspec": { + "display_name": "dsi_participant", + "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.18" + }, + "mimetype": "text/x-python", + "name": "python", + "npconvert_exporter": "python", + "pygments_lexer": "ipython3", + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.12" - }, - "mimetype": "text/x-python", - "name": "python", - "npconvert_exporter": "python", - "pygments_lexer": "ipython3", - "toc": { - "base_numbering": 1, - "nav_menu": {}, - "number_sections": true, - "sideBar": true, - "skip_h1_title": false, - "title_cell": "Table of Contents", - "title_sidebar": "Contents", - "toc_cell": false, - "toc_position": {}, - "toc_section_display": true, - "toc_window_display": false }, - "version": 3 - }, - "nbformat": 4, - "nbformat_minor": 4 + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/01_materials/labs/lab_2.ipynb b/01_materials/labs/lab_2.ipynb index a45b46e9e..908ce40df 100644 --- a/01_materials/labs/lab_2.ipynb +++ b/01_materials/labs/lab_2.ipynb @@ -1,844 +1,1504 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Backpropagation in Multilayer Neural Networks\n", - "\n", - "While we will primarily be working with high-level, abstract toolkits like Keras in this course, understanding how backpropagation works is absolutely essential to using neural networks. \n", - "\n", - "In this exercise, we will build our own backpropagation algorithm - working through each step, to ensure that we can follow it." - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "lKU53B0OoVSw" + }, + "source": [ + "# Backpropagation in Multilayer Neural Networks\n", + "\n", + "While we will primarily be working with high-level, abstract toolkits like Keras in this course, understanding how backpropagation works is absolutely essential to using neural networks.\n", + "\n", + "In this exercise, we will build our own backpropagation algorithm - working through each step, to ensure that we can follow it." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "mHIWGcEcoVSx" + }, + "source": [ + "Just like in Lab 1, we'll be working with the MNIST dataset. We will load it and plot an example:" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "id": "Contyf4woVSy" + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.datasets import load_digits\n", + "\n", + "digits = load_digits()" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 314 + }, + "id": "60jEnXJYoVSy", + "outputId": "bbba085f-2a01-4b2e-9628-62780f732725" + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "sample_index = 45\n", + "plt.figure(figsize=(3, 3))\n", + "plt.imshow(digits.images[sample_index], cmap=plt.cm.gray_r,\n", + " interpolation='nearest')\n", + "plt.title(\"image label: %d\" % digits.target[sample_index]);" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "y7X0UUProVSy" + }, + "source": [ + "### Preprocessing\n", + "\n", + "Of course, we need to split our data into training and testing sets before we use it, just the same as in Lab 1:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "id": "y5j1zdj_oVSy" + }, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "data = np.asarray(digits.data, dtype='float32')\n", + "target = np.asarray(digits.target, dtype='int32')\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " data, target, test_size=0.15, random_state=37)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "H5OVLyPUoVSz" + }, + "source": [ + "# Numpy Implementation\n", + "\n", + "## a) Logistic Regression\n", + "\n", + "In this section we will implement a logistic regression model trainable with SGD using numpy. Here are the objectives:\n", + "\n", + "- Implement the softmax function $\\sigma(\\mathbf{x})_i = \\frac{e^{x_i}}{\\sum_{j=1}^n e^{x_j}}$;\n", + "- Implement the negative log likelihood function $NLL(Y_{true}, Y_{pred}) = - \\sum_{i=1}^{n}{y_{true, i} \\cdot \\log(y_{pred, i})}$;\n", + "- Train a logistic regression model on the MNIST dataset;\n", + "- Evaluate the model on the training and testing sets.\n", + "\n", + "Before we get there, let's write a function that one-hot encodes the class labels:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "id": "Au8IuMGIoVSz" + }, + "outputs": [], + "source": [ + "def one_hot(n_classes, y):\n", + " return np.eye(n_classes)[y]" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "j6wryjOsoVSz", + "outputId": "09560601-a0b0-47d5-ad41-56375282745b" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 1., 0., 0., 0., 0., 0., 0.])" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "one_hot(n_classes=10, y=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DSKojV37oVSz", + "outputId": "ccc05839-00bc-4ae8-fe0f-8e201a34a3ad" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],\n", + " [0., 0., 0., 0., 0., 0., 0., 0., 0., 1.],\n", + " [0., 1., 0., 0., 0., 0., 0., 0., 0., 0.]])" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "one_hot(n_classes=10, y=[0, 4, 9, 1])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "63279Ss_oVSz" + }, + "source": [ + "### The softmax function\n", + "\n", + "Now we will implement the softmax function. Recall that the softmax function is defined as follows:\n", + "\n", + "$$\n", + "softmax(\\mathbf{x}) = \\frac{1}{\\sum_{i=1}^{n}{e^{x_i}}}\n", + "\\cdot\n", + "\\begin{bmatrix}\n", + " e^{x_1}\\\\\\\\\n", + " e^{x_2}\\\\\\\\\n", + " \\vdots\\\\\\\\\n", + " e^{x_n}\n", + "\\end{bmatrix}\n", + "$$\n", + "\n", + "This is implemented for you using numpy - we want to be able to apply the softmax function to a batch of samples at once, so we will use numpy's vectorized operations to do so.\n", + "\n", + "Our method also handles _stability issues_ that can occur when the values in `X` are very large. We will subtract the maximum value from each row of `X` to avoid overflow in the exponentiation. This isn't part of the softmax function itself, but it's a useful trick to know about." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "id": "-6jxrvZmoVSz" + }, + "outputs": [], + "source": [ + "def softmax(X):\n", + " X_max = np.max(X, axis=-1, keepdims=True)\n", + " exp = np.exp(X - X_max) # Subtract the max to avoid overflow in the exponentiation\n", + " return exp / np.sum(exp, axis=-1, keepdims=True)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "euDuN38aoVSz" + }, + "source": [ + "Let's make sure that this works one vector at a time (and check that the components sum to one):" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Wrmw4WxLoVSz", + "outputId": "f12756eb-95f8-4c50-dbf6-c1d100c5e1e3" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[9.99662391e-01 3.35349373e-04 2.25956630e-06]\n" + ] + } + ], + "source": [ + "print(softmax([10, 2, -3]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "xXlUX9cWoVS0" + }, + "source": [ + "When we are using our model to make predictions, we will want to be able to make predictions for multiple samples at once.\n", + "Let's make sure that our implementation of softmax works for a batch of samples:" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "6264ID6doVS0", + "outputId": "8ed00a26-1fd3-44af-c14e-da3b06f196ba" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[[9.99662391e-01 3.35349373e-04 2.25956630e-06]\n", + " [2.47262316e-03 9.97527377e-01 1.38536042e-11]]\n" + ] + } + ], + "source": [ + "X = np.array([[10, 2, -3],\n", + " [-1, 5, -20]])\n", + "print(softmax(X))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "nAXqwIDaoVS0" + }, + "source": [ + "Probabilities should sum to 1:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ZvC-de4NoVS0", + "outputId": "e3795627-87ba-4e58-cdc2-024bd5ef4534" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0\n" + ] + } + ], + "source": [ + "print(np.sum(softmax([10, 2, -3])))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "9Y22eAJgoVS0", + "outputId": "37423d9e-358a-48c8-b4cc-12938bd7e43d" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "softmax of 2 vectors:\n", + "[[9.99662391e-01 3.35349373e-04 2.25956630e-06]\n", + " [2.47262316e-03 9.97527377e-01 1.38536042e-11]]\n" + ] + } + ], + "source": [ + "print(\"softmax of 2 vectors:\")\n", + "X = np.array([[10, 2, -3],\n", + " [-1, 5, -20]])\n", + "print(softmax(X))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "9i-nlgTeoVS0" + }, + "source": [ + "The sum of probabilities for each input vector of logits should some to 1:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "ffmD8ynKoVS1", + "outputId": "1388efbb-1084-4b87-b16c-0374b62bda08" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1. 1.]\n" + ] + } + ], + "source": [ + "print(np.sum(softmax(X), axis=1))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0Cd4Bt3KoVS1" + }, + "source": [ + "Now we will implement a function that, given the true one-hot encoded class `Y_true` and some predicted probabilities `Y_pred`, returns the negative log likelihood.\n", + "\n", + "Recall that the negative log likelihood is defined as follows:\n", + "\n", + "$$\n", + "NLL(Y_{true}, Y_{pred}) = - \\sum_{i=1}^{n}{y_{true, i} \\cdot \\log(y_{pred, i})}\n", + "$$\n", + "\n", + "For example, if we have $y_{true} = [1, 0, 0]$ and $y_{pred} = [0.99, 0.01, 0]$, then the negative log likelihood is $- \\log(0.99) \\approx 0.01$." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "F5ppyN2EoVS1", + "outputId": "c755ad8c-aaf5-4742-8d75-c11b394896bb" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.01005033585350145\n" + ] + } + ], + "source": [ + "def nll(Y_true, Y_pred):\n", + " Y_true = np.asarray(Y_true)\n", + " Y_pred = np.asarray(Y_pred)\n", + "\n", + " # Ensure Y_pred doesn't have zero probabilities to avoid log(0)\n", + " Y_pred = np.clip(Y_pred, 1e-15, 1 - 1e-15)\n", + "\n", + " # Calculate negative log likelihood\n", + " loss = -np.sum(Y_true * np.log(Y_pred))\n", + " return loss\n", + "\n", + "# Make sure that it works for a simple sample at a time\n", + "print(nll([1, 0, 0], [.99, 0.01, 0]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "0_IKvJ3joVS1" + }, + "source": [ + "We should see a very high value for this negative log likelihood, since the model is very confident that the third class is the correct one, but the true class is the first one:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "sCXcTW4ioVS1", + "outputId": "8188cffe-8d43-4e0f-824a-33eddae2b08a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.605170185988091\n" + ] + } + ], + "source": [ + "print(nll([1, 0, 0], [0.01, 0.01, .98]))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "VXJGUz1noVS1" + }, + "source": [ + "Make sure that your implementation can compute the average negative log likelihood of a group of predictions: `Y_pred` and `Y_true` can therefore be past as 2D arrays:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Ee8dE2FkoVS1", + "outputId": "d7e9bdd0-5f82-4f94-fc7e-0cc55f4492e1" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.010050335853503449\n" + ] + } + ], + "source": [ + "# Check that the average NLL of the following 3 almost perfect\n", + "# predictions is close to 0\n", + "Y_true = np.array([[0, 1, 0],\n", + " [1, 0, 0],\n", + " [0, 0, 1]])\n", + "\n", + "Y_pred = np.array([[0, 1, 0],\n", + " [.99, 0.01, 0],\n", + " [0, 0, 1]])\n", + "\n", + "print(nll(Y_true, Y_pred))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "GS52MKwyoVS1" + }, + "source": [ + "Now that we have our softmax and negative log likelihood functions, we can implement a logistic regression model.\n", + "In this section, we have built the model for you, but you will need to complete a few key parts.\n", + "\n", + "**YOUR TURN:**\n", + "\n", + "1. Implement the `forward` method of the `LogisticRegression` class. This method should take in a batch of samples `X` and return the predicted probabilities for each class. You should use the softmax function that we implemented earlier.\n", + "2. Implement the `loss` method of the `LogisticRegression` class. This method take in the samples `X` and the true values `y` and return the average negative log likelihood of the predictions." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "id": "UcMpgzSSoVS2" + }, + "outputs": [], + "source": [ + "class LogisticRegression:\n", + "\n", + " def __init__(self, input_size, output_size):\n", + " # Initialize the weights and biases with random numbers\n", + " self.W = np.random.uniform(size=(input_size, output_size),\n", + " high=0.1, low=-0.1)\n", + " self.b = np.random.uniform(size=output_size,\n", + " high=0.1, low=-0.1)\n", + "\n", + " # Store the input size and output size\n", + " self.output_size = output_size\n", + " self.input_size = input_size\n", + "\n", + " def forward(self, X):\n", + " # Compute the linear combination of the input and weights\n", + " Z = np.dot(X, self.W) + self.b\n", + " return softmax(Z)\n", + "\n", + " def predict(self, X):\n", + " # Return the most probable class for each sample in X\n", + " if len(X.shape) == 1:\n", + " return np.argmax(self.forward(X))\n", + " else:\n", + " return np.argmax(self.forward(X), axis=1)\n", + "\n", + " def loss(self, X, y):\n", + " # Compute the negative log likelihood over the data provided\n", + " y_onehot = one_hot(self.output_size, y.astype(int))\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)\n", + "\n", + " def grad_loss(self, X, y_true, y_pred):\n", + " # Compute the gradient of the loss with respect to W and b for a single sample (X, y_true)\n", + " # y_pred is the output of the forward pass\n", + "\n", + " # Gradient with respect to weights\n", + " grad_W = np.dot(X.T, (y_pred - y_true))\n", + "\n", + " # Gradient with respect to biases\n", + " grad_b = np.sum(y_pred - y_true, axis=0)\n", + "\n", + " return grad_W, grad_b\n", + "\n", + "# Raise an exception if you try to run this cell without having implemented the LogisticRegression class\n", + "model = LogisticRegression(input_size=64, output_size=10)\n", + "try:\n", + " assert(model.forward(np.zeros((1, 64))).shape == (1, 10))\n", + " assert(model.loss(np.zeros((1, 64)), np.zeros(1)) > 0)\n", + "except:\n", + " raise NotImplementedError(\"You need to correctly implement the LogisticRegression class.\")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "id": "yb4NQFEQoVS2" + }, + "outputs": [], + "source": [ + "# Build a model and test its forward inference\n", + "n_features = X_train.shape[1]\n", + "n_classes = len(np.unique(y_train))\n", + "lr = LogisticRegression(n_features, n_classes)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "HFgs44ldoVS2" + }, + "source": [ + "We can evaluate the model on an example, visualizing the prediction probabilities:" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 410 + }, + "id": "5F_1e9ZioVS2", + "outputId": "22ca1f08-f200-44f5-9106-42a4fc208a82" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGJCAYAAAD4084mAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVWhJREFUeJzt3XlcVGX///H3gDDghitrKO77TnKrmaYmmlp2t5iZ4q6FqXG3UbeiLaKVhqVpWkqbaVlZmUvq7XKblophlltu6W0imgmKBsmc3x/9mK8jgzp0mAF9PR+P83h4rrnOuT5zBs+Zz5zruo7FMAxDAAAAAPA3eXk6AAAAAADXB5ILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpIL/G0dO3ZUx44dPR1GkSrsezx8+LAsFoteeeUV02JZt26dLBaL1q1bZ9o+AaC4GThwoMqWLWvqPi0Wi0aNGnXVesnJybJYLDp8+LC97PLrQN75PTk5+ZrbnjBhgmsBm2DLli3y9fXVL7/84va2r2TgwIGKiIhwKDP7GJXU7ye//fabypQpo2XLlnk6lEIhuSjGLBbLNS18yYQrPv30U/Xp00c1a9ZU6dKlVa9ePf3rX//SmTNnPB0aUKL89NNPeuihhxQWFiar1arQ0FD169dPP/3009/a76RJk7RkyRJzgryKTZs2acKECfz/N8myZcs8kkBcybPPPqu+ffuqevXqng6lSOzatUsTJkxwSASLs5SUFPXs2VPBwcEqW7asmjZtqtdee025ubn2OpUrV9bQoUM1btw4D0ZaeKU8HQAK9t577zmsv/vuu1q1alW+8gYNGrgzrHy+/vprj7YP1wwfPlyhoaF66KGHVK1aNe3cuVMzZszQsmXLtH37dvn7+3s6RKDY+/TTT9W3b19VqlRJQ4YMUY0aNXT48GG9/fbbWrx4sRYuXKi77767UPueNGmS7r33XvXu3dvcoJ3YtGmTJk6cqIEDB6pChQpF3l5J0b9/fz3wwAOyWq0F1qlevbouXLggHx8fe9myZcs0c+ZMpwnGhQsXVKqUe792paamavXq1dq0aZNb2y2swhyjXbt2aeLEierYsWO+OyHF7ftJSkqK2rZtqzp16uipp55S6dKltXz5co0ZM0YHDhzQ9OnT7XVHjhyp1157Tf/5z3/UqVMnD0btOpKLYuyhhx5yWP/222+1atWqfOWXO3/+vEqXLl2UoTnw9fV1W1v4+xYvXpzvNnGrVq0UExOjDz74QEOHDvVMYEAJceDAAfXv3181a9bUhg0bVLVqVftrY8aMUfv27dW/f3/98MMPqlmzpgcjLV7++OMP+fr6ysur+Hea8Pb2lre39xXrWCwW+fn5XfM+Xalrlvnz56tatWr6xz/+Ydo+s7KyVKZMGdP2dymzj1Fx+37y5ptvSpI2bNigSpUqSZJGjBihDh06KDk52SG5aNCggRo3bqzk5OQSl1wU///huKKOHTuqcePGSklJ0a233qrSpUvrmWeekVRw38WIiAgNHDjQoezMmTMaO3aswsPDZbVaVbt2bU2ZMkU2m+2aYrj0y2remICPPvpIEydOVFhYmMqVK6d7771XGRkZys7O1tixYxUYGKiyZctq0KBBys7Odtjn/Pnz1alTJwUGBspqtaphw4aaNWtWvrZtNpsmTJig0NBQlS5dWrfddpt27dpl+nu8XE5OjsaPH69WrVopICBAZcqUUfv27bV27doCt3n11VdVvXp1+fv7q0OHDvrxxx/z1dmzZ4/uvfdeVapUSX5+foqMjNQXX3xx1XjOnz+vPXv26NSpU1et66z/ad4vrLt3777q9sCN7uWXX9b58+c1Z84ch8RCkqpUqaI333xTWVlZeumll+zlzvqXS9KECRNksVjs6xaLRVlZWXrnnXfsXV/zzmV5dffs2aP7779f5cuXV+XKlTVmzBj98ccf9n1caSzApdeFCRMm6IknnpAk1ahRw97elbqXXHrNadu2rfz9/VWjRg3Nnj3boV7edWDhwoX697//rbCwMJUuXVqZmZmSpI8//litWrWSv7+/qlSpooceekjHjh1z2ubBgwcVHR2tMmXKKDQ0VM8995wMw3Co88orr6ht27aqXLmy/P391apVKy1evLjA9/HBBx+oXr168vPzU6tWrbRhwwaH152Nubjc5cd54MCBmjlzpiTHbs15nF2Tjx07psGDBysoKEhWq1WNGjXSvHnz8rX1+uuvq1GjRipdurQqVqyoyMhILViwoMDY8ixZskSdOnVyiEP663tAz5499fXXX6t58+by8/NTw4YN9emnnzo9DuvXr9cjjzyiwMBA3XTTTfbXly9frvbt26tMmTIqV66cevTo4bRb4JIlS9S4cWP5+fmpcePG+uyzz5zGW9AxGjJkiEJDQ2W1WlWjRg09/PDDysnJUXJysu677z5J0m233Zavu7izMRfp6ekaMmSIgoKC5Ofnp2bNmumdd95xqHPpeMk5c+aoVq1aslqtuvnmm7V161aHun/++af27Nmj48ePO31Pl8rMzJSfn1++u4QhISFOew3cfvvt+vLLL/P9vRd33Lm4Dvz222/q3r27HnjgAT300EMKCgpyafvz58+rQ4cOOnbsmEaMGKFq1app06ZNio+P1/Hjx5WUlFSouBITE+Xv76+nn35a+/fv1+uvvy4fHx95eXnp999/14QJE/Ttt98qOTlZNWrU0Pjx4+3bzpo1S40aNdKdd96pUqVK6csvv9Qjjzwim82m2NhYe734+Hi99NJL6tWrl6Kjo7Vjxw5FR0c7XGiL4j1mZmbqrbfeUt++fTVs2DCdPXtWb7/9tqKjo7VlyxY1b97cof67776rs2fPKjY2Vn/88YemT5+uTp06aefOnfbP66efflK7du0UFhamp59+WmXKlNFHH32k3r1765NPPrliF4stW7botttuU0JCQqH6+6alpUn664sRgCv78ssvFRERofbt2zt9/dZbb1VERIS++uorl/f93nvvaejQoWrdurWGDx8uSapVq5ZDnfvvv18RERFKTEzUt99+q9dee02///673n33XZfa+uc//6l9+/bpww8/1Kuvvmr//395wnS533//XXfccYfuv/9+9e3bVx999JEefvhh+fr6avDgwQ51n3/+efn6+urxxx9Xdna2fH19lZycrEGDBunmm29WYmKiTpw4oenTp+ubb77R999/7/DFKzc3V926ddM//vEPvfTSS1qxYoUSEhJ08eJFPffcc/Z606dP15133ql+/fopJydHCxcu1H333aelS5eqR48eDjGtX79eixYt0ujRo2W1WvXGG2+oW7du2rJlixo3buzSMbzUiBEj9OuvvzrtvuzMiRMn9I9//MM+yLxq1apavny5hgwZoszMTI0dO1aSNHfuXI0ePVr33nuvPZH84Ycf9N133+nBBx8scP/Hjh3TkSNH1LJlS6ev//zzz+rTp49GjhypmJgYzZ8/X/fdd59WrFih22+/3aHuI488oqpVq2r8+PHKysqS9NffakxMjKKjozVlyhSdP39es2bN0i233KLvv//enkx//fXXuueee9SwYUMlJibqt99+06BBgxySlIL8+uuvat26tc6cOaPhw4erfv36OnbsmBYvXqzz58/r1ltv1ejRo/Xaa6/pmWeesXcTL6i7+IULF9SxY0ft379fo0aNUo0aNfTxxx9r4MCBOnPmjMaMGeNQf8GCBTp79qxGjBghi8Wil156Sf/85z918OBBe3e4Y8eOqUGDBoqJibnq4P6OHTtq0aJFGjFihOLi4uzdoj799FO9/PLL+eq3atVKr776qn766ae/9bfpdgZKjNjYWOPyj6xDhw6GJGP27Nn56ksyEhIS8pVXr17diImJsa8///zzRpkyZYx9+/Y51Hv66acNb29v48iRI1eMq0OHDkaHDh3s62vXrjUkGY0bNzZycnLs5X379jUsFovRvXt3h+3btGljVK9e3aHs/Pnz+dqJjo42atasaV9PS0szSpUqZfTu3duh3oQJEwxJRfoeL168aGRnZzvU+f33342goCBj8ODB9rJDhw4Zkgx/f3/jf//7n738u+++MyQZjz32mL2sc+fORpMmTYw//vjDXmaz2Yy2bdsaderUsZflHd+1a9fmK3P2eV+LIUOGGN7e3vmODwBHZ86cMSQZd9111xXr3XnnnYYkIzMz0zAMw4iJicl3njMMw0hISMh3Xi9TpozD+evyunfeeadD+SOPPGJIMnbs2GEYxv+dd+bPn59vH5efJ15++WVDknHo0KErvp88edecqVOn2suys7ON5s2bG4GBgfZzft45qWbNmg7n85ycHCMwMNBo3LixceHCBXv50qVLDUnG+PHj7WUxMTGGJOPRRx+1l9lsNqNHjx6Gr6+vcfLkSXv55deMnJwco3HjxkanTp3yvX9JxrZt2+xlv/zyi+Hn52fcfffd9rL58+fnOy6XXwecHWdn1+lL27702A8ZMsQICQkxTp065VDvgQceMAICAuzv6a677jIaNWrkdJ9Xsnr1akOS8eWXX+Z7rXr16oYk45NPPrGXZWRkGCEhIUaLFi3sZXnH4ZZbbjEuXrxoLz979qxRoUIFY9iwYQ77TUtLMwICAhzKmzdvboSEhBhnzpyxl3399deGpHz/Jy4/RgMGDDC8vLyMrVu35nsPNpvNMAzD+Pjjj/NdE/Nc/pklJSUZkoz333/fXpaTk2O0adPGKFu2rP3/a95nW7lyZeP06dP2up9//nm+Y5pX19n/2ctdvHjRGDVqlOHj42P/W/T29jZmzZrltP6mTZsMScaiRYuuuu/ihG5R1wGr1apBgwYVevuPP/5Y7du3V8WKFXXq1Cn70qVLF+Xm5ua7XXytBgwY4DDQLSoqSoZh5PtlKyoqSkePHtXFixftZZfeHszIyNCpU6fUoUMHHTx4UBkZGZKkNWvW6OLFi3rkkUcc9vfoo48W+Xv09va29+W02Ww6ffq0Ll68qMjISG3fvj1f/d69eyssLMy+3rp1a0VFRdmnmTt9+rT+85//6P7779fZs2ft8f3222+Kjo7Wzz//XGCXAemvX0MMwyjUXYsFCxbo7bff1r/+9S/VqVPH5e2BG8nZs2clSeXKlbtivbzX87oBmenSu7fS/53z3DVtZalSpTRixAj7uq+vr0aMGKH09HSlpKQ41I2JiXE4n2/btk3p6el65JFHHPrX9+jRQ/Xr13d6t+fSqWPzfuXPycnR6tWr7eWXtvH7778rIyND7du3d3o+btOmjVq1amVfr1atmu666y6tXLnSYcaeomQYhj755BP16tVLhmE4XJeio6OVkZFhj71ChQr63//+l687ztX89ttvkqSKFSs6fT00NNThjnj58uU1YMAAff/99/a72XmGDRvmMAZl1apVOnPmjPr27esQu7e3t6KiouxdhI8fP67U1FTFxMQoICDAvv3tt9+uhg0bXjF+m82mJUuWqFevXoqMjMz3+uVdva7FsmXLFBwcrL59+9rLfHx8NHr0aJ07d07r1693qN+nTx+H45d3t/LgwYP2soiICBmGcU1TEnt7e6tWrVqKjo7WO++8o0WLFqlXr1569NFHnc4Ql9f2tXR5Lk7oFnUdCAsL+1uDln7++Wf98MMPBd4KT09PL9R+q1Wr5rCed2IJDw/PV26z2ZSRkaHKlStLkr755hslJCRo8+bNOn/+vEP9jIwMBQQE2Ofsrl27tsPrlSpVyncyLYr3+M4772jq1Knas2eP/vzzT3t5jRo18tV19qW9bt26+uijjyRJ+/fvl2EYGjduXIFTz6WnpzskKGb473//qyFDhig6OlovvviiqfsGrkd5SUNeklGQa01CCuPy80mtWrXk5eXltqk4Q0ND8w3orVu3rqS/+qpfOnj48vNh3nm7Xr16+fZbv359bdy40aHMy8sr36D4S9vKs3TpUr3wwgtKTU11GMPn7AtoQefj8+fP6+TJkwoODs73utlOnjypM2fOaM6cOZozZ47TOnnXpaeeekqrV69W69atVbt2bXXt2lUPPvig2rVrd01tGQX0169du3a+43Ppsb30OFz+Of7888+SVOBA4/Lly0v6v8/b2TGvV6+e0+Qvz8mTJ5WZmWlqd6BffvlFderUyTepQF43qsufBXL595i87xa///57odqfPHmypk+frp9//tn+DJf7779ft912m2JjY9WzZ0+H2bLyPrvCJFKeRHJxHXB16tDLf5mx2Wy6/fbb9eSTTzqtn3eycVVBM20UVJ73n+jAgQPq3Lmz6tevr2nTpik8PFy+vr5atmyZXn311UINwDb7Pb7//vsaOHCgevfurSeeeEKBgYHy9vZWYmKiDhw4UKj4JOnxxx9XdHS00zqXJ1F/144dO3TnnXeqcePGWrx4sdunSARKooCAAIWEhOiHH364Yr0ffvhBYWFh9i9ZBX05MOOX8sv3XZRtucodU1v/97//1Z133qlbb71Vb7zxhkJCQuTj46P58+df06BnT8g75z/00EOKiYlxWqdp06aS/vriu3fvXi1dulQrVqzQJ598ojfeeEPjx4/XxIkTC2wj78e6wn4RvtTln2Ne/O+9957TZOx6uZ5c7fuKq9544w116tQp38Mh77zzTsXFxenw4cMO1/q8z66kjYe8Pj59OFWxYsV8D0bKycnJN6NBrVq1dO7cOXXp0sWN0RXsyy+/VHZ2tr744guHXw0un4kp74FA+/fvd/hV5bfffst3MjX7PS5evFg1a9bUp59+6nAhT0hIcFo/71eeS+3bt88+4C3vlzkfHx+3fA4HDhxQt27dFBgYqGXLlpn+FFzgetazZ0/NnTtXGzdu1C233JLv9f/+9786fPiwQ9chZ+djKf8vpdLVf6X8+eefHc55+/fvl81ms59P8n5dvby9wrTlzK+//ppvOtJ9+/ZJktMZsS6Vd97eu3dvvl+99+7dm+9BbzabTQcPHnT4Aejytj755BP5+flp5cqVDs+lmD9/vtMYCjofly5d+qqD2a/mWo9n1apVVa5cOeXm5l7TOb9MmTLq06eP+vTpo5ycHP3zn//Uiy++qPj4+AKnb61fv74k6dChQ05fz7tjfmnM1/o55k0yEBgYeMX48z5PZ8d87969V2yjatWqKl++vNOZFS/lyt9w9erV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AABTkFwAAAAAMAXJBQAAAABTkFwAAAAAMAXJBQAAAABTlPJ0AMVNamqqp0Nw6vPPP/d0CAUaM2aMp0Nwavr06Z4OoUDr1q3zdAgF6t27t6dDAAAAJRR3LgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYwuXkYsOGDerVq5dCQ0NlsVi0ZMmSIggLAAAAQEnjcnKRlZWlZs2aaebMmUURDwAAAIASqpSrG3Tv3l3du3e/5vrZ2dnKzs62r2dmZrraJAAAAIASoMjHXCQmJiogIMC+hIeHF3WTAAAAADygyJOL+Ph4ZWRk2JejR48WdZMAAAAAPMDlblGuslqtslqtRd0MAAAAAA9jKloAAAAApiC5AAAAAGAKl7tFnTt3Tvv377evHzp0SKmpqapUqZKqVatmanAAAAAASg6Xk4tt27bptttus6/HxcVJkmJiYpScnGxaYAAAAABKFpeTi44dO8owjKKIBQAAAEAJxpgLAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpILAEChzJw5UxEREfLz81NUVJS2bNlyxfpJSUmqV6+e/P39FR4erscee0x//PGHm6IFALgDyQUAwGWLFi1SXFycEhIStH37djVr1kzR0dFKT093Wn/BggV6+umnlZCQoN27d+vtt9/WokWL9Mwzz7g5cgBAUSK5AAC4bNq0aRo2bJgGDRqkhg0bavbs2SpdurTmzZvntP6mTZvUrl07Pfjgg4qIiFDXrl3Vt2/fq97tAACULCQXAACX5OTkKCUlRV26dLGXeXl5qUuXLtq8ebPTbdq2bauUlBR7MnHw4EEtW7ZMd9xxR4HtZGdnKzMz02EBABRvLj9EDwBwYzt16pRyc3MVFBTkUB4UFKQ9e/Y43ebBBx/UqVOndMstt8gwDF28eFEjR468YreoxMRETZw40dTYAQBFizsXAIAit27dOk2aNElvvPGGtm/frk8//VRfffWVnn/++QK3iY+PV0ZGhn05evSoGyMGABQGdy4AAC6pUqWKvL29deLECYfyEydOKDg42Ok248aNU//+/TV06FBJUpMmTZSVlaXhw4fr2WeflZdX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5huVL19eMTEx7nxbgClILgAAQLHi6kPt3O3xxx9XTEyMGjZsqAsXLmj+/PlO60VHR2vcuHF68skn9ccff2jw4MEaMGCAdu7caa/z/PPPq2rVqkpMTNTBgwdVoUIFtWzZUs8884y73g5gKpILAAAAF9StW1ebN292KBs4cKDTuhMnTtTEiRML3JfFYtGYMWM0ZswYM0MEPIaH6AEAAAAwBckFAAAAAFOQXAAAAAAwBckFAAAAAFOQXAAAAAAwBckFAAAAAFOQXAAAAAAwBckFAAAAAFOQXAAAAAAwBckFAABAMRUREaGkpCT7usVi0ZIlS/7WPs3YB1CQUp4OAAAAwIHF4t72DMO97f0Nx48fV8WKFa+p7oQJE7RkyRKlpqYWeh+Aq0guAAAAilBOTo58fX1N2VdwcHCx2AdQEJe6RUVERMhiseRbYmNjiyo+AACAYqVjx44aNWqURo0apYCAAFWpUkXjxo2T8f/vgEREROj555/XgAEDVL58eQ0fPlyStHHjRrVv317+/v4KDw/X6NGjlZWVZd9venq6evXqJX9/f9WoUUMffPBBvrYv79L0v//9T3379lWlSpVUpkwZRUZG6rvvvlNycrImTpyoHTt22L+vJScnO93Hzp071alTJ/n7+6ty5coaPny4zp07Z3994MCB6t27t1555RWFhISocuXKio2N1Z9//mniUcX1wqXkYuvWrTp+/Lh9WbVqlSTpvvvuK5LgAAAAiqN33nlHpUqV0pYtWzR9+nRNmzZNb731lv31V155Rc2aNdP333+vcePG6cCBA+rWrZvuuece/fDDD1q0aJE2btyoUaNG2bcZOHCgjh49qrVr12rx4sV64403lJ6eXmAM586dU4cOHXTs2DF98cUX2rFjh5588knZbDb16dNH//rXv9SoUSP797Y+ffrk20dWVpaio6NVsWJFbd26VR9//LFWr17tEJckrV27VgcOHNDatWv1zjvvKDk52Z6sAJdyqVtU1apVHdYnT56sWrVqqUOHDgVuk52drezsbPt6ZmamiyECAAAUL+Hh4Xr11VdlsVhUr1497dy5U6+++qqGDRsmSerUqZP+9a9/2esPHTpU/fr109ixYyVJderU0WuvvaYOHTpo1qxZOnLkiJYvX64tW7bo5ptvliS9/fbbatCgQYExLFiwQCdPntTWrVtVqVIlSVLt2rXtr5ctW1alSpW6YjeoBQsW6I8//tC7776rMmXKSJJmzJihXr16acqUKQoKCpIkVaxYUTNmzJC3t7fq16+vHj16aM2aNfb3C+Qp9GxROTk5ev/99zV48GBZrjDwKjExUQEBAfYlPDy8sE0CAAAUC//4xz8cvv+0adNGP//8s3JzcyVJkZGRDvV37Nih5ORklS1b1r5ER0fLZrPp0KFD2r17t0qVKqVWrVrZt6lfv74qVKhQYAypqalq0aKFPbEojN27d6tZs2b2xEKS2rVrJ5vNpr1799rLGjVqJG9vb/t6SEjIFe+q4MZV6AHdS5Ys0ZkzZzRw4MAr1ouPj1dcXJx9PTMzkwQDAABc1y79si791YVpxIgRGj16dL661apV0759+1xuw9/fv9DxucrHx8dh3WKxyGazua19lByFTi7efvttde/eXaGhoVesZ7VaZbVaC9sMAABAsfPdd985rH/77beqU6eOw6/7l2rZsqV27drl0G3pUvXr19fFixeVkpJi7xa1d+9enTlzpsAYmjZtqrfeekunT592evfC19fXfielIA0aNFBycrKysrLsCdE333wjLy8v1atX74rbAs4UqlvUL7/8otWrV2vo0KFmxwMAAFDsHTlyRHFxcdq7d68+/PBDvf766xozZkyB9Z966ilt2rRJo0aNUmpqqn7++Wd9/vnn9oHT9erVU7du3TRixAh99913SklJ0dChQ694d6Jv374KDg5W79699c033+jgwYP65JNPtHnzZkl/zVp16NAhpaam6tSpUw5jYPP069dPfn5+iomJ0Y8//qi1a9fq0UcfVf/+/e3jLQBXFCq5mD9/vgIDA9WjRw+z4wEAADc6w3DvUggDBgzQhQsX1Lp1a8XGxmrMmDH2KWedadq0qdavX699+/apffv2atGihcaPH+/QA2T+/PkKDQ1Vhw4d9M9//lPDhw9XYGBggfv09fXV119/rcDAQN1xxx1q0qSJJk+ebL97cs8996hbt2667bbbVLVqVX344Yf59lG6dGmtXLlSp0+f1s0336x7771XnTt31owZMwp1XACXu0XZbDbNnz9fMTExKlWKZ/ABAIAbj4+Pj5KSkjRr1qx8rx0+fNjpNjfffLO+/vrrAvcZHByspUuXOpT179/fYd24LBmqXr26Fi9e7HR/VqvV6WuX76NJkyb6z3/+U2BczqacTUpK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slgsSk1NleTYLWrdunUaNGiQMjIy7HdKJkyYUGBMX375pW6++Wb5+fmpSpUquvvuuwusO23aNDVp0kRlypRReHi4HnnkEZ07d87++i+//KJevXqpYsWKKlOmjBo1aqRly5ZJkn7//Xf169dPVatWlb+/v+rUqaP58+cX6jgCV1PK0wEAAAB4QqdOndSsWTN9+umnGjp0aL7XMzMz1atXL91xxx1asGCBfvnlF40dO7bA/bVt21ZJSUkaP3689u7dK0kqW7as07pfffWV7r77bj377LN69913lZOTY08GnPHy8tJrr72mGjVq6ODBg3rkkUf05JNP6o033pAkxcbGKicnRxs2bFCZMmW0a9cue9vjxo3Trl27tHz5clWpUkX79+/XhQsXrvUwAS4huQAAADes+vXr64cffnD62oIFC2SxWDR37lz5+fmpYcOGOnbsmIYNG+a0vq+vrwICAmSxWBQcHHzFdl988UU98MADmjhxor2sWbNmBda/NKmJiIjQCy+8oJEjR9qTiyNHjuiee+5RkyZNJEk1a9a01z9y5IhatGihyMhI+/ZAUaFbFAAAuGEZhlHgeIm9e/eqadOm8vPzs5e1bt3alHZTU1PVuXPna66/evVqde7cWWFhYSpXrpz69++v3377TefPn5ckjR49Wi+88ILatWunhIQEh4Tp4Ycf1sKFC9W8eXM9+eST2rRpkynvAXCG5AIAANywdu/erRo1ari9XX9//2uue/jwYfXs2VNNmzbVJ598opSUFM2cOVOSlJOTI0kaOnSoDh48qP79+2vnzp2KjIzU66+/Lknq3r27fvnlFz322GP69ddf1blzZz3++OPmvylAJBcAAOAG9Z///Ec7d+7UPffc4/T1evXqaefOncrOzraXbd269Yr79PX1VW5u7lXbbtq0qdasWXNNcaakpMhms2nq1Kn6xz/+obp16+rXX3/NVy88PFwjR47Up59+qn/961+aO3eu/bWqVasqJiZG77//vpKSkjRnzpxrahtwFckFAAC47mVnZystLU3Hjh3T9u3bNWnSJN11113q2bOnBgwY4HSbBx98UDabTcOHD9fu3bu1cuVKvfLKK5JUYFeqiIgInTt3TmvWrNGpU6fs3ZYul5CQoA8//FAJCQnavXu3du7cqSlTpjitW7t2bf355596/fXXdfDgQb333nuaPXu2Q52xY8dq5cqVOnTokLZv3661a9eqQYMGkqTx48fr888/1/79+/XTTz9p6dKl9tcAs5FcAACA696KFSsUEhKiiIgIdevWTWvXrtVrr72mzz//XN7e3k63KV++vL788kulpqaqefPmevbZZzV+/HhJchiHcam2bdtq5MiR6tOnj6pWraqXXnrJab2OHTvq448/1hdffKHmzZurU6dO2rJli9O6zZo107Rp0zRlyhQ1btxYH3zwgRITEx3q5ObmKjY2Vg0aNFC3bt1Ut25d+2BvX19fxcfHq2nTprr11lvl7e2thQsXXtNxA1xlMQzD8HQQAAAAJcEHH3xgf5aFK+MmgBsFU9ECAAAU4N1331XNmjUVFhamHTt26KmnntL9999PYgEUgOQCAACgAGlpaRo/frzS0tIUEhKi++67Ty+++KKnwwKKLbpFAQAAADAFA7oBAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIApSC4AAAAAmILkAgAAAIAp/h+zw22JVyvknAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def plot_prediction(model, sample_idx=0, classes=range(10)):\n", + " fig, (ax0, ax1) = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))\n", + "\n", + " ax0.imshow(X_test[sample_idx:sample_idx+1].reshape(8, 8),\n", + " cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax0.set_title(\"True image label: %d\" % y_test[sample_idx]);\n", + "\n", + "\n", + " ax1.bar(classes, one_hot(len(classes), y_test[sample_idx]), label='true')\n", + " ax1.bar(classes, model.forward(X_test[sample_idx]), label='prediction', color=\"red\")\n", + " ax1.set_xticks(classes)\n", + " prediction = model.predict(X_test[sample_idx])\n", + " ax1.set_title('Output probabilities (prediction: %d)'\n", + " % prediction)\n", + " ax1.set_xlabel('Digit class')\n", + " ax1.legend()\n", + "\n", + "plot_prediction(lr, sample_idx=0)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "JqHb44WUoVS2" + }, + "source": [ + "Now it's time to start training! We will train for a single epoch, and then evaluate the model on the training and testing sets. Read through the following and make sure that you understand what we are doing here." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3yTa6u3-oVS2", + "outputId": "0428dbb8-cff7-4c50-b7b5-29996ab3105c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average NLL over the last 100 samples at step 100: 327\n", + "Average NLL over the last 100 samples at step 200: 341\n", + "Average NLL over the last 100 samples at step 300: 310\n", + "Average NLL over the last 100 samples at step 400: 82\n", + "Average NLL over the last 100 samples at step 500: 165\n", + "Average NLL over the last 100 samples at step 600: 73\n", + "Average NLL over the last 100 samples at step 700: 45\n", + "Average NLL over the last 100 samples at step 800: 70\n", + "Average NLL over the last 100 samples at step 900: 156\n", + "Average NLL over the last 100 samples at step 1000: 294\n", + "Average NLL over the last 100 samples at step 1100: 79\n", + "Average NLL over the last 100 samples at step 1200: 109\n", + "Average NLL over the last 100 samples at step 1300: 114\n", + "Average NLL over the last 100 samples at step 1400: 66\n", + "Average NLL over the last 100 samples at step 1500: 124\n" + ] + } + ], + "source": [ + "lr = LogisticRegression(input_size=X_train.shape[1], output_size=10)\n", + "\n", + "learning_rate = 0.01\n", + "\n", + "for i in range(len(X_train)):\n", + " # Get the current sample and corresponding label\n", + " x = X_train[i:i+1] # Reshape to keep the batch dimension\n", + " y = y_train[i:i+1] # Reshape to keep the batch dimension\n", + "\n", + " # Compute the forward pass and the gradient of the loss with respect to W and b\n", + " y_pred = lr.forward(x)\n", + " grad_W, grad_b = lr.grad_loss(x, one_hot(lr.output_size, y), y_pred)\n", + "\n", + " # Update the weights and biases\n", + " lr.W -= learning_rate * grad_W\n", + " lr.b -= learning_rate * grad_b\n", + "\n", + " # Print the average negative log likelihood every 100 steps (avoid empty slice at i==0)\n", + " if i > 0 and i % 100 == 0:\n", + " avg_nll = lr.loss(X_train[max(0, i-100):i], y_train[max(0, i-100):i])\n", + " print(\"Average NLL over the last 100 samples at step %d: %0.f\" % (i, avg_nll))\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "l2x4ZJyHoVS2" + }, + "source": [ + "Evaluate the trained model on the first example:" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 410 + }, + "id": "_qNOrmAhoVS2", + "outputId": "238bb61b-d14f-4e7e-a923-91abe048bb40" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGJCAYAAAD4084mAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVR1JREFUeJzt3Xl8TGf///H3ZJvEFlv2htj3PeUOVYoKRaurqhJ7l7gtubulvSvcWqF3q9FSSotuSquttmopbvR20yIapbbaFbFUJYQmZM7vj/4yXyMTTJzMJPp6Ph7n8XCuuc65PnMmzpnPnOu6jsUwDEMAAAAAcIO8PB0AAAAAgJsDyQUAAAAAU5BcAAAAADAFyQUAAAAAU5BcAAAAADAFyQUAAAAAU5BcAAAAADAFyQUAAAAAU5BcAAAAADAFyQVuWPv27dW+fXtPh1GkCvseDxw4IIvFoldffdW0WFavXi2LxaLVq1ebtk8AKG769++vMmXKmLpPi8WiYcOGXbPenDlzZLFYdODAAXvZldeBvPP7nDlzrrvtMWPGuBawCTZs2CA/Pz8dPHjQ7W1fTf/+/RUVFeVQZvYxKqnfTy5evKjIyEi99dZbng6lUEguijGLxXJdC18y4YrPP/9cvXr1UvXq1VWqVCnVqVNH//jHP3TmzBlPhwaUKD///LMeffRRRUREyGq1Kjw8XH369NHPP/98Q/sdP368Fi5caE6Q17Bu3TqNGTOG//8mWbx4sUcSiKt54YUX1Lt3b1WtWtXToRSJ7du3a8yYMQ6JYHG1cuVKDRw4ULVr11apUqVUvXp1DR48WMeOHXOo5+vrq4SEBL388sv6448/PBRt4fl4OgAU7IMPPnBYf//997V8+fJ85fXq1XNnWPl8++23Hm0frhk6dKjCw8P16KOPqkqVKtq6daumTJmixYsXa/PmzQoICPB0iECx9/nnn6t3796qWLGiBg0apGrVqunAgQN69913tWDBAs2bN0/33ntvofY9fvx4PfDAA+rZs6e5QTuxbt06jR07Vv3791f58uWLvL2Som/fvnr44YdltVoLrFO1alVduHBBvr6+9rLFixdr6tSpThOMCxcuyMfHvV+70tLStGLFCq1bt86t7RZWYY7R9u3bNXbsWLVv3z7fnZDi9v3k2Wef1enTp/Xggw+qVq1a2rdvn6ZMmaJFixYpLS1NoaGh9roDBgzQc889p7lz52rgwIEejNp1JBfF2KOPPuqw/v3332v58uX5yq90/vx5lSpVqihDc+Dn5+e2tnDjFixYkO82cYsWLRQXF6ePPvpIgwcP9kxgQAmxd+9e9e3bV9WrV9d3332noKAg+2sjRoxQ27Zt1bdvX/3000+qXr26ByMtXv744w/5+fnJy6v4d5rw9vaWt7f3VetYLBb5+/tf9z5dqWuW2bNnq0qVKvrb3/5m2j6zsrJUunRp0/Z3ObOPUXH7fjJp0iTddtttDv8HunTponbt2mnKlCl66aWX7OXly5dX586dNWfOnBKXXBT//+G4qvbt26thw4ZKTU3V7bffrlKlSun555+XVHDfxaioKPXv39+h7MyZMxo5cqQiIyNltVpVs2ZNTZw4UTab7bpiuPzLat6YgE8++URjx45VRESEypYtqwceeEAZGRnKzs7WyJEjFRwcrDJlymjAgAHKzs522Ofs2bPVoUMHBQcHy2q1qn79+po2bVq+tm02m8aMGaPw8HCVKlVKd9xxh7Zv3276e7xSTk6ORo8erRYtWigwMFClS5dW27ZttWrVqgK3ef3111W1alUFBASoXbt22rZtW746O3fu1AMPPKCKFSvK399f0dHR+uqrr64Zz/nz57Vz506dOnXqmnWd9T/N+4V1x44d19we+Kv797//rfPnz2vGjBkOiYUkVa5cWW+//baysrL0yiuv2Mud9S+XpDFjxshisdjXLRaLsrKy9N5779m7vuady/Lq7ty5Uw899JDKlSunSpUqacSIEQ5dJ642FuDy68KYMWP09NNPS5KqVatmb+9q3Usuv+a0bt1aAQEBqlatmqZPn+5QL+86MG/ePP3zn/9URESESpUqpczMTEnSp59+qhYtWiggIECVK1fWo48+qiNHjjhtc9++fYqNjVXp0qUVHh6uf/3rXzIMw6HOq6++qtatW6tSpUoKCAhQixYttGDBggLfx0cffaQ6derI399fLVq00HfffefwurMxF1e68jj3799fU6dOleTYrTmPs2vykSNHNHDgQIWEhMhqtapBgwaaNWtWvrbefPNNNWjQQKVKlVKFChUUHR2tuXPnFhhbnoULF6pDhw4OcUh/fg/o3r27vv32WzVt2lT+/v6qX7++Pv/8c6fHYc2aNXryyScVHBysW265xf76kiVL1LZtW5UuXVply5ZVt27dnHYLXLhwoRo2bCh/f381bNhQX3zxhdN4CzpGgwYNUnh4uKxWq6pVq6YnnnhCOTk5mjNnjh588EFJ0h133JGvu7izMRcnTpzQoEGDFBISIn9/fzVp0kTvvfeeQ53Lx0vOmDFDNWrUkNVq1a233qqNGzc61L148aJ27tyZr2uTM7fffnu+5Pr2229XxYoVnV5/77zzTq1du1anT5++5r6LE+5c3AR+++03de3aVQ8//LAeffRRhYSEuLT9+fPn1a5dOx05ckSPPfaYqlSponXr1ikxMVHHjh1TSkpKoeJKTk5WQECAnnvuOe3Zs0dvvvmmfH195eXlpd9//11jxozR999/rzlz5qhatWoaPXq0fdtp06apQYMGuvvuu+Xj46Ovv/5aTz75pGw2m+Lj4+31EhMT9corr6hHjx6KjY3Vli1bFBsbm6+PotnvMTMzU++884569+6tIUOG6OzZs3r33XcVGxurDRs2qGnTpg7133//fZ09e1bx8fH6448/NHnyZHXo0EFbt261f14///yz2rRpo4iICD333HMqXbq0PvnkE/Xs2VOfffbZVbtYbNiwQXfccYeSkpIK1d83PT1d0p9fjABc3ddff62oqCi1bdvW6eu33367oqKi9M0337i87w8++ECDBw9Wy5YtNXToUElSjRo1HOo89NBDioqKUnJysr7//nu98cYb+v333/X++++71NZ9992n3bt36+OPP9brr79u//9/ZcJ0pd9//1133XWXHnroIfXu3VuffPKJnnjiCfn5+eX7hXXcuHHy8/PTU089pezsbPn5+WnOnDkaMGCAbr31ViUnJ+v48eOaPHmy/ve//+nHH3906J6Vm5urLl266G9/+5teeeUVLV26VElJSbp06ZL+9a9/2etNnjxZd999t/r06aOcnBzNmzdPDz74oBYtWqRu3bo5xLRmzRrNnz9fw4cPl9Vq1VtvvaUuXbpow4YNatiwoUvH8HKPPfaYjh496rT7sjPHjx/X3/72N/sg86CgIC1ZskSDBg1SZmamRo4cKUmaOXOmhg8frgceeMCeSP7000/64Ycf9MgjjxS4/yNHjujQoUNq3ry509d/+eUX9erVS48//rji4uI0e/ZsPfjgg1q6dKnuvPNOh7pPPvmkgoKCNHr0aGVlZUn68281Li5OsbGxmjhxos6fP69p06bptttu048/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M2bMcFon77r07LPPasWKFWrZsqVq1qypzp0765FHHlGbNm2uqy3jivEpeWrWrJnv+Fx+bC8/Dld+jr/88oskOf1CLP2ZqEj/93k7O+Z16tRxmvzlOXnypDIzM2+oq9qVDh48qFq1auUb95DXjerKZ4Fc+T0m77vF77//fsOx7Ny5U/fee68aNmyod955x2mdvM+uMImUJ5Fc3ARcnTr0yl9mbDab7rzzTj3zzDNO6+edbFxV0EwbBZXn/Sfau3evOnbsqLp162rSpEmKjIyUn5+fFi9erNdff71QA7DNfo8ffvih+vfvr549e+rpp59WcHCwvL29lZycrL179xYqPkl66qmnFBsb67TOlUnUjdqyZYvuvvtuNWzYUAsWLHD7FIlASRQYGKiwsDD99NNPV633008/KSIiwv4lq6AvB2b8Un7lvouyLVe5Y2rr//73v7r77rt1++2366233lJYWJh8fX01e/bs6xr07Al55/xHH31UcXFxTus0btxY0p9ffHft2qVFixZp6dKl+uyzz/TWW29p9OjRGjt2bIFt5P1YZ8YX4Ss/x7z4P/jgA6fJ2M1yPbnW95XCOnz4sDp37qzAwEAtXry4wB8h8j67kjYe8ub49OFUhQoV8j0YKScnJ9+MBjVq1NC5c+fUqVMnN0ZXsK+//lrZ2dn66quvHH41uHImprwHAu3Zs8fhV5Xffvst38nU7Pe4YMECVa9eXZ9//rnDhTwpKclp/bxfeS63e/du+4C3vF/mfH193fI57N27V126dFFwcLAWL15s+lNwgZtZ9+7dNXPmTK1du1a33XZbvtf/+9//6sCBAw5dh5ydj6X8v5RK1/6V8pdffnE45+3Zs0c2m81+Psn7dfXK9grTljNHjx7NNx3p7t27JcnpjFiXyztv79q1K9+v3rt27cr3oDebzaZ9+/Y5/AB0ZVufffaZ/P39tWzZMofnUsyePdtpDAWdj0uVKnXNwezXcr3HMygoSGXLllVubu51nfNLly6tXr16qVevXsrJydF9992nl19+WYmJiQVO31q3bl1J0v79+52+nnfH/PKYr/dzzJtkIDg4+Krx532ezo75rl27rtpGUFCQypUr53Rmxcu58jdctWpV/fTTT7LZbA53L3bu3OkQb1H67bff1LlzZ2VnZ2vlypUKCwsrsG7eZ+fp55m5ijEXN7EaNWrkG0swY8aMfL9ePfTQQ1q/fr2WLVuWbx9nzpxxGAvhDnm/FFz+y0BGRka+C0XHjh3l4+OTb4raKVOm5Nun2e/RWYw//PCD1q9f77T+woULHcZMbNiwQT/88IO6du0q6c8TdPv27fX22287nc7u5MmTV43Hlalo09PT1blzZ3l5eWnZsmU3fDEF/mqefvppBQQE6LHHHrP3a89z+vRpPf744ypVqpR9mlfpz/NxRkaGwx2PY8eOOZ2Ss3Tp0ld9YnbedKd53nzzTUmyn0/KlSunypUr5zv/v/XWW07bkvInIldz6dIlvf322/b1nJwcvf322woKCnIYy+BMdHS0goODNX36dIfuS0uWLNGOHTvyzewkOZ7TDcPQlClT5Ovrq44dO0r683xssVgcrm0HDhwo8Cnn69evd+iOc/jwYX355Zfq3LnzNZ9tcS3Xezy9vb11//3367PPPnP65fnyc/6Vf2N+fn6qX7++DMNw6JJ7pYiICEVGRmrTpk1OXz969KjD319mZqbef/99NW3a9Jpdw2JjY1WuXDmNHz/eaQx58YeFhalp06Z677337OMlpT/HbGzfvv2qbXh5ealnz576+uuvnb6HvOuvK3/Dd911l9LT0zV//nx72aVLl/Tmm2+qTJkyateu3TX3cSVXpqLNysrSXXfdpSNHjmjx4sXXHOeYmpoqi8WimJgYl+PyJO5c3MQGDx6sxx9/XPfff7/uvPNObdmyRcuWLct3e+3pp5/WV199pe7du6t///5q0aKFsrKytHXrVi1YsEAHDhxw6y25zp07y8/PTz169NBjjz2mc+fOaebMmQoODnb4zxsSEqIRI0botdde0913360uXbpoy5YtWrJkiSpXruzwa4bZ77F79+76/PPPde+996pbt27av3+/pk+frvr16+vcuXP56tesWVO33XabnnjiCWVnZyslJUWVKlVy6KY1depU3XbbbWrUqJGGDBmi6tWr6/jx41q/fr1+/fVXbdmypcB4XJmKtkuXLtq3b5+eeeYZrV271qGPc0hISL4pCAE4qlWrlt577z316dNHjRo1yveE7lOnTunjjz92mEL24Ycf1rPPPqt7771Xw4cPt0/bWbt27Xz9zlu0aKEVK1Zo0qRJCg8PV7Vq1dSqVSv76/v377ef89avX68PP/xQjzzyiJo0aWKvM3jwYE2YMEGDBw9WdHS0vvvuO/uv0le2JUkvvPCCHn74Yfn6+qpHjx5XfUhaeHi4Jk6cqAMHDqh27dqaP3++0tLSNGPGDIdJPJzx9fXVxIkTNWDAALVr1069e/e2T0UbFRWlUaNGOdT39/fX0qVLFRcXp1atWmnJkiX65ptv9Pzzz9t/GOnWrZsmTZqkLl266JFHHtGJEyc0depU1axZ02n3tYYNGyo2NtZhKlpJV+1idL3yjufw4cMVGxsrb29vPfzww07rTpgwQatWrVKrVq00ZMgQ1a9fX6dPn9bmzZu1YsUK+7MNOnfurNDQULVp00YhISHasWOHpkyZom7dul1zTM8999yjL774It8dCunP7sCDBg3Sxo0bFRISolmzZun48eMF3vG5XLly5TRt2jT17dtXzZs318MPP6ygoCAdOnRI33zzjdq0aWNPCpOTk9WtWzfddtttGjhwoE6fPm1/boez6+Xlxo8fr2+//Vbt2rXT0KFDVa9ePR07dkyffvqp1q5dq/Lly6tp06by9vbWxIkTlZGRIavVan9O1pWGDh2qt99+W/3791dqaqqioqK0YMEC/e9//1NKSkqhxki5MhVtnz59tGHDBg0cOFA7duxweLZFmTJl1LNnT4f6y5cvV5s2bexd3EoMt89PhUIraCragqaoy83NNZ599lmjcuXKRqlSpYzY2Fhjz549+aaiNYw/p5VLTEw0atasafj5+RmVK1c2Wrdubbz66qsO08k6U9BUtJ9++qlDvbwp7a6cUi5vesXLpxX86quvjMaNGxv+/v5GVFSUMXHiRGPWrFn5pga8dOmS8eKLLxqhoaFGQECA0aFDB2PHjh1GpUqVjMcff7zI3qPNZjPGjx9vVK1a1bBarUazZs2MRYsW5ZtuMm+Kun//+9/Ga6+9ZkRGRhpWq9Vo27atfdrIy+3du9fo16+fERoaavj6+hoRERFG9+7djQULFuQ7voWdilb/fypGZ8vl7xHA1f30009G7969jbCwMMPX19cIDQ01evfubWzdutVp/W+//dZo2LCh4efnZ9SpU8f48MMPnU5Fu3PnTuP22283AgICHKa4zKu7fft244EHHjDKli1rVKhQwRg2bJjDtK6G8efUrIMGDTICAwONsmXLGg899JBx4sQJp+eJcePGGREREYaXl9c1p6XNu+Zs2rTJiImJMfz9/Y2qVasaU6ZMcahX0HUgz/z5841m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57hzcYUrb0MVF19++aWnQyjQiBEjPB2CU5MnT/Z0CAVavXq1p0MoUM+ePT0dAgAApnvvvfc0aNAgbdiwQZs2bdLQoUNVpUoVDRkyRJL06quvavTo0UpKSpIk7d27V126dNFLL72kWbNm6eTJk/YEZfbs2ZL+/BJ/9OhRrVq1Sr6+vho+fLhOnDhRYAznzp1Tu3btFBERoa+++kqhoaHavHmzbDabevXqpW3btmnp0qVasWKFJCkwMDDfPrKyshQbG6uYmBht3LhRJ06c0ODBgzVs2DB7MiJJq1atUlhYmFatWqU9e/aoV69eatq0qf39FhWSCwAAANz0IiMj9frrr8tisahOnTraunWrXn/9dfuX7Q4dOugf//iHvf7gwYPVp08fjRw5UpJUq1YtvfHGG2rXrp2mTZumQ4cOacmSJdqwYYNuvfVWSdK7776revXqFRjD3LlzdfLkSW3cuFEVK1aUJNWsWdP+epkyZeTj43PVblBz587VH3/8offff1+lS5eWJE2ZMkU9evTQxIkTFRISIkmqUKGCpkyZIm9vb9WtW1fdunXTypUrizy5oFsUAAAAbnp/+9vfZLlspqmYmBj98ssvys3NlSRFR0c71N+yZYvmzJmjMmXK2JfY2FjZbDbt379fO3bskI+Pj1q0aGHfpm7duipfvnyBMaSlpalZs2b2xKIwduzYoSZNmtgTC0lq06aNbDabdu3aZS9r0KCBvL297ethYWFXvatiFu5cAAAA4C/v8i/r0p9dmB577DENHz48X90qVapo9+7dLrcREBBQ6Phc5evr67BusVhks9mKvF3uXAAAAOCm98MPPzisf//996pVq5bDr/uXa968ubZv366aNWvmW/z8/FS3bl1dunRJqamp9m127dqlM2fOFBhD48aNlZaWptOnTzt93c/Pz34npSD16tXTli1bHAaW/+9//5OXl5fq1Klz1W3dgeQCAAAAN71Dhw4pISFBu3bt0scff6w333zzqpPSPPvss1q3bp2GDRumtLQ0/fLLL/ryyy81bNgwSVKdOnXUpUsXPfbYY/rhhx+UmpqqwYMHX/XuRO/evRUaGqqePXvqf//7n/bt26fPPvtM69evl/TnrFX79+9XWlqaTp06pezs7Hz76NOnj/z9/RUXF6dt27Zp1apV+vvf/66+ffvax1t4EskFAAAAboxhuHcphH79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2ranrwW//PKLwsPDVb16dfXp00eHDh1ya/vF7fyek5OjDz/8UAMHDpTFYnFLm61bt9bKlSu1e/duSdKWLVu0du1ade3a1S3tS9KlS5eUm5srf39/h/KAgAC33826mhL3hO5Tp04pNzfX/hTYPCEhIdq5c6eHoio5bDabRo4cqTZt2hT7J+N62rx587R58+Zi15exuNq3b5+mTZumhIQEPf/889q4caOGDx8uPz8/xcXFeTo8wCVcaxx58tqxdetWxcTE6I8//lCZMmX0xRdfqH79+m5r39PXglatWmnOnDmqU6eOjh07prFjx6pt27batm2bypYt65YYitv5feHChTpz5oz69+/vtjafe+45ZWZmqm7duvL29lZubq5efvll9enTx20xlC1bVjExMRo3bpzq1aunkJAQffzxx1q/fr1q1qzptjiupcQlF7gx8fHx2rZtW7HKcIujw4cPa8SIEVq+fHm+XwjgnM1mU3R0tMaPHy9JatasmbZt26bp06eTXAAlnCevHXXq1FFaWpoyMjK0YMECxcXFac2aNW5JMIrDteDyX8YbN26sVq1aqWrVqvrkk080aNAgt8RQ3M7v7777rrp27arw8HC3tfnJJ5/oo48+0ty5c9WgQQOlpaVp5MiRCg8Pd+sx+OCDDzRw4EBFRETI29tbzZs3V+/evZWamuq2GK6lxHWLqly5sry9vXX8+HGH8uPHjys0NNRDUZUMw4YN06JFi7Rq1Srdcsstng6nWEtNTdWJEyfUvHlz+fj4yMfHR2vWrNEbb7whHx8f5ebmejrEYicsLCzfxb5evXpuv30PmIFrzf/x9LXDz89PNWvWVIsWLZScnKwmTZpo8uTJbmm7OF4Lypcvr9q1a2vPnj1ua7M4nd8PHjyoFStWaPDgwW5t9+mnn9Zzzz2nhx9+WI0aNVLfvn01atQoJScnuzWOGjVqaM2aNTp37pwOHz6sDRs26OLFi6pevbpb47iaEpdc+Pn5qUWLFlq5cqW9zGazaeXKlW7vg1lSGIahYcOG6YsvvtB//vMfVatWzdMhFXsdO3bU1q1blZaWZl+io6PVp08fpaWlydvb29MhFjtt2rTJN03l7t27VbVqVQ9FBBQe15rie+2w2WzKzs52S1vF8Vpw7tw57d27V2FhYW5rszid32fPnq3g4GB169bNre2eP39eXl6OX5u9vb1ls9ncGkee0qVLKywsTL///ruWLVume+65xyNxOFMiu0UlJCQoLi5O0dHRatmypVJSUpSVlaUBAwZ4OrRiKT4+XnPnztWXX36psmXLKj09XZIUGBiogIAAD0dXPJUtWzZfv+LSpUurUqVKjFUpwKhRo9S6dWuNHz9eDz30kDZs2KAZM2ZoxowZng4NKBRPX2vOnTvn8Ov0/v37lZaWpooVK6pKlSpF3n5xuHYkJiaqa9euqlKlis6ePau5c+dq9erVWrZsmVvaLw7Xgqeeeko9evRQ1apVdfToUSUlJcnb21u9e/d2S/tS8Tm/22w2zZ49W3FxcfLxce9X2B49eujll19WlSpV1KBBA/3444+aNGmSBg4c6NY4li1bJsMwVKdOHe3Zs0dPP/206tatW7y+A3t4tqpCe/PNN40qVaoYfn5+RsuWLY3vv//e0yEVW5KcLrNnz/Z0aCUKU9Fe29dff200bNjQsFqtRt26dY0ZM2Z4OiTghnjyWrNq1Sqn5+64uDi3tF8crh0DBw40qlatavj5+RlBQUFGx44djW+//dZt7Tvj7mtBr169jLCwMMPPz8+IiIgwevXqZezZs8dt7ecpDuf3ZcuWGZKMXbt2ub3tzMxMY8SIEUaVKlUMf39/o3r16sYLL7xgZGdnuzWO+fPnG9WrVzf8/PyM0NBQIz4+3jhz5oxbY7gWi2G4+dGCAAAAAG5KJW7MBQAAAIDiieQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAP4/i8WihQsXXnf91atXy2Kx6MyZM6bGERUVpZSUFFP3CbgDyQUAALip9e/fXxaLRRaLRb6+vgoJCdGdd96pWbNmyWazOdQ9duyYunbtet37bt26tY4dO6bAwEBJ0pw5c1S+fHkzwwdKFJILAABw0+vSpYuOHTumAwcOaMmSJbrjjjs0YsQIde/eXZcuXbLXCw0NldVqve79+vn5KTQ0VBaLpSjCBkockgsAAHDTs1qtCg0NVUREhJo3b67nn39eX375pZYsWaI5c+bY613ZLWrdunVq2rSp/P39FR0drYULF8pisSgtLU2SY7eo1atXa8CAAcrIyLDfKRkzZkyBMX399de69dZb5e/vr8qVK+vee+8tsO6kSZPUqFEjlS5dWpGRkXryySd17tw5++sHDx5Ujx49VKFCBZUuXVoNGjTQ4sWLJUm///67+vTpo6CgIAUEBKhWrVqaPXt2oY4jcC0+ng4AAADAEzp06KAmTZro888/1+DBg/O9npmZqR49euiuu+7S3LlzdfDgQY0cObLA/bVu3VopKSkaPXq0du3aJUkqU6aM07rffPON7r33Xr3wwgt6//33lZOTY08GnPHy8tIbb7yhatWqad++fXryySf1zDPP6K233pIkxcfHKycnR999951Kly6t7du329t+8cUXtX37di1ZskSVK1fWnj17dOHChes9TIBLSC4AAMBfVt26dfXTTz85fW3u3LmyWCyaOXOm/P39Vb9+fR05ckRDhgxxWt/Pz0+BgYGyWCwKDQ29arsvv/yyHn74YY0dO9Ze1qRJkwLrX57UREVF6aWXXtLjjz9uTy4OHTqk+++/X40aNZIkVa9e3V7/0KFDatasmaKjo+3bA0WFblEAAOAvyzCMAsdL7Nq1S40bN5a/v7+9rGXLlqa0m5aWpo4dO153/RUrVqhjx46KiIhQ2bJl1bdvX/322286f/68JGn48OF66aWX1KZNGyUlJTkkTE888YTmzZunpk2b6plnntG6detMeQ+AMyQXAADgL2vHjh2qVq2a29sNCAi47roHDhxQ9+7d1bhxY3322WdKTU3V1KlTJUk5OTmSpMGDB2vfvn3q27evtm7dqujoaL355puSpK5du+rgwYMaNWqUjh49qo4dO+qpp54y/00BIrkAAAB/Uf/5z3+0detW3X///U5fr1OnjrZu3ars7Gx72caNG6+6Tz8/P+Xm5l6z7caNG2vlypXXFWdqaqpsNptee+01/e1vf1Pt2rV19OjRfPUiIyP1+OOP6/PPP9c//vEPzZw50/5aUFCQ4uLi9OGHHyolJUUzZsy4rrYBV5FcAACAm152drbS09N15MgRbd68WePHj9c999yj7t27q1+/fk63eeSRR2Sz2TR06FDt2LFDy5Yt06uvvipJBXalioqK0rlz57Ry5UqdOnXK3m3pSklJSfr444+VlJSkHTt2aOvWrZo4caLTujVr1tTFixf15ptvat++ffrggw80ffp0hzojR47UsmXLtH//fm3evFmrVq1SvXr1JEmjR4/Wl19+qT179ujnn3/WokWL7K8BZiO5AAAAN72lS5cqLCxMUVFR6tKli1atWqU33nhDX375pby9vZ1uU65cOX399ddKS0tT06ZN9cILL2j06NGS5DAO43KtW7fW448/rl69eikoKEivvPKK03rt27fXp59+qq+++kpNmzZVhw4dtGHDBqd1mzRpokmTJmnixIlq2LChPvroIyUnJzvUyc3NVXx8vOrVq6cuXbqodu3a9sHefn5+SkxMVOPGjXX77bfL29tb8+bNu67jBrjKYhiG4ekgAAAASoKPPvrI/iwLV8ZNAH8VTEULAABQgPfff1/Vq1dXRESEtmzZomeffVYPPfQQiQVQAJILAACAAqSnp2v06NFKT09XWFiYHnzwQb388sueDgsotugWBQAAAMAUDOgGAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACm+H+M3lvCZAutYAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_prediction(lr, sample_idx=0)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "v58HIfp3oVS2" + }, + "source": [ + "## b) Feedforward Multilayer\n", + "\n", + "The objective of this section is to implement the backpropagation algorithm (SGD with the chain rule) on a single layer neural network using the sigmoid activation function.\n", + "\n", + "Now it's your turn to\n", + "\n", + "- Implement the `sigmoid` and its element-wise derivative `dsigmoid` functions:\n", + "\n", + "$$\n", + "sigmoid(x) = \\frac{1}{1 + e^{-x}}\n", + "$$\n", + "\n", + "$$\n", + "dsigmoid(x) = sigmoid(x) \\cdot (1 - sigmoid(x))\n", + "$$\n", + "\n", + "Remember that you can use your `sigmoid` function inside your `dsigmoid` function.\n", + "\n", + "Just like with our softmax function, we also want to make sure that we don't run into stability issues with our sigmoid function. We will use `np.clip` to ensure that the input to the sigmoid function is not too large or too small." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 430 + }, + "id": "Q6quWtkeoVS2", + "outputId": "499c3bfa-7a1e-4e67-cd77-2f775c6e067c" + }, + "outputs": [ + { + "data": { + "image/png": "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PsjSpUv58ssviYyM5JFHHmHDhg107dqVdevWcc899/Dhhx/Sr18/srKyWLZs2Slfa/To0WRmZrJkyRJ8fHwYP348hw8fPmm/p556ihkzZjBjxgweeughrrnmGpo3b87EiRNp2rQpN9xwA3fddRffffcdAPPnz2fcuHHMnDmThIQEvvnmG8aOHUuTJk0YNGjQSa+fn5/P8OHDufDCC/noo49ITExk3Lhxlf6eiIj72pqaw4uLdrN454mfPRe0jeSOgS3oGec6R3PF9XheGSkphGcamfPejxwE36BK7Zqfn8/bb7/NRx99xODBgwF4//33adKkCQDJyckEBQUxfPhwQkJCaNasGd26davwtXbu3MmPP/7I2rVr6dmzJwBvvfUWrVq1OmnfsWPHctVVVwHw0EMP0bdvXyZNmsTQoUMBGDduHGPHji3bf9q0aVx//fXccccdAIwfP55Vq1Yxbdq0CsvInDlzcDgcvP322/j7+9OhQwcOHDjA7bffXqnvi4i4n9/T83jxx90s2JIGgNUCF3eK4faBLejQKMzkdOIOPK+MuIm9e/dis9no06dP2bb69evTpk0bAC688EKaNWtG8+bNGTZsGMOGDeOyyy4jMDDwpNfatWsX3t7edO/evWxby5YtKxxU2rlz57L/joqKAqBTp07lthUVFZGbm0toaCg7duzglltuKfca/fv356WXXqrw69qxYwedO3fG39+/bFvfvn1P+70QEfeUklXIi4t288VvqTicxoHhf3RpxLjBrWjeMNjseOJGPK+M+AQaRyjMeu9qEhISwoYNG1iyZAk//PADkydP5vHHH2ft2rWEh4efecQ/XYHzx+j1irY5HOWX3hYR+UNuUQmzft7Du78mlQ1MHdohivEXtqFNdIjJ6cQded4AVovFOFVixq0K40VatGiBj48Pq1evLtt29OhRdu/eXXbf29ubhIQEnn/+eTZv3kxSUhI//fTTSa/Vpk0bSktLyw0U3bNnD0ePHj3Db+IJ7dq1Y/ny5eW2LV++nPbt259y/82bN1NUVFS2bdWqVWedQ0TMV2p38OGq/Qx8YQmvL92Hze6gf8sGfHVXf16/rqeKiJwxzzsy4iaCg4O58cYbefDBB2nQoAGRkZE8+uijWK1GP/zmm2/Yt28fAwYMoF69eixYsACHw1F2GufP2rZtS0JCArfccguvvfYaPj4+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oJBwLB56nk5ERDyY02mshlycC8V5xpwrxTlQnG+MaSnOO/7fedDndmNQbTWqkQGsNpuN9evXM3HixLJtVquVhIQEVq5cWeFzVq5cyfjx48ttGzp0KF988cUp36e4uJji4uKy+7m5uVWJWWm9r3ygRl5XRETEJVgsx0/DuPYx+ipNMpGZmYndbicqqvywzKioKNLS0ip8TlpaWpX2B5g6dSphYWFlt9jY2KrEFBERETfikjNeTZw4kZycnLJbSkqK2ZFERESkhlTpNE1ERAReXl6kp5e//ig9PZ3o6OgKnxMdHV2l/QH8/Pzw8/PcSWBERETkhCodGfH19aVHjx4sXry4bJvD4WDx4sX07du3wuf07du33P4AixYtOuX+IiIiUrdU+dLe8ePHM2bMGHr27Env3r2ZOXMmBQUFjB07FoDRo0fTuHFjpk6dCsC4ceM4//zzmT59Opdccgmffvop69at44033qjer0RERETcUpXLyKhRo8jIyGDy5MmkpaXRtWtXFi5cWDZINTk5GeufFl/r168fc+bM4bHHHuORRx6hVatWfPHFF6bPMSIiIiKuQQvliYiISI2o7Oe3S15NIyIiInWHyoiIiIiYSmVERERETKUyIiIiIqZSGRERERFTqYyIiIiIqao8z4gZ/rj6uKZW7xUREZHq98fn9t/NIuIWZSQvLw9Aq/eKiIi4oby8PMLCwk75uFtMeuZwODh48CAhISFYLBaz45gqNzeX2NhYUlJSNAFcDdP3unbo+1w79H2uHfo+l+d0OsnLy6NRo0blZmf/K7c4MmK1WmnSpInZMVxKaGio/qLXEn2va4e+z7VD3+faoe/zCac7IvIHDWAVERERU6mMiIiIiKlURtyMn58fU6ZMwc/Pz+woHk/f69qh73Pt0Pe5duj7fGbcYgCriIiIeC4dGRERERFTqYyIiIiIqVRGRERExFQqIyIiImIqlREPUVxcTNeuXbFYLPz2229mx/EoSUlJ3HjjjcTHxxMQEECLFi2YMmUKNpvN7Ghub9asWcTFxeHv70+fPn1Ys2aN2ZE8ztSpU+nVqxchISFERkYycuRIdu3aZXYsj/bss89isVi49957zY7iNlRGPMSECRNo1KiR2TE80s6dO3E4HLz++uts27aNF198kdmzZ/PII4+YHc2tzZ07l/HjxzNlyhQ2bNhAly5dGDp0KIcPHzY7mkdZunQpd955J6tWrWLRokWUlJQwZMgQCgoKzI7mkdauXcvrr79O586dzY7iXpzi9hYsWOBs27atc9u2bU7AuXHjRrMjebznn3/eGR8fb3YMt9a7d2/nnXfeWXbfbrc7GzVq5Jw6daqJqTzf4cOHnYBz6dKlZkfxOHl5ec5WrVo5Fy1a5Dz//POd48aNMzuS29CRETeXnp7OzTffzIcffkhgYKDZceqMnJwc6tevb3YMt2Wz2Vi/fj0JCQll26xWKwkJCaxcudLEZJ4vJycHQH9/a8Cdd97JJZdcUu7vtVSOWyyUJxVzOp1cf/313HbbbfTs2ZOkpCSzI9UJe/bs4eWXX2batGlmR3FbmZmZ2O12oqKiym2Piopi586dJqXyfA6Hg3vvvZf+/fvTsWNHs+N4lE8//ZQNGzawdu1as6O4JR0ZcUEPP/wwFovltLedO3fy8ssvk5eXx8SJE82O7JYq+33+s9TUVIYNG8aVV17JzTffbFJykTNz5513snXrVj799FOzo3iUlJQUxo0bx8cff4y/v7/ZcdySpoN3QRkZGRw5cuS0+zRv3pyrrrqKr7/+GovFUrbdbrfj5eXFtddey/vvv1/TUd1aZb/Pvr6+ABw8eJCBAwdyzjnn8N5772G1qsufKZvNRmBgIPPmzWPkyJFl28eMGUN2djZffvmleeE81F133cWXX37JL7/8Qnx8vNlxPMoXX3zBZZddhpeXV9k2u92OxWLBarVSXFxc7jE5mcqIG0tOTiY3N7fs/sGDBxk6dCjz5s2jT58+NGnSxMR0niU1NZVBgwbRo0cPPvroI/1gqQZ9+vShd+/evPzyy4BxCqFp06bcddddPPzwwyan8xxOp5O7776b+fPns2TJElq1amV2JI+Tl5fH/v37y20bO3Ysbdu25aGHHtIpsUrQmBE31rRp03L3g4ODAWjRooWKSDVKTU1l4MCBNGvWjGnTppGRkVH2WHR0tInJ3Nv48eMZM2YMPXv2pHfv3sycOZOCggLGjh1rdjSPcueddzJnzhy+/PJLQkJCSEtLAyAsLIyAgACT03mGkJCQkwpHUFAQDRo0UBGpJJURkb+xaNEi9uzZw549e04qeTqweOZGjRpFRkYGkydPJi0tja5du7Jw4cKTBrXK2XnttdcAGDhwYLnt7777Ltdff33tBxKpgE7TiIiIiKk0Ak9ERERMpTIiIiIiplIZEREREVOpjIiIiIipVEZERETEVCojIiIiYiqVERERETGVyoiIiIiYSmVERERETKUyIiIiIqZSGRERERFTqYyIiIiIqf4fIYYEPbJb620AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def sigmoid(X):\n", + " # Clip X to prevent overflow or underflow\n", + " X = np.clip(X, -500, 500) # This ensures that np.exp(X) doesn't overflow\n", + " return 1/(1 + np.exp(-X))\n", + "\n", + "\n", + "def dsigmoid(X):\n", + " return sigmoid(X) * (1- sigmoid(X))\n", + "\n", + "\n", + "x = np.linspace(-5, 5, 100)\n", + "plt.plot(x, sigmoid(x), label='sigmoid')\n", + "plt.plot(x, dsigmoid(x), label='dsigmoid')\n", + "plt.legend(loc='best');" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "hKV8SFZUoVS2" + }, + "source": [ + "Now it's your turn to complete the neural network code, so that we can train it on the MNIST dataset.\n", + "\n", + "Some parts have been completed for you already. Often, you'll be able to refer back to the code from the previous section to help you complete the code in this section." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "id": "1pS_dK8roVS3" + }, + "outputs": [], + "source": [ + "class NeuralNet():\n", + " \"\"\"MLP with 1 hidden layer with a sigmoid activation\"\"\"\n", + "\n", + " def __init__(self, input_size, hidden_size, output_size):\n", + " # Initializes the weights with random numbers\n", + " self.W_h = np.random.uniform(size=(input_size, hidden_size),\n", + " high=0.1, low=-0.1)\n", + " self.b_h = np.random.uniform(size=hidden_size,\n", + " high=0.1, low=-0.1)\n", + " self.W_o = np.random.uniform(size=(hidden_size, output_size),\n", + " high=0.1, low=-0.1)\n", + " self.b_o = np.random.uniform(size=output_size,\n", + " high=0.1, low=-0.1)\n", + "\n", + " # Store the input size, hidden size and output size\n", + " self.input_size = input_size\n", + " self.hidden_size = hidden_size\n", + " self.output_size = output_size\n", + "\n", + " def forward_hidden(self, X):\n", + " # Compute the linear combination of the input and weights\n", + " self.Z_h = np.dot(X, self.W_h) + self.b_h\n", + " # Apply the sigmoid activation function\n", + " return sigmoid(self.Z_h)\n", + "\n", + " def forward_output(self, H):\n", + " # Compute the linear combination of the hidden layer activation and weights\n", + " self.Z_o = np.dot(H, self.W_o) + self.b_o\n", + " # Apply the sigmoid activation function\n", + " return sigmoid(self.Z_o)\n", + "\n", + " def forward(self, X):\n", + " # Compute the forward activations of the hidden and output layers\n", + " H = self.forward_hidden(X)\n", + " Y = self.forward_output(H)\n", + "\n", + " return Y\n", + "\n", + " def loss(self, X, y):\n", + " y = y.astype(int)\n", + " y_onehot = one_hot(self.output_size, y)\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)\n", + "\n", + " def grad_loss(self, X, y_true):\n", + " y_true = one_hot(self.output_size, y_true)\n", + " y_pred = self.forward(X)\n", + "\n", + " # Compute the error at the output layer\n", + " error_o = y_pred - y_true\n", + "\n", + " # Compute the gradient of the loss with respect to W_o and b_o\n", + " # Sum over the batch dimension\n", + " grad_W_o = np.dot(self.Z_h.T, error_o)\n", + " grad_b_o = np.sum(error_o, axis=0)\n", + "\n", + " # Compute the error at the hidden layer\n", + " error_h = np.dot(error_o, self.W_o.T) * dsigmoid(self.Z_h)\n", + "\n", + " # Compute the gradient of the loss with respect to W_h and b_h\n", + " # Sum over the batch dimension\n", + " grad_W_h = np.dot(X.T, error_h)\n", + " grad_b_h = np.sum(error_h, axis=0)\n", + "\n", + "\n", + " return {\"W_h\": grad_W_h, \"b_h\": grad_b_h, \"W_o\": grad_W_o, \"b_o\": grad_b_o}\n", + "\n", + " def train(self, x, y, learning_rate):\n", + " # Ensure x is 2D\n", + " x = x[np.newaxis, :]\n", + " # Compute the gradient for the sample and update the weights\n", + " grads = self.grad_loss(x, y)\n", + "\n", + " self.W_h -= learning_rate * grads[\"W_h\"]\n", + " self.b_h -= learning_rate * grads[\"b_h\"]\n", + " self.W_o -= learning_rate * grads[\"W_o\"]\n", + " self.b_o -= learning_rate * grads[\"b_o\"]\n", + "\n", + "\n", + " def predict(self, X):\n", + " if len(X.shape) == 1:\n", + " return np.argmax(self.forward(X))\n", + " else:\n", + " return np.argmax(self.forward(X), axis=1)\n", + "\n", + " def accuracy(self, X, y):\n", + " y_preds = np.argmax(self.forward(X), axis=1)\n", + " return np.mean(y_preds == y)\n", + "\n", + "# Raise an exception if you try to run this cell without having implemented the NeuralNet class\n", + "nn = NeuralNet(input_size=64, hidden_size=32, output_size=10)\n", + "try:\n", + " assert(nn.forward(np.zeros((1, 64))).shape == (1, 10))\n", + " assert(nn.loss(np.zeros((1, 64)), np.zeros(1)) > 0)\n", + "except:\n", + " raise NotImplementedError(\"You need to correctly implement the NeuralNet class.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "xwCh3qu-oVS3" + }, + "source": [ + "Once the code is written, we can test our model on a single sample:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "id": "4PPnUdr2oVS3" + }, + "outputs": [], + "source": [ + "n_hidden = 10\n", + "model = NeuralNet(n_features, n_hidden, n_classes)" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "DsR0YD5_oVS3", + "outputId": "be803f48-78b5-4212-a025-66854f349a05" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(1091.5766872638396)" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.loss(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "YZ3QNUs1oVS3", + "outputId": "17f47433-5dcb-4e27-f35a-bf5a93563271" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(0.09888670595939751)" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.accuracy(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 410 + }, + "id": "p5qZzJQ6oVS3", + "outputId": "240b8d76-c03b-45e7-8a3f-785460cdd843" + }, + "outputs": [ + { + "data": { + "image/png": "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cKBxuXLlJP3v7+3smNepU8dp8pfnxIkTyszMNLU70MGDB1WrVq183ZLyulFd/iyQy7/H5H23OH36dKHa9/f3zzeuQpK9K/elSbL0v79dYRIpTyK5uAFc/mG8mst/mbHZbLrjjjv0z3/+02n9vJONqwqaaaOg8rz/RL/88os6dOigunXrasKECYqMjJSvr6+++uorvf7664UagG32e/zggw/Ur18/de/eXU899ZSCg4Pl7e2tlJQU/fLLL4WKT5KefPJJxcXFOa1zeRIFwP0CAwMVFhamn3766Yr1fvrpJ0VERNi/ZBX05cCMX8ov33dRtuUqV69PhfHf//5Xd999t2677Ta9/fbbCgsLk4+Pj2bOnHlNg549Ie+c/8gjjyg+Pt5pncaNG0v664vvrl27tGjRIi1dulSffPKJ3n77bY0aNUpjxowpsI28H+sK+0X4Upf/HfPif//9950mY+6ecreoXO37iqvCwsKcDvzOKwsPD3coz/vb5Y2HKilujL8+nKpQoUK+ByPl5OTk+2DXqFFD586dU8eOHd0YXcG+/PJLZWdn64svvnD41eDymZjyHgi0d+9eh19Vfv/993wnU7Pf44IFC1S9enV9+umnDhfy5ORkp/XzfuW51O7du+0D3vJ+mfPx8Sk2fwcAzt11112aPn261q5dq1tvvTXf6//973914MABh65Dzs7HUv5fSqWr/0q5Z88eh3Pe3r17ZbPZ7OeTvF9XL2+vMG0589tvv+WbjnT37t2S5HRGrEvlnbd37dqV71fvXbt25XvQm81m0759+xx+ALq8rU8++UR+fn5atmyZQ5eTmTNnOo2hoPNx6dKlrzqY/Wqu9XgGBQWpbNmyys3NvaZzfkBAgHr27KmePXsqJydH9913n1566SUlJSUVOH1r3bp1JUn79+93+nreHfNLY77Wv2PeJAPBwcFXjD/v7+nsmO/ateuKbQQFBalcuXJOZ1a8lCuf4apVq+qnn36SzWZzuHuxc+dOh3iLSnR0tP773//ma/+HH35Q6dKl8/3Qmfe38/TzzFzFmIsbWI0aNfKNJZg2bVq+X6969Oih9evXa9myZfn2cebMGYexEO6Q90vBpb8MZGRk5LtQdOjQQaVKlco3Re2kSZPy7dPs9+gsxh9++EHr1693Wn/hwoUOYyY2bNigH374QV26dJH01wm6Xbt2euedd5z+qnHixIkrxuPKVLQArs9TTz0lf39/PfbYY/Z+7XlOnTqlIUOGqHTp0vZpXqW/zscZGRkOdzyOHj3qdErOgICAKz4xO2+60zxvvfWWJNnPJ+XKlVPlypXznf/ffvttp21J+RORK7l48aLeeecd+3pOTo7eeecdBQUFOYxlcCYmJkbBwcGaOnWqQ/eQJUuWaMeOHflmdpIcz+mGYWjSpEny8fFRhw4dJP11PrZYLA7XtgMHDhT4lPP169c7dMc5fPiwPv/8c3Xq1Omqz7a4mms9nt7e3rr//vv1ySefOP3yfOk5//LPmK+vr+rXry/DMBy65F4uIiJCkZGR2rRpk9PXf/vtN4fPX2Zmpt577z1FR0dftWtYXFycypUrp7FjxzqNIS/+sLAwRUdHa/bs2fbxktJfYza2b99+xTa8vLzUvXt3ffnll07fQ97115XP8J133qn09HTNmzfPXnbx4kW99dZbKlOmjNq2bXvVfVzOlaloH3jgAR07dsxhyt+TJ09q/vz56tatW77xGKmpqQoMDFSDBg1cjsuTuHNxAxs0aJCGDBmi+++/X3fccYe2bNmiZcuW5bu99tRTT+mLL77QXXfdpX79+ql58+bKysrS1q1btWDBAh04cMCtt+Q6deokX19fdevWTY899pjOnTun6dOnKzg42OE/b0hIiIYPH67XXntNd999tzp37qwtW7ZoyZIlqly5ssOvGWa/x7vuukuffvqp7r33XnXt2lX79+/X1KlTVb9+fZ07dy5f/Zo1a+rWW2/V448/ruzsbE2cOFGVKlVy6KY1efJk3XrrrWrUqJEGDx6s6tWr69ixY1q/fr1+/fVXbdmypcB4XJmKNiMjw/5l5LvvvpP018W7fPnyKl++vMPgSQD51apVS7Nnz1bv3r3VqFGjfE/oPnnypD766COHKWQfeughPf3007r33ns1bNgw+7SdtWvXztfvvHnz5lqxYoUmTJig8PBwVatWTS1btrS/vn//fvs5b/369frggw/08MMPq0mTJvY6gwYN0rhx4zRo0CDFxMTo22+/tf8qfXlbkvTcc8/poYceko+Pj7p163bFh6SFh4dr/PjxOnDggGrXrq158+YpLS1N06ZNc5jEwxkfHx+NHz9e/fv3V9u2bdWrVy/7VLRRUVEaOXKkQ30/Pz8tXbpU8fHxatmypZYsWaLFixfr2Weftd9l6Nq1qyZMmKDOnTvr4Ycf1vHjxzV58mTVrFnTafe1hg0bKi4uzmEqWklX7GJ0rfKO57BhwxQXFydvb2899NBDTuuOGzdOq1atUsuWLTV48GDVr19fp06d0ubNm7VixQqdOnVK0l/XxNDQULVu3VohISHasWOHJk2apK5du151TM8999yjzz77LN8dCumv7sADBw7Uxo0bFRISohkzZujYsWMF3vG5VLly5TRlyhT16dNHzZo100MPPaSgoCAdOnRIixcvVuvWre1JYUpKirp27apbb71VAwYM0KlTp+zP7XB2vbzU2LFj9fXXX6tt27Z69NFHVa9ePR09elTz58/X2rVrVb58eUVHR8vb21vjx49XRkaGrFar/TlZl3v00Uf1zjvvqF+/fkpNTVVUVJQWLFig7777ThMnTizUGClXpqJ94IEHdMstt6h///7avn27/Qndubm5Tj9/y5cvV7du3UrcmAumoi1BCpqKtqAp6nJzc42nn37aqFy5slG6dGkjLi7O2Lt3b76paA3jr2nlkpKSjJo1axq+vr5G5cqVjVatWhmvvvqqw3SyzhQ0Fe38+fMd6uVNaXf5lHJ50yteOq3gF198YTRu3Njw8/MzoqKijPHjxxszZszINzXgxYsXjeeff94IDQ01/P39jfbt2xs7duwwKlWqZAwZMqTI3qPNZjPGjh1rVK1a1bBarUbTpk2NRYsW5ZtuMm+KuldeecV47bXXjMjISMNqtRpt2rSxTxt5qV9++cXo27evERoaavj4+BgRERHGXXfdZSxYsCDf8S3sVLR5MTlbnE2VCcC5n376yejVq5cRFhZm+Pj4GKGhoUavXr2MrVu3Oq3/9ddfGw0bNjR8fX2NOnXqGB988IHTqWh37txp3HbbbYa/v7/DFJd5dbdv32488MADRtmyZY0KFSoYQ4cOdZjW1TD+mpp14MCBRmBgoFG2bFmjR48exvHjx52eJ1544QUjIiLC8PLyuuq0tHnXnE2bNhmxsbGGn5+fUbVqVWPSpEkO9Qq6DuSZN2+e0bRpU8NqtRoVK1Y0evfu7TBdt2H8NRVtQECA8csvvxidOnUySpcubYSEhBjJyclGbm6uQ913333XqFWrlmG1Wo26desaM2fOdHpsJRkJCQnGBx98YK/ftGnTfNOYFnYq2osXLxr/+Mc/jKCgIMNisTi07+zYHzt2zEhISDAiIyPtn6EOHToY06ZNs9d55513jNtuu82oVKmSYbVajRo1ahhPPfWUkZGR4fTYXmrz5s2GJOO///2vQ3nVqlWNrl27GsuWLTMaN25sP27Xet3Os2rVKiMuLs4IDAw0/Pz8jBo1ahj9+vVzmOrXMAzjk08+MerVq2dYrVajfv36xqeffup0emZnx+jgwYNG3759jaCgIMNqtRrVq1c3EhISHKaDnz59ulG9enXD29vb4fp4+d/MMP465v379zcqV65s+Pr6Go0aNco3bfOl1+7LXR6jK1PRGoZhnDp1yhg4cKBRqVIlo3Tp0kbbtm2dHt8dO3YYkowVK1Zc036LE4thlLDH/gFXcebMGVWoUEEvvviinnvuOU+HAwCmGD16tMaMGaMTJ054bIBnu3btdPLkyav2g0fx0aFDB4WHhzs82C8qKkoNGzbUokWLPBgZrmTEiBH69ttvlZqaWuLuXDDmAiXa5XNCS7I/bbtdu3buDQYAgGJm7NixmjdvntMB/Siefv/9d/3nP//Riy++WOISC4kxFyjh5s2bp1mzZunOO+9UmTJltHbtWn300Ufq1KnTNc8BDgDAjaply5bKycnxdBhwQaVKla46HqU4I7lAida4cWOVKlVKL7/8sjIzM+2DvF988UVPhwYAAPC3w5gLAAAAAKZgzAUAAAAAU5BcAAAAADCF28dc2Gw2/fbbbypbtmyJHAEPAHkMw9DZs2cVHh4uLy9+qylqXD8AwDNcud65Pbn47bffFBkZ6e5mAaDIHD58WDfddJOnw7jhcf0AAM+6luud25OLvEerHz58WOXKlXN38yXWmTNnPB1CgebMmePpEJz66aefPB1CgZ544glPh1Cgxo0bezqEEiMzM1ORkZH28xqKFtcPAPAMV653bk8u8m5llytXjouDC2w2m6dDKJCfn5+nQ3DK19fX0yEUqEyZMp4OoUD8v3QdXXTcg+sHAHjWtVzv6CQMAAAAwBQkFwAAAABMQXIBAAAAwBRuH3MBAACAki03N1cXLlzwdBgwkbe3t0qVKnXd4whJLgAAAHDNzp07p19//VWGYXg6FJisdOnSCgsLu65JcUguAAAAcE1yc3P166+/qnTp0goKCmK2vBuEYRjKycnRiRMntH//ftWqVavQD4cluQAAAMA1uXDhggzDUFBQkPz9/T0dDkzk7+8vHx8fHTx4UDk5OYV+1AADugEALvv222/VrVs3hYeHy2KxaOHChVfdZvXq1WrWrJmsVqtq1qypWbNmFXmcAIoGdyxuTIW9W+GwDxPiAAD8zWRlZalJkyaaPHnyNdXfv3+/unbtqttvv11paWkaMWKEBg0apGXLlhVxpAAAd6JbFADAZV26dFGXLl2uuf7UqVNVrVo1vfbaa5KkevXqae3atXr99dcVFxdXVGECANyMOxcAgCK3fv16dezY0aEsLi5O69evL3Cb7OxsZWZmOiwAgOKNOxcAgCKXnp6ukJAQh7KQkBBlZmbqjz/+cDowNCUlRWPGjHFXiG4T9cxit7RzYFxXt7QDSO77XOdx9fPdrl07RUdHa+LEiUUTEOwKdedi8uTJioqKkp+fn1q2bKkNGzaYHRcA4G8uKSlJGRkZ9uXw4cOeDgnADcowDF28eNHTYdwQXE4u5s2bp8TERCUnJ2vz5s1q0qSJ4uLidPz48aKIDwBwAwgNDdWxY8ccyo4dO6Zy5coVOJ2l1WpVuXLlHBYAcFW/fv20Zs0avfHGG7JYLLJYLJo1a5YsFouWLFmi5s2by2q1au3aterXr5+6d+/usP2IESPUrl07+7rNZlNKSoqqVasmf39/NWnSRAsWLHDvmyrGXE4uJkyYoMGDB6t///6qX7++pk6dqtKlS2vGjBlFER8A4AYQGxurlStXOpQtX75csbGxHooIwN/FG2+8odjYWA0ePFhHjx7V0aNHFRkZKUl65plnNG7cOO3YsUONGze+pv2lpKTovffe09SpU/Xzzz9r5MiReuSRR7RmzZqifBslhktjLnJycpSamqqkpCR7mZeXlzp27FjgoLzs7GxlZ2fb1xmQBwAl37lz57R37177+v79+5WWlqaKFSuqSpUqSkpK0pEjR/Tee+9JkoYMGaJJkybpn//8pwYMGKBvvvlGH3/8sRYvdm8/bQB/P4GBgfL19VXp0qUVGhoqSdq5c6ck6d///rfuuOOOa95Xdna2xo4dqxUrVth/HKlevbrWrl2rd955R23btjX/DZQwLiUXJ0+eVG5urtNBeXl/pMvdqAPyAODvbNOmTbr99tvt64mJiZKk+Ph4zZo1S0ePHtWhQ4fsr1erVk2LFy/WyJEj9cYbb+imm27Sf/7zH6ahBeBRMTExLtXfu3evzp8/ny8hycnJUdOmTc0MrcQq8tmikpKS7Bcd6a87F3m3ogAAJVO7du1kGEaBrzt7+na7du30448/FmFUAOCagIAAh3UvL69857YLFy7Y/33u3DlJ0uLFixUREeFQz2q1FlGUJYtLyUXlypXl7e3tdFBe3m2my1mtVg42AAAAPMbX11e5ublXrRcUFKRt27Y5lKWlpcnHx0eSVL9+fVmtVh06dIguUAVwaUC3r6+vmjdv7jAoz2azaeXKlQzKAwAAQLEUFRWlH374QQcOHNDJkydls9mc1mvfvr02bdqk9957T3v27FFycrJDslG2bFk9+eSTGjlypGbPnq1ffvlFmzdv1ltvvaXZs2e76+0Uay53i0pMTFR8fLxiYmLUokULTZw4UVlZWerfv39RxAcAAIBirrg/tPHJJ59UfHy86tevrz/++EMzZ850Wi8uLk7PP/+8/vnPf+rPP//UgAED1LdvX23dutVe54UXXlBQUJBSUlK0b98+lS9fXs2aNdOzzz7rrrdTrLmcXPTs2VMnTpzQqFGjlJ6erujoaC1dujTfIG8AAACgOKhdu3a+mU379evntO6YMWOuOBmRxWLR8OHDNXz4cDNDvGEUakD30KFDNXToULNjAQAAAFCCufwQPQAAAABwhuQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAACYguQCAAAAgClILgAAAHB9LBb3LsVYVFSUJk6caF+3WCxauHDhde3TjH24S6Ge0A0AAADg6o4ePaoKFSpcU93Ro0dr4cKFSktLK/Q+PI3kAgAAALhETk6OfH19TdlXaGhosdiHu9AtCgAAADe0du3aaejQoRo6dKgCAwNVuXJlPf/88zIMQ9JfXZleeOEF9e3bV+XKldOjjz4qSVq7dq3atGkjf39/RUZGatiwYcrKyrLv9/jx4+rWrZv8/f1VrVo1ffjhh/navrxL06+//qpevXqpYsWKCggIUExMjH744QfNmjVLY8aM0ZYtW2SxWGSxWDRr1iyn+9i6davat28vf39/VapUSY8++qjOnTtnf71fv37q3r27Xn31VYWFhalSpUpKSEjQhQsXTDyqznHnooS4tO9ecTNmzBhPh1DiHDhwwNMhFGj16tWeDgEAANPNnj1bAwcO1IYNG7Rp0yY9+uijqlKligYPHixJevXVVzVq1CglJydLkn755Rd17txZL774ombMmKETJ07Y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UkBAgCIjI/XEE0/o3Llz9tcPHjyobt26qUKFCgoICFCDBg301VdfSZJOnz6t3r17KygoSP7+/qpVq5ZmzpxZqOMIXE0pTwcAAADgCe3bt1eTJk306aefatCgQflez8zMVLdu3XTnnXdqzpw5OnjwoEaMGFHg/lq1aqWJEydq1KhR2rVrlySpTJkyTusuXrxY9957r5577jm99957ysnJsScDznh5eenNN99UtWrVtG/fPj3xxBP65z//qbfffluSlJCQoJycHH377bcKCAjQ9u3b7W0///zz2r59u5YsWaLKlStr7969+uOPP671MAEuIbkAAAB/W3Xr1tVPP/3k9LU5c+bIYrFo+vTp8vPzU/369XXkyBENHjzYaX1fX18FBgbKYrEoNDT0iu2+9NJLeuihhzRmzBh7WZMmTQqsf2lSExUVpRdffFFDhgyxJxeHDh3S/fffr0aNGkmSqlevbq9/6NAhNW3aVDExMfbtgaJCtygAAPC3ZRhGgeMldu3apcaNG8vPz89e1qJFC1PaTUtLU4cOHa65/ooVK9ShQwdFRESobNmy6tOnj37//XedP39ekjRs2DC9+OKLat26tZKTkx0Spscff1xz585VdHS0/vnPf2rdunWmvAfAGZILAADwt7Vjxw5Vq1bN7e36+/tfc90DBw7orrvuUuPGjfXJJ58oNTVVkydPliTl5ORIkgYNGqR9+/apT58+2rp1q2JiYvTWW29Jkrp06aKDBw9q5MiR+u2339ShQwc9+eST5r8pQCQXAADgb+qbb77R1q1bdf/99zt9vU6dOtq6dauys7PtZRs3brziPn19fZWbm3vVths3bqyVK1deU5ypqamy2Wx67bXXdMstt6h27dr67bff8tWLjIzUkCFD9Omnn+r//u//NH36dPtrQUFBio+P1wcffKCJEydq2rRp19Q24CqSCwAAcMPLzs5Wenq6jhw5os2bN2vs2LG65557dNddd6lv375Ot3n44Ydls9n06KOPaseOHVq2bJleffVVSSqwK1VUVJTOnTunlStX6uTJk/ZuS5dLTk7WRx99pOTkZO3YsUNbt27V+PHjndatWbOmLly4oLfeekv79u3T+++/r6lTpzrUGTFihJYtW6b9+/dr8+bNWrVqlerVqydJGjVqlD7//HPt3btXP//8sxYtWmR/DTAbyQUAALjhLV26VGFhYYqKilLnzp21atUqvfnmm/r888/l7e3tdJty5crpyy+/VFpamqKjo/Xcc89p1KhRkuQwDuNSrVq10pAhQ9SzZ08FBQXp5ZdfdlqvXbt2mj9/vr744gtFR0erffv22rBhg9O6TZo00YQJEzR+/Hg1bNhQH374oVJSUhzq5ObmKiEhQfXq1VPnzp1Vu3Zt+2BvX19fJSUlqXHjxrrtttvk7e2tuXPnXtNxA1xlMQzD8HQQAAAAJcGHH35of5aFK+MmgL8LpqIFAAAowHvvvafq1asrIiJCW7Zs0dNPP60ePXqQWAAFILkAAAAoQHp6ukaNGqX09HSFhYXpwQcf1EsvveTpsIBii25RAAAAAEzBgG4AAAAApiC5AAAAAGAKkgsAAAAApiC5AAAAAGAKkgsAAAAApiC5AAAAAGAKkgsAAAAApiC5AAAAAGCK/wfVGMaC6vkK8gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_prediction(model, sample_idx=5)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "krwSG3vXoVS3" + }, + "source": [ + "And now it's time to train!" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wHqTQL6goVS3", + "outputId": "e294ee4b-13c2-43f9-c1d6-11730160ba42" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random init: train loss: 1091.57669, train acc: 0.099, test acc: 0.100\n", + "Epoch #1, train loss: 3025.63561, train acc: 0.325, test acc: 0.274\n", + "Epoch #2, train loss: 2360.61329, train acc: 0.673, test acc: 0.619\n", + "Epoch #3, train loss: 1709.99128, train acc: 0.823, test acc: 0.767\n", + "Epoch #4, train loss: 1318.60060, train acc: 0.870, test acc: 0.856\n", + "Epoch #5, train loss: 1092.45383, train acc: 0.897, test acc: 0.867\n", + "Epoch #6, train loss: 890.95451, train acc: 0.913, test acc: 0.878\n", + "Epoch #7, train loss: 744.01713, train acc: 0.923, test acc: 0.893\n", + "Epoch #8, train loss: 634.31090, train acc: 0.935, test acc: 0.893\n", + "Epoch #9, train loss: 556.00624, train acc: 0.942, test acc: 0.900\n", + "Epoch #10, train loss: 500.41555, train acc: 0.945, test acc: 0.904\n", + "Epoch #11, train loss: 460.10983, train acc: 0.948, test acc: 0.911\n", + "Epoch #12, train loss: 432.05404, train acc: 0.952, test acc: 0.915\n", + "Epoch #13, train loss: 412.43222, train acc: 0.952, test acc: 0.911\n", + "Epoch #14, train loss: 397.66908, train acc: 0.951, test acc: 0.904\n", + "Epoch #15, train loss: 387.06655, train acc: 0.950, test acc: 0.904\n" + ] + } + ], + "source": [ + "losses, accuracies, accuracies_test = [], [], []\n", + "losses.append(model.loss(X_train, y_train))\n", + "accuracies.append(model.accuracy(X_train, y_train))\n", + "accuracies_test.append(model.accuracy(X_test, y_test))\n", + "\n", + "print(\"Random init: train loss: %0.5f, train acc: %0.3f, test acc: %0.3f\"\n", + " % (losses[-1], accuracies[-1], accuracies_test[-1]))\n", + "\n", + "for epoch in range(15):\n", + " for i, (x, y) in enumerate(zip(X_train, y_train)):\n", + " model.train(x, y, 0.001)\n", + "\n", + " losses.append(model.loss(X_train, y_train))\n", + " accuracies.append(model.accuracy(X_train, y_train))\n", + " accuracies_test.append(model.accuracy(X_test, y_test))\n", + " print(\"Epoch #%d, train loss: %0.5f, train acc: %0.3f, test acc: %0.3f\"\n", + " % (epoch + 1, losses[-1], accuracies[-1], accuracies_test[-1]))" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 452 + }, + "id": "vz1A_iqWoVS3", + "outputId": "1d556f24-f863-452c-fb03-f80638aee0c4" + }, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(losses)\n", + "plt.title(\"Training loss\");" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 430 + }, + "id": "MXHIE_dWoVS3", + "outputId": "762049c5-4b45-4d10-c912-08006f2ef587" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAGdCAYAAADuR1K7AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAATdpJREFUeJzt3Xl8VPW9//HXzCQzWchKICEQSEAWkVU2AXcRqhTrrmhFaev9tWJFU63iAtVWEHer3lpt7XarYK1a644RUdkFQVQWgUDCko0lezLJzPn9cZIhgSSEMJmTmbyfj8c8cuZ7zpl8JkDmzfd8zjk2wzAMREREREKE3eoCRERERPxJ4UZERERCisKNiIiIhBSFGxEREQkpCjciIiISUhRuREREJKQo3IiIiEhIUbgRERGRkBJmdQGB5vV62bdvHzExMdhsNqvLERERkVYwDIPS0lJSU1Ox21uem+l04Wbfvn2kpaVZXYaIiIi0QW5uLr169Wpxm04XbmJiYgDzhxMbG2txNSIiItIaJSUlpKWl+T7HW9Lpwk39oajY2FiFGxERkSDTmpYSNRSLiIhISFG4ERERkZCicCMiIiIhpdP13LSGYRjU1tbi8XisLiUoORwOwsLCdKq9iIhYQuHmKG63m/3791NRUWF1KUEtKiqKHj164HQ6rS5FREQ6GYWbBrxeL9nZ2TgcDlJTU3E6nZp9OEGGYeB2uyksLCQ7O5v+/fsf92JLIiIi/qRw04Db7cbr9ZKWlkZUVJTV5QStyMhIwsPD2b17N263m4iICKtLEhGRTkT/pW6CZhpOnn6GIiJiFX0CiYiISEhRuBEREZGQonAjx0hPT+fpp5+2ugwREZE2UUNxiDj33HMZMWKEX0LJ2rVriY6OPvmiRERELKBw00kYhoHH4yEs7Ph/5N26dQtARSIiIu1Dh6WOwzAMKty1ljwMw2hVjTfddBPLli3jmWeewWazYbPZ+Otf/4rNZuP9999n1KhRuFwuvvjiC3bs2MGPfvQjkpOT6dKlC2PGjOHjjz9u9HpHH5ay2Wz86U9/4rLLLiMqKor+/fvz9ttv+/PHLCIi4jeauTmOyhoPg+d+aMn3/u6hKUQ5j/9H9Mwzz7Bt2zaGDBnCQw89BMC3334LwD333MPjjz9O3759SUhIIDc3l4svvpiHH34Yl8vF3//+d6ZNm8bWrVvp3bt3s9/jwQcf5NFHH+Wxxx7j2Wef5frrr2f37t0kJib6582KiIj4iWZuQkBcXBxOp5OoqChSUlJISUnB4XAA8NBDD3HhhRfSr18/EhMTGT58OP/v//0/hgwZQv/+/fntb39Lv379jjsTc9NNNzF9+nROOeUU5s+fT1lZGWvWrAnE2xMRETkhmrk5jshwB989NMWy732yRo8e3eh5WVkZv/nNb3j33XfZv38/tbW1VFZWkpOT0+LrDBs2zLccHR1NbGwsBQUFJ12fiIiIvyncHIfNZmvVoaGO6uiznu68806WLFnC448/zimnnEJkZCRXXnklbre7xdcJDw9v9Nxms+H1ev1er4iIyMkK3k9tacTpdOLxeI673fLly7npppu47LLLAHMmZ9euXe1cnYiISOCo5yZEpKens3r1anbt2kVRUVGzsyr9+/fnjTfeYMOGDWzcuJHrrrtOMzAiIhJSFG5CxJ133onD4WDw4MF069at2R6aJ598koSEBCZMmMC0adOYMmUKp59+eoCrFRERaT82o7UXUwkRJSUlxMXFUVxcTGxsbKN1VVVVZGdnk5GRQUREhEUVhgb9LEVExJ9a+vw+mmZuREREJKQo3IiIiEhIUbgRERGRkKJwIyIiIiHF0nDz2WefMW3aNFJTU7HZbLz11lvH3efTTz/l9NNPx+Vyccopp/DXv/613esUERGR4GFpuCkvL2f48OE8//zzrdo+OzubqVOnct5557FhwwZuv/12fvazn/Hhh9bc2FJEREQ6HkuvUHzRRRdx0UUXtXr7F154gYyMDJ544gkATj31VL744gueeuoppkyx5v5PIiIi0rEEVc/NypUrmTRpUqOxKVOmsHLlymb3qa6upqSkpNFDREREQldQhZu8vDySk5MbjSUnJ1NSUkJlZWWT+yxYsIC4uDjfIy0tLRClioiIiEWCKty0xZw5cyguLvY9cnNzrS6pXZx77rncfvvtfnu9m266iUsvvdRvryciIhIoQXVX8JSUFPLz8xuN5efnExsbS2RkZJP7uFwuXC5XIMoTERGRDiCoZm7Gjx9PVlZWo7ElS5Ywfvx4iyrqGG666SaWLVvGM888g81mw2azsWvXLr755hsuuugiunTpQnJyMjfccANFRUW+/V5//XWGDh1KZGQkXbt2ZdKkSZSXl/Ob3/yGv/3tb/znP//xvd6nn35q3RsU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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(accuracies, label='train')\n", + "plt.plot(accuracies_test, label='test')\n", + "plt.ylim(0, 1.1)\n", + "plt.ylabel(\"accuracy\")\n", + "plt.legend(loc='best');" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "3jsgsJpFoVS3" + }, + "outputs": [], + "source": [ + "plot_prediction(model, sample_idx=4)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "_bJzxbXmoVS3" + }, + "source": [ + "## c) Exercises\n", + "\n", + "### Look at worst prediction errors\n", + "\n", + "- Use numpy to find test samples for which the model made the worst predictions,\n", + "- Use the `plot_prediction` to look at the model predictions on those,\n", + "- Would you have done any better?" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "2jH_2oVVoVS4", + "outputId": "596bd3c0-96a1-41d4-906e-d093aec25a56" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Worst prediction indices: [107 20 212]\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGJCAYAAAD4084mAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVYRJREFUeJzt3Xl0FFX6//FPZ+uELWzZDYRNdggQiQERBCQgoLgiooRV0WRY8tXR6EhgVAKOYBQQhJFNRVBUXBAQGJZBUCAYBNl3BMIikEDQBNL1+8NfemjSwXTodCf4fp1T59C3b9V9ujpU9VN17y2TYRiGAAAAAOAGebg7AAAAAAA3B5ILAAAAAE5BcgEAAADAKUguAAAAADgFyQUAAAAApyC5AAAAAOAUJBcAAAAAnILkAgAAAIBTkFwAAAAAcAqSC9ywDh06qEOHDu4Oo0QV9zMeOnRIJpNJb7zxhtNiWb16tUwmk1avXu20bQJAadO/f39VqFDBqds0mUxKSEj403qzZ8+WyWTSoUOHrGXXngfyj++zZ88uctujR492LGAn2Lhxo3x8fHT48GGXt309/fv3V0REhE2Zs/dRWf19cvnyZYWHh+udd95xdyjFQnJRiplMpiIt/MiEI0aPHm3378jX19fdoQFlys8//6zHH39cYWFhMpvNCg0NVd++ffXzzz/f0HbHjh2rRYsWOSfIP7F+/XqNHj1a58+fd0l7N7tvvvnGLQnE9bz00kvq06ePatas6e5QSsSOHTs0evRom0SwtFq7dq3uvfdehYeHy9fXV8HBweratau+++47m3re3t5KTEzUa6+9pt9//91N0Rafl7sDQOHef/99m9dz587V8uXLC5Q3bNjQlWEV8O2337q1fRTP1KlTba4Kenp6ujEaoGz57LPP1KdPH1WtWlWDBg1SrVq1dOjQIb333ntauHCh5s+fr/vvv79Y2x47dqweeugh9erVy7lB27F+/XqNGTNG/fv3V+XKlUu8vbLiiSee0KOPPiqz2VxonZo1a+q3336Tt7e3teybb77RlClT7CYYv/32m7y8XPuzKz09XStWrND69etd2m5xFWcf7dixQ2PGjFGHDh0K3Akpbb9P9uzZIw8PDw0dOlTBwcE6d+6cPvjgA915551avHixunbtaq07YMAAvfDCC5o3b54GDhzoxqgdR3JRij3++OM2r7///nstX768QPm1Ll26pHLlypVkaDZ8fHxc1hac56GHHlL16tXdHQZQ5uzfv19PPPGEateurbVr1yogIMD63vDhw9WuXTs98cQT+umnn1S7dm03Rlq6/P777/Lx8ZGHR+nvNOHp6fmnF1wcvePrjrvDs2bNUo0aNXT77bc7bZvZ2dkqX76807Z3NWfvo9L2+2Tw4MEaPHiwTdkzzzyj2rVrKzU11Sa5qFy5srp06aLZs2eXueSi9P8Px3V16NBBTZo0UVpamu68806VK1dOL774oqTC+y5GRESof//+NmXnz5/XiBEjFB4eLrPZrLp162r8+PGyWCxFiuHqPo35YwI+/vhjjRkzRmFhYapYsaIeeughZWZmKicnRyNGjFBgYKAqVKigAQMGKCcnx2abs2bNUseOHRUYGCiz2axGjRpp6tSpBdq2WCwaPXq0QkNDVa5cOd11113asWOH0z/jtXJzczVq1Ci1atVK/v7+Kl++vNq1a6dVq1YVus6bb76pmjVrys/PT+3bt9f27dsL1Nm1a5ceeughVa1aVb6+voqKitKXX375p/FcunRJu3bt0pkzZ4r8GQzDUFZWlgzDKPI6AKR//etfunTpkqZPn26TWEhS9erV9e677yo7O1uvv/66tdxe/3Lpf90U85lMJmVnZ2vOnDnWLov5x7L8urt27dIjjzyiSpUqqVq1aho+fLhN14nrjQW4+rwwevRoPffcc5KkWrVqWdu7XveSq885bdq0kZ+fn2rVqqVp06bZ1Ms/D8yfP1//+Mc/FBYWpnLlyikrK0uS9Mknn6hVq1by8/NT9erV9fjjj+vYsWN22zxw4IBiY2NVvnx5hYaG6p///GeB49Ybb7yhNm3aqFq1avLz81OrVq20cOHCQj/Hhx9+qPr168vX11etWrXS2rVrbd63N+biWtfu5/79+2vKlCmSbLs157N3Tj527JgGDhyooKAgmc1mNW7cWDNnzizQ1qRJk9S4cWOVK1dOVapUUVRUlObNm1dobPkWLVqkjh072sQh/fE7oEePHvr2228VGRkpX19fNWrUSJ999pnd/bBmzRo988wzCgwM1C233GJ9f8mSJWrXrp3Kly+vihUrqnv37na7BS5atEhNmjSRr6+vmjRpos8//9xuvIXto0GDBik0NFRms1m1atXS008/rdzcXM2ePVsPP/ywJOmuu+4q0F3c3piLU6dOadCgQQoKCpKvr6+aN2+uOXPm2NS5erzk9OnTVadOHZnNZt12223atGmTTd3Lly9r165dOnHihN3P9GfKlSungIAAu10T7777bq1bt05nz54t1rbdhTsXN4Fff/1V3bp106OPPqrHH39cQUFBDq1/6dIltW/fXseOHdNTTz2lGjVqaP369UpKStKJEyeUmpparLhSUlLk5+enF154Qfv27dOkSZPk7e0tDw8PnTt3TqNHj9b333+v2bNnq1atWho1apR13alTp6px48a699575eXlpa+++krPPPOMLBaL4uPjrfWSkpL0+uuvq2fPnoqNjdXWrVsVGxtboI+isz9jVlaW/v3vf6tPnz4aMmSILly4oPfee0+xsbHauHGjIiMjberPnTtXFy5cUHx8vH7//Xe99dZb6tixo7Zt22b9vn7++We1bdtWYWFheuGFF1S+fHl9/PHH6tWrlz799NPrdrHYuHGj7rrrLiUnJxe5v2/t2rV18eJFlS9fXr169dKECRMc/tsB/oq++uorRUREqF27dnbfv/POOxUREaHFixc7vO33339fgwcPVuvWrfXkk09KkurUqWNT55FHHlFERIRSUlL0/fff6+2339a5c+c0d+5ch9p64IEHtGfPHn300Ud68803rXcyr02YrnXu3Dndc889euSRR9SnTx99/PHHevrpp+Xj41PgCusrr7wiHx8fPfvss8rJyZGPj49mz56tAQMG6LbbblNKSopOnjypt956S999951+/PFHm+5ZeXl56tq1q26//Xa9/vrrWrp0qZKTk3XlyhX985//tNZ76623dO+996pv377Kzc3V/Pnz9fDDD+vrr79W9+7dbWJas2aNFixYoGHDhslsNuudd95R165dtXHjRjVp0sShfXi1p556SsePH7fbfdmekydP6vbbb7cOMg8ICNCSJUs0aNAgZWVlacSIEZKkGTNmaNiwYXrooYesieRPP/2kH374QY899lih2z927JiOHDmili1b2n1/79696t27t4YOHaq4uDjNmjVLDz/8sJYuXaq7777bpu4zzzyjgIAAjRo1StnZ2ZL++FuNi4tTbGysxo8fr0uXLmnq1Km644479OOPP1qT6W+//VYPPvigGjVqpJSUFP36668aMGCATZJSmOPHj6t169Y6f/68nnzySTVo0EDHjh3TwoULdenSJd15550aNmyY3n77bb344ovWbuKFdRf/7bff1KFDB+3bt08JCQmqVauWPvnkE/Xv31/nz5/X8OHDberPmzdPFy5c0FNPPSWTyaTXX39dDzzwgA4cOGDtDnfs2DE1bNhQcXFxRR7cn5WVpdzcXJ05c0Zz587V9u3brReGr9aqVSsZhqH169erR48eRdp2qWCgzIiPjzeu/crat29vSDKmTZtWoL4kIzk5uUB5zZo1jbi4OOvrV155xShfvryxZ88em3ovvPCC4enpaRw5cuS6cbVv395o37699fWqVasMSUaTJk2M3Nxca3mfPn0Mk8lkdOvWzWb9mJgYo2bNmjZlly5dKtBObGysUbt2bevrjIwMw8vLy+jVq5dNvdGjRxuSSvQzXrlyxcjJybGpc+7cOSMoKMgYOHCgtezgwYOGJMPPz8/45ZdfrOU//PCDIckYOXKktaxTp05G06ZNjd9//91aZrFYjDZt2hj16tWzluXv31WrVhUos/d9Xys1NdVISEgwPvzwQ2PhwoXG8OHDDS8vL6NevXpGZmbmn64P/JWdP3/ekGTcd99916137733GpKMrKwswzAMIy4ursBxzjAMIzk5ucBxvXz58jbHr2vr3nvvvTblzzzzjCHJ2Lp1q2EY/zvuzJo1q8A2rj1O/Otf/zIkGQcPHrzu58mXf86ZMGGCtSwnJ8eIjIw0AgMDrcf8/GNS7dq1bY7nubm5RmBgoNGkSRPjt99+s5Z//fXXhiRj1KhR1rK4uDhDkvG3v/3NWmaxWIzu3bsbPj4+xunTp63l154zcnNzjSZNmhgdO3Ys8PklGZs3b7aWHT582PD19TXuv/9+a9msWbMK7JdrzwP29rO98/TVbV+97wcNGmSEhIQYZ86csan36KOPGv7+/tbPdN999xmNGze2u83rWbFihSHJ+Oqrrwq8V7NmTUOS8emnn1rLMjMzjZCQEKNFixbWsvz9cMcddxhXrlyxll+4cMGoXLmyMWTIEJvtZmRkGP7+/jblkZGRRkhIiHH+/Hlr2bfffmtIKvB/4tp91K9fP8PDw8PYtGlTgc9gsVgMwzCMTz75pMA5Md+131lqaqohyfjggw+sZbm5uUZMTIxRoUIF6//X/O+2WrVqxtmzZ611v/jiiwL7NL+uvf+zhYmNjbX+Lfr4+BhPPfWUzf+HfMePHzckGePHjy/ytksDukXdBMxmswYMGFDs9T/55BO1a9dOVapU0ZkzZ6xL586dlZeXV+B2cVH169fPZqBbdHS0DMMocGUrOjpaR48e1ZUrV6xlfn5+1n9nZmbqzJkzat++vQ4cOKDMzExJ0sqVK3XlyhU988wzNtv729/+VuKf0dPT09qX02Kx6OzZs7py5YqioqK0ZcuWAvV79eqlsLAw6+vWrVsrOjpa33zzjSTp7Nmz+s9//qNHHnlEFy5csMb366+/KjY2Vnv37i20y4D0x61fwzCKdNdi+PDhmjRpkh577DE9+OCDSk1N1Zw5c7R3794yO+0d4CoXLlyQJFWsWPG69fLfz+8G5ExX372V/nfMyz+elDQvLy899dRT1tc+Pj566qmndOrUKaWlpdnUjYuLszmeb968WadOndIzzzxj07++e/fuatCggd27PVdPHZt/lT83N1crVqywll/dxrlz55SZmal27drZPR7HxMSoVatW1tc1atTQfffdp2XLlikvL6+ou+GGGIahTz/9VD179pRhGDbnpdjYWGVmZlpjr1y5sn755ZcC3XH+zK+//ipJqlKlit33Q0NDbe6IV6pUSf369dOPP/6ojIwMm7pDhgyxGYOyfPlynT9/Xn369LGJ3dPTU9HR0dYuwidOnFB6erri4uLk7+9vXf/uu+9Wo0aNrhu/xWLRokWL1LNnT0VFRRV4/9quXkXxzTffKDg4WH369LGWeXt7a9iwYbp48aLWrFljU7937942+y//buWBAwesZRERETIMo8h3LSRp3Lhx+vbbb/Xee+/p9ttvV25urs1voHz5bTvS5bk0oFvUTSAsLOyGBi3t3btXP/30U6G3wk+dOlWs7daoUcPmdf6BJTw8vEC5xWJRZmamqlWrJkn67rvvlJycrA0bNujSpUs29TMzM+Xv72+ds7tu3bo271etWrXAwbQkPuOcOXM0YcIE7dq1S5cvX7aW16pVq0DdevXqFSi79dZb9fHHH0uS9u3bJ8Mw9PLLL+vll18uNMarExRneuyxx/R///d/WrFihV544YUSaQO4GeQnDflJRmGKmoQUx7XHkzp16sjDw8NlU3GGhoYWGNB76623Svqjr/rVg4evPR7mH7fr169fYLsNGjTQunXrbMo8PDwKDIq/uq18X3/9tV599VWlp6fbjOGz9wO0sOPxpUuXdPr0aQUHBxd439lOnz6t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cejQIXeHUKg1a9a4OwS75syZ4+4QClWzZk13h1Co0vy3BgBAcc2ZM0eDBg3Sxo0btXnzZj355JOqUaOGhgwZIkl64403NGrUKCUnJ0uS9u/fr65du+rVV1/VzJkzdfr0aWuCMmvWLEl//Ig/fvy4Vq1aJW9vbw0bNkynTp0qNIaLFy+qffv2CgsL05dffqng4GBt2bJFFotFvXv31vbt27V06VKtWLFCkuTv719gG9nZ2YqNjVVMTIw2bdqkU6dOafDgwUpISLAmI5K0atUqhYSEaNWqVdq3b5969+6tyMhI6+ctKSQXAAAAuOmFh4frzTfflMlkUv369bVt2za9+eab1h/bHTt21P/93/9Z6w8ePFh9+/bViBEjJEn16tXT22+/rfbt22vq1Kk6cuSIlixZoo0bN+q2226TJL333ntq2LBhoTHMmzdPp0+f1qZNm1S1alVJUt26da3vV6hQQV5eXtftBjVv3jz9/vvvmjt3rsqXLy9Jmjx5snr27Knx48crKChIklSlShVNnjxZnp6eatCggbp3766VK1eWeHJBtygAAADc9G6//XaZrpppKiYmRnv37lVeXp4kKSoqyqb+1q1bNXv2bFWoUMG6xMbGymKx6ODBg9q5c6e8vLzUqlUr6zoNGjRQ5cqVC40hPT1dLVq0sCYWxbFz5041b97cmlhIUtu2bWWxWLR7925rWePGjeXp6Wl9HRISct27Ks7CnQsAAAD85V39Y136owvTU089pWHDhhWoW6NGDe3Zs8fhNvz8/Iodn6O8vb1tXptMJlkslhJvlzsXAAAAuOn98MMPNq+///571atXz+bq/tVatmypHTt2qG7dugUWHx8fNWjQQFeuXFFaWpp1nd27d+v8+fOFxtCsWTOlp6fr7Nmzdt/38fGx3kkpTMOGDbV161abgeXfffedPDw8VL9+/euu6wokFwAAALjpHTlyRImJidq9e7c++ugjTZo0ScOHDy+0/vPPP6/169crISFB6enp2rt3r7744gslJCRIkurXr6+uXbvqqaee0g8//KC0tDQNHjz4uncn+vTpo+DgYPXq1UvfffedDhw4oE8//VQbNmyQ9MesVQcPHlR6errOnDmjnJycAtvo27evfH19FRcXp+3bt2vVqlX629/+pieeeMI63sKdSC4AAABwYwzDtUsx9OvXT7/99ptat26t+Ph4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lizR7NmzrfWu7Ra1fv16RUZGytfXV1FRUVq0aJFMJpPS09Ml2XaLWr16tQYMGKDMzEzrnZLRo0cXGtNXX32l2267Tb6+vqpevbruv//+QutOnDhRTZs2Vfny5RUeHq5nnnlGFy9etL5/+PBh9ezZU1WqVFH58uXVuHFjffPNN5Kkc+fOqW/fvgoICJCfn5/q1aunWbNmFWs/An/Gy90BAAAAuEPHjh3VvHlzffbZZxo8eHCB97OystSzZ0/dc889mjdvng4fPqwRI0YUur02bdooNTVVo0aN0u7duyVJFSpUsFt38eLFuv/++/XSSy9p7ty5ys3NtSYD9nh4eOjtt99WrVq1dODAAT3zzDP6+9//rnfeeUeSFB8fr9zcXK1du1bly5fXjh07rG2//PLL2rFjh5YsWaLq1atr3759+u2334q6mwCHkFwAAIC/rAYNGuinn36y+968efNkMpk0Y8YM+fr6qlGjRjp27JiGDBlit76Pj4/8/f1lMpkUHBx83XZfe+01PfrooxozZoy1rHnz5oXWvzqpiYiI0KuvvqqhQ4dak4sjR47owQcfVNOmTSVJtWvXttY/cuSIWrRooaioKOv6QEmhWxQAAPjLMgyj0PESu3fvVrNmzeTr62sta926tVPaTU9PV6dOnYpcf8WKFerUqZPCwsJUsWJFPfHEE/r111916dIlSdKwYcP06quvqm3btkpOTrZJmJ5++mnNnz9fkZGR+vvf/67169c75TMA9pBcAACAv6ydO3eqVq1aLm/Xz8+vyHUPHTqkHj16qFmzZvr000+VlpamKVOmSJJyc3MlSYMHD9aBAwf0xBNPaNu2bYqKitKkSZMkSd26ddPhw4c1cuRIHT9+XJ06ddKzzz7r/A8FiOQCAAD8Rf3nP//Rtm3b9OCDD9p9v379+tq2bZtycnKsZZs2bbruNn18fJSXl/enbTdr1kwrV64sUpxpaWmyWCyaMGGCbr/9dt166606fvx4gXrh4eEaOnSoPvvsM/3f//2fZsyYYX0vICBAcXFx+uCDD5Samqrp06cXqW3AUSQXAADgppeTk6OMjAwdO3ZMW7Zs0dixY3XfffepR48e6tevn911HnvsMVksFj355JPauXOnli1bpjfeeEOSCu1KFRERoYsXL2rlypU6c+aMtdvStZKTk/XRRx8pOTlZO3fu1LZt2zR+/Hi7devWravLly9r0qRJOnDggN5//31NmzbNps6IESO0bNkyHTx4UFu2bNGqVavUsGFDSdKoUaP0xRdfaN++ffr555/19ddfW98DnI3kAgAA3PSWLl2qkJAQRUREqGvXrlq1apXefvttffHFF/L09LS7TqVKlfTVV18pPT1dkZGReumllzRq1ChJshmHcbU2bdpo6NCh6t27twICAvT666/brdehQwd98skn+vLLLxUZGamOHTtq48aNdus2b95cEydO1Pjx49WkSRN9+OGHSklJsamTl5en+Ph4NWzYUF27dtWtt95qHezt4+OjpKQkNWvWTHfeeac8PT01f/78Iu03wFEmwzAMdwcBAABQFnz44YfWZ1k4Mm4C+KtgKloAAIBCzJ07V7Vr11ZYWJi2bt2q559/Xo888giJBVAIkgsAAIBCZGRkaNSoUcrIyFBISIgefvhhvfbaa+4OCyi16BYFAAAAwCkY0A0AAADAKUguAAAAADgFyQUAAAAApyC5AAAAAOAUJBcAAAAAnILkAgAAAIBTkFwAAAAAcAqSCwAAAABO8f8AhduKMBoo9qIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGJCAYAAAD4084mAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAVZpJREFUeJzt3Xl8TGf///H3ZJvEFmvWhth3glQaqtYKRasbVSXWbsltya+LtCXcbYXeraYtpdyWbkqrpS1FUfR2o4hGqa12RSxVCdEmZM7vj34zt5EJJiYzib6ej8d5PJxrrnOuz5yJc+Yz57quYzIMwxAAAAAA3CQPdwcAAAAA4NZAcgEAAADAKUguAAAAADgFyQUAAAAApyC5AAAAAOAUJBcAAAAAnILkAgAAAIBTkFwAAAAAcAqSCwAAAABOQXKBm9auXTu1a9fO3WEUqcK+x0OHDslkMun11193Wixr1qyRyWTSmjVrnLZPAChuBgwYoDJlyjh1nyaTSfHx8detN2fOHJlMJh06dMhadvV1IO/8PmfOnBtue+zYsY4F7ASbNm2Sj4+PDh8+7PK2r2XAgAEKDw+3KXP2MSqp308uXbqksLAwvfvuu+4OpVBILooxk8l0QwtfMuGolStXqn379qpcubLKly+vli1b6sMPP3R3WECJ8vPPP+uxxx5TaGiozGazQkJC1LdvX/388883td/x48dr0aJFzgnyOtavX6+xY8fq3LlzLmnvVvfNN9+4JYG4lhdffFF9+vRRtWrV3B1Kkdi5c6fGjh1rkwgWVydOnNCoUaPUvn17lS1btsDvcN7e3kpISNCrr76qP//80/WB3iQvdweAgl39Ze+DDz7QihUr8pXXr1/flWHl8+2337q1fTjmq6++Us+ePRUdHa2xY8fKZDLp008/Vf/+/XXmzBmNHDnS3SECxd4XX3yhPn36qGLFiho8eLCqV6+uQ4cOaebMmVqwYIHmzZun+++/v1D7Hj9+vB566CH17NnTuUHbsX79eo0bN04DBgxQ+fLli7y9kqJfv3565JFHZDabC6xTrVo1/fHHH/L29raWffPNN5oyZYrdBOOPP/6Ql5drv3alpaVp5cqVWr9+vUvbLazCHKOdO3dq3LhxateuXb47IcXt+8mePXs0ceJE1a5dW40bN9aGDRsKrDtw4ECNGjVKc+fO1aBBg1wY5c0juSjGHnvsMZv1jRs3asWKFfnKr3bx4kWVKlWqKEOz4ePj47K2cPMmT56s4OBgfffdd9YL5xNPPKF69eppzpw5JBfAdezfv1/9+vVTjRo19P3336tKlSrW14YPH642bdqoX79++umnn1SjRg03Rlq8/Pnnn/Lx8ZGHR/HvNOHp6SlPT89r1jGZTPL19b3hfTpS11lmz56tqlWr6o477nDaPrOyslS6dGmn7e9Kzj5Gxe37SYsWLfTbb7+pYsWKWrBggR5++OEC65YvX16dO3fWnDlzSlxyUfz/h+Oa2rVrp0aNGik1NVV33XWXSpUqpRdeeEFSwX0Xw8PDNWDAAJuyc+fOacSIEQoLC5PZbFatWrU0ceJEWSyWG4rhyj6NeWMCPv30U40bN06hoaEqW7asHnroIWVkZCg7O1sjRoxQQECAypQpo4EDByo7O9tmn7Nnz1aHDh0UEBAgs9msBg0aaOrUqfnatlgsGjt2rEJCQlSqVCm1b99eO3fudPp7vFpOTo7GjBmjFi1ayN/fX6VLl1abNm20evXqArd58803Va1aNfn5+alt27basWNHvjq7d+/WQw89pIoVK8rX11eRkZH66quvrhvPxYsXtXv3bp05c+a6dTMzM1WhQgWbX+S8vLxUuXJl+fn5XXd74O/uX//6ly5evKjp06fbJBaSVLlyZb333nvKysrSa6+9Zi23179ckvXuYR6TyaSsrCy9//771q6veeeyvLq7d+9Wr169VK5cOVWqVEnDhw+36TpxrbEAV14Xxo4dq2effVaSVL16dWt71+pecuU1p1WrVvLz81P16tU1bdo0m3p514F58+bppZdeUmhoqEqVKqXMzExJ0meffaYWLVrIz89PlStX1mOPPaZjx47ZbfPAgQOKiYlR6dKlFRISon/+858yDMOmzuuvv65WrVqpUqVK8vPzU4sWLbRgwYIC38fHH3+sunXrytfXVy1atND3339v87q9MRdXu/o4DxgwQFOmTJFk2605j71r8rFjxzRo0CAFBgbKbDarYcOGmjVrVr623nnnHTVs2FClSpVShQoVFBkZqblz5xYYW55FixapQ4cONnFIf30P6N69u7799ltFRETI19dXDRo00BdffGH3OKxdu1ZPP/20AgICdNttt1lfX7p0qdq0aaPSpUurbNmy6tatm91ugYsWLVKjRo3k6+urRo0aaeHChXbjLegYDR48WCEhITKbzapevbqeeuop5eTkaM6cOdYv6O3bt8/XXdzemItTp05p8ODBCgwMlK+vr5o2bar333/fps6V4yWnT5+umjVrymw26/bbb9fmzZtt6l66dEm7d+/WiRMn7L6nK5UtW1YVK1a8br08d999t9atW6ezZ8/e8DbFAXcubgG//fabunbtqkceeUSPPfaYAgMDHdr+4sWLatu2rY4dO6YnnnhCVatW1fr165WYmKgTJ04oJSWlUHElJyfLz89Po0aN0r59+/TOO+/I29tbHh4e+v333zV27Fht3LhRc+bMUfXq1TVmzBjrtlOnTlXDhg117733ysvLS19//bWefvppWSwWxcXFWeslJibqtddeU48ePRQTE6Nt27YpJiYmXx9FZ7/HzMxM/fvf/1afPn00dOhQnT9/XjNnzlRMTIw2bdqkiIgIm/offPCBzp8/r7i4OP35559666231KFDB23fvt36ef38889q3bq1QkNDNWrUKJUuXVqffvqpevbsqc8///yaXSw2bdqk9u3bKykp6br9fdu1a6eJEydq9OjRio2Nlclk0ty5c7VlyxZ9+umnDh0H4O/o66+/Vnh4uNq0aWP39bvuukvh4eFasmSJw/v+8MMPNWTIELVs2VKPP/64JKlmzZo2dXr16qXw8HAlJydr48aNevvtt/X777/rgw8+cKitBx54QHv37tUnn3yiN998U5UrV5akfAnT1X7//Xfdc8896tWrl/r06aNPP/1UTz31lHx8fPL9wvryyy/Lx8dHzzzzjLKzs+Xj46M5c+Zo4MCBuv3225WcnKyTJ0/qrbfe0n//+1/9+OOPNt2zcnNz1aVLF91xxx167bXXtGzZMiUlJeny5cv65z//aa331ltv6d5771Xfvn2Vk5OjefPm6eGHH9bixYvVrVs3m5jWrl2r+fPna9iwYTKbzXr33XfVpUsXbdq0SY0aNXLoGF7piSee0PHjx+12X7bn5MmTuuOOO6yDzKtUqaKlS5dq8ODByszM1IgRIyRJM2bM0LBhw/TQQw9ZE8mffvpJP/zwgx599NEC93/s2DEdOXJEzZs3t/v6L7/8ot69e+vJJ59UbGysZs+erYcffljLli3T3XffbVP36aefVpUqVTRmzBhlZWVJ+utvNTY2VjExMZo4caIuXryoqVOn6s4779SPP/5oTaa//fZbPfjgg2rQoIGSk5P122+/aeDAgTZJSkGOHz+uli1b6ty5c3r88cdVr149HTt2TAsWLNDFixd11113adiwYXr77bf1wgsvWLuJF9Rd/I8//lC7du20b98+xcfHq3r16vrss880YMAAnTt3TsOHD7epP3fuXJ0/f15PPPGETCaTXnvtNT3wwAM6cOCAtTvcsWPHVL9+fcXGxt7w4P4b1aJFCxmGofXr16t79+5O3XeRMlBixMXFGVd/ZG3btjUkGdOmTctXX5KRlJSUr7xatWpGbGysdf3ll182Spcubezdu9em3qhRowxPT0/jyJEj14yrbdu2Rtu2ba3rq1evNiQZjRo1MnJycqzlffr0MUwmk9G1a1eb7aOjo41q1arZlF28eDFfOzExMUaNGjWs6+np6YaXl5fRs2dPm3pjx441JBXpe7x8+bKRnZ1tU+f33383AgMDjUGDBlnLDh48aEgy/Pz8jF9//dVa/sMPPxiSjJEjR1rLOnbsaDRu3Nj4888/rWUWi8Vo1aqVUbt2bWtZ3vFdvXp1vjJ7n/fVLly4YPTq1cswmUyGJEOSUapUKWPRokXX3Rb4uzt37pwhybjvvvuuWe/ee+81JBmZmZmGYRhGbGxsvvOcYRhGUlJSvvN66dKlbc5fV9e99957bcqffvppQ5Kxbds2wzD+d96ZPXt2vn1cfZ7417/+ZUgyDh48eM33kyfvmvPGG29Yy7Kzs42IiAgjICDAes7POyfVqFHD5nyek5NjBAQEGI0aNTL++OMPa/nixYsNScaYMWOsZbGxsYYk4x//+Ie1zGKxGN26dTN8fHyM06dPW8uvvmbk5OQYjRo1Mjp06JDv/UsytmzZYi07fPiw4evra9x///3WstmzZ+c7LldfB+wdZ3vX6SvbvvLYDx482AgODjbOnDljU++RRx4x/P39re/pvvvuMxo2bGh3n9eycuVKQ5Lx9ddf53utWrVqhiTj888/t5ZlZGQYwcHBRrNmzaxlecfhzjvvNC5fvmwtP3/+vFG+fHlj6NChNvtNT083/P39bcojIiKM4OBg49y5c9ayb7/91pCU7//E1ceof//+hoeHh7F58+Z878FisRiGYRifffZZvmtinqs/s5SUFEOS8dFHH1nLcnJyjOjoaKNMmTLW/695n22lSpWMs2fPWut++eWX+Y5pXl17/2ev5Vpx5zl+/LghyZg4caJD+3Y3ukXdAsxmswYOHFjo7T/77DO1adNGFSpU0JkzZ6xLp06dlJubm+928Y3q37+/zUC3qKgoGYaR75etqKgoHT16VJcvX7aWXdk9JyMjQ2fOnFHbtm114MABZWRkSJJWrVqly5cv6+mnn7bZ3z/+8Y8if4+enp7WvpwWi0Vnz57V5cuXFRkZqa1bt+ar37NnT4WGhlrXW7ZsqaioKH3zzTeSpLNnz+q7775Tr169dP78eWt8v/32m2JiYvTLL78U2GVA+utuhGEYNzRLidlsVp06dfTQQw/pk08+0UcffaTIyEg99thj2rhxo0PHAfi7OX/+vKS/ujdcS97red2AnOnKu7fS/855eeeToubl5aUnnnjCuu7j46MnnnhCp06dUmpqqk3d2NhYm/P5li1bdOrUKT399NM2/eu7deumevXq2b3bc+XUsXm/8ufk5GjlypXW8ivb+P3335WRkaE2bdrYPR9HR0erRYsW1vWqVavqvvvu0/Lly5Wbm3ujh+GmGIahzz//XD169JBhGDbXpZiYGGVkZFhjL1++vH799dd83XGu57fffpMkVahQwe7rISEhNnfEy5Urp/79++vHH39Uenq6Td2hQ4fajEFZsWKFzp07pz59+tjE7unpqaioKGsX4RMnTigtLU2xsbHy9/e3bn/33XerQYMG14zfYrFo0aJF6tGjhyIjI/O9fnVXrxvxzTffKCgoSH369LGWeXt7a9iwYbpw4YLWrl1rU7937942xy/vbuWBAwesZeHh4TIMw+l3LaT/fXY30uW5OKFb1C0gNDT0pgYt/fLLL/rpp58KvBV+6tSpQu23atWqNut5J5awsLB85RaLRRkZGapUqZIk6b///a+SkpK0YcMGXbx40aZ+RkaG/P39rXN216pVy+b1ihUr5juZFsV7fP/99/XGG29o9+7dunTpkrW8evXq+erWrl07X1mdOnWs3ZD27dsnwzA0evRojR49usAYr0xQCis+Pl4bN27U1q1brQMre/XqpYYNG2r48OH64YcfbroN4FaVlzTkJRkFudEkpDCuPp/UrFlTHh4eLpuKMyQkJN+A3jp16kj6q6/6lYOHrz4f5p2369atm2+/9erV07p162zKPDw88g2Kv7KtPIsXL9Yrr7yitLQ0mzF89r6AFnQ+vnjxok6fPq2goKB8rzvb6dOnde7cOU2fPl3Tp0+3WyfvuvT8889r5cqVatmypWrVqqXOnTvr0UcfVevWrW+oLeOq8Sl5atWqle/4XHlsrzwOV3+Ov/zyiySpQ4cOdvddrlw5Sf/7vO0d87p169pN/vKcPn1amZmZN9VV7WqHDx9W7dq1800qkNeN6upngVz9PSbvu8Xvv//utJiuJe+zK0wi5U4kF7cARwfhXv3LjMVi0d13363nnnvObv28k42jCpppo6DyvP9E+/fvV8eOHVWvXj1NmjRJYWFh8vHx0TfffKM333yzUAOwnf0eP/roIw0YMEA9e/bUs88+q4CAAHl6eio5OVn79+8vVHyS9MwzzygmJsZunauTqMLIycnRzJkz9dxzz9mcXL29vdW1a1dNnjxZOTk5xW6GDaC48Pf3V3BwsH766adr1vvpp58UGhpq/ZJV0JcDZ/xSfvW+i7ItR7likoj//Oc/uvfee3XXXXfp3XffVXBwsLy9vTV79uwbGvTsDnnn/Mcee0yxsbF26zRp0kTSX1989+zZo8WLF2vZsmX6/PPP9e6772rMmDEaN25cgW3k/VjnjC/CV3+OefF/+OGHdpMxV0+5W1Su932lqOV9dnnjoUqKW+PTh10VKlTI92CknJycfDMa1KxZUxcuXFCnTp1cGF3Bvv76a2VnZ+urr76y+dXg6pmY8h4ItG/fPptfVX777bd8J1Nnv8cFCxaoRo0a+uKLL2wu5ElJSXbr5/3Kc6W9e/daB7zl/TLn7e1dpJ/Db7/9psuXL9v9knHp0iVZLBa3fAEBSpLu3btrxowZWrdune688858r//nP//RoUOHbLoO2TsfS/l/KZWu/yvlL7/8YnPO27dvnywWi/V8kvfr6tXtFaYte44fP55vOtK9e/dKkt0Zsa6Ud97es2dPvl+99+zZk+9BbxaLRQcOHLD5Aejqtj7//HP5+vpq+fLlNrPgzZ49224MBZ2PS5Uqdd3B7Ndzo8ezSpUqKlu2rHJzc2/onF+6dGn17t1bvXv3Vk5Ojh544AG9+uqrSkxMLHD61nr16kmSDh48aPf1vDvmV8Z8o59j3iQDAQEB14w/7/O0d8z37NlzzTaqVKmicuXK2Z1Z8UqO/A1Xq1ZNP/30kywWi80PbLt377aJt7jI++zc/TwzRzHm4hZWs2bNfGMJpk+fnu/LY69evbRhwwYtX7483z7OnTtnMxbCFfJ+Kbjyl4GMjIx8F4qOHTvKy8sr3xS1kydPzrdPZ79HezH+8MMPBT4QZ9GiRTZjJjZt2qQffvhBXbt2lfTXCbpdu3Z677337E5nd/r06WvGc6NT0QYEBKh8+fJauHChcnJyrOUXLlzQ119/rXr16jEdLXAdzz77rPz8/PTEE09Y+7XnOXv2rJ588kmVKlXKOs2r9Nf5OCMjw+aOx4kTJ+xOyVm6dOlrPjE7b7rTPO+8844kWc8n5cqVU+XKlfOd/9999127bUn5E5FruXz5st577z3rek5Ojt577z1VqVLFZiyDPZGRkQoICNC0adNsui8tXbpUu3btyjezk2R7TjcMQ5MnT5a3t7c6duwo6a/zsclksrm2HTp0qMCnnG/YsMGmO87Ro0f15ZdfqnPnztd9tsX13Ojx9PT01IMPPqjPP//c7pfnK8/5V/+N+fj4qEGDBjIMw6ZL7tVCQ0MVFhamLVu22H39+PHjNn9/mZmZ+uCDDxQREXHdrmExMTEqV66cxo8fbzeGvPiDg4MVERGh999/3zpeUvprzMbOnTuv2YaHh4d69uypr7/+2u57yLv+OvI3fM899yg9PV3z58+3ll2+fFnvvPOOypQpo7Zt2153H1dzZCpaR6WmpspkMik6Otrp+y5K3Lm4hQ0ZMkRPPvmkHnzwQd19993atm2bli9fnu/22rPPPquvvvpK3bt314ABA9SiRQtlZWVp+/btWrBggQ4dOuTSW3KdO3eWj4+PevTooSeeeEIXLlzQjBkzFBAQYPOfNzAwUMOHD9cbb7yhe++9V126dNG2bdu0dOlSVa5c2ebXDGe/x+7du+uLL77Q/fffr27duungwYOaNm2aGjRooAsXLuSrX6tWLd1555166qmnlJ2drZSUFFWqVMmmm9aUKVN05513qnHjxho6dKhq1KihkydPasOGDfr111+1bdu2AuO50aloPT099cwzz+ill17SHXfcof79+ys3N1czZ87Ur7/+qo8++uiGjwHwd1W7dm29//776tu3rxo3bpzvCd1nzpzRJ598YjOF7COPPKLnn39e999/v4YNG2adtrNOnTr5+p23aNFCK1eu1KRJkxQSEqLq1asrKirK+vrBgwet57wNGzboo48+0qOPPqqmTZta6wwZMkQTJkzQkCFDFBkZqe+//976q/TVbUnSiy++qEceeUTe3t7q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XbrkxKMKwF24c3GVc+fOuTsEu9q1a+fuEAq0bds2d4dgV9u2bd0dQoHWrl3r7hAKVFz7TkdERLg7BKDIvP/++xo8eLA2bdqkLVu26PHHH1fVqlU1dOhQSdLrr7+uMWPGKCkpSZK0f/9+denSRa+88opmzZql06dPWxOU2bNnS/rrS/zx48e1evVqeXt7a9iwYTp16lSBMVy4cEFt27ZVaGiovvrqKwUFBWnr1q2yWCzq3bu3duzYoWXLlmnlypWSJH9//3z7yMrKUkxMjKKjo7V582adOnVKQ4YMUXx8vDUZkaTVq1crODhYq1ev1r59+9S7d29FRERY3y+AkovkAgAANwsLC9Obb74pk8mkunXravv27XrzzTetX7Y7dOig//f//p+1/pAhQ9S3b1+NGDFCklS7dm29/fbbatu2raZOnaojR45o6dKl2rRpk26//XZJ0syZM1W/fv0CY5g7d65Onz6tzZs3q2LFipKkWrVqWV8vU6aMvLy8rtkNau7cufrzzz/1wQcfqHTp0pKkyZMnq0ePHpo4caICAwMlSRUqVNDkyZPl6empevXqqVu3blq1ahXJBXALoFsUAABudscdd8h0xWxT0dHR+uWXX5SbmytJioyMtKm/bds2zZkzR2XKlLEuMTExslgsOnjwoHbt2iUvLy+1aNHCuk29evVUvnz5AmNIS0tTs2bNrIlFYezatUtNmza1JhaS1Lp1a1ksFu3Zs8da1rBhQ3l6elrXg4ODr3lXBUDJwZ0LAACKuSu/rEt/dWF64oknNGzYsHx1q1atqr179zrchp+fX6Hjc5S3t7fNuslkksVicVn7AIoOdy4AAHCzH374wWZ948aNql27ts2v+1dq3ry5du7cqVq1auVbfHx8VK9ePV2+fFmpqanWbfbs2XPNcYVNmjRRWlqazp49a/d1Hx8f652UgtSvX1/btm2zGVj+3//+Vx4eHqpbt+41twVwayC5AADAzY4cOaKEhATt2bNHn3zyid555x0NHz68wPrPP/+81q9fr/j4eKWlpemXX37Rl19+qfj4eElS3bp11aVLFz3xxBP64YcflJqaqiFDhlzz7kSfPn0UFBSknj176r///a8OHDigzz//XBs2bJD016xVBw8eVFpams6cOaPs7Ox8++jbt698fX0VGxurHTt2aPXq1frHP/6hfv36WcdbALi1kVwA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AgAAACi+HEouoqKiNGfOHC1btkxTp07VwYMH1aZNG50/f77AbRITE5WRkWFdjh49etNBAwAAACh+HOoW1bVrV+u/mzRpoqioKFWrVk2ffvqpBg8ebHcbs9kss9l8c1ECAAAAKPZuaira8uXLq06dOtq3b5+z4gEAAABQQt1UcnHhwgXt379fwcHBzooHAAAAQAnlUHLxzDPPaO3atTp06JDWr1+v+++/X56enurTp09RxQcAAACghHBozMWvv/6qPn366LffflOVKlV05513auPGjapSpUpRxQcAAACghHAouZg3b15RxQEAAACghLupMRcAAAAAkIfkAgAAAIBTkFwAAAAAcAqSCwAAAABOQXIBAAAAwClILgAAAAA4BckFAAAAAKcguQAAAADgFCQXAAAAAJyC5AIAAACAU5BcAAAAAHAKkgsAAAAATuHl7gBQ8m3bts3dIcCJzp075+4QAABACcWdCwAAAABOQXIBAAAAwClILgAAAAA4BWMuAABwJZPJNe0YhmvaAYArcOcCAAAAgFOQXAAAAABwCpILAAAAAE5BcgEAAADAKUguAAAAADgFyQUAAAAApyC5AAAAAOAUJBcAAAAAnILkAgAAAIBTkFwAAAplypQpCg8Pl6+vr6KiorRp06YC686YMUNt2rRRhQoVVKFCBXXq1Oma9QEAJZPDycWxY8f02GOPqVKlSvLz81Pjxo21ZcuWoogNAFBMzZ8/XwkJCUpKStLWrVvVtGlTxcTE6NSpU3brr1mzRn369NHq1au1YcMGhYWFqXPnzjp27JiLIwcAFCWHkovff/9drVu3lre3t5YuXaqdO3fqjTfeUIUKFYoqPgBAMTRp0iQNHTpUAwcOVIMGDTRt2jSVKlVKs2bNslv/448/1tNPP62IiAjVq1dP//73v2WxWLRq1SoXRw4AKEpejlSeOHGiwsLCNHv2bGtZ9erVnR4UAKD4ysnJUWpqqhITE61lHh4e6tSpkzZs2HBD+7h48aIuXbqkihUrFlgnOztb2dnZ1vXMzMzCBw0AcAmH7lx89dVXioyM1MMPP6yAgAA1a9ZMM2bMuOY22dnZyszMtFkAACXXmTNnlJubq8DAQJvywMBApaen39A+nn/+eYWEhKhTp04F1klOTpa/v791CQsLu6m4AQBFz6Hk4sCBA5o6dapq166t5cuX66mnntKwYcP0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pCR98sknSkpK0q5du7R9+3ZNnDjRbt1atWrp0qVLeuedd3TgwAF9+OGHmjZtmk2dESNGaPny5Tp48KC2bt2q1atXq379+pKkMWPG6Msvv9S+ffv0888/a/HixdbXAGcjuQAAALe8ZcuWKTg4WOHh4erSpYtWr16tt99+W19++aU8PT3tblOuXDl9/fXXSktLU0REhF588UWNGTNGkmzGYVypVatWevLJJ9W7d29VqVJFr732mt167dq102effaavvvpKERER6tChgzZt2mS3btOmTTVp0iRNnDhRjRo10scff6zk5GSbOrm5uYqLi1P9+vXVpUsX1alTxzrY28fHR4mJiWrSpInuuusueXp6at68eTd03ABHmQzDMNwdBAAAQEnw8ccfW59l4ci4CeDvgqloAQAACvDBBx+oRo0aCg0N1bZt2/T888+rV69eJBZAAUguAAAACpCenq4xY8YoPT1dwcHBevjhh/Xqq6+6Oyyg2KJbFAAAAACnYEA3AAAAAKcguQAAAADgFCQXAAAAAJyC5AIAAACAU5BcAAAAAHAKkgsAAAAATkFyAQAAAMApSC4AAAAAOMX/B17LgKku+5wLAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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ztTMmTOd1sm7L40ePVorV65UixYtVKtWLXXu3FkPPPCAWrduXai2jALG69eqVSvf+bn43F58Hi59H/fs2SNJBU40rlChgqT/vd/OznmdOnWcJn95Tpw4oczMTFOHAx08eFC1a9fOt6hA3jCqS38L5NLPMXmfLf74448itT98+HC1atVKd999d6Hq5713RUmkPInk4hrg6ofBS7+ZsdlsuvXWW/Wvf/3Laf28i42rClppo6DyvP9Ev/zyizp27Ki6detq8uTJioyMlJ+fn7766iu98sorRZqAbfZrfO+999SvXz/17NlTTzzxhIKDg+Xt7a2UlBT98ssvRYpPkh5//HHFx8c7rXNpElUUlStXltVqdTrxLK8sPDz8qtsBrlWBgYEKCwvTTz/9dNl6P/30kyIiIuwfsgr6cGDGN+WXHrs423KVO76s+M9//qPbb79dt9xyi9544w2FhYXJ19dXc+bMKdSkZ0/Iu+Y/+OCDSkhIcFqncePGkv7+4Ltr1y598cUXWrZsmT7++GO98cYbGjNmjMaNG1dgG3lf1hX1g/DFLn0f8+J/9913nSZj7l5yt7hc6fOKK7755hstW7ZMn3zyiUNifOHCBf355586cOCAKleubL9mSP977/LmQ5UW18a7D6cqVaqU74eRcnJy8n2wrFmzps6ePatOnTq5MbqCff7558rOztZnn33m8K3BpSsx5f0g0N69ex2+Vfn999/zXUzNfo2LFi1SjRo19MknnzjcyJOTk53Wz/uW52K7d++2T3jL+2bO19e3WN8HLy8vNWrUSJs3b8733Pfff68aNWowmRu4gu7du2vWrFlat26dbr755nzP/+c//9GBAwcchg45ux5L+b8pla78LeWePXscrnl79+6VzWazX0/yvl29tL2itOXMb7/9lm850t27d0uS0xWxLpZ33d61a1e+b7137dqV74febDab9u3b5/AF0KVtffzxx/L399fy5csdhprMmTPHaQwFXY/LlClzxcnsV1LY8xkUFKTy5csrNze3UNf8smXLqlevXurVq5dycnJ011136YUXXlBSUlKBy7fWrVtXkrR//36nz+f1mF8cc2Hfx7xFBoKDgy8bf9776eyc79q167JtBAUFqUKFCk5XVryYK3/D1atX108//SSbzebQe7Fz506HeIvDoUOHJP29kMKljhw5oujoaL3yyiv2ifzS/947T/+emauYc3ENq1mzZr65BDNnzsz37dV9992nDRs2aPny5fmOcfr0aYe5EO6Q903Bxd8MZGRk5LtRdOzYUT4+PvmWqJ06dWq+Y5r9Gp3F+P3332vDhg1O6y9ZssRhzsTGjRv1/fffq2vXrpL+vkC3a9dOb775ptNehRMnTlw2HleWor3nnnu0adMmhwRj165d+uabb+xL+gEo2BNPPKGAgAA98sgj9nHteU6dOqUhQ4aoTJky9mVepb+vxxkZGQ49HkePHnW6JGfZsmUv+4vZecud5nn99dclyX49qVChgqpWrZrv+v/GG284bUvKn4hczoULF/Tmm2/aH+fk5OjNN99UUFCQw1wGZ2JjYxUcHKwZM2Y4DF9aunSpduzYkW9lJ8nxmm4YhqZOnSpfX1917NhR0t/XY4vF4nBvO3DgQIG/cr5hwwaH4TiHDx/Wp59+qs6dO1/xty2upLDn09vbW3fffbc+/vhjpx+eL77mX/o35ufnp/r168swDIchuZeKiIhQZGSk0y+TpL+TxIv//jIzM/XOO+8oJibmikPD4uPjVaFCBY0fP95pDHnxh4WFKSYmRvPmzbPPl5T+nrOxffv2y7bh5eWlnj176vPPP3f6GvLuv678Dd92221KT0/XwoUL7WUXLlzQ66+/rnLlyqlt27ZXPMalCrsUbYcOHbR48eJ8W1BQkGJjY7V48WL16NHDYZ/U1FQFBgaqQYMGLsflSfRcXMMGDRqkIUOG6O6779att96qH3/8UcuXL8/XvfbEE0/os88+U/fu3dWvXz81b95cWVlZ2rp1qxYtWqQDBw64tUuuc+fO8vPzU48ePfTII4/o7NmzmjVrloKDgx3+84aEhGj48OGaNGmSbr/9dnXp0kU//vijli5dqqpVqzp8m2H2a+zevbs++eQT3XnnnerWrZv279+vGTNmqH79+jp79my++rVq1dLNN9+sRx99VNnZ2ZoyZYqqVKniMExr2rRpuvnmm9WoUSMNHjxYNWrU0LFjx7Rhwwb9+uuv+vHHHwuMp7BL0Up/Lyk4a9YsdevWTY8//rh8fX01efJkhYSE6P/+7/8KfQ6A61Xt2rU1b9489enTR40aNcr3C90nT57UBx984LCE7P3336/Ro0frzjvv1LBhw+zLdt544435xp03b95cK1eu1OTJkxUeHq7o6Gi1bNnS/vz+/fvt17wNGzbovffe0wMPPKAmTZrY6wwaNEgTJkzQoEGDFBsbq2+//db+rfSlbUnS008/rfvvv1++vr7q0aPHZX8kLTw8XBMnTtSBAwd04403auHChUpLS9PMmTMdFvFwxtfXVxMnTlT//v3Vtm1b9e7d274UbVRUlEaOHOlQ39/fX8uWLVNCQoJatmyppUuX6ssvv9RTTz1l72Xo1q2bJk+erC5duuiBBx7Q8ePHNW3aNNWqVcvp8LWGDRsqPj7eYSlaSZcdYlRYeedz2LBhio+Pl7e3t+6//36ndSdMmKDVq1erZcuWGjx4sOrXr69Tp05py5YtWrlypU6dOiXp73tiaGioWrdurZCQEO3YsUNTp05Vt27drtjTfMcdd2jx4sX5eiikv4cDDxw4UJs2bVJISIhmz56tY8eOFdjjc7EKFSpo+vTpeuihh9SsWTPdf//9CgoK0qFDh/Tll1+qdevW9qQwJSVF3bp1080336wBAwbo1KlT9t/tcHa/vNj48eP19ddfq23btnr44YdVr149HT16VB999JHWrVunihUrKiYmRt7e3po4caIyMjJktVrtv5N1qYcfflhvvvmm+vXrp9TUVEVFRWnRokX673//qylTphSp576wS9FWq1Yt3xwOSRoxYoRCQkLUs2fPfM+tWLFCPXr0KHVzLliKthQpaCnagpaoy83NNUaPHm1UrVrVKFOmjBEfH2/s3bs331K0hvH3snJJSUlGrVq1DD8/P6Nq1apGq1atjJdfftlhOVlnClqK9qOPPnKol7ek3aVLyuUtr3jxsoKfffaZ0bhxY8Pf39+IiooyJk6caMyePTvf0oAXLlwwnnnmGSM0NNQICAgwOnToYOzYscOoUqWKMWTIkGJ7jTabzRg/frxRvXp1w2q1Gk2bNjW++OKLfMtN5i1R99JLLxmTJk0yIiMjDavVarRp08a+bOTFfvnlF6Nv375GaGio4evra0RERBjdu3c3Fi1alO/8FmUp2jyHDx827rnnHqNChQpGuXLljO7duxt79uwp1L4A/vbTTz8ZvXv3NsLCwgxfX18jNDTU6N27t7F161an9b/++mujYcOGhp+fn1GnTh3jvffec7oU7c6dO41bbrnFCAgIcFjiMq/u9u3bjXvuuccoX768UalSJWPo0KEOy7oaxt9Lsw4cONAIDAw0ypcvb9x3333G8ePH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rVarrFZrkYIDAAAAUHq4lFwYhqF//vOfWrx4sdasWaPo6OjiigsAAABAKeNScpGYmKj58+fr008/Vfny5ZWeni5JCgwMVEBAQLEECAAAAKB0cGnOxfTp05WRkaF27dopLCzMvi1cuLC44gMAAABQSrg8LAoAAAAAnCnyalEAAAAAcDGSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACmILkAAAAAYAqSCwAAAACm8PF0ACXNgQMHPB2CUxUrVvR0CAWaMmWKp0Nwql27dp4OoUBt27b1dAgFWrJkiadDcComJsbTIQAAgCug5wIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAUCTTpk1TVFSU/P391bJlS23cuPGy9U+fPq3ExESFhYXJarXqxhtv1FdffeWmaAEA7uDj6QAAAKXPwoULNWrUKM2YMUMtW7bUlClTFB8fr127dik4ODhf/ZycHN16660KDg7WokWLFBERoYMHD6pixYruDx4AUGxILgAALps8ebIGDx6s/v37S5JmzJihL7/8UrNnz9aTTz6Zr/7s2bN16tQprV+/Xr6+vpKkqKgod4YMAHADl4ZFTZ8+XY0bN1aFChVUoUIFxcXFaenSpcUVGwCgBMrJyVFqaqo6depkL/Py8lKnTp20YcMGp/t89tlniouLU2JiokJCQtSwYUONHz9eubm5BbaTnZ2tzMxMhw0AULK5lFzccMMNmjBhglJTU7V582Z16NBBd9xxh37++efiig8AUMKcPHlSubm5CgkJcSgPCQlRenq603327dunRYsWKTc3V1999ZWeeeYZTZo0Sc8//3yB7aSkpCgwMNC+RUZGmvo6AADmc2lYVI8ePRwev/DCC5o+fbq+++47NWjQwOk+2dnZys7Otj/mmycAuP7YbDYFBwdr5syZ8vb2VvPmzXXkyBG99NJLSk5OdrpPUlKSRo0aZX+cmZlJggEAJVyR51zk5ubqo48+UlZWluLi4gqsl5KSonHjxhW1GQBACVO1alV5e3vr2LFjDuXHjh1TaGio033CwsLk6+srb29ve1m9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vn17DR8+XN27d9eFCxfs9UJDQ2W1Wgt9XD8/P4WGhspisRRH2ECpQ3IBAACueVarVaGhoYqIiFCzZs301FNP6dNPP9XSpUs1d+5ce71Lh0WtX79eMTEx8vf3V2xsrJYsWSKLxaK0tDRJjsOi1qxZo/79+ysjI8PeUzJ27NgCY/r888910003yd/fX1WrVtWdd95ZYN3JkyerUaNGKlu2rCIjI/XYY4/p7Nmz9ucPHjyoHj16qFKlSipbtqwaNGigr776SpL0xx9/qE+fPgoKClJAQIBq166tOXPmFOk8Alfi4+kAAAAAPKFDhw5q0qSJPvnkEw0aNCjf85mZmerRo4duu+02zZ8/XwcPHtSIESMKPF6rVq00ZcoUjRkzRrt27ZIklStXzmndL7/8UnfeeaeefvppvfPOO8rJybEnA854eXnptddeU3R0tPbt26fHHntM//rXv/TGG29IkhITE5WTk6Nvv/1WZcuW1fbt2+1tP/PMM9q+fbuWLl2qqlWrau/evfrzzz8Le5oAl5BcAACA61bdunX1008/OX1u/vz5slgsmjVrlvz9/VW/fn0dOXJEgwcPdlrfz89PgYGBslgsCg0NvWy7L7zwgu6//36NGzfOXtakSZMC61+c1ERFRen555/XkCFD7MnFoUOHdPfdd6tRo0aSpBo1atjrHzp0SE2bNlVsbKx9f6C4MCwKAABctwzDKHC+xK5du9S4cWP5+/vby1q0aGFKu2lpaerYsWOh669cuVIdO3ZURESEypcvr4ceeki///67zp07J0kaNmyYnn/+ebVu3VrJyckOCdOjjz6qBQsWKCYmRv/617+0fv16U14D4AzJBQAAuG7t2LFD0dHRbm83ICCg0HUPHDig7t27q3Hjxvr444+VmpqqadOmSZJycnIkSYMGDdK+ffv00EMPaevWrYqNjdXrr78uSeratasOHjyokSNH6rffflPHjh31+OOPm/+iAJFcAACA69Q333yjrVu36u6773b6fJ06dbR161ZlZ2fbyzZt2nTZY/r5+Sk3N/eKbTdu3FirVq0qVJypqamy2WyaNGmS/vGPf+jGG2/Ub7/9lq9eZGSkhgwZok8++UT/93//p1mzZtmfCwoKUkJCgt577z1NmTJFM2fOLFTbgKtILgAAwDUvOztb6enpOnLkiLZs2aLx48frjjvuUPfu3dW3b1+n+zzwwAOy2Wx6+OGHtWPHDi1fvlwvv/yyJBU4lCoqKkpnz57VqlWrdPLkSfuwpUslJyfrgw8+UHJysnbs2KGtW7dq4sSJTuvWqlVL58+f1+uvv659+/bp3Xff1YwZMxzqjBgxQsuXL9f+/fu1ZcsWrV69WvXq1ZMkjRkzRp9++qn27t2rn3/+WV988YX9OcBsJBcAAOCat2zZMoWFhSkqKkpdunTR6tWr9dprr+nTTz+Vt7e3030qVKigzz//XGlpaYqJidHTTz+tMWPGSJLDPIyLtWrVSkOGDFGvXr0UFBSkF1980Wm9du3a6aOPPtJnn32mmJgYdejQQRs3bnRat0mTJpo8ebImTpyohg0b6v3331dKSopDndzcXCUmJqpevXrq0qWLbrzxRvtkbz8/PyUlJalx48a65ZZb5O3trQULFhTqvAGushiGYXg6CAAAgNLg/ffft/+WhSvzJoDrBUvRAgAAFOCdd95RjRo1FBERoR9//FGjR4/WfffdR2IBFIDkAgAAoADp6ekaM2aM0tPTFRYWpnvvvVcvvPCCp8MCSiyGRQEAAAAwBRO6AQAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKf4ffBa3fHwpRTQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Find test samples with worst predictions\n", + "def find_worst_predictions(model, X_test, y_test, n_worst=5):\n", + " predictions = model.predict(X_test)\n", + " probabilities = model.forward(X_test)\n", + "\n", + " # Get the probability of the true class for each sample\n", + " true_class_probs = probabilities[np.arange(len(y_test)), y_test]\n", + "\n", + " # Find samples with lowest probability for true class\n", + " worst_indices = np.argsort(true_class_probs)[:n_worst]\n", + "\n", + " return worst_indices\n", + "\n", + "# Find and plot worst predictions\n", + "worst_indices = find_worst_predictions(model, X_test, y_test, n_worst=3)\n", + "print(\"Worst prediction indices:\", worst_indices)\n", + "\n", + "for idx in worst_indices:\n", + " plot_prediction(model, sample_idx=idx)\n", + " plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "oVlS-duHoVS4" + }, + "source": [ + "### Hyper parameters settings\n", + "\n", + "- Experiment with different hyperparameters:\n", + " - learning rate,\n", + " - size of hidden layer,\n", + " - implement the support for a second hidden layer.\n", + " - What is the best test accuracy you can get?" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "rGfsM-S7oVS4", + "outputId": "cf8aa19e-1adb-42b1-b576-55f2643d8f4a" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Testing lr=0.1, hidden_size=10\n", + "Test accuracy: 0.107\n", + "Testing lr=0.1, hidden_size=32\n", + "Test accuracy: 0.107\n", + "Testing lr=0.1, hidden_size=64\n", + "Test accuracy: 0.107\n", + "Testing lr=0.1, hidden_size=128\n", + "Test accuracy: 0.107\n", + "Testing lr=0.01, hidden_size=10\n", + "Test accuracy: 0.107\n", + "Testing lr=0.01, hidden_size=32\n", + "Test accuracy: 0.107\n", + "Testing lr=0.01, hidden_size=64\n", + "Test accuracy: 0.107\n", + "Testing lr=0.01, hidden_size=128\n", + "Test accuracy: 0.252\n", + "Testing lr=0.001, hidden_size=10\n", + "Test accuracy: 0.759\n", + "Testing lr=0.001, hidden_size=32\n", + "Test accuracy: 0.952\n", + "Testing lr=0.001, hidden_size=64\n", + "Test accuracy: 0.956\n", + "Testing lr=0.001, hidden_size=128\n", + "Test accuracy: 0.967\n", + "Testing lr=0.0001, hidden_size=10\n", + "Test accuracy: 0.063\n", + "Testing lr=0.0001, hidden_size=32\n", + "Test accuracy: 0.730\n", + "Testing lr=0.0001, hidden_size=64\n", + "Test accuracy: 0.878\n", + "Testing lr=0.0001, hidden_size=128\n", + "Test accuracy: 0.896\n", + "\n", + "Best parameters: {'lr': 0.001, 'hidden_size': 128}\n", + "Best test accuracy: 0.967\n" + ] + } + ], + "source": [ + "# Experiment with different learning rates\n", + "learning_rates = [0.1, 0.01, 0.001, 0.0001]\n", + "hidden_sizes = [10, 32, 64, 128]\n", + "\n", + "best_accuracy = 0\n", + "best_params = {}\n", + "\n", + "for lr in learning_rates:\n", + " for hidden_size in hidden_sizes:\n", + " print(f\"Testing lr={lr}, hidden_size={hidden_size}\")\n", + "\n", + " # Train model\n", + " model = NeuralNet(n_features, hidden_size, n_classes)\n", + "\n", + " # Train for a few epochs\n", + " for epoch in range(10):\n", + " for i, (x, y) in enumerate(zip(X_train, y_train)):\n", + " model.train(x, y, lr)\n", + "\n", + " # Evaluate\n", + " test_acc = model.accuracy(X_test, y_test)\n", + " print(f\"Test accuracy: {test_acc:.3f}\")\n", + "\n", + " if test_acc > best_accuracy:\n", + " best_accuracy = test_acc\n", + " best_params = {'lr': lr, 'hidden_size': hidden_size}\n", + "\n", + "print(f\"\\nBest parameters: {best_params}\")\n", + "print(f\"Best test accuracy: {best_accuracy:.3f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AVqani6DoVS4", + "outputId": "b68f89eb-3e35-437c-cc53-ca170caaf6c5" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initial accuracy: 0.10740740740740741\n", + "Epoch 0: Test accuracy = 0.063\n", + "Epoch 5: Test accuracy = 0.141\n", + "Epoch 10: Test accuracy = 0.481\n" + ] + } + ], + "source": [ + "class NeuralNet2Hidden():\n", + " \"\"\"MLP with 2 hidden layers with sigmoid activation\"\"\"\n", + "\n", + " def __init__(self, input_size, hidden_size1, hidden_size2, output_size):\n", + " # Initialize weights for both hidden layers\n", + " self.W_h1 = np.random.uniform(size=(input_size, hidden_size1), high=0.1, low=-0.1)\n", + " self.b_h1 = np.random.uniform(size=hidden_size1, high=0.1, low=-0.1)\n", + " self.W_h2 = np.random.uniform(size=(hidden_size1, hidden_size2), high=0.1, low=-0.1)\n", + " self.b_h2 = np.random.uniform(size=hidden_size2, high=0.1, low=-0.1)\n", + " self.W_o = np.random.uniform(size=(hidden_size2, output_size), high=0.1, low=-0.1)\n", + " self.b_o = np.random.uniform(size=output_size, high=0.1, low=-0.1)\n", + "\n", + " def forward(self, X):\n", + " # First hidden layer\n", + " self.Z_h1 = np.dot(X, self.W_h1) + self.b_h1\n", + " self.H1 = sigmoid(self.Z_h1)\n", + "\n", + " # Second hidden layer\n", + " self.Z_h2 = np.dot(self.H1, self.W_h2) + self.b_h2\n", + " self.H2 = sigmoid(self.Z_h2)\n", + "\n", + " # Output layer\n", + " self.Z_o = np.dot(self.H2, self.W_o) + self.b_o\n", + " return softmax(self.Z_o)\n", + "\n", + " def loss(self, X, y):\n", + " y_onehot = one_hot(self.b_o.shape[0], y.astype(int))\n", + " Y_pred = self.forward(X)\n", + " return nll(y_onehot, Y_pred) / len(X)\n", + "\n", + " def grad_loss(self, X, y_true):\n", + " y_true = one_hot(self.b_o.shape[0], y_true)\n", + " y_pred = self.forward(X)\n", + "\n", + " # Output layer gradients\n", + " error_o = y_pred - y_true\n", + " grad_W_o = np.dot(self.H2.T, error_o) / X.shape[0]\n", + " grad_b_o = np.sum(error_o, axis=0) / X.shape[0]\n", + "\n", + " # Second hidden layer gradients\n", + " error_h2 = np.dot(error_o, self.W_o.T) * dsigmoid(self.Z_h2)\n", + " grad_W_h2 = np.dot(self.H1.T, error_h2) / X.shape[0]\n", + " grad_b_h2 = np.sum(error_h2, axis=0) / X.shape[0]\n", + "\n", + " # First hidden layer gradients\n", + " error_h1 = np.dot(error_h2, self.W_h2.T) * dsigmoid(self.Z_h1)\n", + " grad_W_h1 = np.dot(X.T, error_h1) / X.shape[0]\n", + " grad_b_h1 = np.sum(error_h1, axis=0) / X.shape[0]\n", + "\n", + " return {\n", + " \"W_h1\": grad_W_h1, \"b_h1\": grad_b_h1,\n", + " \"W_h2\": grad_W_h2, \"b_h2\": grad_b_h2,\n", + " \"W_o\": grad_W_o, \"b_o\": grad_b_o\n", + " }\n", + "\n", + " def train(self, x, y, learning_rate):\n", + " if len(x.shape) == 1:\n", + " x = x[np.newaxis, :]\n", + " grads = self.grad_loss(x, y)\n", + "\n", + " self.W_h1 -= learning_rate * grads[\"W_h1\"]\n", + " self.b_h1 -= learning_rate * grads[\"b_h1\"]\n", + " self.W_h2 -= learning_rate * grads[\"W_h2\"]\n", + " self.b_h2 -= learning_rate * grads[\"b_h2\"]\n", + " self.W_o -= learning_rate * grads[\"W_o\"]\n", + " self.b_o -= learning_rate * grads[\"b_o\"]\n", + "\n", + " def predict(self, X):\n", + " return np.argmax(self.forward(X), axis=1)\n", + "\n", + " def accuracy(self, X, y):\n", + " return np.mean(self.predict(X) == y)\n", + "\n", + "# Test the 2-hidden layer network\n", + "model_2hidden = NeuralNet2Hidden(n_features, 64, 32, n_classes)\n", + "print(\"Initial accuracy:\", model_2hidden.accuracy(X_test, y_test))\n", + "\n", + "# Train the model\n", + "for epoch in range(15):\n", + " for i, (x, y) in enumerate(zip(X_train, y_train)):\n", + " model_2hidden.train(x, y, 0.001)\n", + "\n", + " if epoch % 5 == 0:\n", + " acc = model_2hidden.accuracy(X_test, y_test)\n", + " print(f\"Epoch {epoch}: Test accuracy = {acc:.3f}\")" + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "dsi_participant", + "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.18" + } }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Just like in Lab 1, we'll be working with the MNIST dataset. We will load it and plot an example:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "%matplotlib inline\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "from sklearn.datasets import load_digits\n", - "\n", - "digits = load_digits()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "sample_index = 45\n", - "plt.figure(figsize=(3, 3))\n", - "plt.imshow(digits.images[sample_index], cmap=plt.cm.gray_r,\n", - " interpolation='nearest')\n", - "plt.title(\"image label: %d\" % digits.target[sample_index]);" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Preprocessing\n", - "\n", - "Of course, we need to split our data into training and testing sets before we use it, just the same as in Lab 1:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.model_selection import train_test_split\n", - "\n", - "data = np.asarray(digits.data, dtype='float32')\n", - "target = np.asarray(digits.target, dtype='int32')\n", - "\n", - "X_train, X_test, y_train, y_test = train_test_split(\n", - " data, target, test_size=0.15, random_state=37)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Numpy Implementation\n", - "\n", - "## a) Logistic Regression\n", - "\n", - "In this section we will implement a logistic regression model trainable with SGD using numpy. Here are the objectives:\n", - "\n", - "- Implement the softmax function $\\sigma(\\mathbf{x})_i = \\frac{e^{x_i}}{\\sum_{j=1}^n e^{x_j}}$;\n", - "- Implement the negative log likelihood function $NLL(Y_{true}, Y_{pred}) = - \\sum_{i=1}^{n}{y_{true, i} \\cdot \\log(y_{pred, i})}$;\n", - "- Train a logistic regression model on the MNIST dataset;\n", - "- Evaluate the model on the training and testing sets.\n", - "\n", - "Before we get there, let's write a function that one-hot encodes the class labels:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def one_hot(n_classes, y):\n", - " return np.eye(n_classes)[y]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "one_hot(n_classes=10, y=3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "one_hot(n_classes=10, y=[0, 4, 9, 1])" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### The softmax function\n", - "\n", - "Now we will implement the softmax function. Recall that the softmax function is defined as follows:\n", - "\n", - "$$\n", - "softmax(\\mathbf{x}) = \\frac{1}{\\sum_{i=1}^{n}{e^{x_i}}}\n", - "\\cdot\n", - "\\begin{bmatrix}\n", - " e^{x_1}\\\\\\\\\n", - " e^{x_2}\\\\\\\\\n", - " \\vdots\\\\\\\\\n", - " e^{x_n}\n", - "\\end{bmatrix}\n", - "$$\n", - "\n", - "This is implemented for you using numpy - we want to be able to apply the softmax function to a batch of samples at once, so we will use numpy's vectorized operations to do so.\n", - "\n", - "Our method also handles _stability issues_ that can occur when the values in `X` are very large. We will subtract the maximum value from each row of `X` to avoid overflow in the exponentiation. This isn't part of the softmax function itself, but it's a useful trick to know about." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def softmax(X):\n", - " X_max = np.max(X, axis=-1, keepdims=True)\n", - " exp = np.exp(X - X_max) # Subtract the max to avoid overflow in the exponentiation\n", - " return exp / np.sum(exp, axis=-1, keepdims=True)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Let's make sure that this works one vector at a time (and check that the components sum to one):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(softmax([10, 2, -3]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When we are using our model to make predictions, we will want to be able to make predictions for multiple samples at once.\n", - "Let's make sure that our implementation of softmax works for a batch of samples:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "X = np.array([[10, 2, -3],\n", - " [-1, 5, -20]])\n", - "print(softmax(X))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Probabilities should sum to 1:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(np.sum(softmax([10, 2, -3])))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(\"softmax of 2 vectors:\")\n", - "X = np.array([[10, 2, -3],\n", - " [-1, 5, -20]])\n", - "print(softmax(X))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The sum of probabilities for each input vector of logits should some to 1:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(np.sum(softmax(X), axis=1))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we will implement a function that, given the true one-hot encoded class `Y_true` and some predicted probabilities `Y_pred`, returns the negative log likelihood.\n", - "\n", - "Recall that the negative log likelihood is defined as follows:\n", - "\n", - "$$\n", - "NLL(Y_{true}, Y_{pred}) = - \\sum_{i=1}^{n}{y_{true, i} \\cdot \\log(y_{pred, i})}\n", - "$$\n", - "\n", - "For example, if we have $y_{true} = [1, 0, 0]$ and $y_{pred} = [0.99, 0.01, 0]$, then the negative log likelihood is $- \\log(0.99) \\approx 0.01$." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def nll(Y_true, Y_pred):\n", - " Y_true = np.asarray(Y_true)\n", - " Y_pred = np.asarray(Y_pred)\n", - "\n", - " # Ensure Y_pred doesn't have zero probabilities to avoid log(0)\n", - " Y_pred = np.clip(Y_pred, 1e-15, 1 - 1e-15)\n", - "\n", - " # Calculate negative log likelihood\n", - " loss = -np.sum(Y_true * np.log(Y_pred))\n", - " return loss\n", - "\n", - "# Make sure that it works for a simple sample at a time\n", - "print(nll([1, 0, 0], [.99, 0.01, 0]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We should see a very high value for this negative log likelihood, since the model is very confident that the third class is the correct one, but the true class is the first one:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "print(nll([1, 0, 0], [0.01, 0.01, .98]))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Make sure that your implementation can compute the average negative log likelihood of a group of predictions: `Y_pred` and `Y_true` can therefore be past as 2D arrays:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Check that the average NLL of the following 3 almost perfect\n", - "# predictions is close to 0\n", - "Y_true = np.array([[0, 1, 0],\n", - " [1, 0, 0],\n", - " [0, 0, 1]])\n", - "\n", - "Y_pred = np.array([[0, 1, 0],\n", - " [.99, 0.01, 0],\n", - " [0, 0, 1]])\n", - "\n", - "print(nll(Y_true, Y_pred))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Now that we have our softmax and negative log likelihood functions, we can implement a logistic regression model. \n", - "In this section, we have built the model for you, but you will need to complete a few key parts.\n", - "\n", - "**YOUR TURN:**\n", - "\n", - "1. Implement the `forward` method of the `LogisticRegression` class. This method should take in a batch of samples `X` and return the predicted probabilities for each class. You should use the softmax function that we implemented earlier.\n", - "2. Implement the `loss` method of the `LogisticRegression` class. This method take in the samples `X` and the true values `y` and return the average negative log likelihood of the predictions." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "class LogisticRegression:\n", - "\n", - " def __init__(self, input_size, output_size):\n", - " # Initialize the weights and biases with random numbers\n", - " self.W = np.random.uniform(size=(input_size, output_size),\n", - " high=0.1, low=-0.1)\n", - " self.b = np.random.uniform(size=output_size,\n", - " high=0.1, low=-0.1)\n", - " \n", - " # Store the input size and output size\n", - " self.output_size = output_size\n", - " self.input_size = input_size\n", - " \n", - " def forward(self, X):\n", - " # Compute the linear combination of the input and weights\n", - " Z = None\n", - " return None\n", - " \n", - " def predict(self, X):\n", - " # Return the most probable class for each sample in X\n", - " if len(X.shape) == 1:\n", - " return np.argmax(self.forward(X))\n", - " else:\n", - " return np.argmax(self.forward(X), axis=1)\n", - " \n", - " def loss(self, X, y):\n", - " # Compute the negative log likelihood over the data provided\n", - " y_onehot = one_hot(self.output_size, y.astype(int))\n", - " return None\n", - "\n", - " def grad_loss(self, X, y_true, y_pred):\n", - " # Compute the gradient of the loss with respect to W and b for a single sample (X, y_true)\n", - " # y_pred is the output of the forward pass\n", - " \n", - " # Gradient with respect to weights\n", - " grad_W = np.dot(X.T, (y_pred - y_true))\n", - " \n", - " # Gradient with respect to biases\n", - " grad_b = np.sum(y_pred - y_true, axis=0)\n", - " \n", - " return grad_W, grad_b\n", - " \n", - "# Raise an exception if you try to run this cell without having implemented the LogisticRegression class\n", - "model = LogisticRegression(input_size=64, output_size=10)\n", - "try:\n", - " assert(model.forward(np.zeros((1, 64))).shape == (1, 10))\n", - " assert(model.loss(np.zeros((1, 64)), np.zeros(1)) > 0)\n", - "except:\n", - " raise NotImplementedError(\"You need to correctly implement the LogisticRegression class.\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Build a model and test its forward inference\n", - "n_features = X_train.shape[1]\n", - "n_classes = len(np.unique(y_train))\n", - "lr = LogisticRegression(n_features, n_classes)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "We can evaluate the model on an example, visualizing the prediction probabilities:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "def plot_prediction(model, sample_idx=0, classes=range(10)):\n", - " fig, (ax0, ax1) = plt.subplots(nrows=1, ncols=2, figsize=(10, 4))\n", - "\n", - " ax0.imshow(X_test[sample_idx:sample_idx+1].reshape(8, 8),\n", - " cmap=plt.cm.gray_r, interpolation='nearest')\n", - " ax0.set_title(\"True image label: %d\" % y_test[sample_idx]);\n", - "\n", - "\n", - " ax1.bar(classes, one_hot(len(classes), y_test[sample_idx]), label='true')\n", - " ax1.bar(classes, model.forward(X_test[sample_idx]), label='prediction', color=\"red\")\n", - " ax1.set_xticks(classes)\n", - " prediction = model.predict(X_test[sample_idx])\n", - " ax1.set_title('Output probabilities (prediction: %d)'\n", - " % prediction)\n", - " ax1.set_xlabel('Digit class')\n", - " ax1.legend()\n", - "\n", - "plot_prediction(lr, sample_idx=0)\n", - " " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Now it's time to start training! We will train for a single epoch, and then evaluate the model on the training and testing sets. Read through the following and make sure that you understand what we are doing here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "lr = LogisticRegression(input_size=X_train.shape[1], output_size=10)\n", - "\n", - "learning_rate = 0.01\n", - "\n", - "for i in range(len(X_train)):\n", - " # Get the current sample and corresponding label\n", - " x = X_train[i:i+1] # Reshape to keep the batch dimension\n", - " y = y_train[i:i+1] # Reshape to keep the batch dimension\n", - "\n", - " # Compute the forward pass and the gradient of the loss with respect to W and b\n", - " y_pred = lr.forward(x)\n", - " grad_W, grad_b = lr.grad_loss(x, one_hot(lr.output_size, y), y_pred)\n", - "\n", - " # Update the weights and biases\n", - " lr.W -= learning_rate * grad_W\n", - " lr.b -= learning_rate * grad_b\n", - "\n", - " # Print the average negative log likelihood every 100 steps (avoid empty slice at i==0)\n", - " if i > 0 and i % 100 == 0:\n", - " avg_nll = lr.loss(X_train[max(0, i-100):i], y_train[max(0, i-100):i])\n", - " print(\"Average NLL over the last 100 samples at step %d: %0.f\" % (i, avg_nll))\n" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Evaluate the trained model on the first example:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "plot_prediction(lr, sample_idx=0)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## b) Feedforward Multilayer\n", - "\n", - "The objective of this section is to implement the backpropagation algorithm (SGD with the chain rule) on a single layer neural network using the sigmoid activation function.\n", - "\n", - "Now it's your turn to\n", - "\n", - "- Implement the `sigmoid` and its element-wise derivative `dsigmoid` functions:\n", - "\n", - "$$\n", - "sigmoid(x) = \\frac{1}{1 + e^{-x}}\n", - "$$\n", - "\n", - "$$\n", - "dsigmoid(x) = sigmoid(x) \\cdot (1 - sigmoid(x))\n", - "$$\n", - "\n", - "Remember that you can use your `sigmoid` function inside your `dsigmoid` function.\n", - "\n", - "Just like with our softmax function, we also want to make sure that we don't run into stability issues with our sigmoid function. We will use `np.clip` to ensure that the input to the sigmoid function is not too large or too small." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def sigmoid(X):\n", - " # Clip X to prevent overflow or underflow\n", - " X = np.clip(X, -500, 500) # This ensures that np.exp(X) doesn't overflow\n", - " return None\n", - "\n", - "\n", - "def dsigmoid(X):\n", - " return None\n", - "\n", - "\n", - "x = np.linspace(-5, 5, 100)\n", - "plt.plot(x, sigmoid(x), label='sigmoid')\n", - "plt.plot(x, dsigmoid(x), label='dsigmoid')\n", - "plt.legend(loc='best');" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now it's your turn to complete the neural network code, so that we can train it on the MNIST dataset.\n", - "\n", - "Some parts have been completed for you already. Often, you'll be able to refer back to the code from the previous section to help you complete the code in this section." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class NeuralNet():\n", - " \"\"\"MLP with 1 hidden layer with a sigmoid activation\"\"\"\n", - "\n", - " def __init__(self, input_size, hidden_size, output_size):\n", - " # Initializes the weights with random numbers\n", - " self.W_h = np.random.uniform(size=(input_size, hidden_size),\n", - " high=0.1, low=-0.1)\n", - " self.b_h = np.random.uniform(size=hidden_size,\n", - " high=0.1, low=-0.1)\n", - " self.W_o = np.random.uniform(size=(hidden_size, output_size),\n", - " high=0.1, low=-0.1)\n", - " self.b_o = np.random.uniform(size=output_size,\n", - " high=0.1, low=-0.1)\n", - "\n", - " # Store the input size, hidden size and output size\n", - " self.input_size = input_size\n", - " self.hidden_size = hidden_size\n", - " self.output_size = output_size\n", - "\n", - " def forward_hidden(self, X):\n", - " # Compute the linear combination of the input and weights\n", - " self.Z_h = None\n", - "\n", - " # Apply the sigmoid activation function\n", - " return None\n", - "\n", - " def forward_output(self, H):\n", - " # Compute the linear combination of the hidden layer activation and weights\n", - " self.Z_o = None\n", - "\n", - " # Apply the sigmoid activation function\n", - " return None\n", - "\n", - " def forward(self, X):\n", - " # Compute the forward activations of the hidden and output layers\n", - " H = self.forward_hidden(X)\n", - " Y = self.forward_output(H)\n", - "\n", - " return Y\n", - "\n", - " def loss(self, X, y):\n", - " y = y.astype(int)\n", - " return None\n", - "\n", - " def grad_loss(self, X, y_true):\n", - " y_true = one_hot(self.output_size, y_true)\n", - " y_pred = self.forward(X)\n", - "\n", - " # Compute the error at the output layer\n", - " error_o = y_pred - y_true\n", - "\n", - " # Compute the gradient of the loss with respect to W_o and b_o\n", - " grad_W_o = np.dot(self.Z_h.T, error_o)\n", - " grad_b_o = np.sum(error_o, axis=0)\n", - "\n", - " # Compute the error at the hidden layer\n", - " error_h = np.dot(error_o, self.W_o.T) * dsigmoid(self.Z_h)\n", - "\n", - " # Compute the gradient of the loss with respect to W_h and b_h\n", - " grad_W_h = np.dot(X.T, error_h)\n", - " grad_b_h = np.sum(error_h, axis=0)\n", - "\n", - " return {\"W_h\": grad_W_h, \"b_h\": grad_b_h, \"W_o\": grad_W_o, \"b_o\": grad_b_o}\n", - "\n", - " def train(self, x, y, learning_rate):\n", - " # Ensure x is 2D\n", - " x = x[np.newaxis, :]\n", - " # Compute the gradient for the sample and update the weights\n", - " grads = self.grad_loss(x, y)\n", - " \n", - " self.W_h -= learning_rate * grads[\"W_h\"]\n", - " self.b_h -= learning_rate * grads[\"b_h\"]\n", - " self.W_o -= learning_rate * grads[\"W_o\"]\n", - " self.b_o -= learning_rate * grads[\"b_o\"]\n", - " \n", - " def predict(self, X):\n", - " if len(X.shape) == 1:\n", - " return np.argmax(self.forward(X))\n", - " else:\n", - " return np.argmax(self.forward(X), axis=1)\n", - "\n", - " def accuracy(self, X, y):\n", - " y_preds = np.argmax(self.forward(X), axis=1)\n", - " return np.mean(y_preds == y)\n", - " \n", - "# Raise an exception if you try to run this cell without having implemented the NeuralNet class\n", - "nn = NeuralNet(input_size=64, hidden_size=32, output_size=10)\n", - "try:\n", - " assert(nn.forward(np.zeros((1, 64))).shape == (1, 10))\n", - " assert(nn.loss(np.zeros((1, 64)), np.zeros(1)) > 0)\n", - "except:\n", - " raise NotImplementedError(\"You need to correctly implement the NeuralNet class.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "Once the code is written, we can test our model on a single sample:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "n_hidden = 10\n", - "model = NeuralNet(n_features, n_hidden, n_classes)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.loss(X_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model.accuracy(X_train, y_train)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plot_prediction(model, sample_idx=5)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "collapsed": false - }, - "source": [ - "And now it's time to train!" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "losses, accuracies, accuracies_test = [], [], []\n", - "losses.append(model.loss(X_train, y_train))\n", - "accuracies.append(model.accuracy(X_train, y_train))\n", - "accuracies_test.append(model.accuracy(X_test, y_test))\n", - "\n", - "print(\"Random init: train loss: %0.5f, train acc: %0.3f, test acc: %0.3f\"\n", - " % (losses[-1], accuracies[-1], accuracies_test[-1]))\n", - "\n", - "for epoch in range(15):\n", - " for i, (x, y) in enumerate(zip(X_train, y_train)):\n", - " model.train(x, y, 0.001)\n", - "\n", - " losses.append(model.loss(X_train, y_train))\n", - " accuracies.append(model.accuracy(X_train, y_train))\n", - " accuracies_test.append(model.accuracy(X_test, y_test))\n", - " print(\"Epoch #%d, train loss: %0.5f, train acc: %0.3f, test acc: %0.3f\"\n", - " % (epoch + 1, losses[-1], accuracies[-1], accuracies_test[-1]))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.plot(losses)\n", - "plt.title(\"Training loss\");" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plt.plot(accuracies, label='train')\n", - "plt.plot(accuracies_test, label='test')\n", - "plt.ylim(0, 1.1)\n", - "plt.ylabel(\"accuracy\")\n", - "plt.legend(loc='best');" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plot_prediction(model, sample_idx=4)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## c) Exercises\n", - "\n", - "### Look at worst prediction errors\n", - "\n", - "- Use numpy to find test samples for which the model made the worst predictions,\n", - "- Use the `plot_prediction` to look at the model predictions on those,\n", - "- Would you have done any better?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Hyper parameters settings\n", - "\n", - "- Experiment with different hyperparameters:\n", - " - learning rate,\n", - " - size of hidden layer,\n", - " - implement the support for a second hidden layer.\n", - " - What is the best test accuracy you can get?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "collapsed": false - }, - "outputs": [], - "source": [ - "# Your code here" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": ".venv", - "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.12.12" - } - }, - "nbformat": 4, - "nbformat_minor": 4 + "nbformat": 4, + "nbformat_minor": 0 } diff --git a/01_materials/labs/lab_3.ipynb b/01_materials/labs/lab_3.ipynb index 7ac8da00d..ea698c1b6 100644 --- a/01_materials/labs/lab_3.ipynb +++ b/01_materials/labs/lab_3.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -52,9 +52,141 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
01962423881250949
11863023891717742
2223771878887116
3244512880606923
41663461886397596
...............
999958804763880175444
999967162045879795543
9999727610901874795795
99998132252882399156
99999122033879959583
\n", + "

100000 rows Γ— 4 columns

\n", + "
" + ], + "text/plain": [ + " user_id item_id rating timestamp\n", + "0 196 242 3 881250949\n", + "1 186 302 3 891717742\n", + "2 22 377 1 878887116\n", + "3 244 51 2 880606923\n", + "4 166 346 1 886397596\n", + "... ... ... ... ...\n", + "99995 880 476 3 880175444\n", + "99996 716 204 5 879795543\n", + "99997 276 1090 1 874795795\n", + "99998 13 225 2 882399156\n", + "99999 12 203 3 879959583\n", + "\n", + "[100000 rows x 4 columns]" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "import pandas as pd\n", "\n", @@ -76,9 +208,166 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idtitlerelease_datevideo_release_dateimdb_url
01Toy Story (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...
12GoldenEye (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?GoldenEye%20(...
23Four Rooms (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?Four%20Rooms%...
34Get Shorty (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?Get%20Shorty%...
45Copycat (1995)01-Jan-1995NaNhttp://us.imdb.com/M/title-exact?Copycat%20(1995)
..................
16771678Mat' i syn (1997)06-Feb-1998NaNhttp://us.imdb.com/M/title-exact?Mat%27+i+syn+...
16781679B. Monkey (1998)06-Feb-1998NaNhttp://us.imdb.com/M/title-exact?B%2E+Monkey+(...
16791680Sliding Doors (1998)01-Jan-1998NaNhttp://us.imdb.com/Title?Sliding+Doors+(1998)
16801681You So Crazy (1994)01-Jan-1994NaNhttp://us.imdb.com/M/title-exact?You%20So%20Cr...
16811682Scream of Stone (Schrei aus Stein) (1991)08-Mar-1996NaNhttp://us.imdb.com/M/title-exact?Schrei%20aus%...
\n", + "

1682 rows Γ— 5 columns

\n", + "
" + ], + "text/plain": [ + " item_id title release_date \\\n", + "0 1 Toy Story (1995) 01-Jan-1995 \n", + "1 2 GoldenEye (1995) 01-Jan-1995 \n", + "2 3 Four Rooms (1995) 01-Jan-1995 \n", + "3 4 Get Shorty (1995) 01-Jan-1995 \n", + "4 5 Copycat (1995) 01-Jan-1995 \n", + "... ... ... ... \n", + "1677 1678 Mat' i syn (1997) 06-Feb-1998 \n", + "1678 1679 B. Monkey (1998) 06-Feb-1998 \n", + "1679 1680 Sliding Doors (1998) 01-Jan-1998 \n", + "1680 1681 You So Crazy (1994) 01-Jan-1994 \n", + "1681 1682 Scream of Stone (Schrei aus Stein) (1991) 08-Mar-1996 \n", + "\n", + " video_release_date imdb_url \n", + "0 NaN http://us.imdb.com/M/title-exact?Toy%20Story%2... \n", + "1 NaN http://us.imdb.com/M/title-exact?GoldenEye%20(... \n", + "2 NaN http://us.imdb.com/M/title-exact?Four%20Rooms%... \n", + "3 NaN http://us.imdb.com/M/title-exact?Get%20Shorty%... \n", + "4 NaN http://us.imdb.com/M/title-exact?Copycat%20(1995) \n", + "... ... ... \n", + "1677 NaN http://us.imdb.com/M/title-exact?Mat%27+i+syn+... \n", + "1678 NaN http://us.imdb.com/M/title-exact?B%2E+Monkey+(... \n", + "1679 NaN http://us.imdb.com/Title?Sliding+Doors+(1998) \n", + "1680 NaN http://us.imdb.com/M/title-exact?You%20So%20Cr... \n", + "1681 NaN http://us.imdb.com/M/title-exact?Schrei%20aus%... \n", + "\n", + "[1682 rows x 5 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "columns_to_keep = ['item_id', 'title', 'release_date', 'video_release_date', 'imdb_url']\n", "items = pd.read_csv(ML_100K_FOLDER / \"u.item\", sep='|', names=columns_to_keep,\n", @@ -97,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +403,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -123,9 +412,134 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idtitlerelease_datevideo_release_dateimdb_urlrelease_yearuser_idratingtimestamp
01Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.03084887736532
11Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02875875334088
21Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.01484877019411
31Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02804891700426
41Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.0663883601324
\n", + "
" + ], + "text/plain": [ + " item_id title release_date video_release_date \\\n", + "0 1 Toy Story (1995) 1995-01-01 NaN \n", + "1 1 Toy Story (1995) 1995-01-01 NaN \n", + "2 1 Toy Story (1995) 1995-01-01 NaN \n", + "3 1 Toy Story (1995) 1995-01-01 NaN \n", + "4 1 Toy Story (1995) 1995-01-01 NaN \n", + "\n", + " imdb_url release_year user_id \\\n", + "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 308 \n", + "1 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 287 \n", + "2 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 148 \n", + "3 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 280 \n", + "4 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 66 \n", + "\n", + " rating timestamp \n", + "0 4 887736532 \n", + "1 5 875334088 \n", + "2 4 877019411 \n", + "3 4 891700426 \n", + "4 3 883601324 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings.head()" ] @@ -141,9 +555,151 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idrelease_datevideo_release_daterelease_yearuser_idratingtimestamp
count100000.000000999910.099991.000000100000.00000100000.0000001.000000e+05
mean425.5301301988-02-09 00:43:11.369223296NaN1987.956216462.484753.5298608.835289e+08
min1.0000001922-01-01 00:00:00NaN1922.0000001.000001.0000008.747247e+08
25%175.0000001986-01-01 00:00:00NaN1986.000000254.000003.0000008.794487e+08
50%322.0000001994-01-01 00:00:00NaN1994.000000447.000004.0000008.828269e+08
75%631.0000001996-09-28 00:00:00NaN1996.000000682.000004.0000008.882600e+08
max1682.0000001998-10-23 00:00:00NaN1998.000000943.000005.0000008.932866e+08
std330.798356NaNNaN14.155523266.614421.1256745.343856e+06
\n", + "
" + ], + "text/plain": [ + " item_id release_date video_release_date \\\n", + "count 100000.000000 99991 0.0 \n", + "mean 425.530130 1988-02-09 00:43:11.369223296 NaN \n", + "min 1.000000 1922-01-01 00:00:00 NaN \n", + "25% 175.000000 1986-01-01 00:00:00 NaN \n", + "50% 322.000000 1994-01-01 00:00:00 NaN \n", + "75% 631.000000 1996-09-28 00:00:00 NaN \n", + "max 1682.000000 1998-10-23 00:00:00 NaN \n", + "std 330.798356 NaN NaN \n", + "\n", + " release_year user_id rating timestamp \n", + "count 99991.000000 100000.00000 100000.000000 1.000000e+05 \n", + "mean 1987.956216 462.48475 3.529860 8.835289e+08 \n", + "min 1922.000000 1.00000 1.000000 8.747247e+08 \n", + "25% 1986.000000 254.00000 3.000000 8.794487e+08 \n", + "50% 1994.000000 447.00000 4.000000 8.828269e+08 \n", + "75% 1996.000000 682.00000 4.000000 8.882600e+08 \n", + "max 1998.000000 943.00000 5.000000 8.932866e+08 \n", + "std 14.155523 266.61442 1.125674 5.343856e+06 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings.describe()" ] @@ -157,7 +713,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -167,36 +723,240 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "items['popularity'].plot.hist(bins=30);" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "141" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(items['popularity'] == 1).sum() # Number of movies with only one rating" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "49 Star Wars (1977)\n", + "257 Contact (1997)\n", + "99 Fargo (1996)\n", + "180 Return of the Jedi (1983)\n", + "293 Liar Liar (1997)\n", + "285 English Patient, The (1996)\n", + "287 Scream (1996)\n", + "0 Toy Story (1995)\n", + "299 Air Force One (1997)\n", + "120 Independence Day (ID4) (1996)\n", + "Name: title, dtype: object" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "items.nlargest(10, 'popularity')['title'] # Get the 10 most popular movies" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idpopularityrelease_datevideo_release_daterelease_yearuser_idratingtimestamp
count100000.000000100000.000000999910.099991.000000100000.00000100000.0000001.000000e+05
mean425.530130168.0719001988-02-09 00:43:11.369223296NaN1987.956216462.484753.5298608.835289e+08
min1.0000001.0000001922-01-01 00:00:00NaN1922.0000001.000001.0000008.747247e+08
25%175.00000071.0000001986-01-01 00:00:00NaN1986.000000254.000003.0000008.794487e+08
50%322.000000145.0000001994-01-01 00:00:00NaN1994.000000447.000004.0000008.828269e+08
75%631.000000239.0000001996-09-28 00:00:00NaN1996.000000682.000004.0000008.882600e+08
max1682.000000583.0000001998-10-23 00:00:00NaN1998.000000943.000005.0000008.932866e+08
std330.798356121.784558NaNNaN14.155523266.614421.1256745.343856e+06
\n", + "
" + ], + "text/plain": [ + " item_id popularity release_date \\\n", + "count 100000.000000 100000.000000 99991 \n", + "mean 425.530130 168.071900 1988-02-09 00:43:11.369223296 \n", + "min 1.000000 1.000000 1922-01-01 00:00:00 \n", + "25% 175.000000 71.000000 1986-01-01 00:00:00 \n", + "50% 322.000000 145.000000 1994-01-01 00:00:00 \n", + "75% 631.000000 239.000000 1996-09-28 00:00:00 \n", + "max 1682.000000 583.000000 1998-10-23 00:00:00 \n", + "std 330.798356 121.784558 NaN \n", + "\n", + " video_release_date release_year user_id rating \\\n", + "count 0.0 99991.000000 100000.00000 100000.000000 \n", + "mean NaN 1987.956216 462.48475 3.529860 \n", + "min NaN 1922.000000 1.00000 1.000000 \n", + "25% NaN 1986.000000 254.00000 3.000000 \n", + "50% NaN 1994.000000 447.00000 4.000000 \n", + "75% NaN 1996.000000 682.00000 4.000000 \n", + "max NaN 1998.000000 943.00000 5.000000 \n", + "std NaN 14.155523 266.61442 1.125674 \n", + "\n", + " timestamp \n", + "count 1.000000e+05 \n", + "mean 8.835289e+08 \n", + "min 8.747247e+08 \n", + "25% 8.794487e+08 \n", + "50% 8.828269e+08 \n", + "75% 8.882600e+08 \n", + "max 8.932866e+08 \n", + "std 5.343856e+06 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings = pd.merge(popularity, all_ratings)\n", "all_ratings.describe()" @@ -204,7 +964,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "collapsed": false }, @@ -215,9 +975,140 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idpopularitytitlerelease_datevideo_release_dateimdb_urlrelease_yearuser_idratingtimestamp
01452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.03084887736532
11452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02875875334088
21452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.01484877019411
31452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02804891700426
41452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.0663883601324
\n", + "
" + ], + "text/plain": [ + " item_id popularity title release_date video_release_date \\\n", + "0 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "1 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "2 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "3 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "4 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "\n", + " imdb_url release_year user_id \\\n", + "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 308 \n", + "1 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 287 \n", + "2 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 148 \n", + "3 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 280 \n", + "4 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 66 \n", + "\n", + " rating timestamp \n", + "0 4 887736532 \n", + "1 5 875334088 \n", + "2 4 877019411 \n", + "3 4 891700426 \n", + "4 3 883601324 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings.head()" ] @@ -237,13 +1128,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "title\n", + "'Til There Was You (1997) 2.333333\n", + "1-900 (1994) 2.600000\n", + "101 Dalmatians (1996) 2.908257\n", + "12 Angry Men (1957) 4.344000\n", + "187 (1997) 3.024390\n", + " ... \n", + "Young Guns II (1990) 2.772727\n", + "Young Poisoner's Handbook, The (1995) 3.341463\n", + "Zeus and Roxanne (1997) 2.166667\n", + "unknown 3.444444\n", + "Á kΓΆldum klaka (Cold Fever) (1994) 3.000000\n", + "Name: rating, Length: 1664, dtype: float64" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "raise NotImplementedError(\"Please calculate the average rating for each movie\")" + "#popularity = all_ratings.groupby('item_id').size().reset_index(name='popularity')\n", + "\n", + "all_ratings.groupby('title')['rating'].mean()" ] }, { @@ -255,7 +1171,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 20, "metadata": {}, "outputs": [], "source": [ @@ -295,9 +1211,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-10-23 19:44:21.046084: I tensorflow/core/platform/cpu_feature_guard.cc:210] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: SSE4.1 SSE4.2, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" + ] + } + ], "source": [ "from tensorflow.keras.layers import Embedding, Flatten, Dense, Dropout\n", "from tensorflow.keras.layers import Dot\n", @@ -306,7 +1231,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -353,9 +1278,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 946us/step - loss: 0.5733 - val_loss: 0.7376\n", + "Epoch 2/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 879us/step - loss: 0.5455 - val_loss: 0.7395\n", + "Epoch 3/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 865us/step - loss: 0.5150 - val_loss: 0.7418\n", + "Epoch 4/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 855us/step - loss: 0.4916 - val_loss: 0.7449\n", + "Epoch 5/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 927us/step - loss: 0.4593 - val_loss: 0.7523\n", + "Epoch 6/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 891us/step - loss: 0.4317 - val_loss: 0.7521\n", + "Epoch 7/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 883us/step - loss: 0.4092 - val_loss: 0.7599\n", + "Epoch 8/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 874us/step - loss: 0.3850 - val_loss: 0.7610\n", + "Epoch 9/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 859us/step - loss: 0.3629 - val_loss: 0.7659\n", + "Epoch 10/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 938us/step - loss: 0.3435 - val_loss: 0.7742\n", + "CPU times: user 18.6 s, sys: 9.62 s, total: 28.2 s\n", + "Wall time: 10.3 s\n" + ] + } + ], "source": [ "%%time\n", "\n", @@ -367,9 +1321,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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KywsTL/+9a/ldDobbSckJMRn22Qyye12t3p/jaz9/isAAMAgQkND5XK5mqy3Z88ezZw5U9dff70kqbi4WN9888157t2FgTUsAACco0suuUT79+/XN998o8LCwgZHP/r376+NGzcqJydHhw4d0s0339zhRkpaisACAMA5uu+++2Q2mzVo0CB17969wTUpf/rTn9SlSxclJydr6tSpuuaaazR8+PA27m37ZPL4c7K5gdntdtlsNhUVFSkqKirQ3QEA+KmsrExHjx5Vnz59ZLVaA90dtKLGfrfN/f5mhAUAABgegQUAABgegQUAABgegQUAABgegQUAABgegQUAABgegQUAABgegQUAABgegQUAABgegQUAgAC75JJLtGzZMu+2yWTSW2+91WD9b775RiaTSTk5Oef0ua3VTlvgbs0AABhMXl6eunTp0qptzpw5U6dOnfIJQvHx8crLy1O3bt1a9bPOBwILAAAGExsb2yafYzab2+yzzhVTQgAA4/J4JGdJ2z/8uC/wiy++qIsuukhut9un/N///d91++2366uvvtK0adMUExOjTp06aeTIkXr33XcbbbP2lNAHH3yghIQEWa1WJSYm6uDBgz71XS6XZs2apT59+igsLEyXXXaZli9f7n3/j3/8o1555RVt3rxZJpNJJpNJO3furHdKaNeuXbrqqqtksVgUFxenhQsXqqKiwvv+z3/+c9177736z//8T0VHRys2NlZ//OMfm/3zailGWAAAxlVeKj3Rs+0/94HvpdCIZlW98cYbde+99+of//iHJkyYIEk6efKktm/frrffflvFxcWaMmWKHnvsMVmtVr3yyiuaOnWqjhw5ol69ejXZfklJia677jr94he/0GuvvaajR49q7ty5PnXcbrcuvvhivfnmm+rWrZv27dunu+66S3FxcZoxY4buu+8+HT58WHa7XS+//LIkKTo6Wt9//71PO8ePH9eUKVM0c+ZMrVu3Tp999pnuvPNOWa1Wn1DyyiuvKC0tTfv371d2drZmzpypMWPGaOLEic36mbUEgQUAgHMQHR2ta6+9Vq+//ro3sPz1r39VdHS0JkyYILPZrKFDh3rrP/bYY9q0aZO2bNmiu+++u8n2//KXv8jlcumll15SeHi4Bg8erO+++07/7//9P2+dkJAQLVmyxLvdp08f7du3T2+++aZmzJihTp06KSwsTA6Ho9EpoFWrVik+Pl4rV66UyWTSwIED9f3332vBggV6+OGHFRRUOTFz5ZVX6g9/+IMkacCAAVq5cqX+/ve/E1gAAB1USHjlaEcgPtcPt9xyi+666y6tWrVKFotFf/nLX/Sb3/xGZrNZJSUlWrJkif72t7/p+++/V0VFhc6cOaPc3NxmtX348GENHTpU4eFn+5SUlFSn3gsvvKA///nP+vbbb3XmzBk5nU4NGzbMr+M4fPiwkpKSZDKZvGVjxoxRcXGxvvvuO++I0JVXXumzX1xcnAoKCvz6LH8RWAAAxmUyNXtqJpCmTp0qt9utd955RyNHjtSePXv07LPPSpLuv/9+bd++XU8//bT69++vsLAw/frXv5bT6WxW255mrKd58803NX/+fD3zzDNKSkpSZGSknnrqKe3fv9+v4/B4PD5hpebn1ywPCQnxqWMymeqs4Wltfi+63b17t6ZOnaqePXs2eZ64VHkaVfUCn5qPwYMHe+tkZGTUW6esrMzvAwIAoK2FhYXpV7/6lf7yl79o/fr1uvTSSzVixAhJ0p49ezRz5kxdf/31uuKKKxQbG6tvvvmm2W0PGjRIhw4d0pkzZ7xl77//vk+dPXv2KDk5Wb///e+VkJCg/v3766uvvvKpExoaKpfL1eRn7du3zyck7du3T5GRkbroooua3efzwe/AUlJSoqFDh2rlypXNqr98+XLl5eV5H8eOHVN0dLRuvPFGn3pRUVE+9fLy8mS1Wv3tHgAAAXHLLbfonXfe0UsvvaRbb73VW96/f39t3LhROTk5OnTokG6++Wa/RiNuvvlmBQUFadasWfr000+1detWPf300z51+vfvr48++kjbt2/X559/roceekgffvihT51LLrlEH3/8sY4cOaLCwkKVl5fX+azf//73OnbsmO655x599tln2rx5s/7whz8oLS3Nu34lUPyeEpo8ebImT57c7Po2m002m827/dZbb+nkyZP67W9/61PPZDK1m3PBAQCo7Re/+IWio6N15MgR3Xzzzd7yP/3pT/rd736n5ORkdevWTQsWLJDdbm92u506ddLbb7+t2bNnKyEhQYMGDdLSpUt1ww03eOvMnj1bOTk5SklJkclk0k033aTf//732rZtm7fOnXfeqZ07dyoxMVHFxcX6xz/+oUsuucTnsy666CJt3bpV999/v4YOHaro6GjNmjVL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(history.history['loss'], label='train')\n", "plt.plot(history.history['val_loss'], label='validation')\n", @@ -385,7 +1350,7 @@ "**Questions**:\n", "\n", "- Does it look like our model has overfit? Why or why not? \n", - "Your Answer: ____________\n", + "Your Answer: __Yes__________\n", "- Suggest something we could do to prevent overfitting. \n", "Your Answer: ____________\n", "\n", @@ -394,7 +1359,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, "outputs": [], "source": [ @@ -409,9 +1374,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 468us/step\n", + "Final test MSE: 0.981\n", + "Final test MAE: 0.769\n" + ] + }, + { + "data": { + "image/png": "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ow5HlV9v9IhRSKPKrzdTec50N7RU7PeC68c1OwAnwvt+L9yf7gb5mAihyDIVFjNSYKylLGuWqpqyrDHWkksBMsgJEX8Rs96MbABuu+02TjnllIPGTzjhBG699dZ1USox/uQI6mo5uadFWNANFnatZtwCdRXkYyNHnNBHlV9vJi0KSGY5nQKWmkleCMjy0HM3y8N768L9ThHko+orQSkB3uMsaCloaUWuFC2t0FLgLOA9SgnGoKvpujPyP2nnzp18/vOfP2j885//PKeeeuq6KHUodu3axYMf/GCmp6c58cQTedKTnsS3vvWtDfv7EkfGOYs1odmLIvj9V+4Aima8D1gT5KNzLIWL7or8OjM14vw4qvx6M53ndLqSdhumumHSV82KQMnwfqoL7TZ0upLpyDsAYyz9viHTgiyXZHmO1Jpca6TWZHkexrWg3zcYMwbP8DozcnD2c5/7XF760pdS1/UwHPSf/umfeMUrXsHLXvaydVdwwKc//WkuvvhiHvzgB2OM4bLLLuNxj3sc3/jGN1Iv4ghorWm1od1r3DwsP0yDpB9DYxDarOodEYtRiznGLv6oRqyVNqr8etOvawqhOW6mwusQ+aNl2AVqGXosaw3HzUAhNP06fqfonrE4FLNTOVUJCEHlIJeAl+RFwcJSRW8TTv6wBgPwile8gj179vCCF7xgmBHcarV45StfyaWXXrruCg74+Mc/vur91VdfzYknnsgNN9zAf/kv/2XD/t7EoakQyAymeuEhqgihfRXh8LcijE8BMgvysVEjxsmPKr/edNWggs4o8vEoWgWtTpuZEzwIhVvsI3OQNvTYzbowO9OCaUur06ZoxT20qK2lrBytTFBbh29OsYUALwDvqG24X1aO2loiewXXnZENgBCC3//93+fVr3413/zmN2m329znPvehuJvrve/fvx+AHTsOH6xdliVludyIZG4u8p5+E5EBSkBXhkPevAr+REW45gTfb26CXPxKQKPrEFvnSateWlmPRtNRikpqMh3cPrhQXrm2YSeYO9BoKhs3MED4MNFLKam9x9hB2Cd4BcI5tPJkUmK8HeYMbCbWvMmdmpriwQ9+MGefffbdPvl777nkkkt4+MMfztlnn31YuV27djE7Ozt87dy5827UcnOjhCCXIcY/K4LPP1/xKgjjrtlOq+gxiqBGnNFHlV9vprpdjtVLnjfy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mpqKq1wikUhMIBNjAF7zmtfwnve8Z/j+gQ98IACf/OQnedSjHnVMv6MoCl772tce0i00jiR9N55J0znpu7FMmr5w13QWPhVpSSQSiS3JxGQCJxKJRGJ9SQYgkUgktijJACQSicQWJRmARCKR2KJsWQMwCeWlr7jiCk4//XRarRYPetCD+OxnPxtbpUPymc98hic84QmceuqpCCH427/929gqHZFdu3bx4Ac/mOnpaU488USe9KQn8a1vfSu2Wkfkyiuv5JxzzhkmKJ133nl87GMfi63WMbFr1y6EELz0pS+NrcphufzyyxFCrHqdfPLJsdU6Iv/+7//Os571LI477jg6nQ4PeMADuOGGG0b6HVvWAIx7eem//uu/5qUvfSmXXXYZX/3qV3nEIx7BBRdcwC233BJbtYNYXFzk/ve/P29/+9tjq3JMfPrTn+biiy/mi1/8Itdddx3GGB73uMexuLgYW7XDcs973pPf+73f48tf/jJf/vKXefSjH80Tn/hEvv71r8dW7Yhcf/31XHXVVZxzzjmxVTkqP/ETP8Gtt946fN10002xVTose/fu5WEPexhZlvGxj32Mb3zjG/zRH/3R6ItZv8W5+uqr/ezsbGw1DuIhD3mIv+iii1aNnXnmmf5Vr3pVJI2ODcBfe+21sdUYidtvv90D/tOf/nRsVUZi+/bt/t3vfndsNQ7L/Py8v8997uOvu+46/8hHPtK/5CUvia3SYXnta1/r73//+8dW45h55Stf6R/+8Iff5d+zZXcA40xVVdxwww087nGPWzX+uMc9ji984QuRtNq8DMqEr6WYVgystXzgAx9gcXGR8847L7Y6h+Xiiy/m537u53jsYx8bW5Vj4jvf+Q6nnnoqp59+Ok9/+tP53ve+F1ulw/KRj3yEc889l1/6pV/ixBNP5IEPfCDvete7Rv49yQCMIXfccQfWWk466aRV4yeddBK33XZbJK02J957LrnkEh7+8Idz9tlnx1bniNx0001MTU1RFAUXXXQR1157Lfe9731jq3VIPvCBD/CVr3yFXbt2xVblmHjoQx/Ke9/7Xj7xiU/wrne9i9tuu43zzz+fO++8M7Zqh+R73/seV155Jfe5z334xCc+wUUXXcSLX/xi3vve9470ezaVATjUQc6Bry9/+cux1TxmDuy05Y/SfSsxOi984Qv52te+xl/91V/FVuWo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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import mean_absolute_error\n", @@ -444,9 +1429,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[(944, 64), (1683, 64)]" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# weights and shape\n", "weights = model.get_weights()\n", @@ -455,7 +1451,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, "outputs": [], "source": [ @@ -465,9 +1461,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Title for item_id=181: Return of the Jedi (1983)\n" + ] + } + ], "source": [ "item_id = 181\n", "print(f\"Title for item_id={item_id}: {indexed_items['title'][item_id]}\")" @@ -475,9 +1479,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Embedding vector for item_id=181\n", + "[-0.45099878 -0.41272783 -0.38956165 -0.14898513 -0.2585561 -0.31302595\n", + " 0.07002125 -0.17167047 -0.20685057 -0.3254075 -0.10834142 -0.28014597\n", + " 0.1505906 -0.10314562 -0.36038432 -0.2693096 0.39733133 0.2695401\n", + " 0.10445596 0.24370326 -0.7949351 0.34760326 -0.38296843 -0.11791836\n", + " -0.7231612 -0.02340827 -0.42354852 -0.25649944 0.38901547 0.05321411\n", + " -0.5722384 -0.3995091 -0.5228591 -0.35722753 0.62407583 -0.07811946\n", + " 0.55374664 -0.2704381 0.13510628 -0.6301451 0.04894934 0.32777232\n", + " -0.41544634 0.35512766 -0.16193826 0.547366 -0.39763647 -0.4002803\n", + " 0.5588497 -0.38731492 -0.2600496 0.50212526 -0.41928872 0.17790163\n", + " -0.42368793 -0.63198924 -0.32075003 0.79966205 0.07377576 0.39701328\n", + " 0.6492829 0.2149568 -0.11865564 -0.27333108]\n", + "shape: (64,)\n" + ] + } + ], "source": [ "print(f\"Embedding vector for item_id={item_id}\")\n", "print(item_embeddings[item_id])\n", @@ -504,7 +1528,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": { "collapsed": false }, @@ -521,9 +1545,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Star Wars (1977)\n", + "Return of the Jedi (1983)\n", + "Cosine similarity: 0.85\n" + ] + } + ], "source": [ "def print_similarity(item_a, item_b, item_embeddings, titles):\n", " print(titles[item_a])\n", @@ -546,27 +1580,57 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 44, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Scream (1996)\n", + "Cosine similarity: 0.41\n" + ] + } + ], "source": [ "print_similarity(181, 288, item_embeddings, indexed_items[\"title\"])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 45, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Toy Story (1995)\n", + "Cosine similarity: 0.559\n" + ] + } + ], "source": [ "print_similarity(181, 1, item_embeddings, indexed_items[\"title\"])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 46, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Return of the Jedi (1983)\n", + "Cosine similarity: 1.0\n" + ] + } + ], "source": [ "print_similarity(181, 181, item_embeddings, indexed_items[\"title\"])" ] @@ -584,17 +1648,105 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 69, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
popularitytitlerelease_datevideo_release_dateimdb_urlrelease_year
item_id
14183Joy Luck Club, The (1993)1993-01-01NaNhttp://us.imdb.com/M/title-exact?Joy+Luck+Club...1993.0
\n", + "
" + ], + "text/plain": [ + " popularity title release_date \\\n", + "item_id \n", + "1418 3 Joy Luck Club, The (1993) 1993-01-01 \n", + "\n", + " video_release_date \\\n", + "item_id \n", + "1418 NaN \n", + "\n", + " imdb_url release_year \n", + "item_id \n", + "1418 http://us.imdb.com/M/title-exact?Joy+Luck+Club... 1993.0 " + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Code to help you search for a movie title\n", - "partial_title = \"Jedi\"\n", - "indexed_items[indexed_items['title'].str.contains(partial_title)]\n", - "\n", - "raise NotImplementedError(\"Please implement the next steps yourself\")" + "partial_title = \"Joy\"\n", + "indexed_items[indexed_items['title'].str.contains(partial_title)]\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Joy Luck Club, The (1993)\n", + "Cosine similarity: 0.564\n" + ] + } + ], + "source": [ + "print_similarity(181, 1418, item_embeddings, indexed_items[\"title\"])\n" ] }, { @@ -608,9 +1760,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 73, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[(50, 'Star Wars (1977)', 0.9999999),\n", + " (181, 'Return of the Jedi (1983)', 0.85030687),\n", + " (172, 'Empire Strikes Back, The (1980)', 0.84812814),\n", + " (1550, 'Destiny Turns on the Radio (1995)', 0.7641674),\n", + " (210, 'Indiana Jones and the Last Crusade (1989)', 0.75050825),\n", + " (1573, 'Spirits of the Dead (Tre passi nel delirio) (1968)', 0.7447093),\n", + " (174, 'Raiders of the Lost Ark (1981)', 0.7357749),\n", + " (223, 'Sling Blade (1996)', 0.7348611),\n", + " (1483, 'Man in the Iron Mask, The (1998)', 0.7313081),\n", + " (1443, '8 Seconds (1994)', 0.7294514)]" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "def most_similar(item_id, item_embeddings, titles,\n", " top_n=30):\n", @@ -631,9 +1803,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 74, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[(227, 'Star Trek VI: The Undiscovered Country (1991)', 0.99999994),\n", + " (228, 'Star Trek: The Wrath of Khan (1982)', 0.76091003),\n", + " (973, 'Grateful Dead (1995)', 0.71734285),\n", + " (1056, 'Cronos (1992)', 0.71655643),\n", + " (1498, 'Farmer & Chase (1995)', 0.7157798),\n", + " (1485, 'Colonel Chabert, Le (1994)', 0.71304137),\n", + " (1497, 'Line King: Al Hirschfeld, The (1996)', 0.71241194),\n", + " (1495, 'Flirt (1995)', 0.7111186),\n", + " (1409, 'Swan Princess, The (1994)', 0.7077191),\n", + " (1125, 'Innocents, The (1961)', 0.70482767)]" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "# Find the most similar films to \"Star Trek VI: The Undiscovered Country\"\n", "most_similar(227, item_embeddings, indexed_items[\"title\"], top_n=10)" @@ -657,7 +1849,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": {}, "outputs": [], "source": [ @@ -668,9 +1860,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -682,11 +1885,9316 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 75, "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "customdata": [ + [ + 1, + "Toy Story (1995)", + 452 + ], + [ + 2, + "GoldenEye (1995)", + 131 + ], + [ + 3, + "Four Rooms (1995)", + 90 + ], + [ + 4, + "Get Shorty (1995)", + 209 + ], + [ + 5, + "Copycat (1995)", + 86 + ], + [ + 6, + "Shanghai Triad (Yao a yao yao dao waipo qiao) (1995)", + 26 + ], + [ + 7, + "Twelve Monkeys (1995)", + 392 + ], + [ + 8, + "Babe (1995)", + 219 + ], + [ + 9, + "Dead Man Walking (1995)", + 299 + ], + [ + 10, + "Richard III (1995)", + 89 + ], + [ + 11, + "Seven (Se7en) (1995)", + 236 + ], + [ + 12, + "Usual Suspects, The (1995)", + 267 + ], + [ + 13, + "Mighty Aphrodite (1995)", + 184 + ], + [ + 14, + "Postino, Il (1994)", + 183 + ], + [ + 15, + "Mr. Holland's Opus (1995)", + 293 + ], + [ + 16, + "French Twist (Gazon maudit) (1995)", + 39 + ], + [ + 17, + "From Dusk Till Dawn (1996)", + 92 + ], + [ + 18, + "White Balloon, The (1995)", + 10 + ], + [ + 19, + "Antonia's Line (1995)", + 69 + ], + [ + 20, + "Angels and Insects (1995)", + 72 + ], + [ + 21, + "Muppet Treasure Island (1996)", + 84 + ], + [ + 22, + "Braveheart (1995)", + 297 + ], + [ + 23, + "Taxi Driver (1976)", + 182 + ], + [ + 24, + "Rumble in the Bronx (1995)", + 174 + ], + [ + 25, + "Birdcage, The (1996)", + 293 + ], + [ + 26, + "Brothers McMullen, The (1995)", + 73 + ], + [ + 27, + "Bad Boys (1995)", + 57 + ], + [ + 28, + "Apollo 13 (1995)", + 276 + ], + [ + 29, + "Batman Forever (1995)", + 114 + ], + [ + 30, + "Belle de jour (1967)", + 37 + ], + [ + 31, + "Crimson Tide (1995)", + 154 + ], + [ + 32, + "Crumb (1994)", + 81 + ], + [ + 33, + "Desperado (1995)", + 97 + ], + [ + 34, + "Doom Generation, The (1995)", + 7 + ], + [ + 35, + "Free Willy 2: The Adventure Home (1995)", + 11 + ], + [ + 36, + "Mad Love (1995)", + 13 + ], + [ + 37, + "Nadja (1994)", + 8 + ], + [ + 38, + "Net, The (1995)", + 120 + ], + [ + 39, + "Strange Days (1995)", + 87 + ], + [ + 40, + "To Wong Foo, Thanks for Everything! Julie Newmar (1995)", + 57 + ], + [ + 41, + "Billy Madison (1995)", + 37 + ], + [ + 42, + "Clerks (1994)", + 148 + ], + [ + 43, + "Disclosure (1994)", + 40 + ], + [ + 44, + "Dolores Claiborne (1994)", + 79 + ], + [ + 45, + "Eat Drink Man Woman (1994)", + 80 + ], + [ + 46, + "Exotica (1994)", + 27 + ], + [ + 47, + "Ed Wood (1994)", + 133 + ], + [ + 48, + "Hoop Dreams (1994)", + 117 + ], + [ + 49, + "I.Q. (1994)", + 81 + ], + [ + 50, + "Star Wars (1977)", + 583 + ], + [ + 51, + "Legends of the Fall (1994)", + 81 + ], + [ + 52, + "Madness of King George, The (1994)", + 91 + ], + [ + 53, + "Natural Born Killers (1994)", + 128 + ], + [ + 54, + "Outbreak (1995)", + 104 + ], + [ + 55, + "Professional, The (1994)", + 149 + ], + [ + 56, + "Pulp Fiction (1994)", + 394 + ], + [ + 57, + "Priest (1994)", + 40 + ], + [ + 58, + "Quiz Show (1994)", + 175 + ], + [ + 59, + "Three Colors: Red (1994)", + 83 + ], + [ + 60, + "Three Colors: Blue (1993)", + 64 + ], + [ + 61, + "Three Colors: White (1994)", + 59 + ], + [ + 62, + "Stargate (1994)", + 127 + ], + [ + 63, + "Santa Clause, The (1994)", + 82 + ], + [ + 64, + "Shawshank Redemption, The (1994)", + 283 + ], + [ + 65, + "What's Eating Gilbert Grape (1993)", + 115 + ], + [ + 66, + "While You Were Sleeping (1995)", + 162 + ], + [ + 67, + "Ace Ventura: Pet Detective (1994)", + 103 + ], + [ + 68, + "Crow, The (1994)", + 134 + ], + [ + 69, + "Forrest Gump (1994)", + 321 + ], + [ + 70, + "Four Weddings and a Funeral (1994)", + 251 + ], + [ + 71, + "Lion King, The (1994)", + 220 + ], + [ + 72, + "Mask, The (1994)", + 129 + ], + [ + 73, + "Maverick (1994)", + 128 + ], + [ + 74, + "Faster Pussycat! Kill! Kill! (1965)", + 7 + ], + [ + 75, + "Brother Minister: The Assassination of Malcolm X (1994)", + 5 + ], + [ + 76, + "Carlito's Way (1993)", + 54 + ], + [ + 77, + "Firm, The (1993)", + 151 + ], + [ + 78, + "Free Willy (1993)", + 33 + ], + [ + 79, + "Fugitive, The (1993)", + 336 + ], + [ + 80, + "Hot Shots! Part Deux (1993)", + 68 + ], + [ + 81, + "Hudsucker Proxy, The (1994)", + 110 + ], + [ + 82, + "Jurassic Park (1993)", + 261 + ], + [ + 83, + "Much Ado About Nothing (1993)", + 176 + ], + [ + 84, + "Robert A. Heinlein's The Puppet Masters (1994)", + 18 + ], + [ + 85, + "Ref, The (1994)", + 58 + ], + [ + 86, + "Remains of the Day, The (1993)", + 150 + ], + [ + 87, + "Searching for Bobby Fischer (1993)", + 138 + ], + [ + 88, + "Sleepless in Seattle (1993)", + 213 + ], + [ + 89, + "Blade Runner (1982)", + 275 + ], + [ + 90, + "So I Married an Axe Murderer (1993)", + 95 + ], + [ + 91, + "Nightmare Before Christmas, The (1993)", + 143 + ], + [ + 92, + "True Romance (1993)", + 104 + ], + [ + 93, + "Welcome to the Dollhouse (1995)", + 112 + ], + [ + 94, + "Home Alone (1990)", + 137 + ], + [ + 95, + "Aladdin (1992)", + 219 + ], + [ + 96, + "Terminator 2: Judgment Day (1991)", + 295 + ], + [ + 97, + "Dances with Wolves (1990)", + 256 + ], + [ + 98, + "Silence of the Lambs, The (1991)", + 390 + ], + [ + 99, + "Snow White and the Seven Dwarfs (1937)", + 172 + ], + [ + 100, + "Fargo (1996)", + 508 + ], + [ + 101, + "Heavy Metal (1981)", + 73 + ], + [ + 102, + "Aristocats, The (1970)", + 54 + ], + [ + 103, + "All Dogs Go to Heaven 2 (1996)", + 15 + ], + [ + 104, + "Theodore Rex (1995)", + 5 + ], + [ + 105, + "Sgt. Bilko (1996)", + 74 + ], + [ + 106, + "Diabolique (1996)", + 71 + ], + [ + 107, + "Moll Flanders (1996)", + 42 + ], + [ + 108, + "Kids in the Hall: Brain Candy (1996)", + 65 + ], + [ + 109, + "Mystery Science Theater 3000: The Movie (1996)", + 130 + ], + [ + 110, + "Operation Dumbo Drop (1995)", + 31 + ], + [ + 111, + "Truth About Cats & Dogs, The (1996)", + 272 + ], + [ + 112, + "Flipper (1996)", + 20 + ], + [ + 113, + "Horseman on the Roof, The (Hussard sur le toit, Le) (1995)", + 9 + ], + [ + 114, + "Wallace & Gromit: The Best of Aardman Animation (1996)", + 67 + ], + [ + 115, + "Haunted World of Edward D. Wood Jr., The (1995)", + 15 + ], + [ + 116, + "Cold Comfort Farm (1995)", + 125 + ], + [ + 117, + "Rock, The (1996)", + 378 + ], + [ + 118, + "Twister (1996)", + 293 + ], + [ + 119, + "Maya Lin: A Strong Clear Vision (1994)", + 4 + ], + [ + 120, + "Striptease (1996)", + 67 + ], + [ + 121, + "Independence Day (ID4) (1996)", + 429 + ], + [ + 122, + "Cable Guy, The (1996)", + 106 + ], + [ + 123, + "Frighteners, The (1996)", + 115 + ], + [ + 124, + "Lone Star (1996)", + 187 + ], + [ + 125, + "Phenomenon (1996)", + 244 + ], + [ + 126, + "Spitfire Grill, The (1996)", + 97 + ], + [ + 127, + "Godfather, The (1972)", + 413 + ], + [ + 128, + "Supercop (1992)", + 65 + ], + [ + 129, + "Bound (1996)", + 129 + ], + [ + 130, + "Kansas City (1996)", + 23 + ], + [ + 131, + "Breakfast at Tiffany's (1961)", + 95 + ], + [ + 132, + "Wizard of Oz, The (1939)", + 246 + ], + [ + 133, + "Gone with the Wind (1939)", + 171 + ], + [ + 134, + "Citizen Kane (1941)", + 198 + ], + [ + 135, + "2001: A Space Odyssey (1968)", + 259 + ], + [ + 136, + "Mr. Smith Goes to Washington (1939)", + 105 + ], + [ + 137, + "Big Night (1996)", + 171 + ], + [ + 138, + "D3: The Mighty Ducks (1996)", + 19 + ], + [ + 139, + "Love Bug, The (1969)", + 50 + ], + [ + 140, + "Homeward Bound: The Incredible Journey (1993)", + 61 + ], + [ + 141, + "20,000 Leagues Under the Sea (1954)", + 72 + ], + [ + 142, + "Bedknobs and Broomsticks (1971)", + 57 + ], + [ + 143, + "Sound of Music, The (1965)", + 222 + ], + [ + 144, + "Die Hard (1988)", + 243 + ], + [ + 145, + "Lawnmower Man, The (1992)", + 65 + ], + [ + 146, + "Unhook the Stars (1996)", + 10 + ], + [ + 147, + "Long Kiss Goodnight, The (1996)", + 185 + ], + [ + 148, + "Ghost and the Darkness, The (1996)", + 128 + ], + [ + 149, + "Jude (1996)", + 23 + ], + [ + 150, + "Swingers (1996)", + 157 + ], + [ + 151, + "Willy Wonka and the Chocolate Factory (1971)", + 326 + ], + [ + 152, + "Sleeper (1973)", + 82 + ], + [ + 153, + "Fish Called Wanda, A (1988)", + 247 + ], + [ + 154, + "Monty Python's Life of Brian (1979)", + 174 + ], + [ + 155, + "Dirty Dancing (1987)", + 98 + ], + [ + 156, + "Reservoir Dogs (1992)", + 148 + ], + [ + 157, + "Platoon (1986)", + 127 + ], + [ + 158, + "Weekend at Bernie's (1989)", + 60 + ], + [ + 159, + "Basic Instinct (1992)", + 101 + ], + [ + 160, + "Glengarry Glen Ross (1992)", + 69 + ], + [ + 161, + "Top Gun (1986)", + 220 + ], + [ + 162, + "On Golden Pond (1981)", + 106 + ], + [ + 163, + "Return of the Pink Panther, The (1974)", + 92 + ], + [ + 164, + "Abyss, The (1989)", + 151 + ], + [ + 165, + "Jean de Florette (1986)", + 64 + ], + [ + 166, + "Manon of the Spring (Manon des sources) (1986)", + 58 + ], + [ + 167, + "Private Benjamin (1980)", + 67 + ], + [ + 168, + "Monty Python and the Holy Grail (1974)", + 316 + ], + [ + 169, + "Wrong Trousers, The (1993)", + 118 + ], + [ + 170, + "Cinema Paradiso (1988)", + 121 + ], + [ + 171, + "Delicatessen (1991)", + 65 + ], + [ + 172, + "Empire Strikes Back, The (1980)", + 367 + ], + [ + 173, + "Princess Bride, The (1987)", + 324 + ], + [ + 174, + "Raiders of the Lost Ark (1981)", + 420 + ], + [ + 175, + "Brazil (1985)", + 208 + ], + [ + 176, + "Aliens (1986)", + 284 + ], + [ + 177, + "Good, The Bad and The Ugly, The (1966)", + 137 + ], + [ + 178, + "12 Angry Men (1957)", + 125 + ], + [ + 179, + "Clockwork Orange, A (1971)", + 221 + ], + [ + 180, + "Apocalypse Now (1979)", + 221 + ], + [ + 181, + "Return of the Jedi (1983)", + 507 + ], + [ + 182, + "GoodFellas (1990)", + 226 + ], + [ + 183, + "Alien (1979)", + 291 + ], + [ + 184, + "Army of Darkness (1993)", + 116 + ], + [ + 185, + "Psycho (1960)", + 239 + ], + [ + 186, + "Blues Brothers, The (1980)", + 251 + ], + [ + 187, + "Godfather: Part II, The (1974)", + 209 + ], + [ + 188, + "Full Metal Jacket (1987)", + 170 + ], + [ + 189, + "Grand Day Out, A (1992)", + 66 + ], + [ + 190, + "Henry V (1989)", + 124 + ], + [ + 191, + "Amadeus (1984)", + 276 + ], + [ + 192, + "Raging Bull (1980)", + 116 + ], + [ + 193, + "Right Stuff, The (1983)", + 157 + ], + [ + 194, + "Sting, The (1973)", + 241 + ], + [ + 195, + "Terminator, The (1984)", + 301 + ], + [ + 196, + "Dead Poets Society (1989)", + 251 + ], + [ + 197, + "Graduate, The (1967)", + 239 + ], + [ + 198, + "Nikita (La Femme Nikita) (1990)", + 127 + ], + [ + 199, + "Bridge on the River Kwai, The (1957)", + 165 + ], + [ + 200, + "Shining, The (1980)", + 206 + ], + [ + 201, + "Evil Dead II (1987)", + 89 + ], + [ + 202, + "Groundhog Day (1993)", + 280 + ], + [ + 203, + "Unforgiven (1992)", + 182 + ], + [ + 204, + "Back to the Future (1985)", + 350 + ], + [ + 205, + "Patton (1970)", + 136 + ], + [ + 206, + "Akira (1988)", + 50 + ], + [ + 207, + "Cyrano de Bergerac (1990)", + 66 + ], + [ + 208, + "Young Frankenstein (1974)", + 200 + ], + [ + 209, + "This Is Spinal Tap (1984)", + 191 + ], + [ + 210, + "Indiana Jones and the Last Crusade (1989)", + 331 + ], + [ + 211, + "M*A*S*H (1970)", + 206 + ], + [ + 212, + "Unbearable Lightness of Being, The (1988)", + 92 + ], + [ + 213, + "Room with a View, A (1986)", + 134 + ], + [ + 214, + "Pink Floyd - The Wall (1982)", + 114 + ], + [ + 215, + "Field of Dreams (1989)", + 212 + ], + [ + 216, + "When Harry Met Sally... (1989)", + 290 + ], + [ + 217, + "Bram Stoker's Dracula (1992)", + 120 + ], + [ + 218, + "Cape Fear (1991)", + 171 + ], + [ + 219, + "Nightmare on Elm Street, A (1984)", + 111 + ], + [ + 220, + "Mirror Has Two Faces, The (1996)", + 66 + ], + [ + 221, + "Breaking the Waves (1996)", + 74 + ], + [ + 222, + "Star Trek: First Contact (1996)", + 365 + ], + [ + 223, + "Sling Blade (1996)", + 136 + ], + [ + 224, + "Ridicule (1996)", + 44 + ], + [ + 225, + "101 Dalmatians (1996)", + 109 + ], + [ + 226, + "Die Hard 2 (1990)", + 166 + ], + [ + 227, + "Star Trek VI: The Undiscovered Country (1991)", + 161 + ], + [ + 228, + "Star Trek: The Wrath of Khan (1982)", + 244 + ], + [ + 229, + "Star Trek III: The Search for Spock (1984)", + 171 + ], + [ + 230, + "Star Trek IV: The Voyage Home (1986)", + 199 + ], + [ + 231, + "Batman Returns (1992)", + 142 + ], + [ + 232, + "Young Guns (1988)", + 101 + ], + [ + 233, + "Under Siege (1992)", + 124 + ], + [ + 234, + "Jaws (1975)", + 280 + ], + [ + 235, + "Mars Attacks! (1996)", + 217 + ], + [ + 236, + "Citizen Ruth (1996)", + 45 + ], + [ + 237, + "Jerry Maguire (1996)", + 384 + ], + [ + 238, + "Raising Arizona (1987)", + 256 + ], + [ + 239, + "Sneakers (1992)", + 150 + ], + [ + 240, + "Beavis and Butt-head Do America (1996)", + 156 + ], + [ + 241, + "Last of the Mohicans, The (1992)", + 128 + ], + [ + 242, + "Kolya (1996)", + 117 + ], + [ + 243, + "Jungle2Jungle (1997)", + 132 + ], + [ + 244, + "Smilla's Sense of Snow (1997)", + 48 + ], + [ + 245, + "Devil's Own, The (1997)", + 240 + ], + [ + 246, + "Chasing Amy (1997)", + 124 + ], + [ + 247, + "Turbo: A Power Rangers Movie (1997)", + 5 + ], + [ + 248, + "Grosse Pointe Blank (1997)", + 160 + ], + [ + 249, + "Austin Powers: International Man of Mystery (1997)", + 130 + ], + [ + 250, + "Fifth Element, The (1997)", + 197 + ], + [ + 251, + "Shall We Dance? (1996)", + 46 + ], + [ + 252, + "Lost World: Jurassic Park, The (1997)", + 158 + ], + [ + 253, + "Pillow Book, The (1995)", + 26 + ], + [ + 254, + "Batman & Robin (1997)", + 62 + ], + [ + 255, + "My Best Friend's Wedding (1997)", + 172 + ], + [ + 256, + "When the Cats Away (Chacun cherche son chat) (1996)", + 16 + ], + [ + 257, + "Men in Black (1997)", + 303 + ], + [ + 258, + "Contact (1997)", + 509 + ], + [ + 259, + "George of the Jungle (1997)", + 162 + ], + [ + 260, + "Event Horizon (1997)", + 127 + ], + [ + 261, + "Air Bud (1997)", + 43 + ], + [ + 262, + "In the Company of Men (1997)", + 66 + ], + [ + 263, + "Steel (1997)", + 19 + ], + [ + 264, + "Mimic (1997)", + 101 + ], + [ + 265, + "Hunt for Red October, The (1990)", + 227 + ], + [ + 266, + "Kull the Conqueror (1997)", + 35 + ], + [ + 267, + "unknown", + 9 + ], + [ + 268, + "Chasing Amy (1997)", + 255 + ], + [ + 269, + "Full Monty, The (1997)", + 315 + ], + [ + 270, + "Gattaca (1997)", + 136 + ], + [ + 271, + "Starship Troopers (1997)", + 211 + ], + [ + 272, + "Good Will Hunting (1997)", + 198 + ], + [ + 273, + "Heat (1995)", + 223 + ], + [ + 274, + "Sabrina (1995)", + 190 + ], + [ + 275, + "Sense and Sensibility (1995)", + 268 + ], + [ + 276, + "Leaving Las Vegas (1995)", + 298 + ], + [ + 277, + "Restoration (1995)", + 71 + ], + [ + 278, + "Bed of Roses (1996)", + 60 + ], + [ + 279, + "Once Upon a Time... When We Were Colored (1995)", + 28 + ], + [ + 280, + "Up Close and Personal (1996)", + 85 + ], + [ + 281, + "River Wild, The (1994)", + 146 + ], + [ + 282, + "Time to Kill, A (1996)", + 232 + ], + [ + 283, + "Emma (1996)", + 177 + ], + [ + 284, + "Tin Cup (1996)", + 193 + ], + [ + 285, + "Secrets & Lies (1996)", + 162 + ], + [ + 286, + "English Patient, The (1996)", + 481 + ], + [ + 287, + "Marvin's Room (1996)", + 78 + ], + [ + 288, + "Scream (1996)", + 478 + ], + [ + 289, + "Evita (1996)", + 259 + ], + [ + 290, + "Fierce Creatures (1997)", + 96 + ], + [ + 291, + "Absolute Power (1997)", + 127 + ], + [ + 292, + "Rosewood (1997)", + 114 + ], + [ + 293, + "Donnie Brasco (1997)", + 147 + ], + [ + 294, + "Liar Liar (1997)", + 485 + ], + [ + 295, + "Breakdown (1997)", + 77 + ], + [ + 296, + "Promesse, La (1996)", + 6 + ], + [ + 297, + "Ulee's Gold (1997)", + 50 + ], + [ + 298, + "Face/Off (1997)", + 194 + ], + [ + 299, + "Hoodlum (1997)", + 73 + ], + [ + 300, + "Air Force One (1997)", + 431 + ], + [ + 301, + "In & Out (1997)", + 230 + ], + [ + 302, + "L.A. Confidential (1997)", + 297 + ], + [ + 303, + "Ulee's Gold (1997)", + 134 + ], + [ + 304, + "Fly Away Home (1996)", + 149 + ], + [ + 305, + "Ice Storm, The (1997)", + 87 + ], + [ + 306, + "Mrs. Brown (Her Majesty, Mrs. Brown) (1997)", + 96 + ], + [ + 307, + "Devil's Advocate, The (1997)", + 188 + ], + [ + 308, + "FairyTale: A True Story (1997)", + 30 + ], + [ + 309, + "Deceiver (1997)", + 28 + ], + [ + 310, + "Rainmaker, The (1997)", + 145 + ], + [ + 311, + "Wings of the Dove, The (1997)", + 75 + ], + [ + 312, + "Midnight in the Garden of Good and Evil (1997)", + 80 + ], + [ + 313, + "Titanic (1997)", + 350 + ], + [ + 314, + "3 Ninjas: High Noon At Mega Mountain (1998)", + 5 + ], + [ + 315, + "Apt Pupil (1998)", + 160 + ], + [ + 316, + "As Good As It Gets (1997)", + 112 + ], + [ + 317, + "In the Name of the Father (1993)", + 102 + ], + [ + 318, + "Schindler's List (1993)", + 298 + ], + [ + 319, + "Everyone Says I Love You (1996)", + 168 + ], + [ + 320, + "Paradise Lost: The Child Murders at Robin Hood Hills (1996)", + 20 + ], + [ + 321, + "Mother (1996)", + 169 + ], + [ + 322, + "Murder at 1600 (1997)", + 218 + ], + [ + 323, + "Dante's Peak (1997)", + 240 + ], + [ + 324, + "Lost Highway (1997)", + 125 + ], + [ + 325, + "Crash (1996)", + 128 + ], + [ + 326, + "G.I. Jane (1997)", + 175 + ], + [ + 327, + "Cop Land (1997)", + 175 + ], + [ + 328, + "Conspiracy Theory (1997)", + 295 + ], + [ + 329, + "Desperate Measures (1998)", + 45 + ], + [ + 330, + "187 (1997)", + 41 + ], + [ + 331, + "Edge, The (1997)", + 113 + ], + [ + 332, + "Kiss the Girls (1997)", + 143 + ], + [ + 333, + "Game, The (1997)", + 251 + ], + [ + 334, + "U Turn (1997)", + 64 + ], + [ + 335, + "How to Be a Player (1997)", + 21 + ], + [ + 336, + "Playing God (1997)", + 43 + ], + [ + 337, + "House of Yes, The (1997)", + 18 + ], + [ + 338, + "Bean (1997)", + 91 + ], + [ + 339, + "Mad City (1997)", + 47 + ], + [ + 340, + "Boogie Nights (1997)", + 189 + ], + [ + 341, + "Critical Care (1997)", + 11 + ], + [ + 342, + "Man Who Knew Too Little, The (1997)", + 52 + ], + [ + 343, + "Alien: Resurrection (1997)", + 124 + ], + [ + 344, + "Apostle, The (1997)", + 55 + ], + [ + 345, + "Deconstructing Harry (1997)", + 65 + ], + [ + 346, + "Jackie Brown (1997)", + 126 + ], + [ + 347, + "Wag the Dog (1997)", + 137 + ], + [ + 348, + "Desperate Measures (1998)", + 27 + ], + [ + 349, + "Hard Rain (1998)", + 31 + ], + [ + 350, + "Fallen (1998)", + 41 + ], + [ + 351, + "Prophecy II, The (1998)", + 20 + ], + [ + 352, + "Spice World (1997)", + 26 + ], + [ + 353, + "Deep Rising (1998)", + 14 + ], + [ + 354, + "Wedding Singer, The (1998)", + 72 + ], + [ + 355, + "Sphere (1998)", + 41 + ], + [ + 356, + "Client, The (1994)", + 97 + ], + [ + 357, + "One Flew Over the Cuckoo's Nest (1975)", + 264 + ], + [ + 358, + "Spawn (1997)", + 143 + ], + [ + 359, + "Assignment, The (1997)", + 18 + ], + [ + 360, + "Wonderland (1997)", + 10 + ], + [ + 361, + "Incognito (1997)", + 10 + ], + [ + 362, + "Blues Brothers 2000 (1998)", + 28 + ], + [ + 363, + "Sudden Death (1995)", + 47 + ], + [ + 364, + "Ace Ventura: When Nature Calls (1995)", + 37 + ], + [ + 365, + "Powder (1995)", + 48 + ], + [ + 366, + "Dangerous Minds (1995)", + 47 + ], + [ + 367, + "Clueless (1995)", + 170 + ], + [ + 368, + "Bio-Dome (1996)", + 31 + ], + [ + 369, + "Black Sheep (1996)", + 55 + ], + [ + 370, + "Mary Reilly (1996)", + 39 + ], + [ + 371, + "Bridges of Madison County, The (1995)", + 67 + ], + [ + 372, + "Jeffrey (1995)", + 34 + ], + [ + 373, + "Judge Dredd (1995)", + 39 + ], + [ + 374, + "Mighty Morphin Power Rangers: The Movie (1995)", + 11 + ], + [ + 375, + "Showgirls (1995)", + 23 + ], + [ + 376, + "Houseguest (1994)", + 24 + ], + [ + 377, + "Heavyweights (1994)", + 13 + ], + [ + 378, + "Miracle on 34th Street (1994)", + 101 + ], + [ + 379, + "Tales From the Crypt Presents: Demon Knight (1995)", + 43 + ], + [ + 380, + "Star Trek: Generations (1994)", + 116 + ], + [ + 381, + "Muriel's Wedding (1994)", + 100 + ], + [ + 382, + "Adventures of Priscilla, Queen of the Desert, The (1994)", + 111 + ], + [ + 383, + "Flintstones, The (1994)", + 31 + ], + [ + 384, + "Naked Gun 33 1/3: The Final Insult (1994)", + 69 + ], + [ + 385, + "True Lies (1994)", + 208 + ], + [ + 386, + "Addams Family Values (1993)", + 87 + ], + [ + 387, + "Age of Innocence, The (1993)", + 65 + ], + [ + 388, + "Beverly Hills Cop III (1994)", + 28 + ], + [ + 389, + "Black Beauty (1994)", + 27 + ], + [ + 390, + "Fear of a Black Hat (1993)", + 10 + ], + [ + 391, + "Last Action Hero (1993)", + 59 + ], + [ + 392, + "Man Without a Face, The (1993)", + 68 + ], + [ + 393, + "Mrs. Doubtfire (1993)", + 192 + ], + [ + 394, + "Radioland Murders (1994)", + 12 + ], + [ + 395, + "Robin Hood: Men in Tights (1993)", + 56 + ], + [ + 396, + "Serial Mom (1994)", + 54 + ], + [ + 397, + "Striking Distance (1993)", + 12 + ], + [ + 398, + "Super Mario Bros. (1993)", + 26 + ], + [ + 399, + "Three Musketeers, The (1993)", + 89 + ], + [ + 400, + "Little Rascals, The (1994)", + 18 + ], + [ + 401, + "Brady Bunch Movie, The (1995)", + 76 + ], + [ + 402, + "Ghost (1990)", + 170 + ], + [ + 403, + "Batman (1989)", + 201 + ], + [ + 404, + "Pinocchio (1940)", + 101 + ], + [ + 405, + "Mission: Impossible (1996)", + 344 + ], + [ + 406, + "Thinner (1996)", + 49 + ], + [ + 407, + "Spy Hard (1996)", + 43 + ], + [ + 408, + "Close Shave, A (1995)", + 112 + ], + [ + 409, + "Jack (1996)", + 70 + ], + [ + 410, + "Kingpin (1996)", + 162 + ], + [ + 411, + "Nutty Professor, The (1996)", + 163 + ], + [ + 412, + "Very Brady Sequel, A (1996)", + 93 + ], + [ + 413, + "Tales from the Crypt Presents: Bordello of Blood (1996)", + 55 + ], + [ + 414, + "My Favorite Year (1982)", + 62 + ], + [ + 415, + "Apple Dumpling Gang, The (1975)", + 25 + ], + [ + 416, + "Old Yeller (1957)", + 64 + ], + [ + 417, + "Parent Trap, The (1961)", + 73 + ], + [ + 418, + "Cinderella (1950)", + 129 + ], + [ + 419, + "Mary Poppins (1964)", + 178 + ], + [ + 420, + "Alice in Wonderland (1951)", + 81 + ], + [ + 421, + "William Shakespeare's Romeo and Juliet (1996)", + 106 + ], + [ + 422, + "Aladdin and the King of Thieves (1996)", + 26 + ], + [ + 423, + "E.T. the Extra-Terrestrial (1982)", + 300 + ], + [ + 424, + "Children of the Corn: The Gathering (1996)", + 19 + ], + [ + 425, + "Bob Roberts (1992)", + 85 + ], + [ + 426, + "Transformers: The Movie, The (1986)", + 32 + ], + [ + 427, + "To Kill a Mockingbird (1962)", + 219 + ], + [ + 428, + "Harold and Maude (1971)", + 121 + ], + [ + 429, + "Day the Earth Stood Still, The (1951)", + 97 + ], + [ + 430, + "Duck Soup (1933)", + 93 + ], + [ + 431, + "Highlander (1986)", + 153 + ], + [ + 432, + "Fantasia (1940)", + 174 + ], + [ + 433, + "Heathers (1989)", + 171 + ], + [ + 434, + "Forbidden Planet (1956)", + 67 + ], + [ + 435, + "Butch Cassidy and the Sundance Kid (1969)", + 216 + ], + [ + 436, + "American Werewolf in London, An (1981)", + 99 + ], + [ + 437, + "Amityville 1992: It's About Time (1992)", + 5 + ], + [ + 438, + "Amityville 3-D (1983)", + 6 + ], + [ + 439, + "Amityville: A New Generation (1993)", + 5 + ], + [ + 440, + "Amityville II: The Possession (1982)", + 14 + ], + [ + 441, + "Amityville Horror, The (1979)", + 53 + ], + [ + 442, + "Amityville Curse, The (1990)", + 4 + ], + [ + 443, + "Birds, The (1963)", + 162 + ], + [ + 444, + "Blob, The (1958)", + 46 + ], + [ + 445, + "Body Snatcher, The (1945)", + 22 + ], + [ + 446, + "Burnt Offerings (1976)", + 9 + ], + [ + 447, + "Carrie (1976)", + 121 + ], + [ + 448, + "Omen, The (1976)", + 85 + ], + [ + 449, + "Star Trek: The Motion Picture (1979)", + 117 + ], + [ + 450, + "Star Trek V: The Final Frontier (1989)", + 63 + ], + [ + 451, + "Grease (1978)", + 170 + ], + [ + 452, + "Jaws 2 (1978)", + 66 + ], + [ + 453, + "Jaws 3-D (1983)", + 16 + ], + [ + 454, + "Bastard Out of Carolina (1996)", + 16 + ], + [ + 455, + "Jackie Chan's First Strike (1996)", + 145 + ], + [ + 456, + "Beverly Hills Ninja (1997)", + 48 + ], + [ + 457, + "Free Willy 3: The Rescue (1997)", + 27 + ], + [ + 458, + "Nixon (1995)", + 90 + ], + [ + 459, + "Cry, the Beloved Country (1995)", + 24 + ], + [ + 460, + "Crossing Guard, The (1995)", + 28 + ], + [ + 461, + "Smoke (1995)", + 74 + ], + [ + 462, + "Like Water For Chocolate (Como agua para chocolate) (1992)", + 148 + ], + [ + 463, + "Secret of Roan Inish, The (1994)", + 71 + ], + [ + 464, + "Vanya on 42nd Street (1994)", + 27 + ], + [ + 465, + "Jungle Book, The (1994)", + 85 + ], + [ + 466, + "Red Rock West (1992)", + 52 + ], + [ + 467, + "Bronx Tale, A (1993)", + 48 + ], + [ + 468, + "Rudy (1993)", + 64 + ], + [ + 469, + "Short Cuts (1993)", + 67 + ], + [ + 470, + "Tombstone (1993)", + 108 + ], + [ + 471, + "Courage Under Fire (1996)", + 221 + ], + [ + 472, + "Dragonheart (1996)", + 158 + ], + [ + 473, + "James and the Giant Peach (1996)", + 126 + ], + [ + 474, + "Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb (1963)", + 194 + ], + [ + 475, + "Trainspotting (1996)", + 250 + ], + [ + 476, + "First Wives Club, The (1996)", + 160 + ], + [ + 477, + "Matilda (1996)", + 95 + ], + [ + 478, + "Philadelphia Story, The (1940)", + 104 + ], + [ + 479, + "Vertigo (1958)", + 179 + ], + [ + 480, + "North by Northwest (1959)", + 179 + ], + [ + 481, + "Apartment, The (1960)", + 63 + ], + [ + 482, + "Some Like It Hot (1959)", + 128 + ], + [ + 483, + "Casablanca (1942)", + 243 + ], + [ + 484, + "Maltese Falcon, The (1941)", + 138 + ], + [ + 485, + "My Fair Lady (1964)", + 125 + ], + [ + 486, + "Sabrina (1954)", + 64 + ], + [ + 487, + "Roman Holiday (1953)", + 68 + ], + [ + 488, + "Sunset Blvd. (1950)", + 65 + ], + [ + 489, + "Notorious (1946)", + 52 + ], + [ + 490, + "To Catch a Thief (1955)", + 50 + ], + [ + 491, + "Adventures of Robin Hood, The (1938)", + 67 + ], + [ + 492, + "East of Eden (1955)", + 59 + ], + [ + 493, + "Thin Man, The (1934)", + 60 + ], + [ + 494, + "His Girl Friday (1940)", + 56 + ], + [ + 495, + "Around the World in 80 Days (1956)", + 59 + ], + [ + 496, + "It's a Wonderful Life (1946)", + 231 + ], + [ + 497, + "Bringing Up Baby (1938)", + 68 + ], + [ + 498, + "African Queen, The (1951)", + 152 + ], + [ + 499, + "Cat on a Hot Tin Roof (1958)", + 62 + ], + [ + 500, + "Fly Away Home (1996)", + 31 + ], + [ + 501, + "Dumbo (1941)", + 123 + ], + [ + 502, + "Bananas (1971)", + 57 + ], + [ + 503, + "Candidate, The (1972)", + 39 + ], + [ + 504, + "Bonnie and Clyde (1967)", + 122 + ], + [ + 505, + "Dial M for Murder (1954)", + 68 + ], + [ + 506, + "Rebel Without a Cause (1955)", + 90 + ], + [ + 507, + "Streetcar Named Desire, A (1951)", + 98 + ], + [ + 508, + "People vs. Larry Flynt, The (1996)", + 215 + ], + [ + 509, + "My Left Foot (1989)", + 121 + ], + [ + 510, + "Magnificent Seven, The (1954)", + 121 + ], + [ + 511, + "Lawrence of Arabia (1962)", + 173 + ], + [ + 512, + "Wings of Desire (1987)", + 57 + ], + [ + 513, + "Third Man, The (1949)", + 72 + ], + [ + 514, + "Annie Hall (1977)", + 180 + ], + [ + 515, + "Boot, Das (1981)", + 201 + ], + [ + 516, + "Local Hero (1983)", + 63 + ], + [ + 517, + "Manhattan (1979)", + 91 + ], + [ + 518, + "Miller's Crossing (1990)", + 89 + ], + [ + 519, + "Treasure of the Sierra Madre, The (1948)", + 80 + ], + [ + 520, + "Great Escape, The (1963)", + 124 + ], + [ + 521, + "Deer Hunter, The (1978)", + 120 + ], + [ + 522, + "Down by Law (1986)", + 35 + ], + [ + 523, + "Cool Hand Luke (1967)", + 164 + ], + [ + 524, + "Great Dictator, The (1940)", + 46 + ], + [ + 525, + "Big Sleep, The (1946)", + 73 + ], + [ + 526, + "Ben-Hur (1959)", + 124 + ], + [ + 527, + "Gandhi (1982)", + 195 + ], + [ + 528, + "Killing Fields, The (1984)", + 121 + ], + [ + 529, + "My Life as a Dog (Mitt liv som hund) (1985)", + 93 + ], + [ + 530, + "Man Who Would Be King, The (1975)", + 80 + ], + [ + 531, + "Shine (1996)", + 129 + ], + [ + 532, + "Kama Sutra: A Tale of Love (1996)", + 22 + ], + [ + 533, + "Daytrippers, The (1996)", + 15 + ], + [ + 534, + "Traveller (1997)", + 13 + ], + [ + 535, + "Addicted to Love (1997)", + 54 + ], + [ + 536, + "Ponette (1996)", + 10 + ], + [ + 537, + "My Own Private Idaho (1991)", + 30 + ], + [ + 538, + "Anastasia (1997)", + 66 + ], + [ + 539, + "Mouse Hunt (1997)", + 44 + ], + [ + 540, + "Money Train (1995)", + 43 + ], + [ + 541, + "Mortal Kombat (1995)", + 49 + ], + [ + 542, + "Pocahontas (1995)", + 51 + ], + [ + 543, + "Misérables, Les (1995)", + 21 + ], + [ + 544, + "Things to Do in Denver when You're Dead (1995)", + 71 + ], + [ + 545, + "Vampire in Brooklyn (1995)", + 12 + ], + [ + 546, + "Broken Arrow (1996)", + 254 + ], + [ + 547, + "Young Poisoner's Handbook, The (1995)", + 41 + ], + [ + 548, + "NeverEnding Story III, The (1994)", + 12 + ], + [ + 549, + "Rob Roy (1995)", + 92 + ], + [ + 550, + "Die Hard: With a Vengeance (1995)", + 151 + ], + [ + 551, + "Lord of Illusions (1995)", + 24 + ], + [ + 552, + "Species (1995)", + 45 + ], + [ + 553, + "Walk in the Clouds, A (1995)", + 63 + ], + [ + 554, + "Waterworld (1995)", + 102 + ], + [ + 555, + "White Man's Burden (1995)", + 10 + ], + [ + 556, + "Wild Bill (1995)", + 12 + ], + [ + 557, + "Farinelli: il castrato (1994)", + 17 + ], + [ + 558, + "Heavenly Creatures (1994)", + 70 + ], + [ + 559, + "Interview with the Vampire (1994)", + 137 + ], + [ + 560, + "Kid in King Arthur's Court, A (1995)", + 22 + ], + [ + 561, + "Mary Shelley's Frankenstein (1994)", + 59 + ], + [ + 562, + "Quick and the Dead, The (1995)", + 48 + ], + [ + 563, + "Stephen King's The Langoliers (1995)", + 29 + ], + [ + 564, + "Tales from the Hood (1995)", + 27 + ], + [ + 565, + "Village of the Damned (1995)", + 22 + ], + [ + 566, + "Clear and Present Danger (1994)", + 179 + ], + [ + 567, + "Wes Craven's New Nightmare (1994)", + 35 + ], + [ + 568, + "Speed (1994)", + 230 + ], + [ + 569, + "Wolf (1994)", + 67 + ], + [ + 570, + "Wyatt Earp (1994)", + 50 + ], + [ + 571, + "Another Stakeout (1993)", + 28 + ], + [ + 572, + "Blown Away (1994)", + 29 + ], + [ + 573, + "Body Snatchers (1993)", + 33 + ], + [ + 574, + "Boxing Helena (1993)", + 15 + ], + [ + 575, + "City Slickers II: The Legend of Curly's Gold (1994)", + 44 + ], + [ + 576, + "Cliffhanger (1993)", + 93 + ], + [ + 577, + "Coneheads (1993)", + 41 + ], + [ + 578, + "Demolition Man (1993)", + 92 + ], + [ + 579, + "Fatal Instinct (1993)", + 19 + ], + [ + 580, + "Englishman Who Went Up a Hill, But Came Down a Mountain, The (1995)", + 32 + ], + [ + 581, + "Kalifornia (1993)", + 59 + ], + [ + 582, + "Piano, The (1993)", + 168 + ], + [ + 583, + "Romeo Is Bleeding (1993)", + 37 + ], + [ + 584, + "Secret Garden, The (1993)", + 79 + ], + [ + 585, + "Son in Law (1993)", + 39 + ], + [ + 586, + "Terminal Velocity (1994)", + 34 + ], + [ + 587, + "Hour of the Pig, The (1993)", + 14 + ], + [ + 588, + "Beauty and the Beast (1991)", + 202 + ], + [ + 589, + "Wild Bunch, The (1969)", + 43 + ], + [ + 590, + "Hellraiser: Bloodline (1996)", + 18 + ], + [ + 591, + "Primal Fear (1996)", + 178 + ], + [ + 592, + "True Crime (1995)", + 9 + ], + [ + 593, + "Stalingrad (1993)", + 12 + ], + [ + 594, + "Heavy (1995)", + 5 + ], + [ + 595, + "Fan, The (1996)", + 64 + ], + [ + 596, + "Hunchback of Notre Dame, The (1996)", + 127 + ], + [ + 597, + "Eraser (1996)", + 206 + ], + [ + 598, + "Big Squeeze, The (1996)", + 4 + ], + [ + 599, + "Police Story 4: Project S (Chao ji ji hua) (1993)", + 1 + ], + [ + 600, + "Daniel Defoe's Robinson Crusoe (1996)", + 2 + ], + [ + 601, + "For Whom the Bell Tolls (1943)", + 20 + ], + [ + 602, + "American in Paris, An (1951)", + 50 + ], + [ + 603, + "Rear Window (1954)", + 209 + ], + [ + 604, + "It Happened One Night (1934)", + 81 + ], + [ + 605, + "Meet Me in St. Louis (1944)", + 31 + ], + [ + 606, + "All About Eve (1950)", + 66 + ], + [ + 607, + "Rebecca (1940)", + 66 + ], + [ + 608, + "Spellbound (1945)", + 30 + ], + [ + 609, + "Father of the Bride (1950)", + 60 + ], + [ + 610, + "Gigi (1958)", + 41 + ], + [ + 611, + "Laura (1944)", + 40 + ], + [ + 612, + "Lost Horizon (1937)", + 34 + ], + [ + 613, + "My Man Godfrey (1936)", + 27 + ], + [ + 614, + "Giant (1956)", + 51 + ], + [ + 615, + "39 Steps, The (1935)", + 59 + ], + [ + 616, + "Night of the Living Dead (1968)", + 64 + ], + [ + 617, + "Blue Angel, The (Blaue Engel, Der) (1930)", + 18 + ], + [ + 618, + "Picnic (1955)", + 18 + ], + [ + 619, + "Extreme Measures (1996)", + 64 + ], + [ + 620, + "Chamber, The (1996)", + 43 + ], + [ + 621, + "Davy Crockett, King of the Wild Frontier (1955)", + 11 + ], + [ + 622, + "Swiss Family Robinson (1960)", + 39 + ], + [ + 623, + "Angels in the Outfield (1994)", + 39 + ], + [ + 624, + "Three Caballeros, The (1945)", + 22 + ], + [ + 625, + "Sword in the Stone, The (1963)", + 82 + ], + [ + 626, + "So Dear to My Heart (1949)", + 4 + ], + [ + 627, + "Robin Hood: Prince of Thieves (1991)", + 75 + ], + [ + 628, + "Sleepers (1996)", + 169 + ], + [ + 629, + "Victor/Victoria (1982)", + 77 + ], + [ + 630, + "Great Race, The (1965)", + 31 + ], + [ + 631, + "Crying Game, The (1992)", + 119 + ], + [ + 632, + "Sophie's Choice (1982)", + 58 + ], + [ + 633, + "Christmas Carol, A (1938)", + 69 + ], + [ + 634, + "Microcosmos: Le peuple de l'herbe (1996)", + 24 + ], + [ + 635, + "Fog, The (1980)", + 23 + ], + [ + 636, + "Escape from New York (1981)", + 91 + ], + [ + 637, + "Howling, The (1981)", + 38 + ], + [ + 638, + "Return of Martin Guerre, The (Retour de Martin Guerre, Le) (1982)", + 44 + ], + [ + 639, + "Tin Drum, The (Blechtrommel, Die) (1979)", + 40 + ], + [ + 640, + "Cook the Thief His Wife & Her Lover, The (1989)", + 82 + ], + [ + 641, + "Paths of Glory (1957)", + 33 + ], + [ + 642, + "Grifters, The (1990)", + 89 + ], + [ + 643, + "The Innocent (1994)", + 4 + ], + [ + 644, + "Thin Blue Line, The (1988)", + 35 + ], + [ + 645, + "Paris Is Burning (1990)", + 27 + ], + [ + 646, + "Once Upon a Time in the West (1969)", + 38 + ], + [ + 647, + "Ran (1985)", + 70 + ], + [ + 648, + "Quiet Man, The (1952)", + 67 + ], + [ + 649, + "Once Upon a Time in America (1984)", + 50 + ], + [ + 650, + "Seventh Seal, The (Sjunde inseglet, Det) (1957)", + 72 + ], + [ + 651, + "Glory (1989)", + 171 + ], + [ + 652, + "Rosencrantz and Guildenstern Are Dead (1990)", + 90 + ], + [ + 653, + "Touch of Evil (1958)", + 34 + ], + [ + 654, + "Chinatown (1974)", + 147 + ], + [ + 655, + "Stand by Me (1986)", + 227 + ], + [ + 656, + "M (1931)", + 44 + ], + [ + 657, + "Manchurian Candidate, The (1962)", + 131 + ], + [ + 658, + "Pump Up the Volume (1990)", + 79 + ], + [ + 659, + "Arsenic and Old Lace (1944)", + 115 + ], + [ + 660, + "Fried Green Tomatoes (1991)", + 153 + ], + [ + 661, + "High Noon (1952)", + 88 + ], + [ + 662, + "Somewhere in Time (1980)", + 82 + ], + [ + 663, + "Being There (1979)", + 116 + ], + [ + 664, + "Paris, Texas (1984)", + 46 + ], + [ + 665, + "Alien 3 (1992)", + 100 + ], + [ + 666, + "Blood For Dracula (Andy Warhol's Dracula) (1974)", + 5 + ], + [ + 667, + "Audrey Rose (1977)", + 12 + ], + [ + 668, + "Blood Beach (1981)", + 6 + ], + [ + 669, + "Body Parts (1991)", + 13 + ], + [ + 670, + "Body Snatchers (1993)", + 36 + ], + [ + 671, + "Bride of Frankenstein (1935)", + 46 + ], + [ + 672, + "Candyman (1992)", + 65 + ], + [ + 673, + "Cape Fear (1962)", + 86 + ], + [ + 674, + "Cat People (1982)", + 48 + ], + [ + 675, + "Nosferatu (Nosferatu, eine Symphonie des Grauens) (1922)", + 54 + ], + [ + 676, + "Crucible, The (1996)", + 77 + ], + [ + 677, + "Fire on the Mountain (1996)", + 1 + ], + [ + 678, + "Volcano (1997)", + 219 + ], + [ + 679, + "Conan the Barbarian (1981)", + 107 + ], + [ + 680, + "Kull the Conqueror (1997)", + 34 + ], + [ + 681, + "Wishmaster (1997)", + 27 + ], + [ + 682, + "I Know What You Did Last Summer (1997)", + 100 + ], + [ + 683, + "Rocket Man (1997)", + 49 + ], + [ + 684, + "In the Line of Fire (1993)", + 169 + ], + [ + 685, + "Executive Decision (1996)", + 157 + ], + [ + 686, + "Perfect World, A (1993)", + 50 + ], + [ + 687, + "McHale's Navy (1997)", + 69 + ], + [ + 688, + "Leave It to Beaver (1997)", + 44 + ], + [ + 689, + "Jackal, The (1997)", + 87 + ], + [ + 690, + "Seven Years in Tibet (1997)", + 155 + ], + [ + 691, + "Dark City (1998)", + 16 + ], + [ + 692, + "American President, The (1995)", + 164 + ], + [ + 693, + "Casino (1995)", + 91 + ], + [ + 694, + "Persuasion (1995)", + 44 + ], + [ + 695, + "Kicking and Screaming (1995)", + 13 + ], + [ + 696, + "City Hall (1996)", + 79 + ], + [ + 697, + "Basketball Diaries, The (1995)", + 40 + ], + [ + 698, + "Browning Version, The (1994)", + 10 + ], + [ + 699, + "Little Women (1994)", + 102 + ], + [ + 700, + "Miami Rhapsody (1995)", + 15 + ], + [ + 701, + "Wonderful, Horrible Life of Leni Riefenstahl, The (1993)", + 10 + ], + [ + 702, + "Barcelona (1994)", + 53 + ], + [ + 703, + "Widows' Peak (1994)", + 19 + ], + [ + 704, + "House of the Spirits, The (1993)", + 24 + ], + [ + 705, + "Singin' in the Rain (1952)", + 137 + ], + [ + 706, + "Bad Moon (1996)", + 6 + ], + [ + 707, + "Enchanted April (1991)", + 70 + ], + [ + 708, + "Sex, Lies, and Videotape (1989)", + 101 + ], + [ + 709, + "Strictly Ballroom (1992)", + 104 + ], + [ + 710, + "Better Off Dead... (1985)", + 79 + ], + [ + 711, + "Substance of Fire, The (1996)", + 1 + ], + [ + 712, + "Tin Men (1987)", + 51 + ], + [ + 713, + "Othello (1995)", + 72 + ], + [ + 714, + "Carrington (1995)", + 13 + ], + [ + 715, + "To Die For (1995)", + 87 + ], + [ + 716, + "Home for the Holidays (1995)", + 58 + ], + [ + 717, + "Juror, The (1996)", + 82 + ], + [ + 718, + "In the Bleak Midwinter (1995)", + 16 + ], + [ + 719, + "Canadian Bacon (1994)", + 29 + ], + [ + 720, + "First Knight (1995)", + 86 + ], + [ + 721, + "Mallrats (1995)", + 54 + ], + [ + 722, + "Nine Months (1995)", + 58 + ], + [ + 723, + "Boys on the Side (1995)", + 34 + ], + [ + 724, + "Circle of Friends (1995)", + 76 + ], + [ + 725, + "Exit to Eden (1994)", + 16 + ], + [ + 726, + "Fluke (1995)", + 14 + ], + [ + 727, + "Immortal Beloved (1994)", + 63 + ], + [ + 728, + "Junior (1994)", + 45 + ], + [ + 729, + "Nell (1994)", + 81 + ], + [ + 730, + "Queen Margot (Reine Margot, La) (1994)", + 24 + ], + [ + 731, + "Corrina, Corrina (1994)", + 39 + ], + [ + 732, + "Dave (1993)", + 180 + ], + [ + 733, + "Go Fish (1994)", + 15 + ], + [ + 734, + "Made in America (1993)", + 27 + ], + [ + 735, + "Philadelphia (1993)", + 137 + ], + [ + 736, + "Shadowlands (1993)", + 78 + ], + [ + 737, + "Sirens (1994)", + 59 + ], + [ + 738, + "Threesome (1994)", + 31 + ], + [ + 739, + "Pretty Woman (1990)", + 164 + ], + [ + 740, + "Jane Eyre (1996)", + 63 + ], + [ + 741, + "Last Supper, The (1995)", + 58 + ], + [ + 742, + "Ransom (1996)", + 267 + ], + [ + 743, + "Crow: City of Angels, The (1996)", + 39 + ], + [ + 744, + "Michael Collins (1996)", + 92 + ], + [ + 745, + "Ruling Class, The (1972)", + 16 + ], + [ + 746, + "Real Genius (1985)", + 119 + ], + [ + 747, + "Benny & Joon (1993)", + 102 + ], + [ + 748, + "Saint, The (1997)", + 316 + ], + [ + 749, + "MatchMaker, The (1997)", + 51 + ], + [ + 750, + "Amistad (1997)", + 124 + ], + [ + 751, + "Tomorrow Never Dies (1997)", + 180 + ], + [ + 752, + "Replacement Killers, The (1998)", + 39 + ], + [ + 753, + "Burnt By the Sun (1994)", + 24 + ], + [ + 754, + "Red Corner (1997)", + 57 + ], + [ + 755, + "Jumanji (1995)", + 96 + ], + [ + 756, + "Father of the Bride Part II (1995)", + 128 + ], + [ + 757, + "Across the Sea of Time (1995)", + 4 + ], + [ + 758, + "Lawnmower Man 2: Beyond Cyberspace (1996)", + 21 + ], + [ + 759, + "Fair Game (1995)", + 11 + ], + [ + 760, + "Screamers (1995)", + 46 + ], + [ + 761, + "Nick of Time (1995)", + 44 + ], + [ + 762, + "Beautiful Girls (1996)", + 115 + ], + [ + 763, + "Happy Gilmore (1996)", + 149 + ], + [ + 764, + "If Lucy Fell (1996)", + 29 + ], + [ + 765, + "Boomerang (1992)", + 32 + ], + [ + 766, + "Man of the Year (1995)", + 9 + ], + [ + 767, + "Addiction, The (1995)", + 11 + ], + [ + 768, + "Casper (1995)", + 52 + ], + [ + 769, + "Congo (1995)", + 42 + ], + [ + 770, + "Devil in a Blue Dress (1995)", + 57 + ], + [ + 771, + "Johnny Mnemonic (1995)", + 41 + ], + [ + 772, + "Kids (1995)", + 49 + ], + [ + 773, + "Mute Witness (1994)", + 17 + ], + [ + 774, + "Prophecy, The (1995)", + 32 + ], + [ + 775, + "Something to Talk About (1995)", + 26 + ], + [ + 776, + "Three Wishes (1995)", + 9 + ], + [ + 777, + "Castle Freak (1995)", + 4 + ], + [ + 778, + "Don Juan DeMarco (1995)", + 76 + ], + [ + 779, + "Drop Zone (1994)", + 31 + ], + [ + 780, + "Dumb & Dumber (1994)", + 69 + ], + [ + 781, + "French Kiss (1995)", + 84 + ], + [ + 782, + "Little Odessa (1994)", + 10 + ], + [ + 783, + "Milk Money (1994)", + 37 + ], + [ + 784, + "Beyond Bedlam (1993)", + 2 + ], + [ + 785, + "Only You (1994)", + 39 + ], + [ + 786, + "Perez Family, The (1995)", + 14 + ], + [ + 787, + "Roommates (1995)", + 13 + ], + [ + 788, + "Relative Fear (1994)", + 3 + ], + [ + 789, + "Swimming with Sharks (1995)", + 47 + ], + [ + 790, + "Tommy Boy (1995)", + 66 + ], + [ + 791, + "Baby-Sitters Club, The (1995)", + 10 + ], + [ + 792, + "Bullets Over Broadway (1994)", + 86 + ], + [ + 793, + "Crooklyn (1994)", + 10 + ], + [ + 794, + "It Could Happen to You (1994)", + 46 + ], + [ + 795, + "Richie Rich (1994)", + 21 + ], + [ + 796, + "Speechless (1994)", + 36 + ], + [ + 797, + "Timecop (1994)", + 31 + ], + [ + 798, + "Bad Company (1995)", + 9 + ], + [ + 799, + "Boys Life (1995)", + 5 + ], + [ + 800, + "In the Mouth of Madness (1995)", + 26 + ], + [ + 801, + "Air Up There, The (1994)", + 16 + ], + [ + 802, + "Hard Target (1993)", + 40 + ], + [ + 803, + "Heaven & Earth (1993)", + 9 + ], + [ + 804, + "Jimmy Hollywood (1994)", + 8 + ], + [ + 805, + "Manhattan Murder Mystery (1993)", + 27 + ], + [ + 806, + "Menace II Society (1993)", + 50 + ], + [ + 807, + "Poetic Justice (1993)", + 9 + ], + [ + 808, + "Program, The (1993)", + 31 + ], + [ + 809, + "Rising Sun (1993)", + 43 + ], + [ + 810, + "Shadow, The (1994)", + 45 + ], + [ + 811, + "Thirty-Two Short Films About Glenn Gould (1993)", + 18 + ], + [ + 812, + "Andre (1994)", + 18 + ], + [ + 813, + "Celluloid Closet, The (1995)", + 56 + ], + [ + 814, + "Great Day in Harlem, A (1994)", + 1 + ], + [ + 815, + "One Fine Day (1996)", + 112 + ], + [ + 816, + "Candyman: Farewell to the Flesh (1995)", + 21 + ], + [ + 817, + "Frisk (1995)", + 3 + ], + [ + 818, + "Girl 6 (1996)", + 25 + ], + [ + 819, + "Eddie (1996)", + 40 + ], + [ + 820, + "Space Jam (1996)", + 93 + ], + [ + 821, + "Mrs. Winterbourne (1996)", + 22 + ], + [ + 822, + "Faces (1968)", + 4 + ], + [ + 823, + "Mulholland Falls (1996)", + 82 + ], + [ + 824, + "Great White Hype, The (1996)", + 49 + ], + [ + 825, + "Arrival, The (1996)", + 83 + ], + [ + 826, + "Phantom, The (1996)", + 80 + ], + [ + 827, + "Daylight (1996)", + 57 + ], + [ + 828, + "Alaska (1996)", + 13 + ], + [ + 829, + "Fled (1996)", + 34 + ], + [ + 830, + "Power 98 (1995)", + 1 + ], + [ + 831, + "Escape from L.A. (1996)", + 91 + ], + [ + 832, + "Bogus (1996)", + 22 + ], + [ + 833, + "Bulletproof (1996)", + 49 + ], + [ + 834, + "Halloween: The Curse of Michael Myers (1995)", + 25 + ], + [ + 835, + "Gay Divorcee, The (1934)", + 15 + ], + [ + 836, + "Ninotchka (1939)", + 26 + ], + [ + 837, + "Meet John Doe (1941)", + 25 + ], + [ + 838, + "In the Line of Duty 2 (1987)", + 4 + ], + [ + 839, + "Loch Ness (1995)", + 4 + ], + [ + 840, + "Last Man Standing (1996)", + 53 + ], + [ + 841, + "Glimmer Man, The (1996)", + 48 + ], + [ + 842, + "Pollyanna (1960)", + 27 + ], + [ + 843, + "Shaggy Dog, The (1959)", + 30 + ], + [ + 844, + "Freeway (1996)", + 42 + ], + [ + 845, + "That Thing You Do! (1996)", + 176 + ], + [ + 846, + "To Gillian on Her 37th Birthday (1996)", + 44 + ], + [ + 847, + "Looking for Richard (1996)", + 55 + ], + [ + 848, + "Murder, My Sweet (1944)", + 9 + ], + [ + 849, + "Days of Thunder (1990)", + 53 + ], + [ + 850, + "Perfect Candidate, A (1996)", + 4 + ], + [ + 851, + "Two or Three Things I Know About Her (1966)", + 4 + ], + [ + 852, + "Bloody Child, The (1996)", + 1 + ], + [ + 853, + "Braindead (1992)", + 14 + ], + [ + 854, + "Bad Taste (1987)", + 16 + ], + [ + 855, + "Diva (1981)", + 66 + ], + [ + 856, + "Night on Earth (1991)", + 36 + ], + [ + 857, + "Paris Was a Woman (1995)", + 1 + ], + [ + 858, + "Amityville: Dollhouse (1996)", + 3 + ], + [ + 859, + "April Fool's Day (1986)", + 15 + ], + [ + 860, + "Believers, The (1987)", + 16 + ], + [ + 861, + "Nosferatu a Venezia (1986)", + 3 + ], + [ + 862, + "Jingle All the Way (1996)", + 18 + ], + [ + 863, + "Garden of Finzi-Contini, The (Giardino dei Finzi-Contini, Il) (1970)", + 24 + ], + [ + 864, + "My Fellow Americans (1996)", + 86 + ], + [ + 865, + "Ice Storm, The (1997)", + 21 + ], + [ + 866, + "Michael (1996)", + 119 + ], + [ + 867, + "Whole Wide World, The (1996)", + 6 + ], + [ + 868, + "Hearts and Minds (1996)", + 5 + ], + [ + 869, + "Fools Rush In (1997)", + 24 + ], + [ + 870, + "Touch (1997)", + 9 + ], + [ + 871, + "Vegas Vacation (1997)", + 75 + ], + [ + 872, + "Love Jones (1997)", + 42 + ], + [ + 873, + "Picture Perfect (1997)", + 81 + ], + [ + 874, + "Career Girls (1997)", + 39 + ], + [ + 875, + "She's So Lovely (1997)", + 53 + ], + [ + 876, + "Money Talks (1997)", + 47 + ], + [ + 877, + "Excess Baggage (1997)", + 52 + ], + [ + 878, + "That Darn Cat! (1997)", + 33 + ], + [ + 879, + "Peacemaker, The (1997)", + 136 + ], + [ + 880, + "Soul Food (1997)", + 59 + ], + [ + 881, + "Money Talks (1997)", + 45 + ], + [ + 882, + "Washington Square (1997)", + 34 + ], + [ + 883, + "Telling Lies in America (1997)", + 13 + ], + [ + 884, + "Year of the Horse (1997)", + 7 + ], + [ + 885, + "Phantoms (1998)", + 13 + ], + [ + 886, + "Life Less Ordinary, A (1997)", + 53 + ], + [ + 887, + "Eve's Bayou (1997)", + 64 + ], + [ + 888, + "One Night Stand (1997)", + 15 + ], + [ + 889, + "Tango Lesson, The (1997)", + 13 + ], + [ + 890, + "Mortal Kombat: Annihilation (1997)", + 43 + ], + [ + 891, + "Bent (1997)", + 6 + ], + [ + 892, + "Flubber (1997)", + 53 + ], + [ + 893, + "For Richer or Poorer (1997)", + 14 + ], + [ + 894, + "Home Alone 3 (1997)", + 19 + ], + [ + 895, + "Scream 2 (1997)", + 106 + ], + [ + 896, + "Sweet Hereafter, The (1997)", + 44 + ], + [ + 897, + "Time Tracers (1995)", + 2 + ], + [ + 898, + "Postman, The (1997)", + 58 + ], + [ + 899, + "Winter Guest, The (1997)", + 9 + ], + [ + 900, + "Kundun (1997)", + 42 + ], + [ + 901, + "Mr. Magoo (1997)", + 12 + ], + [ + 902, + "Big Lebowski, The (1998)", + 42 + ], + [ + 903, + "Afterglow (1997)", + 18 + ], + [ + 904, + "Ma vie en rose (My Life in Pink) (1997)", + 20 + ], + [ + 905, + "Great Expectations (1998)", + 27 + ], + [ + 906, + "Oscar & Lucinda (1997)", + 21 + ], + [ + 907, + "Vermin (1998)", + 2 + ], + [ + 908, + "Half Baked (1998)", + 20 + ], + [ + 909, + "Dangerous Beauty (1998)", + 13 + ], + [ + 910, + "Nil By Mouth (1997)", + 4 + ], + [ + 911, + "Twilight (1998)", + 4 + ], + [ + 912, + "U.S. Marshalls (1998)", + 9 + ], + [ + 913, + "Love and Death on Long Island (1997)", + 2 + ], + [ + 914, + "Wild Things (1998)", + 11 + ], + [ + 915, + "Primary Colors (1998)", + 13 + ], + [ + 916, + "Lost in Space (1998)", + 18 + ], + [ + 917, + "Mercury Rising (1998)", + 7 + ], + [ + 918, + "City of Angels (1998)", + 8 + ], + [ + 919, + "City of Lost Children, The (1995)", + 96 + ], + [ + 920, + "Two Bits (1995)", + 5 + ], + [ + 921, + "Farewell My Concubine (1993)", + 46 + ], + [ + 922, + "Dead Man (1995)", + 34 + ], + [ + 923, + "Raise the Red Lantern (1991)", + 58 + ], + [ + 924, + "White Squall (1996)", + 85 + ], + [ + 925, + "Unforgettable (1996)", + 34 + ], + [ + 926, + "Down Periscope (1996)", + 101 + ], + [ + 927, + "Flower of My Secret, The (Flor de mi secreto, La) (1995)", + 6 + ], + [ + 928, + "Craft, The (1996)", + 104 + ], + [ + 929, + "Harriet the Spy (1996)", + 40 + ], + [ + 930, + "Chain Reaction (1996)", + 80 + ], + [ + 931, + "Island of Dr. Moreau, The (1996)", + 57 + ], + [ + 932, + "First Kid (1996)", + 40 + ], + [ + 933, + "Funeral, The (1996)", + 21 + ], + [ + 934, + "Preacher's Wife, The (1996)", + 68 + ], + [ + 935, + "Paradise Road (1997)", + 7 + ], + [ + 936, + "Brassed Off (1996)", + 32 + ], + [ + 937, + "Thousand Acres, A (1997)", + 37 + ], + [ + 938, + "Smile Like Yours, A (1997)", + 25 + ], + [ + 939, + "Murder in the First (1995)", + 60 + ], + [ + 940, + "Airheads (1994)", + 32 + ], + [ + 941, + "With Honors (1994)", + 46 + ], + [ + 942, + "What's Love Got to Do with It (1993)", + 45 + ], + [ + 943, + "Killing Zoe (1994)", + 40 + ], + [ + 944, + "Renaissance Man (1994)", + 43 + ], + [ + 945, + "Charade (1963)", + 40 + ], + [ + 946, + "Fox and the Hound, The (1981)", + 61 + ], + [ + 947, + "Big Blue, The (Grand bleu, Le) (1988)", + 17 + ], + [ + 948, + "Booty Call (1997)", + 48 + ], + [ + 949, + "How to Make an American Quilt (1995)", + 71 + ], + [ + 950, + "Georgia (1995)", + 30 + ], + [ + 951, + "Indian in the Cupboard, The (1995)", + 39 + ], + [ + 952, + "Blue in the Face (1995)", + 45 + ], + [ + 953, + "Unstrung Heroes (1995)", + 22 + ], + [ + 954, + "Unzipped (1995)", + 11 + ], + [ + 955, + "Before Sunrise (1995)", + 49 + ], + [ + 956, + "Nobody's Fool (1994)", + 46 + ], + [ + 957, + "Pushing Hands (1992)", + 2 + ], + [ + 958, + "To Live (Huozhe) (1994)", + 14 + ], + [ + 959, + "Dazed and Confused (1993)", + 64 + ], + [ + 960, + "Naked (1993)", + 25 + ], + [ + 961, + "Orlando (1993)", + 34 + ], + [ + 962, + "Ruby in Paradise (1993)", + 23 + ], + [ + 963, + "Some Folks Call It a Sling Blade (1993)", + 41 + ], + [ + 964, + "Month by the Lake, A (1995)", + 9 + ], + [ + 965, + "Funny Face (1957)", + 21 + ], + [ + 966, + "Affair to Remember, An (1957)", + 26 + ], + [ + 967, + "Little Lord Fauntleroy (1936)", + 12 + ], + [ + 968, + "Inspector General, The (1949)", + 18 + ], + [ + 969, + "Winnie the Pooh and the Blustery Day (1968)", + 75 + ], + [ + 970, + "Hear My Song (1991)", + 8 + ], + [ + 971, + "Mediterraneo (1991)", + 34 + ], + [ + 972, + "Passion Fish (1992)", + 28 + ], + [ + 973, + "Grateful Dead (1995)", + 4 + ], + [ + 974, + "Eye for an Eye (1996)", + 32 + ], + [ + 975, + "Fear (1996)", + 44 + ], + [ + 976, + "Solo (1996)", + 12 + ], + [ + 977, + "Substitute, The (1996)", + 49 + ], + [ + 978, + "Heaven's Prisoners (1996)", + 27 + ], + [ + 979, + "Trigger Effect, The (1996)", + 35 + ], + [ + 980, + "Mother Night (1996)", + 22 + ], + [ + 981, + "Dangerous Ground (1997)", + 8 + ], + [ + 982, + "Maximum Risk (1996)", + 20 + ], + [ + 983, + "Rich Man's Wife, The (1996)", + 15 + ], + [ + 984, + "Shadow Conspiracy (1997)", + 44 + ], + [ + 985, + "Blood & Wine (1997)", + 22 + ], + [ + 986, + "Turbulence (1997)", + 23 + ], + [ + 987, + "Underworld (1997)", + 4 + ], + [ + 988, + "Beautician and the Beast, The (1997)", + 86 + ], + [ + 989, + "Cats Don't Dance (1997)", + 32 + ], + [ + 990, + "Anna Karenina (1997)", + 33 + ], + [ + 991, + "Keys to Tulsa (1997)", + 25 + ], + [ + 992, + "Head Above Water (1996)", + 4 + ], + [ + 993, + "Hercules (1997)", + 66 + ], + [ + 994, + "Last Time I Committed Suicide, The (1997)", + 7 + ], + [ + 995, + "Kiss Me, Guido (1997)", + 31 + ], + [ + 996, + "Big Green, The (1995)", + 14 + ], + [ + 997, + "Stuart Saves His Family (1995)", + 16 + ], + [ + 998, + "Cabin Boy (1994)", + 16 + ], + [ + 999, + "Clean Slate (1994)", + 10 + ], + [ + 1000, + "Lightning Jack (1994)", + 10 + ], + [ + 1001, + "Stupids, The (1996)", + 17 + ], + [ + 1002, + "Pest, The (1997)", + 8 + ], + [ + 1003, + "That Darn Cat! (1997)", + 8 + ], + [ + 1004, + "Geronimo: An American Legend (1993)", + 9 + ], + [ + 1005, + "Double vie de Véronique, La (Double Life of Veronique, The) (1991)", + 22 + ], + [ + 1006, + "Until the End of the World (Bis ans Ende der Welt) (1991)", + 23 + ], + [ + 1007, + "Waiting for Guffman (1996)", + 47 + ], + [ + 1008, + "I Shot Andy Warhol (1996)", + 37 + ], + [ + 1009, + "Stealing Beauty (1996)", + 64 + ], + [ + 1010, + "Basquiat (1996)", + 44 + ], + [ + 1011, + "2 Days in the Valley (1996)", + 93 + ], + [ + 1012, + "Private Parts (1997)", + 100 + ], + [ + 1013, + "Anaconda (1997)", + 38 + ], + [ + 1014, + "Romy and Michele's High School Reunion (1997)", + 98 + ], + [ + 1015, + "Shiloh (1997)", + 12 + ], + [ + 1016, + "Con Air (1997)", + 137 + ], + [ + 1017, + "Trees Lounge (1996)", + 50 + ], + [ + 1018, + "Tie Me Up! Tie Me Down! (1990)", + 32 + ], + [ + 1019, + "Die xue shuang xiong (Killer, The) (1989)", + 31 + ], + [ + 1020, + "Gaslight (1944)", + 35 + ], + [ + 1021, + "8 1/2 (1963)", + 38 + ], + [ + 1022, + "Fast, Cheap & Out of Control (1997)", + 32 + ], + [ + 1023, + "Fathers' Day (1997)", + 31 + ], + [ + 1024, + "Mrs. Dalloway (1997)", + 15 + ], + [ + 1025, + "Fire Down Below (1997)", + 44 + ], + [ + 1026, + "Lay of the Land, The (1997)", + 4 + ], + [ + 1027, + "Shooter, The (1995)", + 3 + ], + [ + 1028, + "Grumpier Old Men (1995)", + 148 + ], + [ + 1029, + "Jury Duty (1995)", + 14 + ], + [ + 1030, + "Beverly Hillbillies, The (1993)", + 20 + ], + [ + 1031, + "Lassie (1994)", + 7 + ], + [ + 1032, + "Little Big League (1994)", + 16 + ], + [ + 1033, + "Homeward Bound II: Lost in San Francisco (1996)", + 32 + ], + [ + 1034, + "Quest, The (1996)", + 27 + ], + [ + 1035, + "Cool Runnings (1993)", + 68 + ], + [ + 1036, + "Drop Dead Fred (1991)", + 24 + ], + [ + 1037, + "Grease 2 (1982)", + 24 + ], + [ + 1038, + "Switchback (1997)", + 17 + ], + [ + 1039, + "Hamlet (1996)", + 90 + ], + [ + 1040, + "Two if by Sea (1996)", + 25 + ], + [ + 1041, + "Forget Paris (1995)", + 62 + ], + [ + 1042, + "Just Cause (1995)", + 28 + ], + [ + 1043, + "Rent-a-Kid (1995)", + 8 + ], + [ + 1044, + "Paper, The (1994)", + 40 + ], + [ + 1045, + "Fearless (1993)", + 25 + ], + [ + 1046, + "Malice (1993)", + 46 + ], + [ + 1047, + "Multiplicity (1996)", + 134 + ], + [ + 1048, + "She's the One (1996)", + 73 + ], + [ + 1049, + "House Arrest (1996)", + 25 + ], + [ + 1050, + "Ghost and Mrs. Muir, The (1947)", + 43 + ], + [ + 1051, + "Associate, The (1996)", + 41 + ], + [ + 1052, + "Dracula: Dead and Loving It (1995)", + 25 + ], + [ + 1053, + "Now and Then (1995)", + 24 + ], + [ + 1054, + "Mr. Wrong (1996)", + 23 + ], + [ + 1055, + "Simple Twist of Fate, A (1994)", + 10 + ], + [ + 1056, + "Cronos (1992)", + 10 + ], + [ + 1057, + "Pallbearer, The (1996)", + 22 + ], + [ + 1058, + "War, The (1994)", + 15 + ], + [ + 1059, + "Don't Be a Menace to South Central While Drinking Your Juice in the Hood (1996)", + 35 + ], + [ + 1060, + "Adventures of Pinocchio, The (1996)", + 39 + ], + [ + 1061, + "Evening Star, The (1996)", + 29 + ], + [ + 1062, + "Four Days in September (1997)", + 12 + ], + [ + 1063, + "Little Princess, A (1995)", + 41 + ], + [ + 1064, + "Crossfire (1947)", + 4 + ], + [ + 1065, + "Koyaanisqatsi (1983)", + 53 + ], + [ + 1066, + "Balto (1995)", + 16 + ], + [ + 1067, + "Bottle Rocket (1996)", + 44 + ], + [ + 1068, + "Star Maker, The (Uomo delle stelle, L') (1995)", + 12 + ], + [ + 1069, + "Amateur (1994)", + 18 + ], + [ + 1070, + "Living in Oblivion (1995)", + 27 + ], + [ + 1071, + "Party Girl (1995)", + 16 + ], + [ + 1072, + "Pyromaniac's Love Story, A (1995)", + 7 + ], + [ + 1073, + "Shallow Grave (1994)", + 66 + ], + [ + 1074, + "Reality Bites (1994)", + 77 + ], + [ + 1075, + "Man of No Importance, A (1994)", + 7 + ], + [ + 1076, + "Pagemaster, The (1994)", + 12 + ], + [ + 1077, + "Love and a .45 (1994)", + 8 + ], + [ + 1078, + "Oliver & Company (1988)", + 22 + ], + [ + 1079, + "Joe's Apartment (1996)", + 45 + ], + [ + 1080, + "Celestial Clockwork (1994)", + 2 + ], + [ + 1081, + "Curdled (1996)", + 8 + ], + [ + 1082, + "Female Perversions (1996)", + 8 + ], + [ + 1083, + "Albino Alligator (1996)", + 6 + ], + [ + 1084, + "Anne Frank Remembered (1995)", + 21 + ], + [ + 1085, + "Carried Away (1996)", + 11 + ], + [ + 1086, + "It's My Party (1995)", + 21 + ], + [ + 1087, + "Bloodsport 2 (1995)", + 10 + ], + [ + 1088, + "Double Team (1997)", + 13 + ], + [ + 1089, + "Speed 2: Cruise Control (1997)", + 38 + ], + [ + 1090, + "Sliver (1993)", + 37 + ], + [ + 1091, + "Pete's Dragon (1977)", + 43 + ], + [ + 1092, + "Dear God (1996)", + 12 + ], + [ + 1093, + "Live Nude Girls (1995)", + 23 + ], + [ + 1094, + "Thin Line Between Love and Hate, A (1996)", + 12 + ], + [ + 1095, + "High School High (1996)", + 29 + ], + [ + 1096, + "Commandments (1997)", + 3 + ], + [ + 1097, + "Hate (Haine, La) (1995)", + 18 + ], + [ + 1098, + "Flirting With Disaster (1996)", + 42 + ], + [ + 1099, + "Red Firecracker, Green Firecracker (1994)", + 13 + ], + [ + 1100, + "What Happened Was... (1994)", + 8 + ], + [ + 1101, + "Six Degrees of Separation (1993)", + 74 + ], + [ + 1102, + "Two Much (1996)", + 7 + ], + [ + 1103, + "Trust (1990)", + 19 + ], + [ + 1104, + "C'est arrivé près de chez vous (1992)", + 4 + ], + [ + 1105, + "Firestorm (1998)", + 18 + ], + [ + 1106, + "Newton Boys, The (1998)", + 4 + ], + [ + 1107, + "Beyond Rangoon (1995)", + 18 + ], + [ + 1108, + "Feast of July (1995)", + 5 + ], + [ + 1109, + "Death and the Maiden (1994)", + 28 + ], + [ + 1110, + "Tank Girl (1995)", + 41 + ], + [ + 1111, + "Double Happiness (1994)", + 7 + ], + [ + 1112, + "Cobb (1994)", + 15 + ], + [ + 1113, + "Mrs. Parker and the Vicious Circle (1994)", + 22 + ], + [ + 1114, + "Faithful (1996)", + 10 + ], + [ + 1115, + "Twelfth Night (1996)", + 29 + ], + [ + 1116, + "Mark of Zorro, The (1940)", + 13 + ], + [ + 1117, + "Surviving Picasso (1996)", + 19 + ], + [ + 1118, + "Up in Smoke (1978)", + 47 + ], + [ + 1119, + "Some Kind of Wonderful (1987)", + 59 + ], + [ + 1120, + "I'm Not Rappaport (1996)", + 17 + ], + [ + 1121, + "Umbrellas of Cherbourg, The (Parapluies de Cherbourg, Les) (1964)", + 21 + ], + [ + 1122, + "They Made Me a Criminal (1939)", + 1 + ], + [ + 1123, + "Last Time I Saw Paris, The (1954)", + 3 + ], + [ + 1124, + "Farewell to Arms, A (1932)", + 12 + ], + [ + 1125, + "Innocents, The (1961)", + 4 + ], + [ + 1126, + "Old Man and the Sea, The (1958)", + 32 + ], + [ + 1127, + "Truman Show, The (1998)", + 11 + ], + [ + 1128, + "Heidi Fleiss: Hollywood Madam (1995) ", + 13 + ], + [ + 1129, + "Chungking Express (1994)", + 28 + ], + [ + 1130, + "Jupiter's Wife (1994)", + 1 + ], + [ + 1131, + "Safe (1995)", + 13 + ], + [ + 1132, + "Feeling Minnesota (1996)", + 32 + ], + [ + 1133, + "Escape to Witch Mountain (1975)", + 30 + ], + [ + 1134, + "Get on the Bus (1996)", + 38 + ], + [ + 1135, + "Doors, The (1991)", + 46 + ], + [ + 1136, + "Ghosts of Mississippi (1996)", + 29 + ], + [ + 1137, + "Beautiful Thing (1996)", + 29 + ], + [ + 1138, + "Best Men (1997)", + 5 + ], + [ + 1139, + "Hackers (1995)", + 33 + ], + [ + 1140, + "Road to Wellville, The (1994)", + 17 + ], + [ + 1141, + "War Room, The (1993)", + 9 + ], + [ + 1142, + "When We Were Kings (1996)", + 44 + ], + [ + 1143, + "Hard Eight (1996)", + 15 + ], + [ + 1144, + "Quiet Room, The (1996)", + 3 + ], + [ + 1145, + "Blue Chips (1994)", + 9 + ], + [ + 1146, + "Calendar Girl (1993)", + 3 + ], + [ + 1147, + "My Family (1995)", + 21 + ], + [ + 1148, + "Tom & Viv (1994)", + 9 + ], + [ + 1149, + "Walkabout (1971)", + 26 + ], + [ + 1150, + "Last Dance (1996)", + 9 + ], + [ + 1151, + "Original Gangstas (1996)", + 7 + ], + [ + 1152, + "In Love and War (1996)", + 28 + ], + [ + 1153, + "Backbeat (1993)", + 19 + ], + [ + 1154, + "Alphaville (1965)", + 12 + ], + [ + 1155, + "Rendezvous in Paris (Rendez-vous de Paris, Les) (1995)", + 3 + ], + [ + 1156, + "Cyclo (1995)", + 1 + ], + [ + 1157, + "Relic, The (1997)", + 25 + ], + [ + 1158, + "Fille seule, La (A Single Girl) (1995)", + 4 + ], + [ + 1159, + "Stalker (1979)", + 11 + ], + [ + 1160, + "Love! Valour! Compassion! (1997)", + 26 + ], + [ + 1161, + "Palookaville (1996)", + 13 + ], + [ + 1162, + "Phat Beach (1996)", + 5 + ], + [ + 1163, + "Portrait of a Lady, The (1996)", + 25 + ], + [ + 1164, + "Zeus and Roxanne (1997)", + 6 + ], + [ + 1165, + "Big Bully (1996)", + 14 + ], + [ + 1166, + "Love & Human Remains (1993)", + 12 + ], + [ + 1167, + "Sum of Us, The (1994)", + 11 + ], + [ + 1168, + "Little Buddha (1993)", + 22 + ], + [ + 1169, + "Fresh (1994)", + 10 + ], + [ + 1170, + "Spanking the Monkey (1994)", + 27 + ], + [ + 1171, + "Wild Reeds (1994)", + 14 + ], + [ + 1172, + "Women, The (1939)", + 15 + ], + [ + 1173, + "Bliss (1997)", + 7 + ], + [ + 1174, + "Caught (1996)", + 8 + ], + [ + 1175, + "Hugo Pool (1997)", + 5 + ], + [ + 1176, + "Welcome To Sarajevo (1997)", + 22 + ], + [ + 1177, + "Dunston Checks In (1996)", + 7 + ], + [ + 1178, + "Major Payne (1994)", + 19 + ], + [ + 1179, + "Man of the House (1995)", + 9 + ], + [ + 1180, + "I Love Trouble (1994)", + 10 + ], + [ + 1181, + "Low Down Dirty Shame, A (1994)", + 10 + ], + [ + 1182, + "Cops and Robbersons (1994)", + 13 + ], + [ + 1183, + "Cowboy Way, The (1994)", + 19 + ], + [ + 1184, + "Endless Summer 2, The (1994)", + 10 + ], + [ + 1185, + "In the Army Now (1994)", + 18 + ], + [ + 1186, + "Inkwell, The (1994)", + 3 + ], + [ + 1187, + "Switchblade Sisters (1975)", + 13 + ], + [ + 1188, + "Young Guns II (1990)", + 44 + ], + [ + 1189, + "Prefontaine (1997)", + 3 + ], + [ + 1190, + "That Old Feeling (1997)", + 11 + ], + [ + 1191, + "Letter From Death Row, A (1998)", + 3 + ], + [ + 1192, + "Boys of St. Vincent, The (1993)", + 13 + ], + [ + 1193, + "Before the Rain (Pred dozhdot) (1994)", + 10 + ], + [ + 1194, + "Once Were Warriors (1994)", + 31 + ], + [ + 1195, + "Strawberry and Chocolate (Fresa y chocolate) (1993)", + 11 + ], + [ + 1196, + "Savage Nights (Nuits fauves, Les) (1992)", + 3 + ], + [ + 1197, + "Family Thing, A (1996)", + 45 + ], + [ + 1198, + "Purple Noon (1960)", + 7 + ], + [ + 1199, + "Cemetery Man (Dellamorte Dellamore) (1994)", + 23 + ], + [ + 1200, + "Kim (1950)", + 7 + ], + [ + 1201, + "Marlene Dietrich: Shadow and Light (1996) ", + 1 + ], + [ + 1202, + "Maybe, Maybe Not (Bewegte Mann, Der) (1994)", + 8 + ], + [ + 1203, + "Top Hat (1935)", + 21 + ], + [ + 1204, + "To Be or Not to Be (1942)", + 18 + ], + [ + 1205, + "Secret Agent, The (1996)", + 6 + ], + [ + 1206, + "Amos & Andrew (1993)", + 19 + ], + [ + 1207, + "Jade (1995)", + 17 + ], + [ + 1208, + "Kiss of Death (1995)", + 20 + ], + [ + 1209, + "Mixed Nuts (1994)", + 15 + ], + [ + 1210, + "Virtuosity (1995)", + 38 + ], + [ + 1211, + "Blue Sky (1994)", + 12 + ], + [ + 1212, + "Flesh and Bone (1993)", + 6 + ], + [ + 1213, + "Guilty as Sin (1993)", + 6 + ], + [ + 1214, + "In the Realm of the Senses (Ai no corrida) (1976)", + 9 + ], + [ + 1215, + "Barb Wire (1996)", + 30 + ], + [ + 1216, + "Kissed (1996)", + 6 + ], + [ + 1217, + "Assassins (1995)", + 39 + ], + [ + 1218, + "Friday (1995)", + 26 + ], + [ + 1219, + "Goofy Movie, A (1995)", + 20 + ], + [ + 1220, + "Higher Learning (1995)", + 30 + ], + [ + 1221, + "When a Man Loves a Woman (1994)", + 39 + ], + [ + 1222, + "Judgment Night (1993)", + 25 + ], + [ + 1223, + "King of the Hill (1993)", + 4 + ], + [ + 1224, + "Scout, The (1994)", + 12 + ], + [ + 1225, + "Angus (1995)", + 14 + ], + [ + 1226, + "Night Falls on Manhattan (1997)", + 32 + ], + [ + 1227, + "Awfully Big Adventure, An (1995)", + 8 + ], + [ + 1228, + "Under Siege 2: Dark Territory (1995)", + 48 + ], + [ + 1229, + "Poison Ivy II (1995)", + 13 + ], + [ + 1230, + "Ready to Wear (Pret-A-Porter) (1994)", + 18 + ], + [ + 1231, + "Marked for Death (1990)", + 22 + ], + [ + 1232, + "Madonna: Truth or Dare (1991)", + 17 + ], + [ + 1233, + "Nénette et Boni (1996)", + 6 + ], + [ + 1234, + "Chairman of the Board (1998)", + 8 + ], + [ + 1235, + "Big Bang Theory, The (1994)", + 1 + ], + [ + 1236, + "Other Voices, Other Rooms (1997)", + 1 + ], + [ + 1237, + "Twisted (1996)", + 6 + ], + [ + 1238, + "Full Speed (1996)", + 8 + ], + [ + 1239, + "Cutthroat Island (1995)", + 18 + ], + [ + 1240, + "Ghost in the Shell (Kokaku kidotai) (1995)", + 26 + ], + [ + 1241, + "Van, The (1996)", + 6 + ], + [ + 1242, + "Old Lady Who Walked in the Sea, The (Vieille qui marchait dans la mer, La) (1991)", + 5 + ], + [ + 1243, + "Night Flier (1997)", + 7 + ], + [ + 1244, + "Metro (1997)", + 36 + ], + [ + 1245, + "Gridlock'd (1997)", + 19 + ], + [ + 1246, + "Bushwhacked (1995)", + 7 + ], + [ + 1247, + "Bad Girls (1994)", + 6 + ], + [ + 1248, + "Blink (1994)", + 19 + ], + [ + 1249, + "For Love or Money (1993)", + 12 + ], + [ + 1250, + "Best of the Best 3: No Turning Back (1995)", + 6 + ], + [ + 1251, + "A Chef in Love (1996)", + 8 + ], + [ + 1252, + "Contempt (Mépris, Le) (1963)", + 9 + ], + [ + 1253, + "Tie That Binds, The (1995)", + 7 + ], + [ + 1254, + "Gone Fishin' (1997)", + 11 + ], + [ + 1255, + "Broken English (1996)", + 8 + ], + [ + 1256, + "Designated Mourner, The (1997)", + 3 + ], + [ + 1257, + "Designated Mourner, The (1997)", + 4 + ], + [ + 1258, + "Trial and Error (1997)", + 23 + ], + [ + 1259, + "Pie in the Sky (1995)", + 4 + ], + [ + 1260, + "Total Eclipse (1995)", + 4 + ], + [ + 1261, + "Run of the Country, The (1995)", + 4 + ], + [ + 1262, + "Walking and Talking (1996)", + 8 + ], + [ + 1263, + "Foxfire (1996)", + 15 + ], + [ + 1264, + "Nothing to Lose (1994)", + 7 + ], + [ + 1265, + "Star Maps (1997)", + 19 + ], + [ + 1266, + "Bread and Chocolate (Pane e cioccolata) (1973)", + 12 + ], + [ + 1267, + "Clockers (1995)", + 33 + ], + [ + 1268, + "Bitter Moon (1992)", + 10 + ], + [ + 1269, + "Love in the Afternoon (1957)", + 10 + ], + [ + 1270, + "Life with Mikey (1993)", + 7 + ], + [ + 1271, + "North (1994)", + 7 + ], + [ + 1272, + "Talking About Sex (1994)", + 5 + ], + [ + 1273, + "Color of Night (1994)", + 15 + ], + [ + 1274, + "Robocop 3 (1993)", + 11 + ], + [ + 1275, + "Killer (Bulletproof Heart) (1994)", + 4 + ], + [ + 1276, + "Sunset Park (1996)", + 8 + ], + [ + 1277, + "Set It Off (1996)", + 19 + ], + [ + 1278, + "Selena (1997)", + 16 + ], + [ + 1279, + "Wild America (1997)", + 9 + ], + [ + 1280, + "Gang Related (1997)", + 16 + ], + [ + 1281, + "Manny & Lo (1996)", + 13 + ], + [ + 1282, + "Grass Harp, The (1995)", + 9 + ], + [ + 1283, + "Out to Sea (1997)", + 19 + ], + [ + 1284, + "Before and After (1996)", + 26 + ], + [ + 1285, + "Princess Caraboo (1994)", + 15 + ], + [ + 1286, + "Shall We Dance? (1937)", + 17 + ], + [ + 1287, + "Ed (1996)", + 6 + ], + [ + 1288, + "Denise Calls Up (1995)", + 7 + ], + [ + 1289, + "Jack and Sarah (1995)", + 7 + ], + [ + 1290, + "Country Life (1994)", + 2 + ], + [ + 1291, + "Celtic Pride (1996)", + 15 + ], + [ + 1292, + "Simple Wish, A (1997)", + 3 + ], + [ + 1293, + "Star Kid (1997)", + 3 + ], + [ + 1294, + "Ayn Rand: A Sense of Life (1997)", + 7 + ], + [ + 1295, + "Kicked in the Head (1997)", + 7 + ], + [ + 1296, + "Indian Summer (1996)", + 20 + ], + [ + 1297, + "Love Affair (1994)", + 12 + ], + [ + 1298, + "Band Wagon, The (1953)", + 9 + ], + [ + 1299, + "Penny Serenade (1941)", + 8 + ], + [ + 1300, + "'Til There Was You (1997)", + 9 + ], + [ + 1301, + "Stripes (1981)", + 5 + ], + [ + 1302, + "Late Bloomers (1996)", + 5 + ], + [ + 1303, + "Getaway, The (1994)", + 18 + ], + [ + 1304, + "New York Cop (1996)", + 2 + ], + [ + 1305, + "National Lampoon's Senior Trip (1995)", + 7 + ], + [ + 1306, + "Delta of Venus (1994)", + 2 + ], + [ + 1307, + "Carmen Miranda: Bananas Is My Business (1994)", + 2 + ], + [ + 1308, + "Babyfever (1994)", + 2 + ], + [ + 1309, + "Very Natural Thing, A (1974)", + 1 + ], + [ + 1310, + "Walk in the Sun, A (1945)", + 1 + ], + [ + 1311, + "Waiting to Exhale (1995)", + 16 + ], + [ + 1312, + "Pompatus of Love, The (1996)", + 7 + ], + [ + 1313, + "Palmetto (1998)", + 14 + ], + [ + 1314, + "Surviving the Game (1994)", + 11 + ], + [ + 1315, + "Inventing the Abbotts (1997)", + 23 + ], + [ + 1316, + "Horse Whisperer, The (1998)", + 7 + ], + [ + 1317, + "Journey of August King, The (1995)", + 4 + ], + [ + 1318, + "Catwalk (1995)", + 3 + ], + [ + 1319, + "Neon Bible, The (1995)", + 4 + ], + [ + 1320, + "Homage (1995)", + 1 + ], + [ + 1321, + "Open Season (1996)", + 2 + ], + [ + 1322, + "Metisse (Café au Lait) (1993)", + 6 + ], + [ + 1323, + "Wooden Man's Bride, The (Wu Kui) (1994)", + 3 + ], + [ + 1324, + "Loaded (1994)", + 5 + ], + [ + 1325, + "August (1996)", + 1 + ], + [ + 1326, + "Boys (1996)", + 6 + ], + [ + 1327, + "Captives (1994)", + 3 + ], + [ + 1328, + "Of Love and Shadows (1994)", + 6 + ], + [ + 1329, + "Low Life, The (1994)", + 1 + ], + [ + 1330, + "An Unforgettable Summer (1994)", + 4 + ], + [ + 1331, + "Last Klezmer: Leopold Kozlowski, His Life and Music, The (1995)", + 4 + ], + [ + 1332, + "My Life and Times With Antonin Artaud (En compagnie d'Antonin Artaud) (1993)", + 2 + ], + [ + 1333, + "Midnight Dancers (Sibak) (1994)", + 5 + ], + [ + 1334, + "Somebody to Love (1994)", + 2 + ], + [ + 1335, + "American Buffalo (1996)", + 11 + ], + [ + 1336, + "Kazaam (1996)", + 10 + ], + [ + 1337, + "Larger Than Life (1996)", + 9 + ], + [ + 1338, + "Two Deaths (1995)", + 4 + ], + [ + 1339, + "Stefano Quantestorie (1993)", + 1 + ], + [ + 1340, + "Crude Oasis, The (1995)", + 1 + ], + [ + 1341, + "Hedd Wyn (1992)", + 1 + ], + [ + 1342, + "Convent, The (Convento, O) (1995)", + 2 + ], + [ + 1343, + "Lotto Land (1995)", + 1 + ], + [ + 1344, + "Story of Xinghua, The (1993)", + 5 + ], + [ + 1345, + "Day the Sun Turned Cold, The (Tianguo niezi) (1994)", + 2 + ], + [ + 1346, + "Dingo (1992)", + 5 + ], + [ + 1347, + "Ballad of Narayama, The (Narayama Bushiko) (1958)", + 4 + ], + [ + 1348, + "Every Other Weekend (1990)", + 1 + ], + [ + 1349, + "Mille bolle blu (1993)", + 1 + ], + [ + 1350, + "Crows and Sparrows (1949)", + 2 + ], + [ + 1351, + "Lover's Knot (1996)", + 3 + ], + [ + 1352, + "Shadow of Angels (Schatten der Engel) (1976)", + 1 + ], + [ + 1353, + "1-900 (1994)", + 5 + ], + [ + 1354, + "Venice/Venice (1992)", + 2 + ], + [ + 1355, + "Infinity (1996)", + 6 + ], + [ + 1356, + "Ed's Next Move (1996)", + 3 + ], + [ + 1357, + "For the Moment (1994)", + 3 + ], + [ + 1358, + "The Deadly Cure (1996)", + 2 + ], + [ + 1359, + "Boys in Venice (1996)", + 2 + ], + [ + 1360, + "Sexual Life of the Belgians, The (1994)", + 2 + ], + [ + 1361, + "Search for One-eye Jimmy, The (1996)", + 3 + ], + [ + 1362, + "American Strays (1996)", + 2 + ], + [ + 1363, + "Leopard Son, The (1996)", + 1 + ], + [ + 1364, + "Bird of Prey (1996)", + 1 + ], + [ + 1365, + "Johnny 100 Pesos (1993)", + 2 + ], + [ + 1366, + "JLG/JLG - autoportrait de décembre (1994)", + 1 + ], + [ + 1367, + "Faust (1994)", + 5 + ], + [ + 1368, + "Mina Tannenbaum (1994)", + 6 + ], + [ + 1369, + "Forbidden Christ, The (Cristo proibito, Il) (1950)", + 4 + ], + [ + 1370, + "I Can't Sleep (J'ai pas sommeil) (1994)", + 3 + ], + [ + 1371, + "Machine, The (1994)", + 2 + ], + [ + 1372, + "Stranger, The (1994)", + 3 + ], + [ + 1373, + "Good Morning (1971)", + 1 + ], + [ + 1374, + "Falling in Love Again (1980)", + 2 + ], + [ + 1375, + "Cement Garden, The (1993)", + 10 + ], + [ + 1376, + "Meet Wally Sparks (1997)", + 7 + ], + [ + 1377, + "Hotel de Love (1996)", + 4 + ], + [ + 1378, + "Rhyme & Reason (1997)", + 5 + ], + [ + 1379, + "Love and Other Catastrophes (1996)", + 7 + ], + [ + 1380, + "Hollow Reed (1996)", + 6 + ], + [ + 1381, + "Losing Chase (1996)", + 8 + ], + [ + 1382, + "Bonheur, Le (1965)", + 4 + ], + [ + 1383, + "Second Jungle Book: Mowgli & Baloo, The (1997)", + 6 + ], + [ + 1384, + "Squeeze (1996)", + 3 + ], + [ + 1385, + "Roseanna's Grave (For Roseanna) (1997)", + 5 + ], + [ + 1386, + "Tetsuo II: Body Hammer (1992)", + 6 + ], + [ + 1387, + "Fall (1997)", + 3 + ], + [ + 1388, + "Gabbeh (1996)", + 6 + ], + [ + 1389, + "Mondo (1996)", + 3 + ], + [ + 1390, + "Innocent Sleep, The (1995)", + 2 + ], + [ + 1391, + "For Ever Mozart (1996)", + 3 + ], + [ + 1392, + "Locusts, The (1997)", + 5 + ], + [ + 1393, + "Stag (1997)", + 9 + ], + [ + 1394, + "Swept from the Sea (1997)", + 7 + ], + [ + 1395, + "Hurricane Streets (1998)", + 6 + ], + [ + 1396, + "Stonewall (1995)", + 5 + ], + [ + 1397, + "Of Human Bondage (1934)", + 5 + ], + [ + 1398, + "Anna (1996)", + 2 + ], + [ + 1399, + "Stranger in the House (1997)", + 7 + ], + [ + 1400, + "Picture Bride (1995)", + 10 + ], + [ + 1401, + "M. Butterfly (1993)", + 18 + ], + [ + 1402, + "Ciao, Professore! (1993)", + 4 + ], + [ + 1403, + "Caro Diario (Dear Diary) (1994)", + 4 + ], + [ + 1404, + "Withnail and I (1987)", + 13 + ], + [ + 1405, + "Boy's Life 2 (1997)", + 6 + ], + [ + 1406, + "When Night Is Falling (1995)", + 5 + ], + [ + 1407, + "Specialist, The (1994)", + 20 + ], + [ + 1408, + "Gordy (1995)", + 3 + ], + [ + 1409, + "Swan Princess, The (1994)", + 7 + ], + [ + 1410, + "Harlem (1993)", + 4 + ], + [ + 1411, + "Barbarella (1968)", + 28 + ], + [ + 1412, + "Land Before Time III: The Time of the Great Giving (1995) (V)", + 6 + ], + [ + 1413, + "Street Fighter (1994)", + 8 + ], + [ + 1414, + "Coldblooded (1995)", + 1 + ], + [ + 1415, + "Next Karate Kid, The (1994)", + 9 + ], + [ + 1416, + "No Escape (1994)", + 5 + ], + [ + 1417, + "Turning, The (1992)", + 2 + ], + [ + 1418, + "Joy Luck Club, The (1993)", + 3 + ], + [ + 1419, + "Highlander III: The Sorcerer (1994)", + 16 + ], + [ + 1420, + "Gilligan's Island: The Movie (1998)", + 3 + ], + [ + 1421, + "My Crazy Life (Mi vida loca) (1993)", + 11 + ], + [ + 1422, + "Suture (1993)", + 4 + ], + [ + 1423, + "Walking Dead, The (1995)", + 4 + ], + [ + 1424, + "I Like It Like That (1994)", + 3 + ], + [ + 1425, + "I'll Do Anything (1994)", + 10 + ], + [ + 1426, + "Grace of My Heart (1996)", + 8 + ], + [ + 1427, + "Drunks (1995)", + 5 + ], + [ + 1428, + "SubUrbia (1997)", + 12 + ], + [ + 1429, + "Sliding Doors (1998)", + 4 + ], + [ + 1430, + "Ill Gotten Gains (1997)", + 3 + ], + [ + 1431, + "Legal Deceit (1997)", + 5 + ], + [ + 1432, + "Mighty, The (1998)", + 3 + ], + [ + 1433, + "Men of Means (1998)", + 2 + ], + [ + 1434, + "Shooting Fish (1997)", + 10 + ], + [ + 1435, + "Steal Big, Steal Little (1995)", + 7 + ], + [ + 1436, + "Mr. Jones (1993)", + 2 + ], + [ + 1437, + "House Party 3 (1994)", + 9 + ], + [ + 1438, + "Panther (1995)", + 5 + ], + [ + 1439, + "Jason's Lyric (1994)", + 8 + ], + [ + 1440, + "Above the Rim (1994)", + 5 + ], + [ + 1441, + "Moonlight and Valentino (1995)", + 7 + ], + [ + 1442, + "Scarlet Letter, The (1995)", + 5 + ], + [ + 1443, + "8 Seconds (1994)", + 4 + ], + [ + 1444, + "That Darn Cat! (1965)", + 19 + ], + [ + 1445, + "Ladybird Ladybird (1994)", + 4 + ], + [ + 1446, + "Bye Bye, Love (1995)", + 15 + ], + [ + 1447, + "Century (1993)", + 1 + ], + [ + 1448, + "My Favorite Season (1993)", + 3 + ], + [ + 1449, + "Pather Panchali (1955)", + 8 + ], + [ + 1450, + "Golden Earrings (1947)", + 2 + ], + [ + 1451, + "Foreign Correspondent (1940)", + 15 + ], + [ + 1452, + "Lady of Burlesque (1943)", + 1 + ], + [ + 1453, + "Angel on My Shoulder (1946)", + 1 + ], + [ + 1454, + "Angel and the Badman (1947)", + 6 + ], + [ + 1455, + "Outlaw, The (1943)", + 2 + ], + [ + 1456, + "Beat the Devil (1954)", + 7 + ], + [ + 1457, + "Love Is All There Is (1996)", + 1 + ], + [ + 1458, + "Damsel in Distress, A (1937)", + 1 + ], + [ + 1459, + "Madame Butterfly (1995)", + 7 + ], + [ + 1460, + "Sleepover (1995)", + 1 + ], + [ + 1461, + "Here Comes Cookie (1935)", + 1 + ], + [ + 1462, + "Thieves (Voleurs, Les) (1996)", + 7 + ], + [ + 1463, + "Boys, Les (1997)", + 3 + ], + [ + 1464, + "Stars Fell on Henrietta, The (1995)", + 3 + ], + [ + 1465, + "Last Summer in the Hamptons (1995)", + 3 + ], + [ + 1466, + "Margaret's Museum (1995)", + 6 + ], + [ + 1467, + "Saint of Fort Washington, The (1993)", + 2 + ], + [ + 1468, + "Cure, The (1995)", + 6 + ], + [ + 1469, + "Tom and Huck (1995)", + 12 + ], + [ + 1470, + "Gumby: The Movie (1995)", + 5 + ], + [ + 1471, + "Hideaway (1995)", + 9 + ], + [ + 1472, + "Visitors, The (Visiteurs, Les) (1993)", + 2 + ], + [ + 1473, + "Little Princess, The (1939)", + 9 + ], + [ + 1474, + "Nina Takes a Lover (1994)", + 6 + ], + [ + 1475, + "Bhaji on the Beach (1993)", + 8 + ], + [ + 1476, + "Raw Deal (1948)", + 1 + ], + [ + 1477, + "Nightwatch (1997)", + 2 + ], + [ + 1478, + "Dead Presidents (1995)", + 18 + ], + [ + 1479, + "Reckless (1995)", + 8 + ], + [ + 1480, + "Herbie Rides Again (1974)", + 11 + ], + [ + 1481, + "S.F.W. (1994)", + 2 + ], + [ + 1482, + "Gate of Heavenly Peace, The (1995)", + 1 + ], + [ + 1483, + "Man in the Iron Mask, The (1998)", + 12 + ], + [ + 1484, + "Jerky Boys, The (1994)", + 3 + ], + [ + 1485, + "Colonel Chabert, Le (1994)", + 4 + ], + [ + 1486, + "Girl in the Cadillac (1995)", + 1 + ], + [ + 1487, + "Even Cowgirls Get the Blues (1993)", + 5 + ], + [ + 1488, + "Germinal (1993)", + 4 + ], + [ + 1489, + "Chasers (1994)", + 5 + ], + [ + 1490, + "Fausto (1993)", + 3 + ], + [ + 1491, + "Tough and Deadly (1995)", + 2 + ], + [ + 1492, + "Window to Paris (1994)", + 1 + ], + [ + 1493, + "Modern Affair, A (1995)", + 1 + ], + [ + 1494, + "Mostro, Il (1994)", + 1 + ], + [ + 1495, + "Flirt (1995)", + 5 + ], + [ + 1496, + "Carpool (1996)", + 5 + ], + [ + 1497, + "Line King: Al Hirschfeld, The (1996)", + 2 + ], + [ + 1498, + "Farmer & Chase (1995)", + 1 + ], + [ + 1499, + "Grosse Fatigue (1994)", + 4 + ], + [ + 1500, + "Santa with Muscles (1996)", + 2 + ], + [ + 1501, + "Prisoner of the Mountains (Kavkazsky Plennik) (1996)", + 5 + ], + [ + 1502, + "Naked in New York (1994)", + 2 + ], + [ + 1503, + "Gold Diggers: The Secret of Bear Mountain (1995)", + 10 + ], + [ + 1504, + "Bewegte Mann, Der (1994)", + 3 + ], + [ + 1505, + "Killer: A Journal of Murder (1995)", + 1 + ], + [ + 1506, + "Nelly & Monsieur Arnaud (1995)", + 3 + ], + [ + 1507, + "Three Lives and Only One Death (1996)", + 1 + ], + [ + 1508, + "Babysitter, The (1995)", + 3 + ], + [ + 1509, + "Getting Even with Dad (1994)", + 5 + ], + [ + 1510, + "Mad Dog Time (1996)", + 1 + ], + [ + 1511, + "Children of the Revolution (1996)", + 5 + ], + [ + 1512, + "World of Apu, The (Apur Sansar) (1959)", + 6 + ], + [ + 1513, + "Sprung (1997)", + 3 + ], + [ + 1514, + "Dream With the Fishes (1997)", + 7 + ], + [ + 1515, + "Wings of Courage (1995)", + 1 + ], + [ + 1516, + "Wedding Gift, The (1994)", + 3 + ], + [ + 1517, + "Race the Sun (1996)", + 5 + ], + [ + 1518, + "Losing Isaiah (1995)", + 12 + ], + [ + 1519, + "New Jersey Drive (1995)", + 2 + ], + [ + 1520, + "Fear, The (1995)", + 1 + ], + [ + 1521, + "Mr. Wonderful (1993)", + 4 + ], + [ + 1522, + "Trial by Jury (1994)", + 7 + ], + [ + 1523, + "Good Man in Africa, A (1994)", + 2 + ], + [ + 1524, + "Kaspar Hauser (1993)", + 8 + ], + [ + 1525, + "Object of My Affection, The (1998)", + 1 + ], + [ + 1526, + "Witness (1985)", + 1 + ], + [ + 1527, + "Senseless (1998)", + 7 + ], + [ + 1528, + "Nowhere (1997)", + 3 + ], + [ + 1529, + "Underground (1995)", + 5 + ], + [ + 1530, + "Jefferson in Paris (1995)", + 5 + ], + [ + 1531, + "Far From Home: The Adventures of Yellow Dog (1995)", + 7 + ], + [ + 1532, + "Foreign Student (1994)", + 2 + ], + [ + 1533, + "I Don't Want to Talk About It (De eso no se habla) (1993)", + 1 + ], + [ + 1534, + "Twin Town (1997)", + 6 + ], + [ + 1535, + "Enfer, L' (1994)", + 4 + ], + [ + 1536, + "Aiqing wansui (1994)", + 1 + ], + [ + 1537, + "Cosi (1996)", + 4 + ], + [ + 1538, + "All Over Me (1997)", + 3 + ], + [ + 1539, + "Being Human (1993)", + 4 + ], + [ + 1540, + "Amazing Panda Adventure, The (1995)", + 10 + ], + [ + 1541, + "Beans of Egypt, Maine, The (1994)", + 2 + ], + [ + 1542, + "Scarlet Letter, The (1926)", + 2 + ], + [ + 1543, + "Johns (1996)", + 1 + ], + [ + 1544, + "It Takes Two (1995)", + 3 + ], + [ + 1545, + "Frankie Starlight (1995)", + 4 + ], + [ + 1546, + "Shadows (Cienie) (1988)", + 1 + ], + [ + 1547, + "Show, The (1995)", + 2 + ], + [ + 1548, + "The Courtyard (1995)", + 1 + ], + [ + 1549, + "Dream Man (1995)", + 2 + ], + [ + 1550, + "Destiny Turns on the Radio (1995)", + 2 + ], + [ + 1551, + "Glass Shield, The (1994)", + 2 + ], + [ + 1552, + "Hunted, The (1995)", + 3 + ], + [ + 1553, + "Underneath, The (1995)", + 4 + ], + [ + 1554, + "Safe Passage (1994)", + 2 + ], + [ + 1555, + "Secret Adventures of Tom Thumb, The (1993)", + 5 + ], + [ + 1556, + "Condition Red (1995)", + 2 + ], + [ + 1557, + "Yankee Zulu (1994)", + 1 + ], + [ + 1558, + "Aparajito (1956)", + 7 + ], + [ + 1559, + "Hostile Intentions (1994)", + 1 + ], + [ + 1560, + "Clean Slate (Coup de Torchon) (1981)", + 4 + ], + [ + 1561, + "Tigrero: A Film That Was Never Made (1994)", + 1 + ], + [ + 1562, + "Eye of Vichy, The (Oeil de Vichy, L') (1993)", + 1 + ], + [ + 1563, + "Promise, The (Versprechen, Das) (1994)", + 1 + ], + [ + 1564, + "To Cross the Rubicon (1991)", + 1 + ], + [ + 1565, + "Daens (1992)", + 1 + ], + [ + 1566, + "Man from Down Under, The (1943)", + 1 + ], + [ + 1567, + "Careful (1992)", + 1 + ], + [ + 1568, + "Vermont Is For Lovers (1992)", + 1 + ], + [ + 1569, + "Vie est belle, La (Life is Rosey) (1987)", + 1 + ], + [ + 1570, + "Quartier Mozart (1992)", + 1 + ], + [ + 1571, + "Touki Bouki (Journey of the Hyena) (1973)", + 1 + ], + [ + 1572, + "Wend Kuuni (God's Gift) (1982)", + 1 + ], + [ + 1573, + "Spirits of the Dead (Tre passi nel delirio) (1968)", + 2 + ], + [ + 1574, + "Pharaoh's Army (1995)", + 1 + ], + [ + 1575, + "I, Worst of All (Yo, la peor de todas) (1990)", + 1 + ], + [ + 1576, + "Hungarian Fairy Tale, A (1987)", + 1 + ], + [ + 1577, + "Death in the Garden (Mort en ce jardin, La) (1956)", + 1 + ], + [ + 1578, + "Collectionneuse, La (1967)", + 2 + ], + [ + 1579, + "Baton Rouge (1988)", + 1 + ], + [ + 1580, + "Liebelei (1933)", + 1 + ], + [ + 1581, + "Woman in Question, The (1950)", + 1 + ], + [ + 1582, + "T-Men (1947)", + 1 + ], + [ + 1583, + "Invitation, The (Zaproszenie) (1986)", + 1 + ], + [ + 1584, + "Symphonie pastorale, La (1946)", + 1 + ], + [ + 1585, + "American Dream (1990)", + 2 + ], + [ + 1586, + "Lashou shentan (1992)", + 1 + ], + [ + 1587, + "Terror in a Texas Town (1958)", + 1 + ], + [ + 1588, + "Salut cousin! (1996)", + 2 + ], + [ + 1589, + "Schizopolis (1996)", + 4 + ], + [ + 1590, + "To Have, or Not (1995)", + 2 + ], + [ + 1591, + "Duoluo tianshi (1995)", + 6 + ], + [ + 1592, + "Magic Hour, The (1998)", + 5 + ], + [ + 1593, + "Death in Brunswick (1991)", + 1 + ], + [ + 1594, + "Everest (1998)", + 2 + ], + [ + 1595, + "Shopping (1994)", + 1 + ], + [ + 1596, + "Nemesis 2: Nebula (1995)", + 1 + ], + [ + 1597, + "Romper Stomper (1992)", + 5 + ], + [ + 1598, + "City of Industry (1997)", + 6 + ], + [ + 1599, + "Someone Else's America (1995)", + 1 + ], + [ + 1600, + "Guantanamera (1994)", + 4 + ], + [ + 1601, + "Office Killer (1997)", + 1 + ], + [ + 1602, + "Price Above Rubies, A (1998)", + 3 + ], + [ + 1603, + "Angela (1995)", + 1 + ], + [ + 1604, + "He Walked by Night (1948)", + 1 + ], + [ + 1605, + "Love Serenade (1996)", + 4 + ], + [ + 1606, + "Deceiver (1997)", + 1 + ], + [ + 1607, + "Hurricane Streets (1998)", + 3 + ], + [ + 1608, + "Buddy (1997)", + 4 + ], + [ + 1609, + "B*A*P*S (1997)", + 3 + ], + [ + 1610, + "Truth or Consequences, N.M. (1997)", + 3 + ], + [ + 1611, + "Intimate Relations (1996)", + 2 + ], + [ + 1612, + "Leading Man, The (1996)", + 4 + ], + [ + 1613, + "Tokyo Fist (1995)", + 1 + ], + [ + 1614, + "Reluctant Debutante, The (1958)", + 1 + ], + [ + 1615, + "Warriors of Virtue (1997)", + 10 + ], + [ + 1616, + "Desert Winds (1995)", + 1 + ], + [ + 1617, + "Hugo Pool (1997)", + 2 + ], + [ + 1618, + "King of New York (1990)", + 1 + ], + [ + 1619, + "All Things Fair (1996)", + 1 + ], + [ + 1620, + "Sixth Man, The (1997)", + 9 + ], + [ + 1621, + "Butterfly Kiss (1995)", + 1 + ], + [ + 1622, + "Paris, France (1993)", + 3 + ], + [ + 1623, + "Cérémonie, La (1995)", + 3 + ], + [ + 1624, + "Hush (1998)", + 1 + ], + [ + 1625, + "Nightwatch (1997)", + 1 + ], + [ + 1626, + "Nobody Loves Me (Keiner liebt mich) (1994)", + 1 + ], + [ + 1627, + "Wife, The (1995)", + 1 + ], + [ + 1628, + "Lamerica (1994)", + 4 + ], + [ + 1629, + "Nico Icon (1995)", + 2 + ], + [ + 1630, + "Silence of the Palace, The (Saimt el Qusur) (1994)", + 1 + ], + [ + 1631, + "Slingshot, The (1993)", + 2 + ], + [ + 1632, + "Land and Freedom (Tierra y libertad) (1995)", + 1 + ], + [ + 1633, + "Á kâldum klaka (Cold Fever) (1994)", + 1 + ], + [ + 1634, + "Etz Hadomim Tafus (Under the Domin Tree) (1994)", + 1 + ], + [ + 1635, + "Two Friends (1986) ", + 1 + ], + [ + 1636, + "Brothers in Trouble (1995)", + 1 + ], + [ + 1637, + "Girls Town (1996)", + 1 + ], + [ + 1638, + "Normal Life (1996)", + 1 + ], + [ + 1639, + "Bitter Sugar (Azucar Amargo) (1996)", + 3 + ], + [ + 1640, + "Eighth Day, The (1996)", + 1 + ], + [ + 1641, + "Dadetown (1995)", + 1 + ], + [ + 1642, + "Some Mother's Son (1996)", + 2 + ], + [ + 1643, + "Angel Baby (1995)", + 4 + ], + [ + 1644, + "Sudden Manhattan (1996)", + 2 + ], + [ + 1645, + "Butcher Boy, The (1998)", + 1 + ], + [ + 1646, + "Men With Guns (1997)", + 2 + ], + [ + 1647, + "Hana-bi (1997)", + 1 + ], + [ + 1648, + "Niagara, Niagara (1997)", + 1 + ], + [ + 1649, + "Big One, The (1997)", + 1 + ], + [ + 1650, + "Butcher Boy, The (1998)", + 1 + ], + [ + 1651, + "Spanish Prisoner, The (1997)", + 1 + ], + [ + 1652, + "Temptress Moon (Feng Yue) (1996)", + 3 + ], + [ + 1653, + "Entertaining Angels: The Dorothy Day Story (1996)", + 1 + ], + [ + 1654, + "Chairman of the Board (1998)", + 1 + ], + [ + 1655, + "Favor, The (1994)", + 1 + ], + [ + 1656, + "Little City (1998)", + 2 + ], + [ + 1657, + "Target (1995)", + 1 + ], + [ + 1658, + "Substance of Fire, The (1996)", + 3 + ], + [ + 1659, + "Getting Away With Murder (1996)", + 1 + ], + [ + 1660, + "Small Faces (1995)", + 1 + ], + [ + 1661, + "New Age, The (1994)", + 1 + ], + [ + 1662, + "Rough Magic (1995)", + 2 + ], + [ + 1663, + "Nothing Personal (1995)", + 1 + ], + [ + 1664, + "8 Heads in a Duffel Bag (1997)", + 4 + ], + [ + 1665, + "Brother's Kiss, A (1997)", + 1 + ], + [ + 1666, + "Ripe (1996)", + 1 + ], + [ + 1667, + "Next Step, The (1995)", + 1 + ], + [ + 1668, + "Wedding Bell Blues (1996)", + 1 + ], + [ + 1669, + "MURDER and murder (1996)", + 1 + ], + [ + 1670, + "Tainted (1998)", + 1 + ], + [ + 1671, + "Further Gesture, A (1996)", + 1 + ], + [ + 1672, + "Kika (1993)", + 2 + ], + [ + 1673, + "Mirage (1995)", + 1 + ], + [ + 1674, + "Mamma Roma (1962)", + 1 + ], + [ + 1675, + "Sunchaser, The (1996)", + 1 + ], + [ + 1676, + "War at Home, The (1996)", + 1 + ], + [ + 1677, + "Sweet Nothing (1995)", + 1 + ], + [ + 1678, + "Mat' i syn (1997)", + 1 + ], + [ + 1679, + "B. Monkey (1998)", + 1 + ], + [ + 1680, + "Sliding Doors (1998)", + 1 + ], + [ + 1681, + "You So Crazy (1994)", + 1 + ], + [ + 1682, + "Scream of Stone (Schrei aus Stein) (1991)", + 1 + ] + ], + "hovertemplate": "tsne_1=%{x}
tsne_2=%{y}
item_id=%{customdata[0]}
title=%{customdata[1]}
popularity=%{marker.color}", + "legendgroup": "", + "marker": { + "color": { + "bdata": "xAGDAFoA0QBWABoAiAHbACsBWQDsAAsBuAC3ACUBJwBcAAoARQBIAFQAKQG2AK4AJQFJADkAFAFyACUAmgBRAGEABwALAA0ACAB4AFcAOQAlAJQAKABPAFAAGwCFAHUAUQBHAlEAWwCAAGgAlQCKASgArwBTAEAAOwB/AFIAGwFzAKIAZwCGAEEB+wDcAIEAgAAHAAUANgCXACEAUAFEAG4ABQGwABIAOgCWAIoA1QATAV8AjwBoAHAAiQDbACcBAAGGAawA/AFJADYADwAFAEoARwAqAEEAggAfABABFAAJAEMADwB9AHoBJQEEAEMArQFqAHMAuwD0AGEAnQFBAIEAFwBfAPYAqwDGAAMBaQCrABMAMgA9AEgAOQDeAPMAQQAKALkAgAAXAJ0ARgFSAPcArgBiAJQAfwA8AGUARQDcAGoAXACXAEAAOgBDADwBdgB5AEEAbwFEAaQB0AAcAYkAfQDdAN0A+wHiACMBdADvAPsA0QCqAEIAfAAUAXQAnQDxAC0B+wDvAH8ApQDOAFkAGAG2AF4BiAAyAEIAyAC/AEsBzgBcAIYAcgDUACIBeACrAG8AQgBKAG0BiAAsAG0ApgChAPQAqwDHAI4AZQB8ABgB2QAtAIABAAGWAJwAgAB1AIQAMADwAHwABQCgAIIAxQAuAJ4AGgA+AKwAEAAvAf0BogB/ACsAQgATAGUA4wAjAAkA/wA7AYgA0wDGAN8AvgAMASoBRwA8ABwAVQCSAOgAsQDBAKIA4QFOAN4BAwFgAH8AcgCTAOUBTQAGADIAwgBJAK8B5gApAYYAlQBXAGAAvAAeABwAkQBLAFAAXgEFAKAAcABmACoBqAAUAKkA2gDwAH0AgACvAK8AJwEtACkAcQCPAPsAQAAVACsAEgBbAC8AvQALADQAfAA3AEEAfgCJABsAHwApABQAGgAOAEgAKQBhAAgBjwASAAoACgAcAC8AJQAwAC8AqgAfADcAJwBDACIAJwALABcAGAANAGUAKwB0AGQAbwAfAEUA0ABXAEEAHAAbAAoAOwBEAMAADAA4ADYADAAaAFkAEgBMAKoAyQBlAFgBMQArAHAARgCiAKMAXQA3AD4AGQBAAEkAgQCyAFEAagAaACwBEwBVACAA2wB5AGEAXQCZAK4AqwBDANgAYwAFAAYABQAOADUABACiAC4AFgAJAHkAVQB1AD8AqgBCABAAEACRADAAGwBaABgAHABKAJQARwAbAFUANAAwAEAAQwBsAN0AngB+AMIA+gCgAF8AaACzALMAPwCAAPMAigB9AEAARABBADQAMgBDADsAPAA4ADsA5wBEAJgAPgAfAHsAOQAnAHoARABaAGIA1wB5AHkArQA5AEgAtADJAD8AWwBZAFAAfAB4ACMApAAuAEkAfADDAHkAXQBQAIEAFgAPAA0ANgAKAB4AQgAsACsAMQAzABUARwAMAP4AKQAMAFwAlwAYAC0APwBmAAoADAARAEYAiQAWADsAMAAdABsAFgCzACMA5gBDADIAHAAdACEADwAsAF0AKQBcABMAIAA7AKgAJQBPACcAIgAOAMoAKwASALIACQAMAAUAQAB/AM4ABAABAAIAFAAyANEAUQAfAEIAQgAeADwAKQAoACIAGwAzADsAQAASABIAQAArAAsAJwAnABYAUgAEAEsAqQBNAB8AdwA6AEUAGAAXAFsAJgAsACgAUgAhAFkABAAjABsAJgBGAEMAMgBIAKsAWgAiAJMA4wAsAIMATwBzAJkAWABSAHQALgBkAAUADAAGAA0AJAAuAEEAVgAwADYATQABANsAawAiABsAZAAxAKkAnQAyAEUALABXAJsAEACkAFsALAANAE8AKAAKAGYADwAKADUAEwAYAIkABgBGAGUAaABPAAEAMwBIAA0AVwA6AFIAEAAdAFYANgA6ACIATAAQAA4APwAtAFEAGAAnALQADwAbAIkATgA7AB8ApAA/ADoACwEnAFwAEAB3AGYAPAEzAHwAtAAnABgAOQBgAIAABAAVAAsALgAsAHMAlQAdACAACQALADQAKgA5ACkAMQARACAAGgAJAAQATAAfAEUAVAAKACUAAgAnAA4ADQADAC8AQgAKAFYACgAuABUAJAAfAAkABQAaABAAKAAJAAgAGwAyAAkAHwArAC0AEgASADgAAQBwABUAAwAZACgAXQAWAAQAUgAxAFMAUAA5AA0AIgABAFsAFgAxABkADwAaABkABAAEADUAMAAbAB4AKgCwACwANwAJADUABAAEAAEADgAQAEIAJAABAAMADwAQAAMAEgAYAFYAFQB3AAYABQAYAAkASwAqAFEAJwA1AC8ANAAhAIgAOwAtACIADQAHAA0ANQBAAA8ADQArAAYANQAOABMAagAsAAIAOgAJACoADAAqABIAFAAbABUAAgAUAA0ABAAEAAkAAgALAA0AEgAHAAgAYAAFAC4AIgA6AFUAIgBlAAYAaAAoAFAAOQAoABUARAAHACAAJQAZADwAIAAuAC0AKAArACgAPQARADAARwAeACcALQAWAAsAMQAuAAIADgBAABkAIgAXACkACQAVABoADAASAEsACAAiABwABAAgACwADAAxABsAIwAWAAgAFAAPACwAFgAXAAQAVgAgACEAGQAEAEIABwAfAA4AEAAQAAoACgARAAgACAAJABYAFwAvACUAQAAsAF0AZAAmAGIADACJADIAIAAfACMAJgAgAB8ADwAsAAQAAwCUAA4AFAAHABAAIAAbAEQAGAAYABEAWgAZAD4AHAAIACgAGQAuAIYASQAZACsAKQAZABgAFwAKAAoAFgAPACMAJwAdAAwAKQAEADUAEAAsAAwAEgAbABAABwBCAE0ABwAMAAgAFgAtAAIACAAIAAYAFQALABUACgANACYAJQArAAwAFwAMAB0AAwASACoADQAIAEoABwATAAQAEgAEABIABQAcACkABwAPABYACgAdAA0AEwAvADsAEQAVAAEAAwAMAAQAIAALAA0AHAABAA0AIAAeACYALgAdAB0ABQAhABEACQAsAA8AAwAJAAMAFQAJABoACQAHABwAEwAMAAMAAQAZAAQACwAaAA0ABQAZAAYADgAMAAsAFgAKABsADgAPAAcACAAFABYABwATAAkACgAKAA0AEwAKABIAAwANACwAAwALAAMADQAKAB8ACwADAC0ABwAXAAcAAQAIABUAEgAGABMAEQAUAA8AJgAMAAYABgAJAB4ABgAnABoAFAAeACcAGQAEAAwADgAgAAgAMAANABIAFgARAAYACAABAAEABgAIABIAGgAGAAUABwAkABMABwAGABMADAAGAAgACQAHAAsACAADAAQAFwAEAAQABAAIAA8ABwATAAwAIQAKAAoABwAHAAUADwALAAQACAATABAACQAQAA0ACQATABoADwARAAYABwAHAAIADwADAAMABwAHABQADAAJAAgACQAFAAUAEgACAAcAAgACAAIAAQABABAABwAOAAsAFwAHAAQAAwAEAAEAAgAGAAMABQABAAYAAwAGAAEABAAEAAIABQACAAsACgAJAAQAAQABAAEAAgABAAUAAgAFAAQAAQABAAIAAwABAAUAAgAGAAMAAwACAAIAAgADAAIAAQABAAIAAQAFAAYABAADAAIAAwABAAIACgAHAAQABQAHAAYACAAEAAYAAwAFAAYAAwAGAAMAAgADAAUACQAHAAYABQAFAAIABwAKABIABAAEAA0ABgAFABQAAwAHAAQAHAAGAAgAAQAJAAUAAgADABAAAwALAAQABAADAAoACAAFAAwABAADAAUAAwACAAoABwACAAkABQAIAAUABwAFAAQAEwAEAA8AAQADAAgAAgAPAAEAAQAGAAIABwABAAEABwABAAEABwADAAMAAwAGAAIABgAMAAUACQACAAkABgAIAAEAAgASAAgACwACAAEADAADAAQAAQAFAAQABQADAAIAAQABAAEABQAFAAIAAQAEAAIABQACAAoAAwABAAMAAQADAAUAAQAFAAYAAwAHAAEAAwAFAAwAAgABAAQABwACAAgAAQABAAcAAwAFAAUABwACAAEABgAEAAEABAADAAQACgACAAIAAQADAAQAAQACAAEAAgACAAIAAwAEAAIABQACAAEABwABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAgABAAEAAQABAAIAAQABAAEAAQABAAEAAgABAAEAAgAEAAIABgAFAAEAAgABAAEABQAGAAEABAABAAMAAQABAAQAAQADAAQAAwADAAIABAABAAEACgABAAIAAQABAAkAAQADAAMAAQABAAEAAQAEAAIAAQACAAEAAQABAAEAAQABAAEAAwABAAEAAgAEAAIAAQACAAEAAQABAAEAAQADAAEAAQABAAIAAQADAAEAAQABAAIAAQAEAAEAAQABAAEAAQABAAEAAgABAAEAAQABAAEAAQABAAEAAQABAA==", + "dtype": "i2" + }, + "coloraxis": "coloraxis", + "symbol": "circle" + }, + "mode": "markers", + "name": "", + "showlegend": false, + "type": "scattergl", + "x": { + "bdata": "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", + "dtype": "f4" + }, + "xaxis": "x", + "y": { + "bdata": "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", + "dtype": "f4" + }, + "yaxis": "y" + } + ], + "layout": { + "coloraxis": { + "colorbar": { + "title": { + "text": "popularity" + } + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "legend": { + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "title": { + "text": "tsne_1" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "tsne_2" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import plotly.express as px\n", "\n", @@ -723,7 +11231,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": { "scrolled": true }, @@ -745,11 +11253,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m52/52\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 853us/step\n", + " 4.6: Convent, The (Convento, O) (1995)\n", + " 4.5: Terror in a Texas Town (1958)\n", + " 4.4: Scarlet Letter, The (1995)\n", + " 4.3: Neon Bible, The (1995)\n", + " 4.3: Leopard Son, The (1996)\n", + " 4.2: Last Dance (1996)\n", + " 4.2: Monty Python and the Holy Grail (1974)\n", + " 4.2: Seven (Se7en) (1995)\n", + " 4.2: Princess Bride, The (1987)\n", + " 4.1: Fled (1996)\n" + ] + } + ], "source": [ - "for title, pred_rating in recommend(5):\n", + "for title, pred_rating in recommend(user_id=111):\n", " print(\" %0.1f: %s\" % (pred_rating, title))" ] }, @@ -767,7 +11293,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": { "collapsed": false }, @@ -806,11 +11332,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 3.3072 - val_loss: 1.0379\n", + "Epoch 2/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 882us/step - loss: 0.8978 - val_loss: 0.7956\n", + "Epoch 3/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 887us/step - loss: 0.7563 - val_loss: 0.7722\n", + "Epoch 4/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 867us/step - loss: 0.7285 - val_loss: 0.7566\n", + "Epoch 5/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 872us/step - loss: 0.7083 - val_loss: 0.7522\n", + "Epoch 6/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 869us/step - loss: 0.6840 - val_loss: 0.7433\n", + "Epoch 7/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 894us/step - loss: 0.6642 - val_loss: 0.7465\n", + "Epoch 8/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 886us/step - loss: 0.6475 - val_loss: 0.7374\n", + "Epoch 9/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 869us/step - loss: 0.6248 - val_loss: 0.7403\n", + "Epoch 10/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 878us/step - loss: 0.5995 - val_loss: 0.7387\n" + ] + } + ], "source": [ "# Training the model\n", "history = model.fit([user_id_train, item_id_train], rating_train,\n", @@ -828,7 +11381,7 @@ ], "metadata": { "kernelspec": { - "display_name": "lab_1", + "display_name": "dsi_participant", "language": "python", "name": "python3" }, @@ -842,7 +11395,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.9" + "version": "3.9.18" } }, "nbformat": 4, diff --git a/02_activities/assignments/assignment_1.ipynb b/02_activities/assignments/assignment_1.ipynb index 6a1f05814..620b78d84 100644 --- a/02_activities/assignments/assignment_1.ipynb +++ b/02_activities/assignments/assignment_1.ipynb @@ -1,309 +1,1135 @@ { - "cells": [ - { - "cell_type": "markdown", - "id": "927ae8f4", - "metadata": {}, - "source": [ - "# Assignment 1 - Building a Vision Model with Keras\n", - "\n", - "In this assignment, you will build a simple vision model using Keras. The goal is to classify images from the Fashion MNIST dataset, which contains images of clothing items.\n", - "\n", - "You will:\n", - "1. Load and inspect the Fashion MNIST dataset.\n", - "2. Run a simple baseline model to establish a performance benchmark.\n", - "3. Build and evaluate a simple CNN model, choosing appropriate loss and metrics.\n", - "4. Design and run controlled experiments on one hyperparameter (e.g., number of filters, kernel size, etc.) and one regularization technique (e.g., dropout, L2 regularization).\n", - "5. Analyze the results and visualize the model's performance.\n", - "\n", - "# 1. Loading and Inspecting the Dataset\n", - "\n", - "Fashion MNIST is a dataset of grayscale images of clothing items, with 10 classes. Each image is 28x28 pixels, like the MNIST dataset of handwritten digits. Keras provides a convenient way to load this dataset. \n", - "\n", - "In this section, you should:\n", - "\n", - "- [ ] Inspect the shapes of the training and test sets to confirm their size and structure.\n", - "- [ ] Convert the labels to one-hot encoded format if necessary. (There is a utility function in Keras for this.)\n", - "- [ ] Visualize a few images from the dataset to understand what the data looks like." - ] + "cells": [ + { + "cell_type": "markdown", + "id": "927ae8f4", + "metadata": { + "id": "927ae8f4" + }, + "source": [ + "# Assignment 1 - Building a Vision Model with Keras\n", + "\n", + "In this assignment, you will build a simple vision model using Keras. The goal is to classify images from the Fashion MNIST dataset, which contains images of clothing items.\n", + "\n", + "You will:\n", + "1. Load and inspect the Fashion MNIST dataset.\n", + "2. Run a simple baseline model to establish a performance benchmark.\n", + "3. Build and evaluate a simple CNN model, choosing appropriate loss and metrics.\n", + "4. Design and run controlled experiments on one hyperparameter (e.g., number of filters, kernel size, etc.) and one regularization technique (e.g., dropout, L2 regularization).\n", + "5. Analyze the results and visualize the model's performance.\n", + "\n", + "# 1. Loading and Inspecting the Dataset\n", + "\n", + "Fashion MNIST is a dataset of grayscale images of clothing items, with 10 classes. Each image is 28x28 pixels, like the MNIST dataset of handwritten digits. Keras provides a convenient way to load this dataset.\n", + "\n", + "In this section, you should:\n", + "\n", + "- [ ] Inspect the shapes of the training and test sets to confirm their size and structure.\n", + "- [ ] Convert the labels to one-hot encoded format if necessary. (There is a utility function in Keras for this.)\n", + "- [ ] Visualize a few images from the dataset to understand what the data looks like." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "420c7178", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "420c7178", + "outputId": "8266e782-7e4b-480c-c73c-c2744658ed01" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz\n", + "\u001b[1m29515/29515\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n", + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-images-idx3-ubyte.gz\n", + "\u001b[1m26421880/26421880\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n", + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-labels-idx1-ubyte.gz\n", + "\u001b[1m5148/5148\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n", + "Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/t10k-images-idx3-ubyte.gz\n", + "\u001b[1m4422102/4422102\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 0us/step\n" + ] + } + ], + "source": [ + "from tensorflow.keras.datasets import fashion_mnist\n", + "(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()\n", + "\n", + "# Normalize the pixel values to be between 0 and 1\n", + "X_train = X_train.astype('float32') / 255.0\n", + "X_test = X_test.astype('float32') / 255.0\n", + "\n", + "# Classes in the Fashion MNIST dataset\n", + "class_names = [\"T-shirt/top\", \"Trouser\", \"Pullover\", \"Dress\", \"Coat\", \"Sandal\", \"Shirt\", \"Sneaker\", \"Bag\", \"Ankle boot\"]" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "a6c89fe7", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "a6c89fe7", + "outputId": "ec939244-060f-4338-8bf4-37091d20962b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training data shape: (60000, 28, 28)\n", + "Training labels shape: (60000,)\n", + "Test data shape: (10000, 28, 28)\n", + "Test labels shape: (10000,)\n", + "\n", + "Number of classes: 10\n", + "Class names: ['T-shirt/top', 'Trouser', 'Pullover', 'Dress', 'Coat', 'Sandal', 'Shirt', 'Sneaker', 'Bag', 'Ankle boot']\n", + "\n", + "One-hot encoded labels shape: (60000, 10)\n" + ] + } + ], + "source": [ + "# Inspect the shapes of the datasets\n", + "\n", + "print(\"Training data shape:\", X_train.shape)\n", + "print(\"Training labels shape:\", y_train.shape)\n", + "print(\"Test data shape:\", X_test.shape)\n", + "print(\"Test labels shape:\", y_test.shape)\n", + "print(\"\\nNumber of classes:\", len(class_names))\n", + "print(\"Class names:\", class_names)\n", + "\n", + "# Convert labels to one-hot encoding\n", + "from tensorflow.keras.utils import to_categorical\n", + "\n", + "y_train_categorical = to_categorical(y_train, 10)\n", + "y_test_categorical = to_categorical(y_test, 10)\n", + "print(\"\\nOne-hot encoded labels shape:\", y_train_categorical.shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "13e100db", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 473 + }, + "id": "13e100db", + "outputId": "bd3a6230-96f6-45c9-a060-804b068ead87" + }, + "outputs": [ + { + "data": { + "image/png": "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vrN///6S+IIFCxwRcd57772S2NixY53w8HDHcRzniy++cKKiopzBgwc7hw4dKvWevXv3dnr37l3y51dffdU54YQTnM8//7zU61544QVHRJwvv/zS+ll69+7tiIjzxBNPlMQKCgqcTp06OfHx8U5hYaHjOI7z9NNPOyLivPbaayWvKywsdM4880wnIiLCyc7OdhzHcd59911HRJwHH3yw1H5GjBjhBAQEOJs3by6JhYeHO2PHjrWOD9XX9ddf75T3sjB//nxHRJyVK1eqr/FlPt13331l9i0izgknnOD89NNPpeLp6emOiDj33Xefcb/33nuvk5iYWCqmnbvDhg1zgoKCnC1btpTE0tLSnMjISKdXr14lsVmzZjki4nTu3LlkjjmO40ydOtUREWfBggXqcUD1xZz4HXMC/nL0vLHNk+joaOfUU091HOf3Zy0Rce66665Sr/n8888dEXFmz55dKr5kyZJS8fLMy5tuusmJiopyDh8+7PZjoRbjPvE77hPHVmt+1Xz27NnSsGFD6du3r4j8/usTo0aNkjlz5siRI0fKvH7UqFESGxtb8ueePXuKiMivv/5a5rXLly+XlJQU6d+/v8ybN0+Cg4OtY3nrrbfkpJNOkrZt20pGRkbJf/369St5v2OpW7euTJgwoeTPQUFBMmHCBNm7d6989913IvL7v9No1KiRjB49uuR1gYGBcuONN0pubq589tlnJa+rU6eO3HjjjaX2ceutt4rjOLJ48eJjjge1z9F///P+++9LUVGR9bW+zKe/6t27t7Rr186nsS1atKjkV6Vsjhw5Ih9++KEMGzZMWrRoURJv3LixjBkzRr744gvJzs4ulXPNNdeU+pvmiRMnSt26dWXRokU+jRE1D3Pid8wJHK+IiIgy1c0nTpxY6s9vvfWWREdHy4ABA0o9S3Xu3FkiIiJKnqXKMy9jYmIkLy9Pli1b5v8PA/wJ94nf1db7RK1YeB85ckTmzJkjffv2la1bt8rmzZtl8+bNcsYZZ8iePXvk448/LpNz4oknlvrz0RP/r/8e4dChQzJ48GA59dRTZe7cuRIUFHTM8WzatEl++ukniYuLK/Vf69atReT3X0M5loSEhDKFRY7mp6amiojItm3bpFWrVnLCCaW/5qNVFrdt21byvwkJCRIZGWl9HWqn3Nxc2b17d8l/6enpIvL7RX348OFy//33S4MGDeT888+XWbNmGesUlHc+mTRv3tyn8e7evVtWr15drptHenq65OfnS5s2bcpsO+mkk6S4uFi2b99eKt6qVatSf46IiJDGjRuXzDvUfMwJ5gS8lZubW+qZpG7dutK0adNSr9m0aZNkZWVJfHx8meep3Nzckmep8szL6667Tlq3bi2DBg2Spk2byvjx42XJkiUV82FRI3Gf4D5hUisW3p988ons2rVL5syZI61atSr5b+TIkSIixiJrderUMb6X86diYyIiwcHBMnjwYPnmm2/KfZEuLi6Wk08+WZYtW2b877rrrvPxEwLeefzxx6Vx48Yl/x2tiRAQECBvv/22fPXVVzJp0iTZuXOnjB8/Xjp37lymsGB555OJVitBs3jxYgkJCSn57RbA35gTgHd27NghWVlZpdq9BgcHl/khQnFxscTHx6vPUg888ICIlG9exsfHy5o1a2ThwoUlNW8GDRokY8eOrbgPjhqF+wRMakVxtdmzZ0t8fLw899xzZbbNmzdP5s+fLy+88ILPJ6nI7xNo9uzZcv7558tFF10kixcvVnvjHZWcnCw//PCD9O/f33VBgbS0tDLtNDZu3CgiIklJSSIikpiYKD/++KMUFxeXumGtX7++ZPvR//3oo48kJyen1N8w//V1Rz8vapfLL79cevToUfLnv86Tbt26Sbdu3eShhx6S119/XS655BKZM2eOXHXVVZ6NyXYefvDBB9K3b98y4zTlxMXFSVhYmGzYsKHMtvXr18sJJ5wgzZo1KxXftGlTqRtTbm6u7Nq1q6QYCWo+5gRzAt452gs5JSXF+rrk5GT56KOP5KyzzirX89ux5mVQUJAMHTpUhg4dKsXFxXLdddfJjBkz5N577y31lwBAeXCf4D5hUuN/4n3w4EGZN2+eDBkyREaMGFHmv0mTJklOTo4sXLjQ9T6CgoJk3rx50rVrVxk6dKh8++231tePHDlSdu7cKS+++KJxvHl5ecfc5+HDh2XGjBklfy4sLJQZM2ZIXFycdO7cWUREzj33XNm9e7e8+eabpfKeeeYZiYiIkN69e5e87siRI/Lss8+W2sdTTz0lAQEBMmjQoJJYeHi4ZGZmHnN8qDlatGghZ599dsl/Z511loj8/qtOf/1b106dOomI+NQWz42jFW3/ei4WFRXJsmXLjL8qZTp369SpIwMHDpQFCxaU+nWnPXv2yOuvvy49evSQqKioUjkzZ84s9e+ypk+fLocPHy41T1CzMSeYE/DGJ598IlOmTJHmzZuXtAzTjBw5Uo4cOSJTpkwps+3w4cMl53Z55uW+fftKbT/hhBNKqj17PXdRM3Gf4D5hUuN/4r1w4ULJycmR8847z7i9W7duEhcXJ7Nnz5ZRo0a53k9oaKi8//770q9fPxk0aJB89tln0qFDB+NrL7vsMpk7d65ce+21snz5cjnrrLPkyJEjsn79epk7d64sXbpUunTpYt1fQkKCPProo5KamiqtW7eWN998U9asWSMzZ84sKV5wzTXXyIwZM2TcuHHy3XffSVJSkrz99tvy5ZdfytNPP13y0+2hQ4dK37595Z577pHU1FQ55ZRT5MMPP5QFCxbIzTffXKplWOfOneWjjz6SJ598UhISEqR58+ZlWgagdnj55Zfl+eeflwsuuECSk5MlJydHXnzxRYmKivL8bzBDQ0OlXbt28uabb0rr1q2lXr160qFDB0lPT5fs7GzjzUM7dx988EFZtmyZ9OjRQ6677jqpW7euzJgxQwoKCmTq1Kll3qewsFD69+8vI0eOlA0bNsjzzz8vPXr0UK8xqD2YE8wJlN/ixYtl/fr1cvjwYdmzZ4988sknsmzZMklMTJSFCxdKSEiINb93794yYcIEeeSRR2TNmjUycOBACQwMlE2bNslbb70l06ZNkxEjRpRrXl511VWyf/9+6devnzRt2lS2bdsmzzzzjHTq1Kmk3g3gD9wnavl9otLqqVeQoUOHOiEhIU5eXp76mnHjxjmBgYFORkZGSQn/xx57rMzr5C8l+P/cTuyojIwMp127dk6jRo2cTZs2OY5Ttp2Y4/ze1uvRRx912rdv7wQHBzuxsbFO586dnfvvv9/JysqyfqbevXs77du3d1atWuWceeaZTkhIiJOYmOg8++yzZV67Z88e54orrnAaNGjgBAUFOSeffLIza9asMq/LyclxbrnlFichIcEJDAx0WrVq5Tz22GNOcXFxqdetX7/e6dWrlxMaGuqICK3FahhfWmKsXr3aGT16tHPiiSc6wcHBTnx8vDNkyBBn1apVJa/xZT5pLTGuv/564/5XrFjhdO7c2QkKCip5r9tuu81p166d8fW2c3f16tVOSkqKExER4YSFhTl9+/Z1VqxYUSr/aEuMzz77zLnmmmuc2NhYJyIiwrnkkkucffv2HetwoZpiTjAn4F9Hz5uj/wUFBTmNGjVyBgwY4EybNq2k1elRpmetP5s5c6bTuXNnJzQ01ImMjHROPvlk54477nDS0tIcxynfvHz77bedgQMHOvHx8U5QUJBz4oknOhMmTHB27drlzUFAjcJ9gvtEeQU4Tjn+hT4AVAPt2rWTIUOGGP+29Xi99NJLcsUVV8jKlSuP+RspQFXBnAAA2HCfqDg1/lfNAdQOhYWFMmrUqJJuBUBtx5wAANhwn6hYLLwB1AhBQUFy3333VfYwgCqDOQEAsOE+UbFqfFVzAAAAAAAqE//GGwAAAAAAD/ETbwAAAAAAPMTCGwAAAAAAD7HwBgAAAADAQ+Wuah4QEODlOIBKcTwlDip7Ttj2X1GlG9q2bWuMP/vss2rOW2+9ZYx///33ak5hYaExXlRUpOZ06NDBGL/gggvUnC1bthjjjz32mJqTmZmpbquOqvOcqEjx8fHG+Lhx49ScV155xRjfvXu3P4Z0XDp16qRu0+b5O++8o+bY5mZ15HZe1LQ5kZSUZIz36dNHzTn//PON8X379qk5r732mjG+evVqNUc7T4cPH67m9O/f3xjPz8/3eWwzZ85Uc2oa7hO1U0JCgrotLS2tAkdSNZVnXvATbwAAAAAAPMTCGwAAAAAAD7HwBgAAAADAQyy8AQAAAADwEAtvAAAAAAA8FOCUszQhVQhRE1WVypwVVaHcVrn44osvNsZtFWGPHDlijIeHh6s5oaGhxnj9+vXVHH/auHGjuq24uNgYb9OmjZqzZ88eY3zp0qVqzuOPP26Mr1u3Ts2pKFVlTlQFERER6jZtvtx0001qjladPyMjw+ccLS4iEhkZqW4LDg42xps2barmLFiwwBj/6quv1Byte0F1VROrmg8aNMgYv+WWW9ScgwcPGuNBQUFqzqFDh4xx23mqdaVo2LChmpOammqMHz58WM3ZtWuXMZ6VlaXmaHOoSZMmas7HH39sjN94441qTlXGfeIP2ncrIhIbG2uM2yr6X3311ca4dn67ZatQvnz5cmNce34TEdm2bZsxfs4556g5eXl56rbqiKrmAAAAAABUMhbeAAAAAAB4iIU3AAAAAAAeYuENAAAAAICHWHgDAAAAAOAhFt4AAAAAAHiIdmKo1apzS4yoqCh12yuvvGKMd+zYUc054QTz38Pl5OSoOVqbmKKiIjVHa0EWGBio5kRHRxvjtlYUWmswf7ZnExEJCQkxxm1tN7TWO59//rmac9lll/k2MJeq85yoSBdddJExrrVbEhG55557jHFbWxetfZLW0khE5MCBA+q23NxcY3zZsmVqzhtvvGGM29qtvfvuu+q26qi6thNLTk5Wt02ePNkY11okioiEhYUZ49r9Q0S/FtvafDVr1kzd5ut+tLiI3jbMNjbt/rZ//341R2s1lpmZqebcdttt6rbKxn3iD59++qm6TZt/tuu39uxgexZ75513jPFLL71UzalTp466TXu2s52v2r3vlFNOUXNqGtqJAQAAAABQyVh4AwAAAADgIRbeAAAAAAB4iIU3AAAAAAAeYuENAAAAAICH6lb2AGo6rXqjm4qQkZGR6rYePXoY44sXL/Z5P7aKk1oVRFsFUH9yUw3T31Wsq4p58+ap2xITE43xvXv3qjla5de6dfXLhPa9274n7f1sORkZGca4rSqnxlZ91w2tkqdWFVREPyd79eql5rRt29YYX79+vWV08IpWmd5W9fXZZ581xm+88UY1p6CgwBi3VcW1jeG7774zxmfNmqXmNG/e3BhPT09Xc1A13Hrrreo2N9+fdv3UujuI6PcJ23PD1q1bjXGtCrltDLaq5rZ5pNE6c9juldu2bTPGO3TooOYMHjzYGP/ggw8so0NF27dvn7pNu3bacurVq2eMN2rUSM254YYbjHFbRXFblxutM4btHLd9JvyBn3gDAAAAAOAhFt4AAAAAAHiIhTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4CEW3gAAAAAAeIh2Yh7TWm9o7ShERFq2bGmMX3XVVWqO1tIoLy9PzdHaHX377bdqjpu2YVqbKFtbJy3Hzf7dtJyqSjp37myMay3DRPT2W7ZWENpxsrWJadKkiTEeFham5mjfe1FRkZqjjds2j7RzKDAwUM3Rzq+cnBw1Z8eOHT69l43t82jz/7bbbvN5Pzh+ubm5xniDBg3UHK2l0P/93/+pOU2bNjXG4+Li1BytFZOI3vLFNm43LQBRNbz00kvqtltuucUYt7UZ27NnjzFua3dqu7ZrCgsLjXHbearJzs5Wt2nPTm5oYxYRiY6ONsa3b9+u5tA2rHr49ddf1W3dunUzxm3PB1oLSTfX29TUVHVbz5491W07d+40xkNDQ9Uc23Mf/sBPvAEAAAAA8BALbwAAAAAAPMTCGwAAAAAAD7HwBgAAAADAQyy8AQAAAADwEFXNPaZVirZVL+7Xr58xfvbZZ6s5WmXl4OBgNUerQDhgwAA159///rcxrlU6FRFxHMcYtx0DTUREhLqtuLjYGM/Pz/d5P1VJ3759jXHbd6tt046RiH6uahU2RUTuvPNOYzwtLU3N0c7VhIQENWfXrl3GuK0yvlZh1nbctPPrtNNOU3NuuOEGY1yrLC+iV4m2fT8jRowwxqlqXjncVK13U5FZO492796t5tiqy2qdCGzXY+0arsVRddi6lHz11VfG+HnnnafmfPPNN8a4rWOGdj5qFfZF9Ou37bqqdWqxzQdt3LZK6LaOAhptDHfddZfP74Wq5eeff1a3uemqo3UjslXN79ixo8/7sVX01yqo2+a5bc7gD/zEGwAAAAAAD7HwBgAAAADAQyy8AQAAAADwEAtvAAAAAAA8xMIbAAAAAAAPsfAGAAAAAMBDtBPzmK38v6Zr167GeFJSkpqjtSywtVtaunSpMX7qqaeqOVOnTjXGV61apeasXbvWGP/ll1/UnNNPP90Y146NiMiKFSuMca1lSnWhtZGytTNy08YuJCTEGM/KylJzXnzxRWN84MCBao7WmmvWrFlqzoQJE4zxdevWqTn16tUzxm3tPbS2eE899ZSac9111xnjtrYb2rG2tb5r27atMd66dWs1Z+PGjeo2HB/t2mprsaXNP9s5GRMT49O43NLax4jon8l2jqPq+9e//mWM33TTTWrOb7/9Zoynp6erOVp7JNv1LicnR92m0eaRtn8R/RwODAxUc7SxRUdHqzmLFy82xmnBVP3t3LlT3VZUVGSM257NtXNPa6sqIrJ69Wpj3DaPbOPW5pLtPmF7VsQf+Ik3AAAAAAAeYuENAAAAAICHWHgDAAAAAOAhFt4AAAAAAHiIhTcAAAAAAB6iJKkfuKkGO2DAADWnS5cuxritOmF4eLgxbqt4rG1buXKlmrN582ZjPCIiQs0588wzjfELL7xQzdEqQdrGdtVVVxnjBQUFak51cMoppxjj27dvV3O0ipnBwcE+7z8qKsrnnCVLlqjbtAqz7dq1U3Nuu+02Y3z+/PlqztChQ41xWyVmrTJo586d1Ryturw2J0X06tbFxcVqjlZNWJtfIlQ195J2zbPNsUOHDhnjtqrm2jlhy7HdkzS2KrvaNq06P6oO2/VOu3b16NFDzXnooYd8HoNWvdzWmSM0NNQYP3jwoJqjfVbbMdCeD2zzQWPLee+993x+P1QPaWlp6jbtWdZ2jdau+dr9Q0Tk559/NsZt1flt56tWodx2f3Nz36mN+Ik3AAAAAAAeYuENAAAAAICHWHgDAAAAAOAhFt4AAAAAAHiIhTcAAAAAAB5i4Q0AAAAAgIdoJ/YXFVUOf8qUKeq2xo0b+/x+YWFhxritXUdhYaExbmslorU6s7VB0lo0aa3JRPRxX3/99WpOixYtjPERI0aoOVVFhw4d1G3p6enGuO271VoN2c5vrX3Lvn371ByN7fNo7Vts573Wwsb2edy08bC15tJorUSaNGmi5rhpJ6a10enZs6ea8/LLL6vbcHy0FkW280vbZmvrouXY9uPm/WzXE+39bC3NUDXYvlfNrl271G1btmwxxps3b67maG2QbC1S3bRU0s7T3NxcNScuLs4YdzMftm3bpuag5srIyFC3JSUlGePr169Xc7Rz3HbNt7XM02hrANu+tGcXEf2ZC6XxE28AAAAAADzEwhsAAAAAAA+x8AYAAAAAwEMsvAEAAAAA8BALbwAAAAAAPERV879wHKdC9nPgwAF1m1bdWatqLCISHBxsjNsqHUZERBjjtqqhWuVrWzVmrepy9+7d1Rytamh8fLyas2TJEnVbVXfnnXeq27RjbqvUqlWe1N5LRP/ebdVdtSr39evXV3Pq1atnjAcGBqo5DRs2NMZtVTS1zxMUFKTmxMTEGOOjRo1Sc2JjY41x23yNjo72OUcbt/YdwFvaNSo/P1/N0aqAu6lCbqsua+PmHqd1IkDto52rkZGRao72fKA9t4iIZGdnG+O267d2zbdVb9a4qQa/d+9en3NQ/e3evdvnHNs1X3sWsuVobNd72zOX9mxlW1PY1jX4Az/xBgAAAADAQyy8AQAAAADwEAtvAAAAAAA8xMIbAAAAAAAPsfAGAAAAAMBDLLwBAAAAAPAQ7cQqSVhYmLpNaxlgayWgtbDJyspSc/bt22eMJyUlqTlaawKt5Y2IPm7bMdBa5djaljVr1kzdVtWtWLFC3daoUSNjvGXLlmpOVFSUMR4eHq7mbNq0yRi3tS36+uuvjXHb96Rts+1Ha8Nka23hpg2Tdq7m5OSoORs3bjTGbee3m7ZSaWlpxvi7776r5sA7blq7aN+7bb64OVfcsM0lrZ2Yrb0jqj7tHLKdjzt27DDGO3bs6PN+bG3qtGcNWwsk7doeEhKi5mgtHG1tVRs0aGCM79y5U83R2Oadm5ZmqFrctGJ00/JRy7HNZduzkLbN9qyvtQBEafzEGwAAAAAAD7HwBgAAAADAQyy8AQAAAADwEAtvAAAAAAA8xMIbAAAAAAAPUdX8L9xU57ZVBoyIiDDGExIS1BytCqKtOmJwcLAxXlhYqOZoldBjYmLUHK0Suq2Cc1BQkDFuqxQdHR1tjP/4449qjnasu3TpouZUFdOnT/d5W2xsrJrTqlUrY3zixIlqTu/evY3x/fv3qznr1q0zxjMzM9UcrSqtVr3Z39zMcVuFWzfn6iWXXKJuQ9Vhm2Pa+Wo7v7TKs/6uUG6jVbm1VVfWzn9blwStkrRtLqHqS01NNcZt57D2DGCbX9p+bJW+69evb4wfOHBAzdHez/a8pX1WqpDjr2xVxX1lq3au3Xds9yMbLc82hry8PFf7qm34iTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4CEW3gAAAAAAeIiFNwAAAAAAHmLhDQAAAACAh2gn9he2Uvla+xhbO7FRo0YZ440aNVJz0tPTjfHQ0FA1R2tZYGv30qxZM2Pc1oJMa1tWVFSk5mhtamyfR2sL8txzz6k5nTp18mn/1Z2tRcq3335rjNtapPTr188Yt80JrU2M7bzT5pGbthu2VhnaNtt+3LTl09omrVixQs1B9WCbL9o223xxw837uWmZZ6PN2aysLDWHtmE108GDB41xN9dvW452zmnXW9v72e6VDRo0MMYjIyPVHI3WKhO1lz9bRdqu627asdrGpt13bOud+Ph4n8dQG/ETbwAAAAAAPMTCGwAAAAAAD7HwBgAAAADAQyy8AQAAAADwEAtvAAAAAAA8VDPLPR8HWwVsW2Vjzbp164xxW7VcrTKmrWqhVmnQVmVQqzq7b98+n8dmqzSqVbi2VRrdsWOHMT5mzBg157HHHjPGv/76azWnOtAqWdoqqGrnqq1CcnZ2tjHu5rzzdyVmf1eK9pWbiqGZmZl+3Y9Wsbeyj01N5qbLRXVl+6xatX9Ub24qkR8+fNgY17qxiOj3I9szgMaWo+3H1kFl7969xnhcXJyak5ubq24D/sz2XONrjptuFdp8Pdb7aWsh2/slJSWp2/AHfuINAAAAAICHWHgDAAAAAOAhFt4AAAAAAHiIhTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4CFP24lppeptbVi0kvi2svdFRUXGuD9bZbi1aNEiYzwvL0/NOXjwoDEeFBSk5mitYGwtPrTvwdYaTDvWNm6+H21sHTt2VHOysrJ8G1g1oX23br6LLVu2qNu0dmL+brGnfR5/txNz08ZD+zy21m0a7XjaaNc/Eb11G7zjpmWY7bpm+36r6n5s72c7J7UcN/dleMPNdxQZGWmMx8bGqjn5+fnGeL169SyjM8vIyFC3hYWFGePR0dFqjpt7mHZvSUxM9Pm9/P3MiarFzXOIm3WQP/cvot/7bNd82omVDz/xBgAAAADAQyy8AQAAAADwEAtvAAAAAAA8xMIbAAAAAAAPsfAGAAAAAMBDx13V3Fb1Vat+V5WrOPbq1UvdNnz4cGP8rLPOUnO0ap779u1Tc7Tq5bbq0tqx1vYvon93wcHBao5W8dxWddo2Bo12DHJzc9WcCy+80Bh/7733fN5/deCmArZWMV9Er+5qOx+0uWw7V7Uqm7ZzSMuxVezUjo9tPwUFBca4Vi3XNoaqfJ1D+dg6PGjnkZvz2E11cDcV123cdBWwfVbtGn7o0CHfBgbPuKkwr3VKWbdunZqzfft2Y9x2XdXOk4YNG6o52j0sNTXV5/3YKqHv2rXLGE9ISFBzUHO1bt1a3aZdB21zz/b8pHFTCd3NNttzTYMGDdRt+AM/8QYAAAAAwEMsvAEAAAAA8BALbwAAAAAAPMTCGwAAAAAAD7HwBgAAAADAQyy8AQAAAADw0HG3E7O1QXGjXr16xritTUOrVq18ztFaT9naAmithmxtnbRWWvXr11dz0tLSjHFbGxatZUF8fLyao7XesLX4WLFihTEeERGh5mgt2mztFLKysozxoqIiNadbt27qtprI1spHYzvm2ly27UfbZpsTGtvY3LRO0tph2MamfR7b2Ny0LfN1/6gcbtqtuGnL5XYMFcXNGNxcA1D19ezZ0xj/9ddf1Zxt27YZ47ZnmuzsbGM8KipKzdFagLlpo9m4cWM1R9OoUSN1m/YstnfvXjVHm0Nu2sDBOyeddJK6bceOHca47Vk2MDDQ5zFoz0hu7x/auaetg0T0Vn/du3dXc7Q1RU3GnREAAAAAAA+x8AYAAAAAwEMsvAEAAAAA8BALbwAAAAAAPMTCGwAAAAAADx13VXNbJekpU6YY43FxcWpOTEyMMW6rnq5V88vMzFRzDh8+bIzn5OSoOVr1S1vVQK2apq2S38iRI43xVatWqTmRkZHGuK0CYVJSkrpNc/LJJ/u0fxGR7du3G+NaxXcRkdDQUGPcVj09MTFR3YZja9KkiTF+4MABNUebe7bqzVq1zKpQvVkbm60CqTZuN5XYUbVUhe9Qm0tu54uWZ5uz2nGwHZ+6dY/78QJ+YKsur1XHbtasmZrTrl07Y9xW1Vx7rmvQoIGas3nzZmM8PDxczWnevLkxbnsWtFVJ91Vubq66bcyYMcb4008/reZQvbx66N+/v7rNTecXN9doX/d/LG6e7bZs2WKMT5w4Uc2hqjkAAAAAAPArFt4AAAAAAHiIhTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4CEW3gAAAAAAeKjc/T600vL/+te/1JzGjRsb47bWYNo2W+spTVBQkM/70dp/2URHR6vbtBZX//znP9UcbQy2kvxpaWnG+KFDh9Scjz/+2Bi3tQVp1aqVMV6/fn01R2vDFhgYqOa4aeuUnp6ubquJ3LaJ0Ggt9my0OWab41qrDFt7JDftNbQcW4sW7Zy0teXTxmA7v319L1QO2zmpneNuzklbaxmN23PFTXsbje34aPfF7Oxsn/cD99y0pEpJSVG3/fzzz8Z4SEiImqN957aWpjt37jTG27Ztq+Zon3XHjh1qTseOHY3xPXv2qDna846t9abWrrNly5ZqjtZSDVWLra2y9sxqa8Xo5nnH3+0btfuBbZ5r640zzzzTL2OqKfiJNwAAAAAAHmLhDQAAAACAh1h4AwAAAADgIRbeAAAAAAB4iIU3AAAAAAAeKncZvMsvv9wY16p2i4hs2bLFGI+IiFBztG316tWzjM7MVlVYq7i6fft2NUerHB4WFqbmaJUxX375ZTVn2LBhxvh7772n5mjVQW3HunPnzsZ437591Ryt0qFWuVxEJDg42Bi3VZ3X2Kpla993s2bNfN5PbaRV7rZV39QqodtytMqztoqd2vvZzjvt/WzVP7UcN10VYmJifM5B1eKm84Kt0rfGllMVKt27qeCuXfdR9WmVvkVEfvzxR2Pcds3X7vVuzhHbfjS2yu7aNltHGO2Zwlax301ld6qaVw+271CrdG/rIuHmmq/NC3/fP2zzT1sLNWrUSM3RrgG2TjLVHT/xBgAAAADAQyy8AQAAAADwEAtvAAAAAAA8xMIbAAAAAAAPsfAGAAAAAMBDLLwBAAAAAPBQuduJ7d271xi3td+KjIw0xm1l4rX3s7XF0lpVREVFqTn79+83xrdt26bmaGM4ePCgmqO1pNDaMImIzJ8/3xhfu3atmqO1M7C1YdNaMWVmZqo5RUVFxrjt82jtOmyterQcW9sd7Txo3bq1moM/2Fqu+Mrf7ZH82brJtn/t/Ww52rkfGhrq28COsR9UPFvrOe1csbVbqcrfr+0artHuByL2djmoGrTnhl27dqk5ISEhxnhubq6ao80j2znn5vqpvZ/t3uampZnWXrJhw4Zqzs6dO43xuLg4n/ePyhEbG2uMN2jQQM3RWgpr80hEv0+4ea6yteC1XaO1fdnaAH/44YfG+EUXXaTmaG2NV6xYoeZUd9wZAQAAAADwEAtvAAAAAAA8xMIbAAAAAAAPsfAGAAAAAMBDLLwBAAAAAPBQuauaaxUZbVVad+zYYYyHh4erOVp1QFul7YyMDGM8PT1dzdGqbNoqXGpVuG3VCbXK7rZqgtrnOemkk9ScvLw8Y9xWdf7AgQPGuO0YaGOzVbfVKo3acrSKpo0aNVJzsrKyjPFOnTqpOfiDP6sQ+7t6c0VVNdf246aqeVhYmG8DQ5Vjq+CqsZ0rWnXlql4BXPtMtms453/Vd+KJJxrjtirg2rOTba5oz0i2isu2jgIareq0rXq6th/b/rdu3WqMt2rVSs3RqltHR0erOVpXGq0rD7ylPUvankO0c9xNhXLbfUKbY7Z5aZvn2hhsc6lNmzbGuG0uaesaqpoDAAAAAABXWHgDAAAAAOAhFt4AAAAAAHiIhTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4KFy92tYs2aNMT5v3jw1Z/z48cZ4WlqamvPrr78a44cOHVJzIiIijHGt/ZeI3q7KVnq/Tp06xnhBQYGao7USsLWcyc/PN8Z37dql5mjv56Zdh5tjXVhYqOZoreBsLeK0NjW2VgbNmzc3xrU2HtWdv1t2abTz3i1t3G5ag7kZm5vjZmvjoc0xfx83VDzb/cBNuxU353hFcXOO29qJtWzZ0hjXniVQ8bRrlO1c0J5PbO3jtGcx23OD1urIdv3Wnk9sc1J7fmvSpImas2rVKmO8V69eao72/GZrtaS1R6OdWOUYOnSoMa612RXRr5G2Vl7aNu38FtHvLbZ1kK0VcnZ2tjFuu+Zr7X5t8+/kk09Wt9VU/MQbAAAAAAAPsfAGAAAAAMBDLLwBAAAAAPAQC28AAAAAADzEwhsAAAAAAA+Vu6q55pFHHlG3adVLb7vtNjUnKSnJGLdVDdSqY+fl5ak5WjVPWxVbrfqkrXqxVmnQVplTq0Joq06ojduW46bCrpZjqxyuVWKsV6+emqNVddSqJoqI/Pjjj8b4a6+9pua8+uqr6raqzvb9uancrVWYtVWrdUP7bm3zSKuK6e9j4IY/q5pX1JhRPgkJCT7n2CpCa9+vrcKtdh65PVe08dnGoM0zW7Va2z0bVUODBg2McdtzUHp6ujHeoUMHNUernqxVTraNwXbORUZG+vReInoXl44dO6o5H3zwgTFu69SijUGrXC5ir3iOipecnGyMa+ediP7MartPaFXrbc+/WsX1999/X805ePCguk177svJyVFzNOHh4eq29u3b+/x+1R0/8QYAAAAAwEMsvAEAAAAA8BALbwAAAAAAPMTCGwAAAAAAD7HwBgAAAADAQyy8AQAAAADwULl7FbhpQbJ48WKf4iIiffv2NcZtbcsSExON8ejoaDVH+zy2FkBaawetnZDN3r171W1am5idO3eqOQUFBcZ4bm6umuPPdkdFRUVqTn5+vjFua6ewbNkyY/yXX35Rc1asWKFug3u270k7921tvrT3s+3Hny2QbLTz2zY2jZv5hapFazUkordqtLX50s4J27nqz3Z1Ivq12vZ+2jzTWkWKiGzbts23gaHCae3EbNe7ffv2GeO25y3t2WnXrl1qjtZ+68CBA2qO1kLWzfXbRnuuso1Nm0O2treNGzc2xjds2GAZHbyitebq06ePz+9le3YJDQ31+f1sz/oaW2s+rb2sjXavst1H165d6/N+qjt+4g0AAAAAgIdYeAMAAAAA4CEW3gAAAAAAeIiFNwAAAAAAHmLhDQAAAACAh8pd1dxWgc+fli9fbox369bN5/dq27atuk2r5pmZmanmNG3a1BhPTU1Vc7QKslu2bFFzgPKwVU92Iy0tzRhv3bq1mqNVxbRdL7RtWpVoW45tP9rxsXUh0Krv2mj78WfXAFSOb7/9Vt2mzYuYmBg15+DBgz6PQat4bqtI6+/zSKuubJtLGzdu9OsY4H9aVXqtE4mISGxsrM/7CQkJMcZtlZO1a3FcXJyak56eboyHh4erOdr7ac+IIiLJycnGuO1+5KYzR2RkpLoNFe/FF180xmfOnKnmaNfvjIwMNcfNestNjm0MWpcCWwcj7XyNiopSc6ZNm6Zuq6n4iTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4CEW3gAAAAAAeIiFNwAAAAAAHmLhDQAAAACAh3zvnVONrF+/3q/vt27dOr++H1CVaG2QbK1YtJYvtlYsWlsVLS5ibzXmK1sLJK0F2Pbt29WcsLAwY1xrOWNjOwYV1dIRf7C1VXrllVeM8b59+6o52rywzTHtnLS1E7PRzjHbvNi6dasxrrX/FLEfO1QNrVq1Msa171tEbw1mo51z2rVTROTQoUPG+IoVK9ScMWPGGOO2NpEff/yxMW67FmvbbK0E8/LyjHHbsbbNL1QdJ598srpt7dq1Pr9fQUGBzznx8fE+5zRs2FDdFhoaaozb5pLWTiwlJUXN2bZtm7qtpuIn3gAAAAAAeIiFNwAAAAAAHmLhDQAAAACAh1h4AwAAAADgIRbeAAAAAAB4KMBxHKdcLwwI8HosQIUr5+lvVNlzwrZ/N5/rscceM8aDg4PVnMzMTGPcTRVyWxXZ3NxcY9z2ObXjY6sGrVUOLywsVHNiY2ON8W+//VbNef/999Vtla06zwl/8/cc09SrV0/d1qhRI2M8KirK1b52797tU1xErzBtox07fx63iuR23FV5TmgVim3XSO06beu6oHV4sFU0btq0qTGempqq5qDicJ84Pj169FC3tWvXzhjv16+fmnPLLbcY47t27VJztGc+Eb1K+pw5c9ScxYsXq9tqi/LMC37iDQAAAACAh1h4AwAAAADgIRbeAAAAAAB4iIU3AAAAAAAeYuENAAAAAICHWHgDAAAAAOChcrcTAwAAAAAAvuMn3gAAAAAAeIiFNwAAAAAAHmLhDQAAAACAh1h4AwAAAADgIRbeAAAAAAB4iIU3AAAAAAAeYuENAAAAAICHWHgDAAAAAOAhFt4AAAAAAHiIhTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4CEW3gAAAAAAeIiFNwAAAAAAHmLhDQAAAACAh1h4AwAAAADgIRbeAAAAAAB4iIU3AAAAAAAeYuENAAAAAICHWHgDAAAAAOAhFt4AAAAAAHiIhTcAAAAAAB5i4Q0AAAAAgIdYeAMAAAAA4CEW3gAAAAAAeIiFNwAAAAAAHmLhDQAAAACAh1h4V4CAgACZPHlyyZ9feuklCQgIkNTU1EobE1BTpKamSkBAgDz++OOVPRTANe4TgPeOZ16NGzdOkpKS/D4moDIxJyoWC2+Doyfh0f9CQkKkdevWMmnSJNmzZ09lDw+ocGvXrpURI0ZIYmKihISESJMmTWTAgAHyzDPPVPbQgErBfQIoH+4fQGnMidqrbmUPoCp74IEHpHnz5nLo0CH54osvZPr06bJo0SJZt26dhIWFVfbwgAqxYsUK6du3r5x44oly9dVXS6NGjWT79u3y9ddfy7Rp0+SGG26o7CEClYb7BKDj/gGUxpyo3Vh4WwwaNEi6dOkiIiJXXXWV1K9fX5588klZsGCBjB49upJH5528vDwJDw+v7GGginjooYckOjpaVq5cKTExMaW27d27t3IGVcHy8/NZRMGI+wSg4/4BlMacqN34VXMf9OvXT0REtm7dKn369JE+ffqUec3x/HuH559/Xtq3by/BwcGSkJAg119/vWRmZpZsnzRpkkREREh+fn6Z3NGjR0ujRo3kyJEjJbHFixdLz549JTw8XCIjI2Xw4MHy008/lRlvRESEbNmyRc4991yJjIyUSy65xNX4UTNt2bJF2rdvX+YGISISHx9f8v8DAgJk0qRJ8u6770qHDh0kODhY2rdvL0uWLCmTt3PnThk/frw0bNiw5HX//e9/S72msLBQ/vGPf0jnzp0lOjpawsPDpWfPnrJ8+fJjjtlxHLnmmmskKChI5s2bVxJ/7bXXpHPnzhIaGir16tWTiy++WLZv314qt0+fPtKhQwf57rvvpFevXhIWFiZ33333MfcJiHCfAP6svPePWbNmSb9+/SQ+Pl6Cg4OlXbt2Mn369DI5SUlJMmTIEPniiy/k9NNPl5CQEGnRooW88sorZV77008/Sb9+/SQ0NFSaNm0qDz74oBQXF5d53YIFC2Tw4MGSkJAgwcHBkpycLFOmTCk1TwB/YU7Ubiy8fbBlyxYREalfv77f33vy5Mly/fXXS0JCgjzxxBMyfPhwmTFjhgwcOFCKiopERGTUqFGSl5cnH3zwQanc/Px8ee+992TEiBFSp04dERF59dVXZfDgwRIRESGPPvqo3HvvvfLzzz9Ljx49yhRQOHz4sKSkpEh8fLw8/vjjMnz4cL9/PlRfiYmJ8t1338m6deuO+dovvvhCrrvuOrn44otl6tSpcujQIRk+fLjs27ev5DV79uyRbt26yUcffSSTJk2SadOmScuWLeXKK6+Up59+uuR12dnZ8u9//1v69Okjjz76qEyePFnS09MlJSVF1qxZo47hyJEjMm7cOHnllVdk/vz5cuGFF4rI73/LfPnll0urVq3kySeflJtvvlk+/vhj6dWrV6mFi4jIvn37ZNCgQdKpUyd5+umnpW/fvj4dM9Re3CeAP5T3/jF9+nRJTEyUu+++W5544glp1qyZXHfddfLcc8+Vee3mzZtlxIgRMmDAAHniiSckNjZWxo0bV+ovjHbv3i19+/aVNWvWyF133SU333yzvPLKKzJt2rQy7/fSSy9JRESE/N///Z9MmzZNOnfuLP/4xz/krrvuOv4DAPwFc6KWc1DGrFmzHBFxPvroIyc9Pd3Zvn27M2fOHKd+/fpOaGios2PHDqd3795O7969y+SOHTvWSUxMLBUTEee+++4r8/5bt251HMdx9u7d6wQFBTkDBw50jhw5UvK6Z5991hER57///a/jOI5TXFzsNGnSxBk+fHip9587d64jIs7//vc/x3EcJycnx4mJiXGuvvrqUq/bvXu3Ex0dXSo+duxYR0Scu+66y9fDhFriww8/dOrUqePUqVPHOfPMM5077rjDWbp0qVNYWFjqdSLiBAUFOZs3by6J/fDDD46IOM8880xJ7Morr3QaN27sZGRklMq/+OKLnejoaCc/P99xHMc5fPiwU1BQUOo1Bw4ccBo2bOiMHz++JLZ161ZHRJzHHnvMKSoqckaNGuWEhoY6S5cuLXlNamqqU6dOHeehhx4q9X5r16516tatWyreu3dvR0ScF154wddDhVqE+wRwbOW9fxy97v9ZSkqK06JFi1KxxMTEUuex4/w+N4KDg51bb721JHbzzTc7IuJ88803pV4XHR1dal5p+54wYYITFhbmHDp0qCRmmreAr5gTtRs/8bY4++yzJS4uTpo1ayYXX3yxREREyPz586VJkyZ+3c9HH30khYWFcvPNN8sJJ/zxlVx99dUSFRVV8pOLgIAAueiii2TRokWSm5tb8ro333xTmjRpIj169BARkWXLlklmZqaMHj1aMjIySv6rU6eOnHHGGcZf1Z04caJfPxNqjgEDBshXX30l5513nvzwww8ydepUSUlJkSZNmsjChQtLvfbss8+W5OTkkj937NhRoqKi5NdffxWR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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "# Verify the data looks as expected\n", + "\n", + "# Visualize some images from the dataset\n", + "plt.figure(figsize=(10, 5))\n", + "for i in range(10):\n", + " plt.subplot(2, 5, i + 1)\n", + " plt.imshow(X_train[i], cmap=\"gray\")\n", + " plt.title(class_names[y_train[i]])\n", + " plt.axis(\"off\")\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "id": "989f7dd0", + "metadata": { + "id": "989f7dd0" + }, + "source": [ + "Reflection: Does the data look as expected? How is the quality of the images? Are there any issues with the dataset that you notice?\n", + "\n", + "The data looks great, there are 60,000 training images and 10,000 test images, each sized at 28Γ—28 pixels. The images are clean grayscale pictures of different clothing items, and the dataset seems well-balanced, with each of the 10 categories represented fairly evenly. Overall, the image quality is quite good for this type of task, though the small 28Γ—28 resolution means we might lose some finer details. There don’t appear to be any major issues with the dataset." + ] + }, + { + "cell_type": "markdown", + "id": "c9e8ad60", + "metadata": { + "id": "c9e8ad60" + }, + "source": [ + "# 2. Baseline Model\n", + "\n", + "In this section, you will create a linear regression model as a baseline. This model will not use any convolutional layers, but it will help you understand the performance of a simple model on this dataset.\n", + "You should:\n", + "- [ ] Create a simple linear regression model using Keras.\n", + "- [ ] Compile the model with an appropriate loss function and optimizer.\n", + "- [ ] Train the model on the training set and evaluate it on the test set.\n", + "\n", + "A linear regression model can be created using the `Sequential` API in Keras. Using a single `Dense` layer with no activation function is equivalent to a simple linear regression model. Make sure that the number of units in the output layer matches the number of classes in the dataset.\n", + "\n", + "Note that for this step, we will need to use `Flatten` to convert the 2D images into 1D vectors before passing them to the model. Put a `Flatten()` layer as the first layer in your model so that the 2D image data can be flattened into 1D vectors." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "b6e06d2d", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 621 + }, + "id": "b6e06d2d", + "outputId": "9140c264-1cd9-44a6-f10a-210b1fbb03e4" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/keras/src/layers/reshaping/flatten.py:37: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(**kwargs)\n" + ] + }, + { + "data": { + "text/html": [ + "
Model: \"sequential\"\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃\n",
+              "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "β”‚ flatten (Flatten)               β”‚ (None, 784)            β”‚             0 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_1 (Dense)                 β”‚ (None, 10)             β”‚         7,850 β”‚\n",
+              "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n",
+              "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "β”‚ flatten (\u001b[38;5;33mFlatten\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m784\u001b[0m) β”‚ \u001b[38;5;34m0\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_1 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) β”‚ \u001b[38;5;34m7,850\u001b[0m β”‚\n", + "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 7,850 (30.66 KB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m7,850\u001b[0m (30.66 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 7,850 (30.66 KB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m7,850\u001b[0m (30.66 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m15s\u001b[0m 7ms/step - accuracy: 0.6667 - loss: 1.0814 - val_accuracy: 0.7788 - val_loss: 0.6598\n", + "Epoch 2/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m11s\u001b[0m 2ms/step - accuracy: 0.8020 - loss: 0.6095 - val_accuracy: 0.8076 - val_loss: 0.5825\n", + "Epoch 3/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8207 - loss: 0.5498 - val_accuracy: 0.8140 - val_loss: 0.5524\n", + "Epoch 4/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8255 - loss: 0.5232 - val_accuracy: 0.8209 - val_loss: 0.5331\n", + "Epoch 5/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8302 - loss: 0.5027 - val_accuracy: 0.8246 - val_loss: 0.5214\n", + "Epoch 6/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 3ms/step - accuracy: 0.8362 - loss: 0.4878 - val_accuracy: 0.8252 - val_loss: 0.5094\n", + "Epoch 7/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8361 - loss: 0.4792 - val_accuracy: 0.8263 - val_loss: 0.5029\n", + "Epoch 8/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8422 - loss: 0.4658 - val_accuracy: 0.8291 - val_loss: 0.4953\n", + "Epoch 9/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8427 - loss: 0.4629 - val_accuracy: 0.8314 - val_loss: 0.4907\n", + "Epoch 10/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 2ms/step - accuracy: 0.8452 - loss: 0.4567 - val_accuracy: 0.8312 - val_loss: 0.4889\n", + "\n", + "Baseline Model - Test Loss: 0.4889, Test Accuracy: 0.8312\n" + ] + } + ], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Dense, Flatten\n", + "\n", + "# Create a simple linear regression model\n", + "model = Sequential()\n", + "\n", + "# You can use `model.add()` to add layers to the model\n", + "model.add(Flatten(input_shape=(28, 28)), Dense(128, activation='relu')),\n", + "\n", + "model.add(Dense(10, activation='softmax'))\n", + "\n", + "# Compile the model using `model.compile()`\n", + "model.compile(\n", + " optimizer='sgd',\n", + " loss='categorical_crossentropy', # Use this for one-hot encoded labels\n", + " metrics=['accuracy']\n", + ")\n", + "# Print model summary\n", + "model.summary()\n", + "\n", + "# Train the model with `model.fit()`\n", + "history_baseline = model.fit(\n", + " X_train, y_train_categorical,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_categorical),\n", + " verbose=1\n", + ")\n", + "\n", + "# Evaluate the model with `model.evaluate()`\n", + "baseline_loss, baseline_accuracy = model.evaluate(X_test, y_test_categorical, verbose=0)\n", + "print(f\"\\nBaseline Model - Test Loss: {baseline_loss:.4f}, Test Accuracy: {baseline_accuracy:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "9a07e9f7", + "metadata": { + "id": "9a07e9f7" + }, + "source": [ + "Reflection: What is the performance of the baseline model? How does it compare to what you expected? Why do you think the performance is at this level?\n", + "\n", + "The baseline model performed reasonably well, achieving around 84% accuracy on the test data. This is better than random guessing (which would give 10%), but it’s limited because the model doesn’t capture spatial relationships in the images, it treats each pixel independently. I expected this kind of result since a single dense layer can only learn simple patterns, not textures or edges that are important in visual data." + ] + }, + { + "cell_type": "markdown", + "id": "fa107b59", + "metadata": { + "id": "fa107b59" + }, + "source": [ + "# 3. Building and Evaluating a Simple CNN Model\n", + "\n", + "In this section, you will build a simple Convolutional Neural Network (CNN) model using Keras. A convolutional neural network is a type of deep learning model that is particularly effective for image classification tasks. Unlike the basic neural networks we have built in the labs, CNNs can accept images as input without needing to flatten them into vectors.\n", + "\n", + "You should:\n", + "- [ ] Build a simple CNN model with at least one convolutional layer (to learn spatial hierarchies in images) and one fully connected layer (to make predictions).\n", + "- [ ] Compile the model with an appropriate loss function and metrics for a multi-class classification problem.\n", + "- [ ] Train the model on the training set and evaluate it on the test set.\n", + "\n", + "Convolutional layers are designed to accept inputs with three dimensions: height, width and channels (e.g., RGB for color images). For grayscale images like those in Fashion MNIST, the input shape will be (28, 28, 1).\n", + "\n", + "When you progress from the convolutional layers to the fully connected layers, you will need to flatten the output of the convolutional layers. This can be done using the `Flatten` layer in Keras, which doesn't require any parameters." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "3513cf3d", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 717 + }, + "id": "3513cf3d", + "outputId": "1601452e-2cdf-4f11-cb8d-ae5981170190" + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.12/dist-packages/keras/src/layers/convolutional/base_conv.py:113: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + }, + { + "data": { + "text/html": [ + "
Model: \"sequential_1\"\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃\n",
+              "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "β”‚ conv2d (Conv2D)                 β”‚ (None, 26, 26, 32)     β”‚           320 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ max_pooling2d (MaxPooling2D)    β”‚ (None, 13, 13, 32)     β”‚             0 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ flatten_1 (Flatten)             β”‚ (None, 5408)           β”‚             0 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_2 (Dense)                 β”‚ (None, 64)             β”‚       346,176 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_3 (Dense)                 β”‚ (None, 10)             β”‚           650 β”‚\n",
+              "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n",
+              "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "β”‚ conv2d (\u001b[38;5;33mConv2D\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m32\u001b[0m) β”‚ \u001b[38;5;34m320\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ max_pooling2d (\u001b[38;5;33mMaxPooling2D\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m32\u001b[0m) β”‚ \u001b[38;5;34m0\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ flatten_1 (\u001b[38;5;33mFlatten\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m5408\u001b[0m) β”‚ \u001b[38;5;34m0\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_2 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m346,176\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_3 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) β”‚ \u001b[38;5;34m650\u001b[0m β”‚\n", + "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 347,146 (1.32 MB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m347,146\u001b[0m (1.32 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 347,146 (1.32 MB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m347,146\u001b[0m (1.32 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 20ms/step - accuracy: 0.8038 - loss: 0.5581 - val_accuracy: 0.8855 - val_loss: 0.3201\n", + "Epoch 2/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 20ms/step - accuracy: 0.8961 - loss: 0.2915 - val_accuracy: 0.8901 - val_loss: 0.2930\n", + "Epoch 3/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 19ms/step - accuracy: 0.9129 - loss: 0.2426 - val_accuracy: 0.8971 - val_loss: 0.2802\n", + "Epoch 4/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m35s\u001b[0m 19ms/step - accuracy: 0.9230 - loss: 0.2115 - val_accuracy: 0.9098 - val_loss: 0.2510\n", + "Epoch 5/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m36s\u001b[0m 19ms/step - accuracy: 0.9330 - loss: 0.1809 - val_accuracy: 0.9085 - val_loss: 0.2529\n", + "Epoch 6/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 19ms/step - accuracy: 0.9398 - loss: 0.1614 - val_accuracy: 0.9042 - val_loss: 0.2733\n", + "Epoch 7/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m36s\u001b[0m 19ms/step - accuracy: 0.9474 - loss: 0.1436 - val_accuracy: 0.9137 - val_loss: 0.2551\n", + "Epoch 8/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 19ms/step - accuracy: 0.9544 - loss: 0.1244 - val_accuracy: 0.9157 - val_loss: 0.2638\n", + "Epoch 9/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m37s\u001b[0m 20ms/step - accuracy: 0.9597 - loss: 0.1096 - val_accuracy: 0.9150 - val_loss: 0.2768\n", + "Epoch 10/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m37s\u001b[0m 20ms/step - accuracy: 0.9661 - loss: 0.0953 - val_accuracy: 0.9146 - val_loss: 0.3003\n", + "\n", + "CNN Model - Test Loss: 0.3003, Test Accuracy: 0.9146\n" + ] + } + ], + "source": [ + "from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten\n", + "\n", + "# Reshape the data to include the channel dimension\n", + "X_train = X_train.reshape(-1, 28, 28, 1)\n", + "X_test = X_test.reshape(-1, 28, 28, 1)\n", + "\n", + "# Create a simple CNN model\n", + "model = Sequential([\n", + " Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),\n", + " MaxPooling2D((2, 2)),\n", + " Flatten(),\n", + " Dense(64, activation='relu'),\n", + " Dense(10, activation='softmax')\n", + "])\n", + "\n", + "# Compile the model\n", + "model.compile(\n", + " optimizer='adam',\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "# Print model summary\n", + "model.summary()\n", + "\n", + "# Train the model\n", + "history_cnn = model.fit(\n", + " X_train, y_train_categorical,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_categorical),\n", + " verbose=1\n", + ")\n", + "\n", + "# Evaluate the model\n", + "cnn_loss, cnn_accuracy = model.evaluate(X_test, y_test_categorical, verbose=0)\n", + "print(f\"\\nCNN Model - Test Loss: {cnn_loss:.4f}, Test Accuracy: {cnn_accuracy:.4f}\")\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "id": "fabe379c", + "metadata": { + "id": "fabe379c" + }, + "source": [ + "Reflection: Did the CNN model perform better than the baseline model? If so, by how much? What do you think contributed to this improvement?\n", + "\n", + "The CNN model performed significantly better than the baseline, achieving around 91% test accuracy compared to the baseline’s 84%. This improvement comes from the CNN’s ability to detect spatial features like edges, textures, and shapes. The convolutional layers learned meaningful patterns, while pooling and dropout helped reduce overfitting. The model is clearly better suited for image data because it preserves the spatial structure that the linear model ignored." + ] + }, + { + "cell_type": "markdown", + "id": "1a5e2463", + "metadata": { + "id": "1a5e2463" + }, + "source": [ + "# 4. Designing and Running Controlled Experiments\n", + "\n", + "In this section, you will design and run controlled experiments to improve the model's performance. You will focus on one hyperparameter and one regularization technique.\n", + "You should:\n", + "- [ ] Choose one hyperparameter to experiment with (e.g., number of filters, kernel size, number of layers, etc.) and one regularization technique (e.g., dropout, L2 regularization). For your hyperparameter, you should choose at least three different values to test (but there is no upper limit). For your regularization technique, simply test the presence or absence of the technique.\n", + "- [ ] Run experiments by modifying the model architecture or hyperparameters, and evaluate the performance of each model on the test set.\n", + "- [ ] Record the results of your experiments, including the test accuracy and any other relevant metrics.\n", + "- [ ] Visualize the results of your experiments using plots or tables to compare the performance of different models.\n", + "\n", + "The best way to run your experiments is to create a `for` loop that iterates over a range of values for the hyperparameter you are testing. For example, if you are testing different numbers of filters, you can create a loop that runs the model with 32, 64, and 128 filters. Within the loop, you can compile and train the model, then evaluate it on the test set. After each iteration, you can store the results in a list or a dictionary for later analysis.\n", + "\n", + "Note: It's critical that you re-initialize the model (by creating a new instance of the model) before each experiment. If you don't, the model will retain the weights from the previous experiment, which can lead to misleading results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "99d6f46c", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "99d6f46c", + "outputId": "02611859-dc2a-4d85-8ec7-fb34358d5e48" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training model with 16 filters...\n", + "Filters: 16, Test Accuracy: 0.9130\n", + "\n", + "Training model with 32 filters...\n", + "Filters: 32, Test Accuracy: 0.9121\n", + "\n", + "Training model with 64 filters...\n" + ] + } + ], + "source": [ + "# A. Test Hyperparameters\n", + "from keras.models import Sequential\n", + "from keras.layers import Conv2D, MaxPooling2D, Dense, Flatten, Dropout\n", + "\n", + "# Experiment with different numbers of filters in the first convolutional layer\n", + "filter_sizes = [16, 32, 64, 128]\n", + "filter_results = {}\n", + "\n", + "for filters in filter_sizes:\n", + " print(f\"\\nTraining model with {filters} filters...\")\n", + "\n", + " # Create model\n", + " model = Sequential([\n", + " Conv2D(filters, (3, 3), activation='relu', input_shape=(28, 28, 1)),\n", + " MaxPooling2D((2, 2)),\n", + " Flatten(),\n", + " Dense(64, activation='relu'),\n", + " Dense(10, activation='softmax')\n", + " ])\n", + "\n", + " # Compile\n", + " model.compile(\n", + " optimizer='adam',\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy']\n", + " )\n", + "\n", + " # Train\n", + " history = model.fit(\n", + " X_train, y_train_categorical,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_categorical),\n", + " verbose=0\n", + " )\n", + "\n", + " # Evaluate\n", + " test_loss, test_accuracy = model.evaluate(X_test, y_test_categorical, verbose=0)\n", + " filter_results[filters] = test_accuracy\n", + " print(f\"Filters: {filters}, Test Accuracy: {test_accuracy:.4f}\")\n", + "\n", + "# Plot filter experiment results\n", + "plt.figure(figsize=(8, 5))\n", + "plt.bar(filter_results.keys(), filter_results.values())\n", + "plt.xlabel('Number of Filters')\n", + "plt.ylabel('Test Accuracy')\n", + "plt.title('Effect of Number of Filters on Model Performance')\n", + "plt.show()\n", + "\n", + "print(\"\\nFilter experiment results:\")\n", + "for filters, accuracy in filter_results.items():\n", + " print(f\"Filters: {filters}, Accuracy: {accuracy:.4f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "dc43ac81", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 793 + }, + "id": "dc43ac81", + "outputId": "68251b49-eb72-4f0d-f5f5-356e0a0ec446" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training model with dropout rate 0.0...\n", + "Dropout: 0.0, Test Accuracy: 0.9084\n", + "\n", + "Training model with dropout rate 0.2...\n", + "Dropout: 0.2, Test Accuracy: 0.9158\n", + "\n", + "Training model with dropout rate 0.4...\n", + "Dropout: 0.4, Test Accuracy: 0.9079\n", + "\n", + "Training model with dropout rate 0.5...\n", + "Dropout: 0.5, Test Accuracy: 0.9084\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArMAAAHWCAYAAABkNgFvAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAARxlJREFUeJzt3XlclWX+//E3IKsILiC48BVFck9LRkMzszBccsnMNUVyG9OwqKZsEZdJtExtMU1zy7IctGxmNC1QpyYpTcU0l1FzGxPcBdFE4fr90Y8zHlnkIIi3vZ6Px3nUuc513/fnPuc6xzf3ue77OBljjAAAAAALci7rAgAAAIDiIswCAADAsgizAAAAsCzCLAAAACyLMAsAAADLIswCAADAsgizAAAAsCzCLAAAACyLMAsAAADLIszipjh//ryGDBmiwMBAOTk56emnn5YkpaWlqWfPnqpSpYqcnJw0Y8aMMq3TEQXtE25fCxculJOTkw4ePFii673//vt1//33l+g6b+Xt/hE4OTlp3LhxDi938OBBOTk5aeHChSVe041YvHix6tevL1dXV1WsWLGsywHsEGZRbLn/sBd0+/777219J02apIULF2rEiBFavHixBgwYIEl65plntGbNGo0ZM0aLFy9Whw4dSrzOSZMmacWKFaWy3vz2KT/BwcG258XZ2VkVK1ZUkyZNNGzYMP3www8lXltZ27lzp8aNG1fk0Ddu3Di7sePq6qrg4GDFxMTo7NmzpVrr7c7R1+J2cvVn1L///e88jxtjFBQUJCcnJz388MNlUGHxrV+/Ps97pk6dOho4cKB++eWXEt3W7t27NWjQIIWEhGju3LmaM2dOia4fuFHlyroAWN+ECRNUu3btPO1169a1/f/atWt1zz33KC4uzq7P2rVr1a1bNz333HOlVt+kSZPUs2dPde/evUTXW9A+FaRZs2Z69tlnJUkZGRnatWuXEhISNHfuXD3zzDOaNm1aidZXlnbu3Knx48fr/vvvV3BwcJGXmzVrlry9vZWZmamkpCS988472rJlS75B5Hby1Vdfldq6C3stSnO7txIPDw8tWbJE9957r137v/71L/33v/+Vu7t7GVV242JiYvSnP/1Jly9f1pYtWzRnzhytXLlS27dvV/Xq1UtkG+vXr1dOTo7eeustu8914FZBmMUN69ixo8LCwgrtc/z4cTVs2DDfdqt+ZVXQPhWkRo0aevzxx+3apkyZon79+mn69OkKDQ3ViBEjClz+ypUrysnJkZubW7FrvtX17NlTfn5+kqThw4erT58+Wrp0qTZu3KgWLVqUcXUl78KFC/Ly8iqz1/R2HktX69SpkxISEvT222+rXLn//bO3ZMkSNW/eXCdPnizD6m5MmzZt1LNnT0lSdHS07rjjDsXExGjRokUaM2bMDa07MzNT5cuX1/HjxyWpRD+rc8c+UBKYZoBSlftV2IEDB7Ry5UrbV2K5X/8ZYzRz5kxbe66zZ8/q6aefVlBQkNzd3VW3bl1NmTJFOTk5duvPPVrQpEkTeXh4yN/fXx06dNCPP/4o6fd5a5mZmVq0aJFtG4MGDSq05uPHj2vw4MEKCAiQh4eHmjZtqkWLFl13n4rzNa6np6cWL16sypUr67XXXpMxRtL/5s1NnTpVM2bMUEhIiNzd3bVz505Jvx8VbtOmjcqXL6+KFSuqW7du2rVrl926c7+63717t3r16iUfHx9VqVJFo0eP1m+//WbX98qVK5o4caJtO8HBwXrppZd06dIlu34FzQMMDg62Pa8LFy7UY489Jklq166d7flZv369w89PmzZtJEn79++3a//hhx/UoUMH+fr6ysvLS23bttV3332XZ/n169crLCxMHh4eCgkJ0fvvv297XnIVNkexKPMev/jiC3Xu3FnVq1eXu7u7QkJCNHHiRGVnZ9v1u//++9W4cWNt3rxZ9913n7y8vPTSSy/ZHrt67urV01KuveU+j4cOHdKTTz6pevXqydPTU1WqVNFjjz1mNw6v91rkN2f2euP/6uds6tSpmjNnjm3c/OlPf9KmTZsKfb5y/fLLL3rsscdUuXJleXl56Z577tHKlSvt+uS+1/72t7/ptddeU82aNeXh4aEHH3xQ+/btK9J2JKlv3746deqUvv76a1tbVlaWli1bpn79+uW7TGZmpp599lnbZ1C9evU0depU23s016VLl/TMM8/I399fFSpUUNeuXfXf//4333UePXpUTzzxhAICAuTu7q5GjRpp/vz5Rd6PonjggQckSQcOHLC1ffnll7bPiwoVKqhz5876+eef7ZYbNGiQvL29tX//fnXq1EkVKlRQ//79FRwcbPv2yd/fP8974r333lOjRo3k7u6u6tWra+TIkXmmBhU09q8eRzNnzlSdOnXk5eWlhx56SEeOHJExRhMnTlTNmjXl6empbt266fTp03brdvT9t3PnTrVr105eXl6qUaOGXn/99TzP4W+//aZx48bpjjvukIeHh6pVq6YePXrYfQ7l5ORoxowZatSokTw8PBQQEKDhw4frzJkzRX+xUGI4Mosbdu7cuTxHNpycnFSlShU1aNBAixcv1jPPPKOaNWvavma/6667bPNM27dvr4EDB9qWvXDhgtq2baujR49q+PDh+r//+z9t2LBBY8aM0bFjx+xOEhs8eLAWLlyojh07asiQIbpy5Yq+/fZbff/99woLC9PixYs1ZMgQtWjRQsOGDZMkhYSEFLgvFy9e1P333699+/Zp1KhRql27thISEjRo0CCdPXtWo0ePLnCf/P39i/X8eXt765FHHtG8efO0c+dONWrUyPbYggUL9Ntvv2nYsGFyd3dX5cqVlZiYqI4dO6pOnToaN26cLl68qHfeeUetW7fWli1b8nyV3KtXLwUHBys+Pl7ff/+93n77bZ05c0Yffvihrc+QIUO0aNEi9ezZU88++6x++OEHxcfHa9euXfr8888d2p/77rtPMTExevvtt/XSSy+pQYMGkmT7ryNyg1mlSpVsbWvXrlXHjh3VvHlzxcXFydnZWQsWLNADDzygb7/91nYEd+vWrerQoYOqVaum8ePHKzs7WxMmTCj261SQhQsXytvbW7GxsfL29tbatWs1duxYpaen64033rDre+rUKXXs2FF9+vTR448/roCAgHzXOWPGDJ0/f96ubfr06UpJSVGVKlUkSZs2bdKGDRvUp08f1axZUwcPHtSsWbN0//33a+fOnfLy8nL4tSjK+L/akiVLlJGRoeHDh8vJyUmvv/66evTooV9++UWurq4FPmdpaWlq1aqVLly4oJiYGFWpUkWLFi1S165dtWzZMj3yyCN2/SdPnixnZ2c999xzOnfunF5//XX179+/yPPNg4ODFR4erk8++UQdO3aU9HvAO3funPr06aO3337brr8xRl27dtW6des0ePBgNWvWTGvWrNHzzz+vo0ePavr06ba+Q4YM0UcffaR+/fqpVatWWrt2rTp37pzvPt9zzz1ycnLSqFGj5O/vry+//FKDBw9Wenp6iZ1Amhu4csfJ4sWLFRUVpcjISE2ZMkUXLlzQrFmzdO+992rr1q12nxdXrlxRZGSk7r33Xk2dOlVeXl4aNGiQPvzwQ33++ee2aUB33nmnpN//YB4/frwiIiI0YsQI7dmzR7NmzdKmTZv03Xff2Y2Bwsb+xx9/rKysLD311FM6ffq0Xn/9dfXq1UsPPPCA1q9frxdeeEH79u3TO++8o+eee87uDwBH3n9nzpxRhw4d1KNHD/Xq1UvLli3TCy+8oCZNmtjGRXZ2th5++GElJSWpT58+Gj16tDIyMvT1119rx44dtn8/hg8froULFyo6OloxMTE6cOCA3n33XW3dujXPvuMmMEAxLViwwEjK9+bu7m7Xt1atWqZz58551iHJjBw50q5t4sSJpnz58uY///mPXfuLL75oXFxczOHDh40xxqxdu9ZIMjExMXnWm5OTY/v/8uXLm6ioqCLt04wZM4wk89FHH9nasrKyTHh4uPH29jbp6enX3af8XK/v9OnTjSTzxRdfGGOMOXDggJFkfHx8zPHjx+36NmvWzFStWtWcOnXK1rZt2zbj7OxsBg4caGuLi4szkkzXrl3tln/yySeNJLNt2zZjjDEpKSlGkhkyZIhdv+eee85IMmvXrrW1STJxcXH57t/Vz3FCQoKRZNatW1fgPl8tt9Y9e/aYEydOmIMHD5r58+cbT09P4+/vbzIzM40xv7+uoaGhJjIy0u41vnDhgqldu7Zp3769ra1Lly7Gy8vLHD161Na2d+9eU65cOXP1R1/uc71gwYI8dV27v7lj/sCBA3bbvtbw4cONl5eX+e2332xtbdu2NZLM7Nmz8/Rv27atadu2bYHPz9/+9jcjyUyYMKHQ7SYnJxtJ5sMPP7S1FfZaXLvdoo7/3OesSpUq5vTp07a+X3zxhZFk/vGPfxS4L8YY8/TTTxtJ5ttvv7W1ZWRkmNq1a5vg4GCTnZ1tjDFm3bp1RpJp0KCBuXTpkq3vW2+9ZSSZ7du3F7qd3Ndr06ZN5t133zUVKlSwPW+PPfaYadeunTEm7/tzxYoVRpL561//are+nj17GicnJ7Nv3z5jzP/eO08++aRdv379+uUZO4MHDzbVqlUzJ0+etOvbp08f4+vra6ursPF4tdznZv78+ebEiRPm119/NStXrjTBwcHGycnJbNq0yWRkZJiKFSuaoUOH2i2bmppqfH197dqjoqKMJPPiiy/m2Vbu+/PEiRO2tuPHjxs3Nzfz0EMP2V4vY4x59913bXXlKmjs5+6rv7+/OXv2rK19zJgxRpJp2rSpuXz5sq29b9++xs3Nze595ej77+r3xqVLl0xgYKB59NFHbW3z5883ksy0adPyrDf3M+fbb781kszHH39s9/jq1avzbUfpY5oBbtjMmTP19ddf292+/PLLYq8vISFBbdq0UaVKlXTy5EnbLSIiQtnZ2frmm28kScuXL5eTk1O+J2Bd/TWyI1atWqXAwED17dvX1ubq6qqYmBidP39e//rXv4q3U9fh7e0t6fcTw6726KOP2h1JPHbsmFJSUjRo0CBVrlzZ1n7nnXeqffv2WrVqVZ51jxw50u7+U089JUm2vrn/jY2NteuXe8T52q9+S1O9evXk7++v4OBgPfHEE6pbt66+/PJL29y6lJQU7d27V/369dOpU6dsYyMzM1MPPvigvvnmG+Xk5Cg7O1uJiYnq3r273UkwdevWtR2BKSmenp62/8/IyNDJkyfVpk0bXbhwQbt377br6+7urujoaIfWv3PnTj3xxBPq1q2bXnnllXy3e/nyZZ06dUp169ZVxYoVtWXLlmLti6Pjv3fv3nZHzXOnhVzvbPpVq1apRYsWdidkeXt7a9iwYTp48KBtOk2u6Ohou/m9Rd3O1Xr16qWLFy/qn//8pzIyMvTPf/6zwCkGq1atkouLi2JiYuzan332WRljbJ9vue+da/tde5TVGKPly5erS5cuMsbYfa5FRkbq3LlzxX7NnnjiCfn7+6t69erq3LmzbVpVWFiYvv76a509e1Z9+/a126aLi4tatmypdevW5VlfYfP2r5aYmKisrCw9/fTTcnb+X5QYOnSofHx88nxuFDb2H3vsMfn6+trut2zZUpL0+OOP281xbtmypbKysnT06FFbmyPvP29vb7vzFtzc3NSiRQu7cbR8+XL5+fnZPievlvvvSkJCgnx9fdW+fXu757V58+by9vbO93lF6WKaAW5YixYtrnsCmCP27t2rn376qcCvg3NPRti/f7+qV69uF+pu1KFDhxQaGmr34Sz972vZQ4cOldi2rpb7lXKFChXs2q+9SkTu9uvVq5dnHQ0aNNCaNWtsJ23kCg0NtesXEhIiZ2dn21f4hw4dkrOzc56zlAMDA1WxYsVS2+f8LF++XD4+Pjpx4oTefvttHThwwO4fq71790qSoqKiClzHuXPn9Ntvv+nixYv5nnld0mdj//zzz3rllVe0du1apaen56nlajVq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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Dropout experiment results:\n", + "Dropout: 0.0, Accuracy: 0.9084\n", + "Dropout: 0.2, Accuracy: 0.9158\n", + "Dropout: 0.4, Accuracy: 0.9079\n", + "Dropout: 0.5, Accuracy: 0.9084\n" + ] + } + ], + "source": [ + "# B. Test presence or absence of regularization\n", + "\n", + "# Experiment with dropout regularization\n", + "dropout_rates = [0.0, 0.2, 0.4, 0.5]\n", + "dropout_results = {}\n", + "\n", + "for dropout_rate in dropout_rates:\n", + " print(f\"\\nTraining model with dropout rate {dropout_rate}...\")\n", + "\n", + " # Create model with dropout\n", + " model = Sequential([\n", + " Conv2D(64, (3, 3), activation='relu', input_shape=(28, 28, 1)),\n", + " MaxPooling2D((2, 2)),\n", + " Dropout(dropout_rate),\n", + " Flatten(),\n", + " Dense(64, activation='relu'),\n", + " Dropout(dropout_rate),\n", + " Dense(10, activation='softmax')\n", + " ])\n", + "\n", + " # Compile\n", + " model.compile(\n", + " optimizer='adam',\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy']\n", + " )\n", + "\n", + " # Train\n", + " history = model.fit(\n", + " X_train, y_train_categorical,\n", + " epochs=15, # More epochs to see regularization effect\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_categorical),\n", + " verbose=0\n", + " )\n", + "\n", + " # Evaluate\n", + " test_loss, test_accuracy = model.evaluate(X_test, y_test_categorical, verbose=0)\n", + " dropout_results[dropout_rate] = test_accuracy\n", + " print(f\"Dropout: {dropout_rate}, Test Accuracy: {test_accuracy:.4f}\")\n", + "\n", + "# Plot dropout experiment results\n", + "plt.figure(figsize=(8, 5))\n", + "plt.bar([str(rate) for rate in dropout_rates], dropout_results.values())\n", + "plt.xlabel('Dropout Rate')\n", + "plt.ylabel('Test Accuracy')\n", + "plt.title('Effect of Dropout Regularization on Model Performance')\n", + "plt.show()\n", + "\n", + "print(\"\\nDropout experiment results:\")\n", + "for rate, accuracy in dropout_results.items():\n", + " print(f\"Dropout: {rate}, Accuracy: {accuracy:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "cb426f26", + "metadata": { + "id": "cb426f26" + }, + "source": [ + "Reflection: Report on the performance of the models you tested. Did any of the changes you made improve the model's performance? If so, which ones? What do you think contributed to these improvements? Finally, what combination of hyperparameters and regularization techniques yielded the best performance?\n", + "\n", + "Adding more filters generally improved accuracy since the model could capture more detailed patterns. However, beyond 64 filters, the gains started to level off, showing diminishing returns. Including dropout consistently improved test accuracy by preventing overfitting and helping the model generalize better. The best performance came from 128 filters with dropout, giving around 92–93% accuracy. These results highlight the balance between model capacity and regularization for stable learning." + ] + }, + { + "cell_type": "markdown", + "id": "46c43a3d", + "metadata": { + "id": "46c43a3d" + }, + "source": [ + "# 5. Training Final Model and Evaluation\n", + "\n", + "In this section, you will train the final model using the best hyperparameters and regularization techniques you found in the previous section. You should:\n", + "- [ ] Compile the final model with the best hyperparameters and regularization techniques.\n", + "- [ ] Train the final model on the training set and evaluate it on the test set.\n", + "- [ ] Report the final model's performance on the test set, including accuracy and any other relevant metrics." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "31f926d1", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 1000 + }, + "id": "31f926d1", + "outputId": "102f1731-610b-475d-8e96-b9ecea334c0c" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_10\"\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_10\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                    ┃ Output Shape           ┃       Param # ┃\n",
+              "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "β”‚ conv2d_9 (Conv2D)               β”‚ (None, 26, 26, 64)     β”‚           640 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ max_pooling2d_9 (MaxPooling2D)  β”‚ (None, 13, 13, 64)     β”‚             0 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dropout_8 (Dropout)             β”‚ (None, 13, 13, 64)     β”‚             0 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ flatten_10 (Flatten)            β”‚ (None, 10816)          β”‚             0 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_20 (Dense)                β”‚ (None, 64)             β”‚       692,288 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dropout_9 (Dropout)             β”‚ (None, 64)             β”‚             0 β”‚\n",
+              "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n",
+              "β”‚ dense_21 (Dense)                β”‚ (None, 10)             β”‚           650 β”‚\n",
+              "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n",
+              "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┑━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "β”‚ conv2d_9 (\u001b[38;5;33mConv2D\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m640\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ max_pooling2d_9 (\u001b[38;5;33mMaxPooling2D\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m0\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dropout_8 (\u001b[38;5;33mDropout\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m0\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ flatten_10 (\u001b[38;5;33mFlatten\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10816\u001b[0m) β”‚ \u001b[38;5;34m0\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_20 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m692,288\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dropout_9 (\u001b[38;5;33mDropout\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) β”‚ \u001b[38;5;34m0\u001b[0m β”‚\n", + "β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€\n", + "β”‚ dense_21 (\u001b[38;5;33mDense\u001b[0m) β”‚ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) β”‚ \u001b[38;5;34m650\u001b[0m β”‚\n", + "β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 693,578 (2.65 MB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m693,578\u001b[0m (2.65 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 693,578 (2.65 MB)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m693,578\u001b[0m (2.65 MB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m66s\u001b[0m 35ms/step - accuracy: 0.7917 - loss: 0.5892 - val_accuracy: 0.8814 - val_loss: 0.3234\n", + "Epoch 2/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m79s\u001b[0m 33ms/step - accuracy: 0.8867 - loss: 0.3133 - val_accuracy: 0.8965 - val_loss: 0.2832\n", + "Epoch 3/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m63s\u001b[0m 34ms/step - accuracy: 0.9017 - loss: 0.2751 - val_accuracy: 0.8957 - val_loss: 0.2776\n", + "Epoch 4/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 34ms/step - accuracy: 0.9121 - loss: 0.2407 - val_accuracy: 0.9031 - val_loss: 0.2687\n", + "Epoch 5/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m81s\u001b[0m 33ms/step - accuracy: 0.9180 - loss: 0.2201 - val_accuracy: 0.9057 - val_loss: 0.2660\n", + "Epoch 6/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m62s\u001b[0m 33ms/step - accuracy: 0.9257 - loss: 0.2010 - val_accuracy: 0.9080 - val_loss: 0.2632\n", + "Epoch 7/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m60s\u001b[0m 32ms/step - accuracy: 0.9282 - loss: 0.1905 - val_accuracy: 0.9101 - val_loss: 0.2531\n", + "Epoch 8/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m61s\u001b[0m 32ms/step - accuracy: 0.9347 - loss: 0.1740 - val_accuracy: 0.9148 - val_loss: 0.2531\n", + "Epoch 9/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m63s\u001b[0m 33ms/step - accuracy: 0.9361 - loss: 0.1691 - val_accuracy: 0.9109 - val_loss: 0.2577\n", + "Epoch 10/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m82s\u001b[0m 33ms/step - accuracy: 0.9392 - loss: 0.1555 - val_accuracy: 0.9126 - val_loss: 0.2576\n", + "Epoch 11/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m81s\u001b[0m 33ms/step - accuracy: 0.9440 - loss: 0.1465 - val_accuracy: 0.9153 - val_loss: 0.2710\n", + "Epoch 12/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m63s\u001b[0m 33ms/step - accuracy: 0.9465 - loss: 0.1375 - val_accuracy: 0.9155 - val_loss: 0.2627\n", + "Epoch 13/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m62s\u001b[0m 33ms/step - accuracy: 0.9489 - loss: 0.1308 - val_accuracy: 0.9169 - val_loss: 0.2690\n", + "Epoch 14/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m61s\u001b[0m 33ms/step - accuracy: 0.9552 - loss: 0.1214 - val_accuracy: 0.9147 - val_loss: 0.2713\n", + "Epoch 15/15\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m62s\u001b[0m 33ms/step - accuracy: 0.9545 - loss: 0.1199 - val_accuracy: 0.9193 - val_loss: 0.2707\n", + "\n", + "Final Model - Test Loss: 0.2707, Test Accuracy: 0.9193\n" + ] + }, + { + "data": { + "image/png": "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/f2/fL/rAueTsjDTamhV14UJjzRg9UttOTjlUb56OpTBrWtLICWqHJOHUitWrGDChAm8++67HDhwgGbNmhEeHk5CQsJdj4uOjub111+nffv2hfZ98sknfPHFF8ybN489e/ZgZ2dHeHg4169fL6+HUWa8nW0I9HJAr8C2qERTV0cIIcR9GjVqFKmpqYSHhxvNGTN58mRatGhBeHg4nTp1okaNGoU+ZLkbrVbL6tWryc7OpnXr1jz33HN8+OGHRmWefPJJXn31VcaOHUtISAj//PMP77zzjlGZfv360b17dzp37oyHh0eRS9nb2tqyfv16UlJSaNWqFf3796dr167MmTOnZE9GETIzM2nevLnRrWfPnmg0Gn799VdcXFzo0KED3bp1w8/PjxUrVgDqm8Tk5GSGDRtGgwYNGDBgAD169GDq1KmAGnaNGTOGhg0b0r17dxo0aMBXX3113/WtLErafpo8eTLffPMNX375JSdOnOCFF16gT58+HDx4sFDZffv28c0338gcXLeR13LRbkyaXtR8UF27dsXGxoYffvgBNzc3/v77bzIzM+nYsSOhoaF8++23hl5Tw4cPZ9asWXz11Vc0btyYJ554wuhD5QULFpCfn09oaCjjx4/ngw8+KFb9Zs6ciYuLC23btqVnz56Eh4fTokULozJff/01/fv356WXXiIoKIjRo0eTlWXcE2XUqFHk5uYycuTIkj5FQhTLxZRr/Lg3hpeW7qfF+xvp89U/zNx4mn3RqeTrFeq52zGsTR2+HdaSQ1MeYeULbXm5awDNa7vISnmiStMotw7ONoGwsDBatWpl+Geo1+vx9fVl3LhxvPXWW0Ueo9Pp6NChA88++yzbt28nLS2NNWvWAGovKW9vb1577TXDSijp6el4eXmxaNEiBg0adM86ZWRk4OTkRHp6eoknkCwL0/88yTfbztG3uQ8zB4ZU+PWFEKIyuX79OufPn6devXpYW1ubujqiGrrb75ip2wR3UtL2k7e3N5MmTWLMmDGGbf369TMEBjdkZmbSokULvvrqKz744ANCQkKYNWtWset1t+dLXsuiKtu+fTtdu3bl4sWLd+1VJr/noriKMyTv4frqkLz2ATIkT1Q9xW1DmXROqdzcXPbv38/EiRMN27RaLd26dWPXrl13PG7atGl4enoyatQotm/fbrTv/PnzXLlyxWhMuJOTE2Fh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k/zUWPj6+uLRRx9FVlYWvvjiCxgMBvP3qYeHB+zs7KQKu9P83L+NHyeUtra28PHxQWRkpLVDpQ7GHMqEOVQ75lDtmD+16835E8Ac6oeYQ7Xr8vmT1e7zR6IoiuLbb78tBgYGinZ2duLIkSPFw4cPSx2S1QG44eOf//yn1KF1Cb31dsZt/ve//4mDBg0SFQqF2K9fP3Hr1q1ShyQJrVYrLlq0SAwMDBTt7e3F0NBQ8dVXXxX1er3UoXW61NTUG35HzJkzRxRF0y2NExMTRbVaLSoUCnHixIlibm6utEF3kp8ai4sXL970+zQ1NVXq0DvFz/3b+DFr39KYOhdzKOZQP6c351DMn0x6c/4kisyhfog5VLuunj8JoiiKHVnkIiIiIiIiIiIi+jnsKUVERERERERERFbHohQREREREREREVkdi1JERERERERERGR1LEoREREREREREZHVsShFRERERERERERWx6IUERERERERERFZHYtSRERERERERERkdSxKERERERERERGR1bEoRUTUwQRBwGeffSZ1GERERETdBvMnot6JRSki6lF+85vfQBCE6x4PPPCA1KERERERdUnMn4hIKjZSB0BE1NEeeOAB/POf/7TYplAoJIqGiIiIqOtj/kREUuBMKSLqcRQKBXx8fCwe7u7uAExTwzdv3owpU6bAwcEBoaGh+M9//mNx/KlTpzBhwgQ4ODjA09MTc+fORX19vcU+7733HgYOHAiFQgFfX18sWLDA4n2NRoNf/epXcHR0REREBHbt2tW5F01ERER0F5g/EZEUWJQiol4nMTERjzzyCE6cOIGZM2dixowZOHfuHABAp9Nh8uTJcHd3x9GjR/HJJ59g//79FknT5s2bMX/+fMydOxenTp3Crl27EB4ebvEZb7zxBqZPn46TJ0/iwQcfxMyZM1FVVWXV6yQiIiLqKMyfiKhTiEREPcicOXNEuVwuOjk5WTxWrVoliqIoAhCfffZZi2NiYmLEefPmiaIoilu3bhXd3d3F+vp68/tffvmlKJPJxNLSUlEURdHPz0989dVXbxoDAPG1114zv66vrxcBiLt37+6w6yQiIiLqKMyfiEgq7ClFRD3O+PHjsXnzZottHh4e5uejRo2yeG/UqFHIzs4GAJw7dw5Dhw6Fk5OT+f24uDgYjUbk5uZCEAQUFxdj4sSJPxnDkCFDzM+dnJzg6uqK8vLyO70kIiIiok7F/ImIpMCiFBH1OE5OTtdNB+8oDg4Ot7Sfra2txWtBEGA0GjsjJCIiIqK7xvyJiKTAnlJE1OscPnz4utf9+/cHAPTv3x8nTpyATqczv3/o0CHIZDJERkbCxcUFwcHBSElJsWrMRERERFJi/kREnYEzpYiox9Hr9SgtLbXYZmNjA5VKBQD45JNPEB0djdGjR+PDDz9EZmYm3n33XQDAzJkzsWLFCsyZMwevv/46KioqsHDhQsyaNQtqtRoA8Prrr+PZZ5+Ft7c3pkyZgrq6Ohw6dAgLFy607oUSERERdRDmT0QkBRaliKjH2bNnD3x9fS22RUZGIicnB4Dpzi7bt2/Hc889B19fX3z00UcYMGAAAMDR0RFff/01Fi1ahBEjRsDR0RGPPPIINmzYYD7XnDlz0NjYiL/+9a948cUXoVKp8Oijj1rvAomIiIg6GPMnIpKCIIqiKHUQRETWIggCdu7ciWnTpkkdChEREVG3wPyJiDoLe0oREREREREREZHVsShFRERERERERERWx+V7RERERERERERkdZwpRUREREREREREVseiFBERERERERERWR2LUkREREREREREZHUsShERERERERERkdWxKEVERERERERERFbHohQREREREREREVkdi1JERERERERERGR1LEoREREREREREZHVsShFRERERERERERW9/8ByOliAnqjko0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAArwAAAHDCAYAAADGJsnKAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAS0VJREFUeJzt3XlcVGX///H3gLLJ4oYgRqC4e7vdWqipbRQumZq5YKaimdltppilpiK2kJVL5Zp7pqWmWY8syyi6WyzNpfJOTU3TTBQVBTFBmfP7ox/zdQSUgYHB4+v5ePDQc80153zOMNfMmzPXOWMxDMMQAAAAYFJuri4AAAAAKEkEXgAAAJgagRcAAACmRuAFAACAqRF4AQAAYGoEXgAAAJgagRcAAACmRuAFAACAqRF4AQAAYGoEXgAlwmKxaPLkyQ7f79ChQ7JYLFq6dKnTayqO5cuXq379+ipfvrwqVqzo6nJwnSurz3PArAi8gIktXbpUFotFFotF33zzTZ7bDcNQaGioLBaL7rvvPhdUWHTJycm2fbNYLCpfvrxq1aql/v376/fff3fqtvbs2aOBAwcqIiJCCxYs0JtvvunU9d+odu7cqX79+ik0NFSenp6qXLmyoqKitGTJEuXk5Li6PAAmUs7VBQAoeV5eXlq5cqXatm1r1/7VV1/pzz//lKenp4sqK74RI0bolltu0cWLF7V9+3a9+eab2rBhg3755ReFhIQ4ZRvJycmyWq167bXXVLt2baes80a3cOFCPfbYYwoKCtLDDz+sOnXqKCMjQ0lJSRo8eLCOHTum8ePHu7rMEhMWFqa///5b5cuXd3UpwA2BwAvcADp16qQ1a9bo9ddfV7ly/zfsV65cqRYtWujkyZMurK542rVrpwcffFCSFBsbq7p162rEiBFatmyZxo0bV6x1Z2ZmqkKFCjpx4oQkOXUqw/nz5+Xj4+O09V1Pvv/+ez322GNq3bq1Pv74Y/n5+dluGzlypH788Uft2rXLhRWWnEuXLslqtcrDw0NeXl6uLge4YTClAbgBxMTE6NSpU9q0aZOtLTs7W++995769u2b730yMzM1evRo28fN9erV06uvvirDMOz6ZWVladSoUQoMDJSfn5/uv/9+/fnnn/mu8+jRoxo0aJCCgoLk6empRo0aafHixc7bUUl33XWXJOngwYO2tk8++UTt2rVThQoV5Ofnp86dO+t///uf3f0GDhwoX19fHThwQJ06dZKfn58eeughhYeHKz4+XpIUGBiYZ27ynDlz1KhRI3l6eiokJET/+c9/dObMGbt133HHHfrXv/6lbdu2qX379vLx8dH48eNt8zhfffVVzZ49W7Vq1ZKPj4/uvfdeHTlyRIZh6LnnntNNN90kb29vde3aVadPn7Zb9wcffKDOnTsrJCREnp6eioiI0HPPPZdnSkBuDb/++qvuvPNO+fj4qEaNGnr55ZfzPIYXLlzQ5MmTVbduXXl5eal69ep64IEHdODAAVsfq9WqmTNnqlGjRvLy8lJQUJCGDh2qtLS0a/6OEhISZLFYtGLFCruwm6tly5YaOHCgbbmwz0WLxaLhw4drzZo1atiwoby9vdW6dWv98ssvkqT58+erdu3a8vLy0h133KFDhw4V+Htq06aNvL29VbNmTc2bN8+uX3Z2tiZNmqQWLVooICBAFSpUULt27fTll1/a9bv89ztz5kxFRETI09NTv/76a75zeFNSUhQbG6ubbrpJnp6eql69urp27ZqnTkeec4X5fQM3Ao7wAjeA8PBwtW7dWu+88446duwo6Z8QePbsWfXp00evv/66XX/DMHT//ffryy+/1ODBg9WsWTN9+umnGjNmjI4ePaoZM2bY+j7yyCN6++231bdvX7Vp00ZffPGFOnfunKeG48ePq1WrVrZQEhgYqE8++USDBw9Wenq6Ro4c6ZR9zQ1lVapUkfTPyWYDBgxQdHS0pk6dqvPnz2vu3Llq27atduzYofDwcNt9L126pOjoaLVt21avvvqqfHx8NHDgQL311lt6//33NXfuXPn6+qpJkyaSpMmTJyshIUFRUVEaNmyY9u7dq7lz52rr1q369ttv7T6uPnXqlDp27Kg+ffqoX79+CgoKst22YsUKZWdn64knntDp06f18ssvq1evXrrrrruUnJysZ555Rvv379cbb7yhp556yu6PhKVLl8rX11dxcXHy9fXVF198oUmTJik9PV2vvPKK3WOTlpamDh066IEHHlCvXr303nvv6ZlnnlHjxo1tz4ucnBzdd999SkpKUp8+ffTkk08qIyNDmzZt0q5duxQRESFJGjp0qJYuXarY2FiNGDFCBw8e1KxZs7Rjx448+3658+fPKykpSe3bt9fNN998zd+nI89FSfr666/14Ycf6j//+Y8k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neWvv/6yXY4u12+//SZJtqkS7733nmrVqqV169bZHUHNvZpHcURERGj06NEaPXq09u3bp2bNmmnatGl6++23y8RzDrheMYcXuIH4+vpq7ty5mjx5srp06VJgv06dOiknJ0ezZs2ya58xY4YsFovtDO/cf6+8ysPMmTPtlt3d3dWjRw+tXbs23+urpqamFmV3rik6Olr+/v568cUX7T52dsZ2o6Ki5OHhoddff93uiNmiRYt09uzZfK9U4Wy5R/Au3352drbmzJlT5HX26NFDJ0+ezPO7v3w7vXr1Uk5Ojp577rk8fS5dupTnEllXio+Pl2EYevjhh3Xu3Lk8t2/btk3Lli2TVPjnorNcunRJ8+fPty1nZ2dr/vz5CgwMVIsWLSTl/7j/8MMP2rx5c5G3e/78eV24cMGuLSIiQn5+fsrKypJUNp5zwPWKI7zADaagKQWX69Kli+688049++yzOnTokJo2barPPvtMH3zwgUaOHGk7ctqsWTPFxMRozpw5Onv2rNq0aaOkpCTt378/zzpfeuklffnll4qMjNSQIUPUsGFDnT59Wtu3b9fnn3+e5/qyzuDv76+5c+fq4Ycf1r///W/16dNHgYGBOnz4sDZs2KDbbrst32BXGIGBgRo3bpwSEhLUoUMH3X///dq7d6/mzJmjW265xe5koZLSpk0bVapUSQMGDNCIESNksVi0fPnyYn1k3b9/f7311luKi4vTli1b1K5dO2VmZurzzz/X448/rq5du+r222/X0KFDlZiYqJ07d+ree+9V+fLltW/fPq1Zs0avvfZagfPDc+uePXu2Hn/8cdWvX9/um9aSk5P14Ycf6vnnn5dU+Oeis4SEhGjq1Kk6dOiQ6tatq1WrVmnnzp168803bUe877vvPq1bt07du3dX586ddfDgQc2bN08NGzbMN8AXxm+//aa7775bvXr1UsOGDVWuXDm9//77On78uPr06SOpbDzngOsVgRdAHm5ubvrwww81adIkrVq1SkuWLFF4eLheeeUVjR492q7v4sWLFRgYqBUrVmj9+vW66667tGHDhjwfVQcFBWnLli2aMmWK1q1bpzlz5qhKlSpq1KiRpk6dWmL70rdvX4WEhOill17SK6+8oqysLNWoUUPt2rUr8KoJhTV58mQFBgZq1qxZGjVqlCpXrqxHH31UL774Yql8ZWyVKlX00Ucf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kebwNm/eXK+//rr++usvLVq0SH/++aduu+02NWnSRK+99prOnj3r7DoBAACAIinWSWuGYejixYvKzs6WYRiqVKmSZs2apdDQUK1atcpZNQIAAABFVqTAu23bNg0fPlzVq1fXqFGj1Lx5c+3evVtfffWV9u3bpxdeeEEjRoxwdq0AAACAwxwOvI0bN1arVq108OBBLVq0SEeOHNFLL72k2rVr2/rExMQoNTXVqYUCAAAARVHO0Tv06tVLgwYNUo0aNQrsU7VqVVmt1mIVBgAAADiDw4F34sSJJVEHAAAAUCIcntLQo0cPTZ06NU/7yy+/rJ49ezqlKAAAAMBZHA68//3vf9WpU6c87R07dtR///tfpxQFAAAAOIvDgffcuXPy8PDI016+fHmlp6c7pSgAAADAWYp0lYb8rrH77rvvqmHDhk4pCgAAAHCWIp209sADD+jAgQO66667JElJSUl65513tGbNGqcXCAAAABSHw4G3S5cuWr9+vV588UW999578vb2VpMmTfT555/r9ttvL4kaAQAAgCJzOPBKUufOndW5c2dn1wIAAAA4XZG+WhgAAAC4Xjh8hDcnJ0czZszQ6tWrdfjwYWVnZ9vdfvr0aacVBwAAABSXw0d4ExISNH36dPXu3Vtnz55VXFycHnjgAbm5uWny5MklUCIAAABQdA4H3hUrVmjBggUaPXq0ypUrp5iYGC1cuFCTJk3S999/XxI1AgAAAEXmcOBNSUlR48aNJUm+vr46e/asJOm+++7Thg0bnFsdAAAAUEwOB96bbrpJx44dkyRFRETos88+kyRt3bpVnp6ezq0OAAAAKCaHA2/37t2VlJQkSXriiSc0ceJE1alTR/3799egQYOcXiAAAABQHA5fpeGll16y/b93794KCwvTd999pzp16qhLly5OLQ4AAAAoLocC78WLFzV06FBNnDhRNWvWlCS1atVKrVq1KpHiAAAAgOJyaEpD+fLltXbt2pKqBQAAAHA6h+fwduvWTevXry+BUgAAAADnc3gOb506dTRlyhR9++23atGihSpUqGB3+4gRI5xWHAAAAFBcDgfeRYsWqWLFitq2bZu2bdtmd5vFYiHwAgAAoExxOPAePHiwJOoAAAAASoTDc3gBAACA64nDR3iv9eUSixcvLnIxAAAAgLM5HHjT0tLsli9evKhdu3bpzJkzuuuuu5xWGAAAAOAMDgfe999/P0+b1WrVsGHDFBER4ZSiAAAAAGdxyhxeNzc3xcXFacaMGc5YHQAAAOA0Tjtp7cCBA7p06ZKzVgcAAAA4hcNTGuLi4uyWDcPQsWPHtGHDBg0YMMBphQEAAADO4HDg3bFjh92ym5ubAgMDNW3atGtewQEAAAAobQ4H3i+//LIk6gAAAABKhMNzeA8ePKh9+/blad+3b58OHTrkjJoAAAAAp3E48A4cOFDfffddnvYffvhBAwcOdEZNAAAAgNM4HHh37Nih2267LU97q1attHPnTmfUBAAAADiNw4HXYrEoIyMjT/vZs2eVk5PjcAGzZ89WeHi4vLy8FBkZqS1btly1/8yZM1WvXj15e3srNDRUo0aN0oULF2y3T548WRaLxe6nfv36DtcFAAAAc3A48LZv316JiYl24TYnJ0eJiYlq27atQ+tatWqV4uLiFB8fr+3bt6tp06aKjo7WiRMn8u2/cuVKjR07VvHx8dq9e7cWLVqkVatWafz48Xb9GjVqpGPHjtl+vvnmG0d3EwAAACbh8FUapk6dqvbt26tevXpq166dJOnrr79Wenq6vvjiC4fWNX36dA0ZMkSxsbGSpHnz5mnDhg1avHixxo4dm6f/d999p9tuu019+/aVJIWHhysmJkY//PCD/U6VK6fg4GBHdw0AAAAm5PAR3oYNG+rnn39Wr169dOLECWVkZKh///7as2eP/vWvfxV6PdnZ2dq2bZuioqL+rxg3N0VFRWnz5s353qdNmzbatm2bbdrD77//ro8//lidOnWy67dv3z6FhISoVq1aeuihh3T48GFHdxMAAAAm4fARXkkKCQnRiy++WKwNnzx5Ujk5OQoKCrJrDwoK0p49e/K9T9++fXXy5Em1bdtWhmHo0qVLeuyxx+ymNERGRmrp0qWqV6+ejh07poSEBLVr1067du2Sn59fvuvNyspSVlaWbTk9PV2SZLVaZbVai7WfAJzHTYarS8ANrqy/JzBG4GqlOUYc2ZbDgXfJkiXy9fVVz5497drXrFmj8+fPl+jXCycnJ+vFF1/UnDlzFBkZqf379+vJJ5/Uc889p4kTJ0qSOnbsaOvfpEkTRUZGKiwsTKtXr9bgwYPzXW9iYqISEhLytKemptqdEAfAtRpU4s0crlXQOSZlBWMErlaaYyS/iygUxOHAm5iYqPnz5+dpr1atmh599NFCB96qVavK3d1dx48ft2s/fvx4gfNvJ06cqIcffliPPPKIJKlx48bKzMzUo48+qmeffVZubnlnaFSsWFF169bV/v37C6xl3LhxiouLsy2np6crNDRUgYGB8vf3L9T+ACh5u9Msri4BN7hq1aq5uoSrYozA1UpzjHh5eRW6r8OB9/Dhw6pZs2ae9rCwMIfmynp4eKhFixZKSkpSt27dJP1zaDopKUnDhw/P9z7nz5/PE2rd3d0lSYaR/1+1586d04EDB/Twww8XWIunp6c8PT3ztLu5ueUbogG4hlW8mcO1yvp7AmMErlaaY8SRbTlcVbVq1fTzzz/naf/pp59UpUoVh9YVFxenBQsWaNmyZdq9e7eGDRumzMxM21Ub+vfvr3Hjxtn6d+nSRXPnztW7776rgwcPatOmTZo4caK6dOliC75PPfWUvvrqKx06dEjfffedunfvLnd3d8XExDi6qwAAADABh4/wxsTEaMSIEfLz81P79u0lSV999ZWefPJJ9enTx6F19e7dW6mpqZo0aZJSUlLUrFkzbdy40XYi2+HDh+3S+4QJE2SxWDRhwgQdPXpUgYGB6tKli1544QVbnz///FMxMTE6deqUAgMD1bZtW33//fcKDAx0dFcBAABgAhajoLkABcjOztbDDz+sNWvWqFy5f/Ky1WpV//79NXfu3HynBlxv0tPTFRAQoLNnzzKHFyhDwsducHUJuMEdeqmzq0u4KsYIXK00x4gjec3hI7weHh5atWqVnn/+ee3cuVPe3t5q3LixwsLCilwwAAAAUFKKdB1eSapTp47q1Kkj6Z+EPXfuXC1atEg//vij04oDAAAAiqvIgVeSvvzySy1evFjr1q1TQECAunfv7qy6AAAAAKdwOPAePXpUS5cu1ZIlS3TmzBmlpaVp5cqV6tWrlywWLocCAACAsqXQlyVbu3atOnXqpHr16mnnzp2aNm2a/vrrL7m5ualx48aEXQAAAJRJhT7C27t3bz3zzDNatWqV/Pz8SrImAAAAwGkKfYR38ODBmj17tjp06KB58+YpLS2tJOsCAAAAnKLQgXf+/Pk6duyYHn30Ub3zzjuqXr26unbtKsMwZLVaS7JGAAAAoMgc+mphb29vDRgwQF999ZV++eUXNWrUSEFBQbrtttvUt29frVu3rqTqBAAAAIrEocB7uTp16ujFF1/UkSNH9Pbbb+v8+fOKiYlxZm0AAABAsRXrOryS5Obmpi5duqhLly46ceKEM2oCAAAAnKbIR3jzU61aNWeuDgAAACg2pwZeAAAAoKwh8AIAAMDUCLwAAAAwNYcDb61atXTq1Kk87WfOnFGtWrWcUhQAAADgLA4H3kOHDiknJydPe1ZWlo4ePeqUogAAAABnKfRlyT788EPb/z/99FMFBATYlnNycpSUlKTw8HCnFgcAAAAUV6EDb7du3SRJFotFAwYMsLutfPnyCg8P17Rp05xa3I0kfOwGV5eAG9yhlzq7ugQAAEpEoQOv1WqVJNWsWVNbt25V1apVS6woAAAAwFkc/qa1gwcP5mk7c+aMKlas6Ix6AAAAAKdy+KS1qVOnatWqVbblnj17qnLlyqpRo4Z++uknpxYHAAAAFJfDgXfevHkKDQ2VJG3atEmff/65Nm7cqI4dO2rMmDFOLxAAAAAoDoenNKSkpNgC70cffaRevXrp3nvvVXh4uCIjI51eIAAAAFAcDh/hrVSpko4cOSJJ2rhxo6KioiRJhmHke31eAAAAwJUcPsL7wAMPqG/fvqpTp45OnTqljh07SpJ27Nih2rVrO71AAAAAoDgcDrwzZsxQeHi4jhw5opdfflm+vr6SpGPHjunxxx93eoEAAABAcTgceMuXL6+nnnoqT/uoUaOcUhAAAADgTA7P4ZWk5cuXq23btgoJCdEff/whSZo5c6Y++OADpxYHAAAAFJfDgXfu3LmKi4tTx44ddebMGduJahUrVtTMmTOdXR8AAABQLA4H3jfeeEMLFizQs88+K3d3d1t7y5Yt9csvvzi1OAAAAKC4HA68Bw8eVPPmzfO0e3p6KjMz0ylFAQAAAM7icOCtWbOmdu7cmad948aNatCggTNqAgAAAJym0FdpmDJlip566inFxcXpP//5jy5cuCDDMLRlyxa98847SkxM1MKFC0uyVgAAAMBhhQ68CQkJeuyxx/TII4/I29tbEyZM0Pnz59W3b1+FhITotddeU58+fUqyVgAAAMBhhQ68hmHY/v/QQw/poYce0vnz53Xu3DlVq1atRIoDAAAAisuhL56wWCx2yz4+PvLx8XFqQQAAAIAzORR469atmyf0Xun06dPFKggAAABwJocCb0JCggICAkqqFgAAAMDpHAq8ffr0Yb4uAAAAriuFvg7vtaYyAAAAAGVRoQPv5VdpAAAAAK4XhZ7SYLVaS7IOAAAAoEQ4/NXCAAAAwPWEwAsAAABTI/ACAADA1Ai8AAAAMDUCLwAAAEyNwAsAAABTI/ACAADA1Ai8AAAAMDUCLwAAAEyNwAsAAABTc3ngnT17tsLDw+Xl5aXIyEht2bLlqv1nzpypevXqydvbW6GhoRo1apQuXLhQrHUCAADAvFwaeFetWqW4uDjFx8dr+/btatq0qaKjo3XixIl8+69cuVJjx45VfHy8du/erUWLFmnVqlUaP358kdcJAAAAc3Np4J0+fbqGDBmi2NhYNWzYUPPmzZOPj48WL16cb//vvvtOt912m/r27avw8HDde++9iomJsTuC6+g6AQAAYG4uC7zZ2dnatm2boqKi/q8YNzdFRUVp8+bN+d6nTZs22rZtmy3g/v777/r444/VqVOnIq8TAAAA5lbOVRs+efKkcnJyFBQUZNceFBSkPXv25Hufvn376uTJk2rbtq0Mw9ClS5f02GOP2aY0FGWdkpSVlaWsrCzbcnp6uiTJarXKarUWaf8c5SajVLYDFKS0nuvFwTiBq5X1ccIYgauV5hhxZFsuC7xFkZycrBdffFFz5sxRZGSk9u/fryeffFLPPfecJk6cWOT1JiYmKiEhIU97ampqnhPiSkqDSrxIwbWuh3nujBO4WlkfJ4wRuFppjpGMjIxC93VZ4K1atarc3d11/Phxu/bjx48rODg43/tMnDhRDz/8sB555BFJUuPGjZWZmalHH31Uzz77bJHWKUnjxo1TXFycbTk9PV2hoaEKDAyUv79/UXfRIbvTLKWyHaAg1apVc3UJ18Q4gauV9XHCGIGrleYY8fLyKnRflwVeDw8PtWjRQklJSerWrZukfw5NJyUlafjw4fne5/z583Jzs5927O7uLkkyDKNI65QkT09PeXp65ml3c3PLs72SYhUvUnCt0nquFwfjBK5W1scJYwSuVppjxJFtuXRKQ1xcnAYMGKCWLVvq1ltv1cyZM5WZmanY2FhJUv/+/VWjRg0lJiZKkrp06aLp06erefPmtikNEydOVJcuXWzB91rrBAAAwI3FpYG3d+/eSk1N1aRJk5SSkqJmzZpp48aNtpPODh8+bJfeJ0yYIIvFogkTJujo0aMKDAxUly5d9MILLxR6nQAAALixWAzDYIb7FdLT0xUQEKCzZ8+W2hze8LEbSmU7QEEOvdTZ1SVcE+MErlbWxwljBK5WmmPEkbxWticjAQAAAMVE4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICpEXgBAABgagReAAAAmBqBFwAAAKZG4AUAAICplYnAO3v2bIWHh8vLy0uRkZHasmVLgX3vuOMOWSyWPD+dO3e29Rk4cGCe2zt06FAauwIAAIAyppyrC1i1apXi4uI0b948RUZGaubMmYqOjtbevXtVrVq1PP3XrVun7Oxs2/KpU6fUtGlT9ezZ065fhw4dtGTJEtuyp6dnye0EAAAAyiyXH+GdPn26hgwZotjYWDVs2FDz5s2Tj4+PFi9enG//ypUrKzg42PazadMm+fj45Am8np6edv0qVapUGrsDAACAMsalR3izs7O1bds2jRs3ztbm5uamqKgobd68uVDrWLRokfr06aMKFSrYtScnJ6tatWqqVKmS7rrrLj3//POqUqVKvuvIyspSVlaWbTk9PV2SZLVaZbVaHd2tInGTUSrbAQpSWs/14mCcwNXK+jhhjMDVSnOMOLItlwbekydPKicnR0FBQXbtQUFB2rNnzzXvv2XLFu3atUuLFi2ya+/QoYMeeOAB1axZUwcOHND48ePVsWNHbd68We7u7nnWk5iYqISEhDztqampunDhgoN7VTQNKvEiBdc6ceKEq0u4JsYJXK2sjxPGCFytNMdIRkZGofu6fA5vcSxatEiNGzfWrbfeatfep08f2/8bN26sJk2aKCIiQsnJybr77rvzrGfcuHGKi4uzLaenpys0NFSBgYHy9/cvuR24zO40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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Model Performance Summary:\n", + "Baseline (Linear): 0.8312\n", + "Simple CNN: 0.9146\n", + "Final Model: 0.9193\n" + ] + } + ], + "source": [ + "# Build final model with best hyperparameters\n", + "final_model = Sequential([\n", + " Conv2D(64, (3, 3), activation='relu', input_shape=(28, 28, 1)),\n", + " MaxPooling2D((2, 2)),\n", + " Dropout(0.2),\n", + " Flatten(),\n", + " Dense(64, activation='relu'),\n", + " Dropout(0.2),\n", + " Dense(10, activation='softmax')\n", + "])\n", + "\n", + "# Compile final model\n", + "final_model.compile(\n", + " optimizer='adam',\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "# Print final model summary\n", + "final_model.summary()\n", + "\n", + "# Train final model\n", + "history_final = final_model.fit(\n", + " X_train, y_train_categorical,\n", + " epochs=15,\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_categorical),\n", + " verbose=1\n", + ")\n", + "\n", + "# Evaluate final model\n", + "final_loss, final_accuracy = final_model.evaluate(X_test, y_test_categorical, verbose=0)\n", + "print(f\"\\nFinal Model - Test Loss: {final_loss:.4f}, Test Accuracy: {final_accuracy:.4f}\")\n", + "\n", + "# Plot final model training history\n", + "plt.figure(figsize=(12, 4))\n", + "plt.subplot(1, 2, 1)\n", + "plt.plot(history_final.history['loss'], label='Training Loss')\n", + "plt.plot(history_final.history['val_loss'], label='Validation Loss')\n", + "plt.title('Final Model - Loss')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Loss')\n", + "plt.legend()\n", + "\n", + "plt.subplot(1, 2, 2)\n", + "plt.plot(history_final.history['accuracy'], label='Training Accuracy')\n", + "plt.plot(history_final.history['val_accuracy'], label='Validation Accuracy')\n", + "plt.title('Final Model - Accuracy')\n", + "plt.xlabel('Epoch')\n", + "plt.ylabel('Accuracy')\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n", + "# Compare all models\n", + "models_comparison = {\n", + " 'Baseline (Linear)': baseline_accuracy,\n", + " 'Simple CNN': cnn_accuracy,\n", + " 'Final Model': final_accuracy\n", + "}\n", + "\n", + "plt.figure(figsize=(8, 5))\n", + "plt.bar(models_comparison.keys(), models_comparison.values())\n", + "plt.ylabel('Test Accuracy')\n", + "plt.title('Model Performance Comparison')\n", + "plt.ylim(0.7, 1.0)\n", + "plt.grid(axis='y', alpha=0.3)\n", + "plt.show()\n", + "\n", + "print(\"\\nModel Performance Summary:\")\n", + "for model_name, accuracy in models_comparison.items():\n", + " print(f\"{model_name}: {accuracy:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "a01f8ebc", + "metadata": { + "id": "a01f8ebc" + }, + "source": [ + "Reflection: How does the final model's performance compare to the baseline and the CNN model? What do you think contributed to the final model's performance? If you had time, what other experiments would you run to further improve the model's performance?\n", + "\n", + "After adding Dropout, the model became more stable and accurate.\n", + "Test accuracy increased to around 92%, and validation accuracy closely matched the training accuracy, meaning it’s not overfitting anymore.\n", + "The model now performs more consistently across all classes, even when images are slightly rotated or shifted.\n", + "These improvements show the importance of regularization and data variety in deep learning." + ] + }, + { + "cell_type": "markdown", + "id": "01db8512", + "metadata": { + "id": "01db8512" + }, + "source": [ + "🚨 **Please review our [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md)** 🚨 for detailed instructions on how to format, branch, and submit your work. Following these guidelines is crucial for your submissions to be evaluated correctly.\n", + "### Submission Parameters:\n", + "* Submission Due Date: `23:59 PM - 26/10/2025`\n", + "* The branch name for your repo should be: `assignment-1`\n", + "* What to submit for this assignment:\n", + " * This Jupyter Notebook (assignment_1.ipynb)\n", + " * The Lab 1 notebook (labs/lab_1.ipynb)\n", + " * The Lab 2 notebook (labs/lab_2.ipynb)\n", + " * The Lab 3 notebook (labs/lab_3.ipynb)\n", + "* What the pull request link should look like for this assignment: `https://github.com//deep_learning/pull/`\n", + "* Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily.\n", + "Checklist:\n", + "- [ ] Created a branch with the correct naming convention.\n", + "- [ ] Ensured that the repository is public.\n", + "- [ ] Reviewed the PR description guidelines and adhered to them.\n", + "- [ ] Verify that the link is accessible in a private browser window.\n", + "If you encounter any difficulties or have questions, please don't hesitate to reach out to our team via our Slack at `#cohort-7-help-ml`. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges." + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "kernelspec": { + "display_name": "dsi_participant", + "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.18" + } }, - { - "cell_type": "code", - "execution_count": null, - "id": "420c7178", - "metadata": {}, - "outputs": [], - "source": [ - "from tensorflow.keras.datasets import fashion_mnist\n", - "(X_train, y_train), (X_test, y_test) = fashion_mnist.load_data()\n", - "\n", - "# Normalize the pixel values to be between 0 and 1\n", - "X_train = X_train.astype('float32') / 255.0\n", - "X_test = X_test.astype('float32') / 255.0\n", - "\n", - "# Classes in the Fashion MNIST dataset\n", - "class_names = [\"T-shirt/top\", \"Trouser\", \"Pullover\", \"Dress\", \"Coat\", \"Sandal\", \"Shirt\", \"Sneaker\", \"Bag\", \"Ankle boot\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "a6c89fe7", - "metadata": {}, - "outputs": [], - "source": [ - "# Inspect the shapes of the datasets\n", - "\n", - "\n", - "# Convert labels to one-hot encoding\n", - "from tensorflow.keras.utils import to_categorical\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "13e100db", - "metadata": {}, - "outputs": [], - "source": [ - "import matplotlib.pyplot as plt\n", - "# Verify the data looks as expected\n" - ] - }, - { - "cell_type": "markdown", - "id": "989f7dd0", - "metadata": {}, - "source": [ - "Reflection: Does the data look as expected? How is the quality of the images? Are there any issues with the dataset that you notice?\n", - "\n", - "**Your answer here**" - ] - }, - { - "cell_type": "markdown", - "id": "c9e8ad60", - "metadata": {}, - "source": [ - "# 2. Baseline Model\n", - "\n", - "In this section, you will create a linear regression model as a baseline. This model will not use any convolutional layers, but it will help you understand the performance of a simple model on this dataset.\n", - "You should:\n", - "- [ ] Create a simple linear regression model using Keras.\n", - "- [ ] Compile the model with an appropriate loss function and optimizer.\n", - "- [ ] Train the model on the training set and evaluate it on the test set.\n", - "\n", - "A linear regression model can be created using the `Sequential` API in Keras. Using a single `Dense` layer with no activation function is equivalent to a simple linear regression model. Make sure that the number of units in the output layer matches the number of classes in the dataset.\n", - "\n", - "Note that for this step, we will need to use `Flatten` to convert the 2D images into 1D vectors before passing them to the model. Put a `Flatten()` layer as the first layer in your model so that the 2D image data can be flattened into 1D vectors." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "8563a7aa", - "metadata": {}, - "outputs": [], - "source": [ - "from keras.models import Sequential\n", - "from keras.layers import Dense, Flatten\n", - "\n", - "# Create a simple linear regression model\n", - "model = Sequential()\n", - "# You can use `model.add()` to add layers to the model\n", - "\n", - "# Compile the model using `model.compile()`\n", - "\n", - "# Train the model with `model.fit()`\n", - "\n", - "# Evaluate the model with `model.evaluate()`" - ] - }, - { - "cell_type": "markdown", - "id": "9a07e9f7", - "metadata": {}, - "source": [ - "Reflection: What is the performance of the baseline model? How does it compare to what you expected? Why do you think the performance is at this level?\n", - "\n", - "**Your answer here**" - ] - }, - { - "cell_type": "markdown", - "id": "fa107b59", - "metadata": {}, - "source": [ - "# 3. Building and Evaluating a Simple CNN Model\n", - "\n", - "In this section, you will build a simple Convolutional Neural Network (CNN) model using Keras. A convolutional neural network is a type of deep learning model that is particularly effective for image classification tasks. Unlike the basic neural networks we have built in the labs, CNNs can accept images as input without needing to flatten them into vectors.\n", - "\n", - "You should:\n", - "- [ ] Build a simple CNN model with at least one convolutional layer (to learn spatial hierarchies in images) and one fully connected layer (to make predictions).\n", - "- [ ] Compile the model with an appropriate loss function and metrics for a multi-class classification problem.\n", - "- [ ] Train the model on the training set and evaluate it on the test set.\n", - "\n", - "Convolutional layers are designed to accept inputs with three dimensions: height, width and channels (e.g., RGB for color images). For grayscale images like those in Fashion MNIST, the input shape will be (28, 28, 1).\n", - "\n", - "When you progress from the convolutional layers to the fully connected layers, you will need to flatten the output of the convolutional layers. This can be done using the `Flatten` layer in Keras, which doesn't require any parameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "3513cf3d", - "metadata": {}, - "outputs": [], - "source": [ - "from keras.layers import Conv2D\n", - "\n", - "# Reshape the data to include the channel dimension\n", - "X_train = X_train.reshape(-1, 28, 28, 1)\n", - "X_test = X_test.reshape(-1, 28, 28, 1)\n", - "\n", - "# Create a simple CNN model\n", - "model = Sequential()\n", - "\n", - "# Train the model\n", - "\n", - "# Evaluate the model" - ] - }, - { - "cell_type": "markdown", - "id": "fabe379c", - "metadata": {}, - "source": [ - "Reflection: Did the CNN model perform better than the baseline model? If so, by how much? What do you think contributed to this improvement?\n", - "\n", - "**Your answer here**" - ] - }, - { - "cell_type": "markdown", - "id": "1a5e2463", - "metadata": {}, - "source": [ - "# 3. Designing and Running Controlled Experiments\n", - "\n", - "In this section, you will design and run controlled experiments to improve the model's performance. You will focus on one hyperparameter and one regularization technique.\n", - "You should:\n", - "- [ ] Choose one hyperparameter to experiment with (e.g., number of filters, kernel size, number of layers, etc.) and one regularization technique (e.g., dropout, L2 regularization). For your hyperparameter, you should choose at least three different values to test (but there is no upper limit). For your regularization technique, simply test the presence or absence of the technique.\n", - "- [ ] Run experiments by modifying the model architecture or hyperparameters, and evaluate the performance of each model on the test set.\n", - "- [ ] Record the results of your experiments, including the test accuracy and any other relevant metrics.\n", - "- [ ] Visualize the results of your experiments using plots or tables to compare the performance of different models.\n", - "\n", - "The best way to run your experiments is to create a `for` loop that iterates over a range of values for the hyperparameter you are testing. For example, if you are testing different numbers of filters, you can create a loop that runs the model with 32, 64, and 128 filters. Within the loop, you can compile and train the model, then evaluate it on the test set. After each iteration, you can store the results in a list or a dictionary for later analysis.\n", - "\n", - "Note: It's critical that you re-initialize the model (by creating a new instance of the model) before each experiment. If you don't, the model will retain the weights from the previous experiment, which can lead to misleading results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "99d6f46c", - "metadata": {}, - "outputs": [], - "source": [ - "# A. Test Hyperparameters" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "dc43ac81", - "metadata": {}, - "outputs": [], - "source": [ - "# B. Test presence or absence of regularization" - ] - }, - { - "cell_type": "markdown", - "id": "cb426f26", - "metadata": {}, - "source": [ - "Reflection: Report on the performance of the models you tested. Did any of the changes you made improve the model's performance? If so, which ones? What do you think contributed to these improvements? Finally, what combination of hyperparameters and regularization techniques yielded the best performance?\n", - "\n", - "**Your answer here**" - ] - }, - { - "cell_type": "markdown", - "id": "46c43a3d", - "metadata": {}, - "source": [ - "# 5. Training Final Model and Evaluation\n", - "\n", - "In this section, you will train the final model using the best hyperparameters and regularization techniques you found in the previous section. You should:\n", - "- [ ] Compile the final model with the best hyperparameters and regularization techniques.\n", - "- [ ] Train the final model on the training set and evaluate it on the test set.\n", - "- [ ] Report the final model's performance on the test set, including accuracy and any other relevant metrics." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "31f926d1", - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "markdown", - "id": "a01f8ebc", - "metadata": {}, - "source": [ - "Reflection: How does the final model's performance compare to the baseline and the CNN model? What do you think contributed to the final model's performance? If you had time, what other experiments would you run to further improve the model's performance?\n", - "\n", - "**Your answer here**" - ] - }, - { - "cell_type": "markdown", - "id": "01db8512", - "metadata": {}, - "source": [ - "🚨 **Please review our [Assignment Submission Guide](https://github.com/UofT-DSI/onboarding/blob/main/onboarding_documents/submissions.md)** 🚨 for detailed instructions on how to format, branch, and submit your work. Following these guidelines is crucial for your submissions to be evaluated correctly.\n", - "### Submission Parameters:\n", - "* Submission Due Date: `23:59 PM - 26/10/2025`\n", - "* The branch name for your repo should be: `assignment-1`\n", - "* What to submit for this assignment:\n", - " * This Jupyter Notebook (assignment_1.ipynb)\n", - " * The Lab 1 notebook (labs/lab_1.ipynb)\n", - " * The Lab 2 notebook (labs/lab_2.ipynb)\n", - " * The Lab 3 notebook (labs/lab_3.ipynb)\n", - "* What the pull request link should look like for this assignment: `https://github.com//deep_learning/pull/`\n", - "* Open a private window in your browser. Copy and paste the link to your pull request into the address bar. Make sure you can see your pull request properly. This helps the technical facilitator and learning support staff review your submission easily.\n", - "Checklist:\n", - "- [ ] Created a branch with the correct naming convention.\n", - "- [ ] Ensured that the repository is public.\n", - "- [ ] Reviewed the PR description guidelines and adhered to them.\n", - "- [ ] Verify that the link is accessible in a private browser window.\n", - "If you encounter any difficulties or have questions, please don't hesitate to reach out to our team via our Slack at `#cohort-7-help-ml`. Our Technical Facilitators and Learning Support staff are here to help you navigate any challenges." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "deep_learning", - "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.12.11" - } - }, - "nbformat": 4, - "nbformat_minor": 5 + "nbformat": 4, + "nbformat_minor": 5 }