diff --git a/02_activities/assignments/assignment_1_1.ipynb b/02_activities/assignments/assignment_1_1.ipynb new file mode 100644 index 00000000..b19226b1 --- /dev/null +++ b/02_activities/assignments/assignment_1_1.ipynb @@ -0,0 +1,904 @@ +{ + "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": 2, + "id": "420c7178", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "420c7178", + "outputId": "1c054bf8-069e-4cd3-d6fd-3d1d1962594e" + }, + "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": 3, + "id": "a6c89fe7", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "a6c89fe7", + "outputId": "295f60db-2283-459b-a235-354f17f496df" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train shape: (60000, 28, 28)\n", + "y_train shape: (60000,)\n", + "X_test shape: (10000, 28, 28)\n", + "y_test shape: (10000,)\n", + "(60000, 10)\n", + "(10000, 10)\n" + ] + } + ], + "source": [ + "# Inspect the shapes of the datasets\n", + "# Check the shapes\n", + "print(\"X_train shape:\", X_train.shape)\n", + "print(\"y_train shape:\", y_train.shape)\n", + "print(\"X_test shape:\", X_test.shape)\n", + "print(\"y_test shape:\", y_test.shape)\n", + "\n", + "\n", + "# Convert labels to one-hot encoding\n", + "from tensorflow.keras.utils import to_categorical\n", + "# Convert integer labels to one-hot vectors\n", + "y_train_cat = to_categorical(y_train, num_classes=10)\n", + "y_test_cat = to_categorical(y_test, num_classes=10)\n", + "\n", + "print(y_train_cat.shape) # (60000, 10)\n", + "print(y_test_cat.shape) # (10000, 10)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "13e100db", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 607 + }, + "id": "13e100db", + "outputId": "500d25da-2d1d-4208-dd5f-e5e815816da5" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjcAAAJOCAYAAABLBSanAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAahNJREFUeJzt3Xl0VFX2NuA3ZJ4TQgKEIYEwg4gGFJkSBonIIDMCKogIjdAOra3Ytg20U4uKosjkrxtBsBEVBGQSFLUFURBRUUGGBJkTIEAGSIDc7w8W9VHevaEuJKFy8j5rsbrZ7Nw6VXVP1fFm73t8LMuyQERERGSICtd6AERERETFiYsbIiIiMgoXN0RERGQULm6IiIjIKFzcEBERkVG4uCEiIiKjcHFDRERERuHihoiIiIzCxQ0REREZhYubiwwdOhRhYWGXzUtNTUVqamqxPW5qaiqaNGlSbMcjKk4ZGRnw8fHByy+/fNnc8ePHw8fHpxRGRVT6OBfKjjK/uJk6dSp8fHxw8803X+uhlEnPP/88Pvroo2s9DLoKPj4+Hv35/PPPr/VQ3eTn52P8+PGXHFd2djb8/PywYMECADxf6dI4F+gCv2s9gKs1b948JCYm4ttvv8XOnTtRp06daz2kMuX5559H37590bNnz2s9FLpC77zzjtvf58yZg9WrV9viDRs2LPGx/P3vf8fYsWM9ys3Pz8eECRMAQL0SumrVKvj4+KBz584AeL7SpXEu0AVlenGTnp6O9evXY+HChRg5ciTmzZuHcePGXethEZWqu+66y+3vGzZswOrVq23x0uDn5wc/v0t/rBQVFaGwsNCj4y1fvhytW7dGVFRUMYyOTMe5QBeU6V9LzZs3D9HR0ejatSv69u2LefPm2XIu/h3pzJkzkZSUhMDAQLRo0QIbN2687GNs2bIFsbGxSE1NRW5urppXUFCAcePGoU6dOggMDESNGjXw+OOPo6CgwOPn891336FVq1YIDg5GrVq1MH36dFtOZmYm7rvvPlSuXBlBQUG4/vrrMXv2bFteXl4eHn30UdSoUQOBgYGoX78+Xn75ZVy8CbyPjw/y8vIwe/Zs1+XaoUOHejxeMsOmTZuQlpaGSpUquc69YcOGibmXm0NSnYGPjw/GjBmDefPmoXHjxggMDMT06dMRGxsLAJgwYYLr/Bs/frzr54qKirBy5Up07drVdZxLna/ff/89unTpgoiICISFhaFjx47YsGGD21jefvtt+Pj44Msvv8TIkSMRExODiIgI3HPPPcjOzr7Sl5AMwblgzlwo01du5s2bh969eyMgIAADBw7EtGnTsHHjRrRo0cKW++677yInJwcjR46Ej48PJk6ciN69e2P37t3w9/cXj79x40akpaWhefPmWLx4MYKDg8W8oqIi9OjRA1999RVGjBiBhg0b4qeffsKrr76K3377zaPfi2ZnZ+P2229H//79MXDgQCxYsACjRo1CQECAa3KdOnUKqamp2LlzJ8aMGYNatWrh/fffx9ChQ3H8+HE89NBDAADLstCjRw+sXbsW9913H5o1a4ZVq1bhr3/9K/bv349XX30VwPlLuMOHD8dNN92EESNGAACSkpIuO1YyR2ZmJjp37ozY2FiMHTsWUVFRyMjIwMKFC225VzKHLvjss8+wYMECjBkzBpUqVcL111+PadOmYdSoUejVqxd69+4NAGjatKnrZzZu3IisrCzcfvvtAC59vv78889o27YtIiIi8Pjjj8Pf3x8zZsxAamoqvvjiC1tN3pgxYxAVFYXx48dj+/btmDZtGvbs2YPPP/+cRaDlFOeCYXPBKqM2bdpkAbBWr15tWZZlFRUVWdWrV7ceeught7z09HQLgBUTE2MdO3bMFV+8eLEFwFq6dKkrNmTIECs0NNSyLMv66quvrIiICKtr167W6dOn3Y6ZkpJipaSkuP7+zjvvWBUqVLD+97//ueVNnz7dAmCtW7fuks8lJSXFAmC98sorrlhBQYHVrFkzKy4uziosLLQsy7Jee+01C4A1d+5cV15hYaF1yy23WGFhYdbJkycty7Ksjz76yAJgPfvss26P07dvX8vHx8fauXOnKxYaGmoNGTLkkuOjsmX06NGWp1N70aJFFgBr48aNao6TOTRu3DjbYwOwKlSoYP38889u8aysLAuANW7cOPFxn376aSshIcEtpp2vPXv2tAICAqxdu3a5YgcOHLDCw8Otdu3auWKzZs2yAFjJycmueWVZljVx4kQLgLV48WL1daCyh3PhvPI4F8rsr6XmzZuHypUro3379gDOX6YbMGAA5s+fj3PnztnyBwwYgOjoaNff27ZtCwDYvXu3LXft2rVIS0tDx44dsXDhQgQGBl5yLO+//z4aNmyIBg0a4MiRI64/HTp0cB3vcvz8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ERGRUXwsD0vCr8VeMd6spDqdnBo1apQt9ve//13M1fb78Gbe2FlVHHPh+uuvF+Pr16+3xU6ePCnmSh17kZGRYu6RI0fEuLT3jbRnEqCf39JccNo5WFKfL046B7VuK21PncLCQlssJydHzK1Ro4Y2RI9521zgd0LpCA4OFuPavlVXuwec9vN33HGHGJfm2O7du8XcEydOiPH4+HhbTHt+3333nRi3jcujLCIiIqIygosbIiIiMgoXN0RERGQULm6IiIjIKOVy+wWJVhynFVcVR/HwwIEDbbEbbrhBzO3Xr58Yl275rRWP/ve///VoDE5pt6d//PHHxfizzz571Y9Z1klFuIBcJKydg6GhobaYVhSrnd/SNgRarlacK+U73QJEytfG4WSbBW0c0vyVXnstVxtH9erVPR4bmU87p5zMA42W62R+OBEbGyvGc3NzbTFt7mqvR1hYmC12td+xvHJDRERERuHihoiIiIzCxQ0REREZhYsbIiIiMgoXN0RERGQUo7ulnHRAOb21eZ06dWwxraOpVatWYrxz58622K5du8Tcffv2iXHp1vyJiYli7u233y7Gr9add94pxm+++eYSeTwT3HjjjWJc6l7Szk2pW0LaEgCQu+oAuUtBO4ZGGp/WDaKR8rXOCo2U7+QYWveJdvt7aasFqXME0OfCN9984+HoqCxy2rkk5Wtz18m57bQbWCJ1ZwLAkCFDbLGPP/5YzH333XfFuDRv8vPzPR6bhFduiIiIyChc3BAREZFRuLghIiIio3BxQ0REREbh4oaIiIiMUqrdUk72m9H2K3LSyeGkEjwqKkqMP/fcc2J8wIABtphW3X3w4EEx/u2339piUrcMoHdsbNu2zRbT9rd55plnxLgkLi5OjEvPe9KkSWJugwYNxHhycrIt9t1333k8NhM42b9J6zw6c+ZMiYxD29MlMDBQjEsdHtreWcWxp45Gmu/amE+cOGGLad0gTvac0h7v4YcfFuPFsbcb2RVHd5C30zqxnHRROenm0vYs/P77722x5s2bi7kzZswQ40lJSbbY+vXrPR6bhFduiIiIyChc3BAREZFRuLghIiIio3BxQ0REREYpkYJirZhLi0uc3gJe0rFjRzHep08fW2zQoEFi7tGjR8X4L7/8YotphZgRERFiPCYmxhbTbrWtFStLhVuHDh0Sc6Xn+Ne//lXM1cbx008/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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras.datasets import fashion_mnist\n", + "import matplotlib.pyplot as plt\n", + "# Verify the data looks as expected\n", + "\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(X_train[i], cmap='gray') # show the i-th image in grayscale\n", + " ax.set_title(class_names[y_train[i]]) # show the label\n", + " ax.axis('off') # hide the axes\n", + "\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "hRuddCLuPXHA", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "hRuddCLuPXHA", + "outputId": "52047381-ee56-47c3-d5f3-4f3a8a78243c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X_train shape: (60000, 28, 28)\n", + "y_train shape: (60000,)\n", + "X_test shape: (10000, 28, 28)\n", + "y_test shape: (10000,)\n" + ] + } + ], + "source": [ + "print(\"X_train shape:\", X_train.shape) # Expected: (60000, 28, 28)\n", + "print(\"y_train shape:\", y_train.shape) # Expected: (60000,)\n", + "print(\"X_test shape:\", X_test.shape) # Expected: (10000, 28, 28)\n", + "print(\"y_test shape:\", y_test.shape) # Expected: (10000,)\n" + ] + }, + { + "cell_type": "markdown", + "id": "HioPjL4WPW3I", + "metadata": { + "id": "HioPjL4WPW3I" + }, + "source": [] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "wt1rVryGPZ0Q", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "wt1rVryGPZ0Q", + "outputId": "a7390c38-ad3d-4b39-dfa7-ede7133fc3a9" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Pixel value range in X_train: 0.0 to 1.0\n" + ] + } + ], + "source": [ + "print(\"Pixel value range in X_train:\", X_train.min(), \"to\", X_train.max())\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", + "**Your answer here**\n", + "Yes. The quality of the images is not good, it might be the issue related to 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": 19, + "id": "MqnMOTi-sjDu", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "MqnMOTi-sjDu", + "outputId": "1bfdc6b8-fe24-45f4-9fcc-c0109f93ec06" + }, + "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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.4003 - loss: 2.6649 - val_accuracy: 0.3631 - val_loss: 2.3043\n", + "Epoch 2/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.3682 - loss: 2.3018 - val_accuracy: 0.3284 - val_loss: 2.3043\n", + "Epoch 3/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.3267 - loss: 2.3020 - val_accuracy: 0.3286 - val_loss: 2.3043\n", + "Epoch 4/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.3291 - loss: 2.3021 - val_accuracy: 0.3286 - val_loss: 2.3043\n", + "Epoch 5/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.3278 - loss: 2.3021 - val_accuracy: 0.3288 - val_loss: 2.3043\n", + "Epoch 6/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.3377 - loss: 2.3002 - val_accuracy: 0.3192 - val_loss: 2.3045\n", + "Epoch 7/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.3185 - loss: 2.3021 - val_accuracy: 0.3205 - val_loss: 2.3043\n", + "Epoch 8/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.3359 - loss: 2.2899 - val_accuracy: 0.3178 - val_loss: 2.3048\n", + "Epoch 9/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.3140 - loss: 2.3024 - val_accuracy: 0.3168 - val_loss: 2.3048\n", + "Epoch 10/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.2906 - loss: 2.3028 - val_accuracy: 0.2871 - val_loss: 2.3026\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 2ms/step - accuracy: 0.2879 - loss: 2.3026\n", + "Test Accuracy: 0.287\n" + ] + } + ], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Dense, Flatten,Input, Dot\n", + "\n", + "# Create a simple linear regression model\n", + "model = Sequential()\n", + "# Add layers one by one\n", + "model.add(Flatten(input_shape=(28, 28))) # Flatten the 28x28 image\n", + "model.add(Dense(10)) # Output layer: 10 units, no activation\n", + "\n", + "# Compile the model\n", + "model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + "# Train the model\n", + "model.fit(X_train, y_train, epochs=10, batch_size=20, validation_data=(X_test, y_test))\n", + "\n", + "# Evaluate on test set\n", + "test_loss, test_acc = model.evaluate(X_test, y_test)\n", + "print(f\"Test Accuracy: {test_acc:.3f}\")\n", + "\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": "code", + "execution_count": 9, + "id": "8563a7aa", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8563a7aa", + "outputId": "945f85d5-ab82-484e-f3a4-158f8d57cd4b" + }, + "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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.1858 - loss: 1.8497 - val_accuracy: 0.1720 - val_loss: 1.8154\n", + "Epoch 2/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.1255 - loss: 1.8823 - val_accuracy: 0.1457 - val_loss: 1.8669\n", + "Epoch 3/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.1348 - loss: 1.9047 - val_accuracy: 0.1163 - val_loss: 1.9251\n", + "Epoch 4/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.1096 - loss: 1.8365 - val_accuracy: 0.1099 - val_loss: 1.6845\n", + "Epoch 5/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.1480 - loss: 1.7181 - val_accuracy: 0.1510 - val_loss: 1.6895\n", + "Epoch 6/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.1322 - loss: 1.6901 - val_accuracy: 0.1561 - val_loss: 1.7951\n", + "Epoch 7/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 2ms/step - accuracy: 0.1567 - loss: 1.7505 - val_accuracy: 0.3337 - val_loss: 1.6820\n", + "Epoch 8/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.3815 - loss: 1.5393 - val_accuracy: 0.3797 - val_loss: 1.5612\n", + "Epoch 9/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 2ms/step - accuracy: 0.3921 - loss: 1.5201 - val_accuracy: 0.2317 - val_loss: 1.7108\n", + "Epoch 10/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 2ms/step - accuracy: 0.2536 - loss: 1.6397 - val_accuracy: 0.4056 - val_loss: 1.7014\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - accuracy: 0.4089 - loss: 1.6922\n", + "Test Accuracy: 0.406\n" + ] + } + ], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Dense, Flatten,Input, Dot\n", + "\n", + "# Create a simple linear regression model\n", + "model = Sequential()\n", + "# Add layers one by one\n", + "model.add(Flatten(input_shape=(28, 28))) # Flatten the 28x28 image\n", + "model.add(Dense(32))\n", + "model.add(Dense(10)) # Output layer: 10 units, no activation\n", + "\n", + "# Compile the model\n", + "model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + "# Train the model\n", + "model.fit(X_train, y_train, epochs=10, batch_size=20, validation_data=(X_test, y_test))\n", + "\n", + "# Evaluate on test set\n", + "test_loss, test_acc = model.evaluate(X_test, y_test)\n", + "print(f\"Test Accuracy: {test_acc:.3f}\")\n", + "\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": { + "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", + "**Your answer here**\n", + "\n", + "The accuracy is low because the model does not include an activation function, which would help improve its performance." + ] + }, + { + "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": 18, + "id": "3513cf3d", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3513cf3d", + "outputId": "e3e703a3-872e-4d57-e7cb-ab042951647e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 9ms/step - accuracy: 0.7998 - loss: 0.5698 - val_accuracy: 0.8724 - val_loss: 0.3633\n", + "Epoch 2/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 9ms/step - accuracy: 0.8859 - loss: 0.3268 - val_accuracy: 0.8855 - val_loss: 0.3191\n", + "Epoch 3/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m28s\u001b[0m 9ms/step - accuracy: 0.9044 - loss: 0.2719 - val_accuracy: 0.8986 - val_loss: 0.2923\n", + "Epoch 4/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 9ms/step - accuracy: 0.9106 - loss: 0.2519 - val_accuracy: 0.8940 - val_loss: 0.2913\n", + "Epoch 5/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 9ms/step - accuracy: 0.9204 - loss: 0.2258 - val_accuracy: 0.8996 - val_loss: 0.2780\n", + "Epoch 6/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 9ms/step - accuracy: 0.9257 - loss: 0.2053 - val_accuracy: 0.8985 - val_loss: 0.2817\n", + "Epoch 7/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 9ms/step - accuracy: 0.9310 - loss: 0.1953 - val_accuracy: 0.9065 - val_loss: 0.2673\n", + "Epoch 8/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 9ms/step - accuracy: 0.9361 - loss: 0.1793 - val_accuracy: 0.9037 - val_loss: 0.2757\n", + "Epoch 9/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 9ms/step - accuracy: 0.9383 - loss: 0.1702 - val_accuracy: 0.8956 - val_loss: 0.2896\n", + "Epoch 10/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m26s\u001b[0m 9ms/step - accuracy: 0.9408 - loss: 0.1639 - val_accuracy: 0.9011 - val_loss: 0.2976\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step - accuracy: 0.9034 - loss: 0.2898\n", + "Test Accuracy: 0.901\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", + "model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1))) # convolution layer\n", + "model.add(MaxPooling2D(pool_size=(2, 2))) # pooling layer\n", + "model.add(Flatten()) # flatten to 1D\n", + "model.add(Dense(10, activation='softmax'))\n", + "\n", + "#compile the model\n", + "model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "# Train the model\n", + "model.fit(X_train, y_train, epochs=10, batch_size=20, validation_data=(X_test, y_test))\n", + "\n", + "# Evaluate the model\n", + "test_loss, test_acc = model.evaluate(X_test, y_test)\n", + "print(f\"Test Accuracy: {test_acc:.3f}\")\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", + "**Your answer here**\n", + "\n", + "Yes, it is improved at most by 5 times. The reason is including the activation." + ] + }, + { + "cell_type": "markdown", + "id": "1a5e2463", + "metadata": { + "id": "1a5e2463" + }, + "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": 21, + "id": "99d6f46c", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "99d6f46c", + "outputId": "6e1d3b14-d78a-411b-f59f-e62993234dbd" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "🔹 Testing model with 32 filters and Dropout\n", + "Epoch 1/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 26ms/step - accuracy: 0.7710 - loss: 0.6842 - val_accuracy: 0.8623 - val_loss: 0.3929\n", + "Epoch 2/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m24s\u001b[0m 26ms/step - accuracy: 0.8743 - loss: 0.3613 - val_accuracy: 0.8770 - val_loss: 0.3441\n", + "Epoch 3/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 26ms/step - accuracy: 0.8874 - loss: 0.3181 - val_accuracy: 0.8834 - val_loss: 0.3255\n", + "Epoch 4/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 25ms/step - accuracy: 0.8954 - loss: 0.3023 - val_accuracy: 0.8920 - val_loss: 0.3064\n", + "Epoch 5/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 25ms/step - accuracy: 0.8954 - loss: 0.2937 - val_accuracy: 0.8947 - val_loss: 0.2953\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 4ms/step - accuracy: 0.8977 - loss: 0.2965\n", + "Test Accuracy with 32 filters: 0.895\n", + "\n", + "🔹 Testing model with 64 filters and Dropout\n", + "Epoch 1/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 41ms/step - accuracy: 0.7828 - loss: 0.6323 - val_accuracy: 0.8661 - val_loss: 0.3815\n", + "Epoch 2/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 42ms/step - accuracy: 0.8826 - loss: 0.3343 - val_accuracy: 0.8758 - val_loss: 0.3331\n", + "Epoch 3/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 41ms/step - accuracy: 0.8942 - loss: 0.2968 - val_accuracy: 0.8912 - val_loss: 0.3093\n", + "Epoch 4/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m38s\u001b[0m 41ms/step - accuracy: 0.9010 - loss: 0.2787 - val_accuracy: 0.8920 - val_loss: 0.2988\n", + "Epoch 5/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 40ms/step - accuracy: 0.9089 - loss: 0.2563 - val_accuracy: 0.8987 - val_loss: 0.2801\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - accuracy: 0.8990 - loss: 0.2830\n", + "Test Accuracy with 64 filters: 0.899\n", + "\n", + "🔹 Testing model with 128 filters and Dropout\n", + "Epoch 1/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m71s\u001b[0m 75ms/step - accuracy: 0.8010 - loss: 0.5828 - val_accuracy: 0.8794 - val_loss: 0.3453\n", + "Epoch 2/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 72ms/step - accuracy: 0.8939 - loss: 0.3064 - val_accuracy: 0.8879 - val_loss: 0.3177\n", + "Epoch 3/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m81s\u001b[0m 71ms/step - accuracy: 0.9052 - loss: 0.2689 - val_accuracy: 0.8963 - val_loss: 0.2888\n", + "Epoch 4/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 72ms/step - accuracy: 0.9096 - loss: 0.2494 - val_accuracy: 0.8945 - val_loss: 0.3022\n", + "Epoch 5/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m67s\u001b[0m 71ms/step - accuracy: 0.9152 - loss: 0.2357 - val_accuracy: 0.8933 - val_loss: 0.2883\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 7ms/step - accuracy: 0.8959 - loss: 0.2911\n", + "Test Accuracy with 128 filters: 0.893\n" + ] + } + ], + "source": [ + "# A. Test Hyperparameters\n", + "\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n", + "from tensorflow.keras.regularizers import l2\n", + "\n", + "# Prepare data (already normalized)\n", + "X_train = X_train.reshape(-1, 28, 28, 1)\n", + "X_test = X_test.reshape(-1, 28, 28, 1)\n", + "\n", + "filters_list = [32, 64, 128] # hyperparameter: number of filters\n", + "\n", + "for filters in filters_list:\n", + " print(f\"\\n🔹 Testing model with {filters} filters and Dropout\")\n", + "\n", + " model = Sequential()\n", + " model.add(Conv2D(filters, (3, 3), activation='relu', input_shape=(28, 28, 1)))\n", + " model.add(MaxPooling2D(pool_size=(2, 2)))\n", + " model.add(Dropout(0.3)) # regularization\n", + " model.add(Flatten())\n", + " model.add(Dense(10, activation='softmax'))\n", + "\n", + " model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + " history = model.fit(X_train, y_train, epochs=5, batch_size=64,\n", + " validation_data=(X_test, y_test), verbose=1)\n", + "\n", + " test_loss, test_acc = model.evaluate(X_test, y_test)\n", + " print(f\"Test Accuracy with {filters} filters: {test_acc:.3f}\")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "dc43ac81", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "dc43ac81", + "outputId": "41ba0563-c36f-4272-d926-2e5e4f3c565c" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "🔹 Testing model with 32 filters and witout Dropout\n" + ] + }, + { + "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" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m30s\u001b[0m 31ms/step - accuracy: 0.7754 - loss: 0.6615 - val_accuracy: 0.8681 - val_loss: 0.3841\n", + "Epoch 2/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m27s\u001b[0m 29ms/step - accuracy: 0.8764 - loss: 0.3507 - val_accuracy: 0.8823 - val_loss: 0.3376\n", + "Epoch 3/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 27ms/step - accuracy: 0.8928 - loss: 0.3064 - val_accuracy: 0.8781 - val_loss: 0.3357\n", + "Epoch 4/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 27ms/step - accuracy: 0.9018 - loss: 0.2839 - val_accuracy: 0.8891 - val_loss: 0.3120\n", + "Epoch 5/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m25s\u001b[0m 27ms/step - accuracy: 0.9070 - loss: 0.2626 - val_accuracy: 0.8942 - val_loss: 0.2920\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 5ms/step - accuracy: 0.8989 - loss: 0.2942\n", + "Test Accuracy with 32 filters: 0.894\n", + "\n", + "🔹 Testing model with 64 filters and witout Dropout\n", + "Epoch 1/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m40s\u001b[0m 42ms/step - accuracy: 0.7859 - loss: 0.6131 - val_accuracy: 0.8774 - val_loss: 0.3505\n", + "Epoch 2/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m41s\u001b[0m 43ms/step - accuracy: 0.8860 - loss: 0.3272 - val_accuracy: 0.8875 - val_loss: 0.3180\n", + "Epoch 3/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 42ms/step - accuracy: 0.8989 - loss: 0.2860 - val_accuracy: 0.8959 - val_loss: 0.2934\n", + "Epoch 4/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m42s\u001b[0m 43ms/step - accuracy: 0.9084 - loss: 0.2598 - val_accuracy: 0.8929 - val_loss: 0.2983\n", + "Epoch 5/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m39s\u001b[0m 41ms/step - accuracy: 0.9153 - loss: 0.2393 - val_accuracy: 0.8994 - val_loss: 0.2744\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.9029 - loss: 0.2759\n", + "Test Accuracy with 64 filters: 0.899\n", + "\n", + "🔹 Testing model with 128 filters and witout Dropout\n", + "Epoch 1/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m68s\u001b[0m 72ms/step - accuracy: 0.7958 - loss: 0.5805 - val_accuracy: 0.8748 - val_loss: 0.3552\n", + "Epoch 2/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m84s\u001b[0m 74ms/step - accuracy: 0.8919 - loss: 0.3091 - val_accuracy: 0.8885 - val_loss: 0.3118\n", + "Epoch 3/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m66s\u001b[0m 71ms/step - accuracy: 0.9062 - loss: 0.2644 - val_accuracy: 0.8967 - val_loss: 0.2919\n", + "Epoch 4/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m84s\u001b[0m 73ms/step - accuracy: 0.9168 - loss: 0.2394 - val_accuracy: 0.9004 - val_loss: 0.2825\n", + "Epoch 5/5\n", + "\u001b[1m938/938\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m65s\u001b[0m 69ms/step - accuracy: 0.9250 - loss: 0.2171 - val_accuracy: 0.9010 - val_loss: 0.2738\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m4s\u001b[0m 12ms/step - accuracy: 0.9040 - loss: 0.2733\n", + "Test Accuracy with 128 filters: 0.901\n" + ] + } + ], + "source": [ + "# B. Test presence or absence of regularization\n", + "\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n", + "from tensorflow.keras.regularizers import l2\n", + "\n", + "# Prepare data (already normalized)\n", + "X_train = X_train.reshape(-1, 28, 28, 1)\n", + "X_test = X_test.reshape(-1, 28, 28, 1)\n", + "\n", + "filters_list = [32, 64, 128] # hyperparameter: number of filters\n", + "\n", + "for filters in filters_list:\n", + " print(f\"\\n🔹 Testing model with {filters} filters and witout Dropout\")\n", + "\n", + " model = Sequential()\n", + " model.add(Conv2D(filters, (3, 3), activation='relu', input_shape=(28, 28, 1)))\n", + " model.add(MaxPooling2D(pool_size=(2, 2)))\n", + " model.add(Flatten())\n", + " model.add(Dense(10, activation='softmax'))\n", + "\n", + " model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "\n", + " history = model.fit(X_train, y_train, epochs=5, batch_size=64,\n", + " validation_data=(X_test, y_test), verbose=1)\n", + "\n", + " test_loss, test_acc = model.evaluate(X_test, y_test)\n", + " print(f\"Test Accuracy with {filters} filters: {test_acc:.3f}\")\n" + ] + }, + { + "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", + "**Your answer here**\n", + "\n", + "Yes.The model with 128 filters without dropout achieved the highest accuracy. However, this may indicate that the model is overfitting — it memorizes the training data rather than learning general patterns." + ] + }, + { + "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": null, + "id": "31f926d1", + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "31f926d1", + "outputId": "39f8aec7-0e01-49cc-e483-b2bc5b7b4dc8" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m90s\u001b[0m 30ms/step - accuracy: 0.8191 - loss: 0.5123 - val_accuracy: 0.8868 - val_loss: 0.3199\n", + "Epoch 2/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m87s\u001b[0m 29ms/step - accuracy: 0.8958 - loss: 0.2912 - val_accuracy: 0.8828 - val_loss: 0.3107\n", + "Epoch 3/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m142s\u001b[0m 29ms/step - accuracy: 0.9068 - loss: 0.2570 - val_accuracy: 0.8975 - val_loss: 0.2821\n", + "Epoch 4/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m88s\u001b[0m 29ms/step - accuracy: 0.9161 - loss: 0.2306 - val_accuracy: 0.9029 - val_loss: 0.2794\n", + "Epoch 5/10\n", + "\u001b[1m3000/3000\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m88s\u001b[0m 29ms/step - accuracy: 0.9241 - loss: 0.2079 - val_accuracy: 0.9021 - val_loss: 0.2771\n", + "Epoch 6/10\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", + "model.add(Conv2D(128, (3, 3), activation='relu', input_shape=(28, 28, 1))) # convolution layer\n", + "model.add(MaxPooling2D(pool_size=(2, 2)))\n", + "model.add(Dropout(0.3)) # regularization # pooling layer\n", + "model.add(Flatten()) # flatten to 1D\n", + "model.add(Dense(10, activation='softmax'))\n", + "\n", + "#compile the model\n", + "model.compile(optimizer='adam',\n", + " loss='sparse_categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + "# Train the model\n", + "model.fit(X_train, y_train, epochs=10, batch_size=20, validation_data=(X_test, y_test))\n", + "\n", + "# Evaluate the model\n", + "test_loss, test_acc = model.evaluate(X_test, y_test)\n", + "print(f\"Test Accuracy: {test_acc:.3f}\")\n", + "\n" + ] + }, + { + "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", + "**Your answer here**\n", + "\n", + "It is the most accurate method due to using 128 filters and dropout." + ] + }, + { + "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": "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 +} diff --git a/02_activities/assignments/lab_1.ipynb b/02_activities/assignments/lab_1.ipynb new file mode 100644 index 00000000..286cd782 --- /dev/null +++ b/02_activities/assignments/lab_1.ipynb @@ -0,0 +1,2666 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "id": "kVwWQuNGmoA1" + }, + "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": "2O_FnLIpmoA2" + }, + "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": 5, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "NkVKKcU2moA2", + "outputId": "f29e2192-e668-44b7-935e-9826c669745c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 8, 8)" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "digits.images.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "pcniLEeBmoA2" + }, + "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": 6, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "KUUGGoIAmoA3", + "outputId": "db74287c-c082-4c45-f2ba-fa38bc7f4f24" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 64)" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "digits.data.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "-W85Dr-CmoA3" + }, + "source": [ + "For each image, we also have the corresponding label (or target, or class) in `digits.target`:" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Z2ufr1KjmoA3", + "outputId": "854bd1b8-a438-4d6f-b806-99be8a3c508c" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(1797,)" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "digits.target.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false, + "id": "DbCzfNe2moA3" + }, + "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": 8, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 521 + }, + "id": "M_41agpTmoA3", + "outputId": "e0a1ae1c-1321-480f-b4bb-367cae49b818" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH4CAYAAACbup4ZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAKwJJREFUeJzt3X90VHV6x/HPQGISIWEEATcQE1OxQJtdrOGHFJYgtlRh69jNoru2knXXs1W3BY5o1SMmWo8/qpGsRRaPqMGV1eWwEF30cLZdCGfbgwGqAWNFIxJMwCIBQ4LyK+TbP2xS2fBjwvcm88zk/TqHc/Tm3uc+M/NMPrkzd+aGnHNOAAAgpvrEugEAAEAgAwBgAoEMAIABBDIAAAYQyAAAGEAgAwBgAIEMAIABBDIAAAYQyAAAGEAgS6qrq1MoFNKTTz4ZWM3KykqFQiFVVlYGVhO9A/MIS5jHnhO3gVxeXq5QKKQtW7bEupUe8Rd/8RcKhUL66U9/GutWcAqJPo8ffPCB5s2bp4kTJyo1NVWhUEh1dXWxbgunkejzKEm7d+/WrFmzFA6HlZGRoeuuu04ff/xxrNvyEreB3JusWrVKGzdujHUb6MU2btyop59+Wi0tLRo1alSs20Evd+jQIU2dOlUbNmzQfffdpwcffFDvvPOOpkyZov3798e6vXNGIBt35MgR3Xnnnfqnf/qnWLeCXuyv//qv1dTUpHfffVc33XRTrNtBL7d48WLV1tZqzZo1uvvuuzVv3jz99re/1aeffqrS0tJYt3fOEjqQjx07pgceeEBXXHGFBgwYoH79+mny5Mlav379abdZuHChsrOzlZaWpilTpqimpqbTOtu3b1dhYaEGDhyo1NRU5efn6/XXXz9rP19++aW2b9+uxsbGqG/Dv/zLv6itrU3z58+PehvYFM/zOHDgQKWnp591PcSPeJ7HlStXauzYsRo7dmzHspEjR2ratGlasWLFWbe3KqEDubm5WUuXLlVBQYEef/xxlZSUaN++fZo+fbqqq6s7rf/SSy/p6aef1h133KF7771XNTU1uuqqq7R3796Odd577z1NmDBB77//vu655x6VlpaqX79+ikQiWr169Rn72bRpk0aNGqVFixZF1f8nn3yixx57TI8//rjS0tK6dNthT7zPIxJLvM5jW1ubtm3bpvz8/E4/GzdunHbs2KGWlpbo7gRrXJx68cUXnSS3efPm067T2trqjh49etKyzz//3A0dOtTdcsstHct27tzpJLm0tDTX0NDQsbyqqspJcvPmzetYNm3aNJeXl+eOHDnSsaytrc1NnDjRjRgxomPZ+vXrnSS3fv36TsuKi4ujuo2FhYVu4sSJHf8vyd1xxx1RbYue1Rvmsd0TTzzhJLmdO3d2aTv0nESex3379jlJ7qGHHur0s2eeecZJctu3bz9jDasS+gi5b9++Ou+88yR99VfVgQMH1Nraqvz8fL399tud1o9EIho2bFjH/48bN07jx4/Xm2++KUk6cOCA1q1bp1mzZqmlpUWNjY1qbGzU/v37NX36dNXW1mr37t2n7aegoEDOOZWUlJy19/Xr1+vXv/61ysrKunajYVY8zyMST7zO4+HDhyVJKSkpnX6Wmpp60jrxJqEDWZKWLVumb37zm0pNTdWgQYM0ePBgvfHGGzp48GCndUeMGNFp2WWXXdbx8Y6PPvpIzjktWLBAgwcPPulfcXGxJOmzzz7z7rm1tVX/+I//qL/7u7876T0SxL94nEckrnicx/a3744ePdrpZ0eOHDlpnXiTFOsGutPLL7+soqIiRSIR3XXXXRoyZIj69u2rRx99VDt27Ohyvba2NknS/PnzNX369FOuc+mll3r1LH31Xs0HH3ygZ599ttNnPVtaWlRXV6chQ4bo/PPP994Xek68ziMSU7zO48CBA5WSkqJPP/2008/al2VmZnrvJxYSOpBXrlyp3NxcrVq1SqFQqGN5+19rf6i2trbTsg8//FA5OTmSpNzcXElScnKyrr766uAb/j+ffPKJjh8/rj//8z/v9LOXXnpJL730klavXq1IJNJtPSB48TqPSEzxOo99+vRRXl7eKb/0pKqqSrm5uXH7iYCEfsm6b9++kiTnXMeyqqqq037JRkVFxUnvcWzatElVVVW65pprJElDhgxRQUGBnn322VP+dbZv374z9hPtaf033nijVq9e3emfJF177bVavXq1xo8ff8YasCde5xGJKZ7nsbCwUJs3bz4plD/44AOtW7dO3/ve9866vVVxf4T8wgsvaO3atZ2Wz5kzRzNnztSqVat0/fXXa8aMGdq5c6eWLFmi0aNH69ChQ522ufTSSzVp0iTddtttOnr0qMrKyjRo0CDdfffdHes888wzmjRpkvLy8nTrrbcqNzdXe/fu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eNcIYh5PnDjhXSOI55aFx6Qr8xhyUazV0NCgrKws/86Q0Orr6zV8+PBu3w/ziGgwj7AkmnmMKpDb2tq0Z88epaenKxQKBdYgEoNzTi0tLcrMzFSfPt3/LgjziDNhHmFJV+YxqkAGAADdi5O6AAAwgEAGAMAAAllSXV2dQqGQnnzyycBqVlZWKhQKqbKyMrCa6B2YR1jCPPacuA3k8vJyhUIhbdmyJdatdJvdu3dr1qxZCofDysjI0HXXXaePP/441m3hFHrDPErSr371K1155ZXq16+fwuGwJk6cqHXr1sW6LfyB3jCPr776qv7sz/5MqampGjx4sH70ox+psbEx1m15iepzyOh5hw4d0tSpU3Xw4EHdd999Sk5O1sKFCzVlyhRVV1dr0KBBsW4RvUxJSYkeeughFRYWqqioSMePH1dNTY12794d69bQy/z85z/X7bffrmnTpumpp55SQ0ODfvazn2nLli2qqqpSampqrFs8JwSyUYsXL1Ztba02bdqksWPHSpKuueYa/emf/qlKS0v1yCOPxLhD9CZvvfWWHnroIZWWlmrevHmxbge92LFjx3Tffffp29/+tv7t3/6t46NmEydO1He+8x0999xz+od/+IcYd3lu4vYl62gcO3ZMDzzwgK644goNGDBA/fr10+TJk7V+/frTbrNw4UJlZ2crLS1NU6ZMUU1NTad1tm/frsLCQg0cOFCpqanKz8/X66+/ftZ+vvzyS23fvj2ql1VWrlypsWPHdoSxJI0cOVLTpk3TihUrzro97InneSwrK9NFF12kOXPmyDmnQ4cOnXUb2Bav81hTU6OmpibdcMMNJ33ue+bMmerfv79effXVs+7LqoQO5ObmZi1dulQFBQV6/PHHVVJSon379mn69Omqrq7utP5LL72kp59+WnfccYfuvfde1dTU6KqrrtLevXs71nnvvfc0YcIEvf/++7rnnntUWlqqfv36KRKJaPXq1WfsZ9OmTRo1apQWLVp0xvXa2tq0bds25efnd/rZuHHjtGPHjkC+Ig89K17nUZJ+97vfaezYsXr66ac1ePBgpaen6xvf+EZU28KmeJ3H9q94TUtL6/SztLQ0vfPOO2pra4viHjDIxakXX3zRSXKbN28+7Tqtra3u6NGjJy37/PPP3dChQ90tt9zSsWznzp1OkktLS3MNDQ0dy6uqqpwkN2/evI5l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ffdd/fjHP1Zzc7OmTZsW9fawIxHmsd0777yj999/Xz/4wQ+6vC1siOd5LCgo0HvvvacFCxboo48+0o4dO/TP//zP2rJli+6+++4u3xdmuDj14osvOklu8+bNp12ntbXVHT169KRln3/+uRs6dKi75ZZbOpbt3LnTSXJpaWmuoaGhY3lVVZWT5ObNm9exbNq0aS4vL88dOXKkY1lbW5ubOHGiGzFiRMey9evXO0lu/fr1nZYVFxdHfTv/+I//2Elyklz//v3d/fff706cOBH19ugZvWUe2915551Okvvv//7vLm+L7pfo83jo0CE3a9YsFwqFOn4/nn/++a6iouKs21qW0EfIffv21XnnnSfpq6+3O3DggFpbW5Wfn6+333670/qRSETDhg3r+P9x48Zp/PjxevPNNyVJBw4c0Lp16zRr1iy1tLSosbFRjY2N2r9/v6ZPn67a2lrt3r37tP0UFBTIOaeSkpKob8OLL76otWvXavHixRo1apQOHz4cyIUt0PMSYR7be3/11Vd1+eWXa9SoUV3aFnbE8zympKTosssuU2FhoV555RW9/PLLys/P19/+7d/qrbfe6uI9YUfCn9S1bNkylZaWavv27SddVeeSSy7ptO6pPr5x2WWXacWKFZKkjz76SM45LViwQAsWLDjl/j777LOThtbXlVde2fHfN954Y8cvwCA/E4ieE+/zKEkbNmzQ7t274/bEGfy/eJ3Hn/70p3rrrbf09ttvd3w/9KxZs/Qnf/InmjNnjqqqqrz3EQsJHcgvv/yyioqKFIlEdNddd2nIkCHq27evHn30Ue3YsaPL9dra2iRJ8+fP1/Tp00+5zqWXXurV85lccMEFuuqqq7R8+XICOQ4lyjwuX75cffr00fe///3Aa6PnxOs8Hjt2TM8//7zuvvvuky7WkJycrGuuuUaLFi3SsWPHOo7+40lCB/LKlSuVm5urVatWnXQVluLi4lOuX1tb22nZhx9+qJycHElSbm6upK8e+Kuvvjr4hqNw+PBhHTx4MCb7hp9EmMejR4/q17/+tQoKCpSZmdkj+0T3iNd53L9/v1pbW0/51t3x48fV1tYWt2/rJfx7yNLJF4auqqrSxo0bT7l+RUXFSe9xbNq0SVVVVbrmmmskffWxo4KCAj377LP69NNPO22/b9++M/bTldP6P/vss07L6urq9Lvf/U75+fln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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": "1pdAICuhmoA4" + }, + "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": 9, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 521 + }, + "id": "2SZ__jotmoA4", + "outputId": "1b7e620b-edb4-4f72-be2e-ee732119635c" + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH4CAYAAACbup4ZAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJTFJREFUeJzt3X9MlXX/x/HXUQhREbK0puJBZn/Uxp2WqWOax2xjFXUfq+lcP8Scf1Rr6lbd0h9CW8takdQqbbXEVnesOcXmWqstzr3uzUFleN+0WM4kIZqD9AjeKt7E5/vHPfjmUDzwueC8gedj8w8vr/M6H855c17nOud4rpBzzgkAACTVuGQvAAAAUMgAAJhAIQMAYACFDACAARQyAAAGUMgAABhAIQMAYACFDACAARQyAAAGUMiSGhsbFQqF9OqrrwaWGYvFFAqFFIvFAsvE2MA8whLmcfiM2EKuqKhQKBTSt99+m+ylDJnKykrdcsstmjBhgqZNm6b169erra0t2cvCJTCPsIR5HJlGbCGPdjt27NCaNWs0depUvfbaa9qwYYMqKyu1YsUKnT9/PtnLwxjDPMKS0TqPKcleAPq6cOGCnnvuOd1+++368ssvFQqFJEn5+fm699579e677+qpp55K8ioxVjCPsGQ0z+OoPkK+cOGCtm7dqltvvVWZmZmaNGmSli5dqurq6steZvv27QqHw0pPT9eyZctUX1/fZ5+GhgY9+OCDmjp1qiZMmKAFCxbo008/veJ6zp49q4aGhiu+rFJfX694PK7Vq1f3DpskFRYWavLkyaqsrLzidcEe5hGWMI/2jOpCbm9v13vvvadIJKKXX35ZpaWlam1tVUFBgerq6vrs/8EHH+iNN97Qk08+qeLiYtXX1+uOO+7QiRMnevf54YcftHjxYv3444/asmWLysrKNGnSJEWjUe3bt6/f9dTW1urGG2/Um2++2e9+nZ2dkqT09PQ+/5aenq7vv/9e3d3dCdwCsIR5hCXMo0FuhNq1a5eT5L755pvL7tPV1eU6Ozsv2nbq1Cl33XXXuccee6x327Fjx5wkl56e7pqbm3u319TUOElu8+bNvdtWrFjh8vLy3Pnz53u3dXd3u/z8fHfDDTf0bquurnaSXHV1dZ9tJSUl/f5sra2tLhQKufXr11+0vaGhwUlyklxbW1u/GRhezCPzaAnzODLncVQfIY8fP15XXXWVJKm7u1snT55UV1eXFixYoEOHDvXZPxqNaubMmb1/X7hwoRYtWqTPPvtMknTy5El99dVXWrVqlTo6OtTW1qa2tjb9/vvvKigo0JEjR/Trr79edj2RSETOOZWWlva77muvvVarVq3S7t27VVZWpp9//llff/21Vq9erdTUVEnSuXPnBnpzIMmYR1jCPBqU5CcEg5bIM0DnnKuoqHB5eXkuNTW199mTJDdnzpzefXqeAW7durXP5R955BGXlpbmnPv/Z4T9/Tl06JBz7tLPAAciHo+7++6776Lshx9+2N1///1Okjt16tSgcjE0mMdTg8rF0GAeTw0qN9lG9aesP/zwQxUVFSkajeqZZ57R9OnTNX78eG3btk1Hjx4dcF7P+xJPP/20CgoKLrnP3LlzvdbcIzMzU/v379fx48fV2NiocDiscDis/Px8TZs2TVlZWYFcD4YP8whLmEd7RnUh79mzR7m5udq7d+9Fn8YrKSm55P5Hjhzps+2nn35STk6OJCk3N1eSlJqaqjvvvDP4BV/C7NmzNXv2bElSPB7Xd999pwceeGBYrhvBYh5hCfNoz6h/D1mSnHO922pqanTw4MFL7l9VVXXRexy1tbWqqanRXXfdJUmaPn26IpGI3nnnHf322299Lt/a2trvehL9WP/lFBcXq6urS5s3bx7U5ZFczCMsYR7tGfFHyO+//74+//zzPts3btyowsJC7d27VytXrtQ999yjY8eOaefOnbrpppt05syZPpeZO3eulixZoscff1ydnZ0qLy/XNddco2effbZ3n7feektLlixRXl6eNmzYoNzcXJ04cUIHDx5Uc3OzDh8+fNm11tbWavny5SopKbniBxdeeukl1dfXa9GiRUpJSVFVVZW++OILvfDCC7rtttsSv4EwrJhHWMI8jjBJfg970Ho+tHC5P01NTa67u9u9+OKLLhwOu7S0NDd//nx34MABt3btWhcOh3uzej608Morr7iysjKXnZ3t0tLS3NKlS93hw4f7XPfRo0fdo48+6q6//nqXmprqZs6c6QoLC92ePXt69/H5WL9zzh04cMAtXLjQZWRkuIkTJ7rFixe7Tz75xOcmwxBiHmEJ8zgyhZz70+sVAAAgKUb1e8gAAIwUFDIAAAZQyAAAGEAhAwBgAIUMAIABFDIAAAYk9MUg3d3damlpUUZGxkVf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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": "vqei_GjSmoA4" + }, + "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": "NJdMmElNmoA4" + }, + "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": 10, + "metadata": { + "id": "IRhZBPgsmoA4" + }, + "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": "459rL6XXmoA4" + }, + "source": [ + "Let's confirm that the data has been split correctly:" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "qENnh-MXmoA4", + "outputId": "6612f835-b656-4ddc-e411-66efaaaca6f0" + }, + "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": "uEGdkJBEmoA4" + }, + "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": "0_uQWDlLmoA4" + }, + "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": 12, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pok2lnOqmoA4", + "outputId": "3630a003-cb2f-429e-b49b-de1603cab564" + }, + "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": "FoyfYwkumoA4" + }, + "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": 28, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 232 + }, + "id": "n9KzVmWSmoA5", + "outputId": "45623703-3183-42a8-ea63-65d4896874e3" + }, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_4\"\n",
+              "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_4\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+              "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+              "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+              "│ dense_9 (Dense)                 │ (None, 64)             │         4,160 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_10 (Dense)                │ (None, 64)             │         4,160 │\n",
+              "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+              "│ dense_11 (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_9 (\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_10 (\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_11 (\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": "P6SELS7BmoA5" + }, + "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": 14, + "metadata": { + "id": "fNkgliiEmoA5" + }, + "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": "RlOivzfomoA5" + }, + "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": 15, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "aJY_MnRwmoA5", + "outputId": "eaf6ed66-2bb7-4d5c-c591-2cacea0d1d82" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 9ms/step - accuracy: 0.3353 - loss: 2.6528 - val_accuracy: 0.8056 - val_loss: 0.6764\n", + "Epoch 2/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.8086 - loss: 0.5830 - val_accuracy: 0.8715 - val_loss: 0.3767\n", + "Epoch 3/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.9015 - loss: 0.3161 - val_accuracy: 0.9132 - val_loss: 0.2889\n", + "Epoch 4/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9295 - loss: 0.2359 - val_accuracy: 0.9306 - val_loss: 0.2333\n", + "Epoch 5/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9529 - loss: 0.1777 - val_accuracy: 0.9340 - val_loss: 0.2173\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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, + "id": "BIFKh_1XmoA5" + }, + "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": 16, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "3dGk-1K_moA5", + "outputId": "e4577d11-15f2-45ac-9c47-bce1708d8438" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.9631 - loss: 0.1497 \n", + "Loss: 0.19\n", + "Accuracy: 95.00%\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": "mdtrU4ETmoA5" + }, + "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": 17, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 539 + }, + "id": "0elPJKLYmoA5", + "outputId": "41f8b4d0-b02f-4df8-ddc3-4b3f4ece7aa4" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step \n" + ] + }, + { + "data": { + "image/png": "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Zs6cGbb+okWL1KdPH82bN09PP/20AoGA7rrrLr355puX3HZj5+Ncq1evVk5OjqfTU9EWK/146tSpBkOm7rTm1q1bG7fjFxEL/Th06FC1atVKM2bM0B/+8Aft379f69at01NPPaWJEyfq2muvbdxOO4J+rC8W+rFOs+WF17fYdadkNm7caFVVVVZRUWGvvvqqZWVlWUpKiu3fv9/MzCZNmmSSrKioKGz9LVu2mCRbvXp12PL169eHLT948KAlJibabbfdZrW1taHHPfLIIyap3imI3Nxcy83NveT49+3bZ6NHj7Zly5bZb37zGystLbWrr77aWrVqVe80WaTqTmsUFxdbVVWV/e1vf7MtW7ZY//79TZK99tprocfOnz/f0tLS7NNPPw2rUVRUZPHx8fb555+Hlp04cSLsMadPn7brr7/eRowYEba8oVMykc7H+Xbt2mWSbPbs2Y1eNxpivR+/853vWGZmph05ciRs+cCBA02SlZSURDoVIbHejy+99JJlZmaapNDPpEmT7MyZMxGtH030Y32x3I/NkRfn8i2Qz//Jzc219evXhx5X13D79u0LW/9HP/qRtWnTxg4ePGhVVVVhP+np6fbAAw+YmVl5eblJCqtp9nUjNtRwXnz55ZfWsWNH69mzZ5PWr2u483/S09PtZz/7Wdhje/XqZbfeemu9fd+4caNJslWrVjW4jUOHDllVVZVNmzbNMjMzw37n5/+Q58yZY5Jsx44dvtRrbrHej+vWrTNJNnbsWNu2bZt98sknNmPGDEtISDBJNn/+/EbXjPV+fOutt2z06NFWWlpqb7zxhs2cOdMCgYD9+Mc/bnLNlkI/1hfr/Xg+r3lxLt+usn7hhRfUo0cPBQIBdezYUT179qx39WMgEKj35dq7d+/W4cOH1aFDhwbrHjx4UJK0b98+SVL37t3Dft++ffuwUxx+uOqqqzR58mQ9++yz2r9/f5O/oH7KlCm66667dPLkSf3ud7/T888/X+8uUbt379bOnTvVvn37BmvU7b8krV27VgsWLND27dvD7oTSXN+fa2YqLy/X9ddfr169ejXLNppLrPbj2LFjtXjxYhUVFalv376SpG7duumpp57S7NmzlZ6e3uTasdiP7733nm6//Xb94Q9/0E033SRJmjhxolq3bq3i4mL967/+q7797W/7tr3mQj/WF4v92BC/8kLy8WNP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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": "tTHQXC-9moA5" + }, + "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": "6QfkOQ4gmoA5" + }, + "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": { + "id": "vCHzl5NitkWA" + }, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "id": "b-Piwdkjtr-9" + }, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Input, Dense\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "model = Sequential()\n", + "\n", + "# Input layer\n", + "model.add(Input(shape=(X_train.shape[1],))) # Input tensor specifying the shape\n", + "model.add(Dense(32, activation='relu')) # 32 neurons, ReLU activation\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(128, activation='relu')) # 128 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "model.add(Dense(y_train.shape[1], activation='softmax')) # softmax activation\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "metadata": { + "id": "gcX4KTPGmoA6" + }, + "outputs": [], + "source": [ + "# 1. Decreasing the learning rate\n", + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 0.001), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 797 + }, + "id": "8XP_ankuv-2x", + "outputId": "ed7400b5-7d05-435a-df3c-ff59a5224b75" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - accuracy: 0.1322 - loss: 3.2101 - val_accuracy: 0.2812 - val_loss: 2.1268\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.2960 - loss: 2.0068 - val_accuracy: 0.4479 - val_loss: 1.7008\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.4135 - loss: 1.6210 - val_accuracy: 0.5278 - val_loss: 1.4224\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.5502 - loss: 1.3335 - val_accuracy: 0.6458 - val_loss: 1.2256\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.6362 - loss: 1.1507 - val_accuracy: 0.6806 - val_loss: 1.0677\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.6573 - loss: 1.0671 - val_accuracy: 0.7083 - val_loss: 0.9584\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.7495 - loss: 0.8874 - val_accuracy: 0.7465 - val_loss: 0.8593\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.7383 - loss: 0.8781 - val_accuracy: 0.7986 - val_loss: 0.7832\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.7865 - loss: 0.7655 - val_accuracy: 0.8056 - val_loss: 0.7202\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.7930 - loss: 0.7004 - val_accuracy: 0.8194 - val_loss: 0.6725\n" + ] + }, + { + "data": { + "image/png": "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OC+88AKbN2+mY8eODBgwgLS0NEd3rcFZvnw548aNY926dSxatIiioiJuuOEGcnNzHd21Bm/Dhg18+umndOjQwdFdabBOnTpF7969cXFxYd68eezatYu3336bgIAAR3etwXrjjTf4+OOP+eCDD0hISOCNN97gX//6F++//76ju1ZnNdilvVdccQXdu3fngw8+AIz9b6KiopgwYQJPP/20g3vXsJ04cYLQ0FCWL19O3759Hd2dBisnJ4cuXbrw0Ucf8corr9CpUyfeffddR3erwXn66adZvXo1K1eudHRXpNSQIUMICwvjyy+/LD82YsQIPDw8+Prrrx3Ys7qrQY6MFBYWsmnTJvr3719+zGw2079/f9auXevAnglAZmYmAIGBgQ7uScM2btw4brzxxgr/nUjNmzVrFt26deMvf/kLoaGhdO7cmc8//9zR3WrQevXqxZIlS9i7dy8A27ZtY9WqVQwaNMjBPau76sRGebaWnp5OSUkJYWFhFY6HhYWxe/duB/VKwBihmjhxIr1796Z9+/aO7k6D9d1337F582Y2bNjg6K40eAcPHuTjjz/m8ccf5x//+AcbNmzgkUcewdXVldGjRzu6ew3S008/TVZWFm3atMHJyYmSkhJeffVVRo4c6eiu1VkNMoxI7TVu3Dh27NjBqlWrHN2VBuvIkSM8+uijLFq0CHd3d0d3p8GzWCx069aN1157DYDOnTuzY8cOPvnkE4URB/nhhx/45ptv+Pbbb2nXrh1bt25l4sSJREZG6ndSRQ0yjAQHB+Pk5MTx48crHD9+/Djh4eEO6pWMHz+e2bNns2LFCho3buzo7jRYmzZtIi0tjS5dupQfKykpYcWKFXzwwQcUFBTg5OTkwB42LBEREbRt27bCsdjYWKZPn+6gHsmTTz7J008/zR133AFAXFwciYmJTJ48WWGkihrknBFXV1e6du3KkiVLyo9ZLBaWLFlCz549HdizhslqtTJ+/HhmzpzJb7/9RrNmzRzdpQbtuuuuIz4+nq1bt5Y/unXrxsiRI9m6dauCSA3r3bv3OUvd9+7dS3R0tIN6JHl5eZjNFb8+nZycsFgsDupR3dcgR0YAHn/8cUaPHk23bt3o0aMH7777Lrm5udx7772O7lqDM27cOL799lt++eUXfHx8SE1NBcDPzw8PDw8H967h8fHxOWe+jpeXF0FBQZrH4wCPPfYYvXr14rXXXuO2225j/fr1fPbZZ3z22WeO7lqDNXToUF599VWaNGlCu3bt2LJlC++88w733Xefo7tWd1kbsPfff9/apEkTq6urq7VHjx7WdevWObpLDRJw3seUKVMc3TUpdfXVV1sfffRRR3ejwfr111+t7du3t7q5uVnbtGlj/eyzzxzdpQYtKyvL+uijj1qbNGlidXd3tzZv3tz6zDPPWAsKChzdtTqrwdYZERERkdqhQc4ZERERkdpDYUREREQcSmFEREREHEphRERERBxKYUREREQcSmFEREREHEphRERERBxKYUREREQcSmFEREREHEphRERERBxKYUREREQcSmFEREREHOr/A6BLwhn1b4I7AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 816 + }, + "id": "yu1KIfMEwdD8", + "outputId": "6fa9e3e0-4f17-46bf-c350-5b6ba56c1847" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.8163 - loss: 0.6569 - val_accuracy: 0.8194 - val_loss: 0.6660\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8369 - loss: 0.6180 - val_accuracy: 0.8194 - val_loss: 0.6605\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8315 - loss: 0.6373 - val_accuracy: 0.8194 - val_loss: 0.6557\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8102 - loss: 0.6784 - val_accuracy: 0.8229 - val_loss: 0.6509\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8078 - loss: 0.6593 - val_accuracy: 0.8229 - val_loss: 0.6467\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8401 - loss: 0.6045 - val_accuracy: 0.8229 - val_loss: 0.6424\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8386 - loss: 0.6292 - val_accuracy: 0.8229 - val_loss: 0.6382\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.8215 - loss: 0.6486 - val_accuracy: 0.8229 - val_loss: 0.6340\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8166 - loss: 0.6392 - val_accuracy: 0.8264 - val_loss: 0.6300\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.8246 - loss: 0.6352 - val_accuracy: 0.8333 - val_loss: 0.6261\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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sVqtJiYsWkJCQqhZs+Y158LDw/nhhx9MSiSvvPIKgwYN4l//+hcAderU4ciRI4wcOVIFy23SGJYbcHd3JyIigri4uOxzdruduLg4mjZtamKyosnhcNC7d29mzZrFL7/8QqVKlcyOVKS1adOGHTt2sHXr1uxHo0aN6N69O1u3blWxks+ioqL+Ms0/ISGBChUqmJRIrly5govLtV+xVqsVu91uUqKCTy0sNzFgwACeeOIJGjVqRJMmTRg7diypqak89dRTZkcrcmJiYvjmm2/48ccf8fPzIykpCYCAgAC8vLxMTlf0+Pn5/WX8kI+PDyVLltS4IhO8+OKLNGvWjNjYWB5++GE2bNjApEmTmDRpktnRiqxOnTrxzjvvUL58eWrVqsWWLVv44IMPePrpp82OVnA55KY++eQTR/ny5R3u7u6OJk2aONatW2d2pCIJuO5jypQpZkeT37Rs2dLRr18/s2MUWT/99JOjdu3aDg8PD0eNGjUckyZNMjtSkZaSkuLo16+fo3z58g5PT09H5cqVHUOGDHGkp6ebHa3A0josIiIi4vQ0hkVEREScngoWERERcXoqWERERMTpqWARERERp6eCRURERJyeChYRERFxeipYRERExOmpYBERERGnp4JFREREnJ4KFhEREXF6KlhERETE6algEREREaf3/0HQDtdVNoIYAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 1. Decreasing the learning rate\n", + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 0.0001), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "mCfwijwWxYWF" + }, + "source": [ + "Small learning rate increases accuracy." + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 816 + }, + "id": "lkEv7C85moA6", + "outputId": "52d9ad8e-099b-4b3e-9e7a-ddd284fa8418" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.1931 - loss: 7.2397 - val_accuracy: 0.1875 - val_loss: 2.7809\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1770 - loss: 2.2218 - val_accuracy: 0.1076 - val_loss: 2.3045\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1023 - loss: 2.2975 - val_accuracy: 0.1181 - val_loss: 2.2778\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1000 - loss: 2.3321 - val_accuracy: 0.1076 - val_loss: 2.3070\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.1093 - loss: 2.3009 - val_accuracy: 0.1076 - val_loss: 2.3077\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0848 - loss: 2.3012 - val_accuracy: 0.1076 - val_loss: 2.3080\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1034 - loss: 2.3005 - val_accuracy: 0.1076 - val_loss: 2.3090\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1059 - loss: 2.3017 - val_accuracy: 0.1076 - val_loss: 2.3090\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1065 - loss: 2.2990 - val_accuracy: 0.1076 - val_loss: 2.3091\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1155 - loss: 2.2977 - val_accuracy: 0.1076 - val_loss: 2.3091\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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4oor1KdPH8XHx2v48OH63//931aPe+Jlmi+++EKTJk1SbGyshg4dqk2bNp20z6233qrBgwcrPj5eOTk5uvPOO1VbWyvJ1zJxzz336KOPPpJhGDIMw1/ziZdp8vPz9YMf/EBxcXFKTU3Vddddp/Ly410Drr76as2cOVMPP/ywMjMzlZqaqry8PP+5AlFYWKgZM2YoMTFRdrtdl112mQ4ePOh//aOPPtL3v/99JSUlyW63a8yYMXr//fcl+e6xM336dKWkpCghIUHDhg3Tyy+/HHAtpxLx08FLvj+a7J4J2rW/VAWHK5SbGdw7AwNA2PB6pdrKzj9vdLxkGG3aNCoqSrNnz9bq1at1++23y6jf75lnnpHb7dYVV1yh8vJyjRkzRrfeeqvsdrteeukl/fznP9fAgQN11llnnfIcHo9HP/nJT5Senq53331XZWVlTfqXNEhKStLq1avVu3dv5efn69prr1VSUpJ+9atf6fLLL9cnn3yif/7zn3r11VclSQ6H46RjVFRUaMqUKRo/frx27Nih4uJizZ07V/PmzWsSuF5//XVlZmbq9ddf15dffqnLL79co0aN0rXXXtumz+3E99cQRN58803V1dUpLy9Pl19+ud544w1J0qxZszR69GitWLFCVqtVu3btUnS073+Y5+XlqaamRlu2bFFCQoJ2796txMTEdtfRVoSRejlpx8MIAHRbtZXSA707/7y//k6KSWjz5tdcc40eeughvfnmmzrvvPMk+S7RXHLJJXI4HHI4HLr55pv928+fP18bN27U3//+9zaFkVdffVWffvqpNm7cqN69fZ/HAw88cFI/jzvuuMP/eMCAAbr55pu1du1a/epXv1JcXJwSExMVFRWljIyMFs+1Zs0aVVdX629/+5sSEnyfwfLlyzV9+nQ9+OCDSk9PlySlpKRo+fLlslqtGjJkiC688EJt3rw5oDCyefNm5efnq6CgQFlZWZKkv/3tbxo2bJh27NihcePGqbCwULfccouGDBkiSRo0aJB//8LCQl1yySUaPny4JCknJ6fdNbQHl2nqNdy99yvuUQMAphsyZIgmTJigv/71r5KkL7/8Um+99ZbmzJkjSXK73Vq8eLGGDx+uHj16KDExURs3blRhYWGbjr9nzx5lZWX5g4gkjR8//qTtnn76aU2cOFEZGRlKTEzUHXfc0eZzND7XyJEj/UFEkiZOnCiPx6PPPvvMv27YsGGyWq3+55mZmSouLm7XuRqfMysryx9EJGno0KFKTk7Wnj17JEk33XST5s6dq8mTJ2vp0qX66quv/NveeOONuu+++zRx4kTdddddAXUYbg9aRuo1dGKlZQRAtxYd72ulMOO87TRnzhzNnz9ff/jDH7Rq1SoNHDhQ5557riTpoYce0qOPPqply5Zp+PDhSkhI0MKFC1VTUxO0krdv365Zs2bpnnvu0ZQpU+RwOLR27Vo98sgjQTtHYw2XSBoYhiGPJ3T3TLv77rv1s5/9TC+99JI2bNigu+66S2vXrtXFF1+suXPnasqUKXrppZf0yiuvaMmSJXrkkUc0f/78kNRCy0g9/yyshBEA3Zlh+C6XdPbSxv4ijV122WWyWCxas2aN/va3v+maa67x9x/ZunWrZsyYoSuvvFIjR45UTk6OPv/88zYfOzc3V/v371dRUZF/3TvvvNNkm23btql///66/fbbNXbsWA0aNEj79u1rsk1MTIzc7tZHYebm5uqjjz5SRcXx35etW7fKYrHo9NNPb3PN7dHw/vbv3+9ft3v3bpWWlmro0KH+dYMHD9YvfvELvfLKK/rJT36iVatW+V/LysrS9ddfr2effVa//OUv9cQTT4SkVokw4jegpy+1l1bWqqQieMkaABCYxMREXX755Vq0aJGKiop09dVX+18bNGiQNm3apG3btmnPnj36z//8zyYjRU5l8uTJGjx4sK666ip99NFHeuutt3T77bc32WbQoEEqLCzU2rVr9dVXX+n3v/+91q1b12SbAQMGqKCgQLt27dLhw4flcrlOOtesWbMUGxurq666Sp988olef/11zZ8/Xz//+c/9/UUC5Xa7tWvXribLnj17NHnyZA0fPlyzZs3Szp079d5772n27Nk699xzNXbsWFVVVWnevHl64403tG/fPm3dulU7duxQbm6uJGnhwoXauHGjCgoKtHPnTr3++uv+10KBMFIvPiZKmY5YSdwwDwDCxZw5c1RSUqIpU6Y06d9xxx136Mwzz9SUKVN03nnnKSMjQzNnzmzzcS0Wi9atW6eqqiqdddZZmjt3ru6///4m2/z4xz/WL37xC82bN0+jRo3Stm3bdOeddzbZ5pJLLtHUqVP1/e9/X2lpac0OL46Pj9fGjRt19OhRjRs3Tj/96U91/vnna/ny5e37MJpR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tbW1+tGPfqSKigqzS4t4O3bs0OOPP64RI0aYXUrEKikp0cSJExUdHa0NGzZo9+7deuSRR5SSkmJ2aRHrwQcf1IoVK7R8+XLt2bNHDz74oP7rv/5Ljz32mNmldVkRO7T37LPP1rhx47R8+XJJvvvfZGVlaf78+brttttMri6yHTp0SL169dKbb76pSZMmmV1OxCovL9eZZ56pP/7xj7rvvvs0atQoLVu2zOyyIs5tt92mrVu36q233jK7FNS76KKLlJ6err/85S/+dZdcconi4uL05JNPmlhZ1xWRLSM1NTX64IMPNHnyZP86i8WiyZMna/v27SZWBkkqKyuTJPXo0cPkSiJbXl6eLrzwwib/f4LOt379eo0dO1aXXnqpevXqpdGjR+uJJ54wu6yINmHCBG3evFmff/65JOmjjz7S22+/rWnTpplcWdfVJW6UF2yHDx+W2+1Wenp6k/Xp6en69NNPTaoKkq+FauHChZo4caLOOOMMs8uJWGvXrtXOnTu1Y8cOs0uJeHv37tWKFSt000036de//rV27NihG2+8UTExMbrqqqvMLi8i3XbbbXI6nRoyZIisVqvcbrfuv/9+zZo1y+zSuqyIDCMIX3l5efrkk0/09ttvm11KxNq/f78WLFigTZs2KTY21uxyIp7H49HYsWP1wAMPSJJGjx6tTz75RH/6058IIyb5+9//rqeeekpr1qzRsGHDtGvXLi1cuFC9e/fmOwlQRIaRnj17ymq16uDBg03WHzx4UBkZGSZVhXnz5unFF1/Uli1b1LdvX7PLiVgffPCBiouLdeaZZ/rXud1ubdmyRcuXL5fL5ZLVajWxwsiSmZmpoUOHNlmXm5ur//u//zOpItxyyy267bbb9O///u+SpOHDh2vfvn1asmQJYSRAEdlnJCYmRmPGjNHmzZv96zwejzZv3qzx48ebWFlk8nq9mjdvntatW6fXXntN2dnZZpcU0c4//3zl5+dr165d/mXs2LGaNWuWdu3aRRDpZBMnTjxpqPvnn3+u/v37m1QRKisrZbE0/fm0Wq3yeDwmVdT1RWTLiCTddNNNuuqqqzR27FidddZZWrZsmSoqKvQf//EfZpcWcfLy8rRmzRo9//zzSkpK0oEDByRJDodDcXFxJlcXeZKSkk7qr5OQkKDU1FT68ZjgF7/4hSZMmKAHHnhAl112md577z2tXLlSK1euNLu0iDV9+nTdf//96tevn4YNG6YPP/xQv/3tb3XNNdeYXVrX5Y1gjz32mLdfv37emJgY71lnneV95513zC4pIklqdlm1apXZpaHeueee612wYIHZZUSsF154wXvGGWd4bTabd8iQId6VK1eaXVJEczqd3gULFnj79evnjY2N9ebk5Hhvv/12r8vlMru0Liti5xkBAADhISL7jAAAgPBBGAEAAKYijAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATEUYAQAApiKMAAAAUxFGAACAqf4/RtXHEmd47y4AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 2. Increasing the learning rate\n", + "\n", + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 0.1), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 816 + }, + "id": "ANTT2SUBzBXs", + "outputId": "870880b2-9ae0-4237-92db-c5791f63332b" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.0936 - loss: 2.3074 - val_accuracy: 0.1215 - val_loss: 2.3085\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1002 - loss: 2.3069 - val_accuracy: 0.0833 - val_loss: 2.3063\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0971 - loss: 2.3092 - val_accuracy: 0.1042 - val_loss: 2.3071\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1062 - loss: 2.3098 - val_accuracy: 0.0833 - val_loss: 2.3183\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0829 - loss: 2.3092 - val_accuracy: 0.0868 - val_loss: 2.3171\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.0884 - loss: 2.3136 - val_accuracy: 0.0868 - val_loss: 2.3235\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0961 - loss: 2.3077 - val_accuracy: 0.1250 - val_loss: 2.3150\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0897 - loss: 2.3089 - val_accuracy: 0.0833 - val_loss: 2.3092\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1184 - loss: 2.3056 - val_accuracy: 0.0938 - val_loss: 2.3106\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0782 - loss: 2.3095 - val_accuracy: 0.1076 - val_loss: 2.3095\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 1.0), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "id": "taIqocwm1U3j" + }, + "outputs": [], + "source": [ + "Large learning rate decreases accuracy" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "4GVeQtff1G8l" + }, + "source": [ + "The accuracy decreases." + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 797 + }, + "id": "M9Mw7upzmoA6", + "outputId": "ea7bddcc-2710-4d65-8902-0faa7a5b06c7" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.1055 - loss: 2.3021 - val_accuracy: 0.1076 - val_loss: 2.3095\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.1002 - loss: 2.3045 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0955 - loss: 2.3054 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0973 - loss: 2.3012 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1035 - loss: 2.3028 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1041 - loss: 2.3025 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0971 - loss: 2.3022 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1030 - loss: 2.3043 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1066 - loss: 2.3023 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1075 - loss: 2.3034 - val_accuracy: 0.1076 - val_loss: 2.3094\n" + ] + }, + { + "data": { + "image/png": "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DBigvLy8No/l60SoAQAExTAMfXmqJiSbYRjn7Txmz56txx9/XPv379dVV12lEydO6Lvf/a4KCwv17rvvaty4cZowYYLKyspaPM7ChQt1++23a+/evfrud7+rO+64Q//5z3+arf/ll19q6dKlys/P144dO1RWVqaZM2f6y5944gm98MILysvL086dO1VZWak///nP7TrXKVOm6C9/+YteeuklFRcXyzAMffe73/V/hNrlcsnr9WrHjh16//339cQTT/hns+bNm6cPPvhAr7zyivbv36+VK1fqoosuatd4vi5cfgIABOWr6lpdOX9rSPr+4JFMdet6ft66HnnkEY0ZM8b/vGfPnrr66qv9zxctWqQNGzbopZdeUk5OTrPHmTJlin7wgx9Ikh577DEtW7ZMb7/9tsaNG9dk/erqaq1atUr9+vWTJOXk5OiRRx7xlz/77LOaM2eOvv/970uSli9f7p81aYsDBw7opZde0s6dOzVixAhJ0gsvvKCkpCT9+c9/1m233aaysjLdcsstGjx4sCSpb9++/vZlZWW65pprlJaWJqlutupCFdRMjdvt1tChQ+VwOBQTE6OsrKyAa5RNWb9+vdLS0hQdHa3IyEilpqYqPz8/oI5hGJo/f77i4+Nlt9uVkZERMC1W7+WXX9awYcNkt9vVo0ePdk3FAQA6t/o36XonTpzQzJkzdcUVVyg6Olrdu3fX/v37zzlTc9VVV/kfR0ZGKioqyn/b/6Z069bNH2ikuq8GqK/v8XhUUVGh6667zl9us9l07bXXBnVuDe3fv19dunTRsGHD/Pt69eqlyy+/XPv375ck3X///Vq8eLFGjhypBQsWaO/evf66//3f/61169YpNTVVs2bN0ltvvdXmsXzdgoq7RUVFcrlcGjp0qGpqavTzn/9cY8eO1QcffKDIyMgm2/Ts2VNz585VSkqKunbtqk2bNik7O1sxMTHKzMyUJC1ZskTLli3Tb3/7WyUnJ2vevHnKzMzUBx98oIiICEnSn/70J91777167LHH9O1vf1s1NTXat29fO08fABAse5hNHzySGbK+z5fG71szZ85UQUGBli5dqv79+8tut+vWW2/VqVOnWjxOWFhYwHOLxSKfzxdU/fN5Wa0t7rnnHmVmZurll1/Wq6++KrfbraeeekrTpk3TjTfeqE8//VSbN29WQUGBvvOd78jlcmnp0qUhHXOTjHb47LPPDElGUVFRUO2uueYa4+GHHzYMwzB8Pp8RFxdnPPnkk/7y48ePG+Hh4cbvf/97wzAMo7q62khMTDR+/etft3msHo/HkGR4PJ42HwMAOqOvvvrK+OCDD4yvvvoq1ENpk7y8PMPpdPqfb9++3ZBkfP755wH1Bg0aZDzyyCP+51988YXhdDqNBx54wL+vT58+xi9/+Uv/c0nGhg0bAo7jdDqNvLy8JvtqPBbDMIwNGzYYDd+OY2NjjaVLl/qf19TUGH369DFuvvnmZs+xuXMyDMP48MMPDUnGzp07/fv+9a9/GXa73fjjH//Y5PFmz55tDB48uMmyVatWGQ6Ho9mxtEVLf2PBvH+368Kkx+ORVDcb08oApW3btqm0tFRPPPGEJOngwYMqLy9XRkaGv57T6dSwYcNUXFysSZMm6Z133tE///lPWa1WXXPNNSovL1dqaqqefPJJDRo0qMm+vF6vvF6v/3llZWVbTxMA0AkMGDBA69ev14QJE2SxWDRv3rwWZ1y+LtOmTZPb7Vb//v2VkpKiZ599Vp9//nmrvkrg/fffl8Ph8D+3WCy6+uqrdfPNN+vee+/Vc889J4fDodmzZysxMVE333yzJCk3N1c33nijLrvsMn3++efavn27rrjiCknS/Pnzde2112rgwIHyer3atGmTv+xC0+ZQ4/P5lJubq5EjRzYbLOp5PB4lJibK6/XKZrNpxYoV/sVZ5eXlkqTY2NiANrGxsf6yf/zjH5KkX/ziF3r66ad16aWX6qmnnlJ6ero+/PDDJkOV2+3WwoUL23p6AIBO5umnn9aPf/xjjRgxQhdddJEeeuihkPyD+KGHHlJ5ebkmT54sm82mqVOnKjMzs1XfXj169OiA5zabTTU1NcrLy9MDDzygm266SadOndLo0aO1efNm/6Ww2tpauVwuHT58WFFRURo3bpx++ctfSqq7186cOXP0ySefyG6361vf+pbWrVt3/k/8fGjrVNFPf/pTo0+fPsahQ4fOWbe2ttY4cOCA8e677xpLly41nE6nsX37dsMwDGPnzp2GJOPIkSMBbW677Tbj9ttvNwzDMF544QVDkvHcc8/5y0+ePGlcdNFFxqpVq5rs8+TJk4bH4/Fvhw4d4vITALRBR7/81NHV1tYal112mX/ZhhmF9PJTTk6ONm3apB07dqh3797nrG+1WtW/f39JUmpqqvbv3y+326309HT/nRYrKioUHx/vb1NRUaHU1FRJ8u+/8sor/eXh4eHq27dvs6vSw8PDFR4e3pbTAwAgZD799FO9+uqruv766+X1erV8+XIdPHhQP/zhD0M9tAteUB/pNgxDOTk52rBhg7Zt26bk5OQ2derz+fzrXZKTkxUXF6fCwkJ/eWVlpUpKSjR8+HBJ8t/xseHHx6urq/XJJ5+oT58+bRoDAAAXIqvVqtWrV2vo0KEaOXKk3n//fb322msX7DqWC0lQMzUul0tr167Vxo0b5XA4/GtenE6n7Ha7JGny5MlKTEyU2+2WVLe2JS0tTf369ZPX69XmzZuVn5+vlStXSqpbxJSbm6vFixdrwIAB/o90JyQk+O9DExUVpZ/+9KdasGCBkpKS1KdPHz355JOSpNtuu+28/CIAALgQJCUlaefOnaEeRocUVKipDyLp6ekB+/Py8jRlyhRJdXcetFrPTABVVVXpvvvu0+HDh2W325WSkqI1a9Zo4sSJ/jqzZs1SVVWVpk6dquPHj2vUqFHasmWL/x41kvTkk0+qS5cuuvPOO/XVV19p2LBh2rZtm3r06BHsOQMAABOyGEaI7/jzDamsrJTT6ZTH41FUVFSohwMAHcbJkyd18OBBJScnB/xjEzhfWvobC+b9my+0BAAApkCoAQAApkCoAQAApkCoAQAApkCoAQCgGenp6crNzfU/v/TSS/XMM8+02MZisejPf/5zu/s+X8fpTAg1AADTmTBhgsaNG9dk2RtvvCGLxaK9e/cGfdzdu3dr6tSp7R1egF/84hf+O+g3dPToUd14443nta/GVq9erejo6K+1j28SoQYAYDp33323CgoKdPjw4bPK8vLylJaWpquuuiro41588cXq1q3b+RjiOcXFxfF1P0Ei1AAATOemm27SxRdfrNWrVwfsP3HihP74xz/q7rvv1r///W/94Ac/UGJiorp166bBgwfr97//fYvHbXz56cCBAxo9erQiIiJ05ZVXqqCg4Kw2Dz30kC677DJ169ZNffv21bx581RdXS2pbqZk4cKFeu+992SxWGSxWPxjbnz56f3339e3v/1t2e129erVS1OnTtWJEyf85VOmTFFWVpaWLl2q+Ph49erVSy6Xy99XW5SVlenmm29W9+7dFRUVpdtvv10VFRX+8vfee0833HCDHA6HoqKidO211+ovf/mLpLrvsJowYYJ69OihyMhIDRw4UJs3b27zWFqjTV9oCQDoxAxDqv4yNH2HdZMslnNW69KliyZPnqzVq1dr7ty5spxu88c//lG1tbX6wQ9+oBMnTujaa6/VQw89pKioKL388su688471a9fP1133XXn7MPn8+m//uu/FBsbq5KSEnk8noD1N/UcDodWr16thIQEvf/++7r33nvlcDg0a9YsTZw4Ufv27dOWLVv02muvSar76qHGqqqqlJmZqeHDh2v37t367LPPdM899ygnJycguG3fvl3x8fHavn27PvroI02cOFGpqam69957z3k+TZ1ffaApKipSTU2NXC6XJk6cqNdff12SdMcdd+iaa67RypUrZbPZtGfPHoWFhUmq+2qlU6dOaceOHYqMjNQHH3yg7t27Bz2OYBBqAADBqf5SeiwhNH3//IjUNbJVVX/84x/rySefVFFRkf/rffLy8nTLLbfI6XTK6XRq5syZ/vrTpk3T1q1b9Yc//KFVoea1117T3//+d23dulUJCXW/j8cee+ysdTAPP/yw//Gll16qmTNnat26dZo1a5bsdru6d++uLl26KC4urtm+1q5dq5MnT+p3v/udIiPrzn/58uWaMGGCnnjiCcXGxkqSevTooeXLl8tmsyklJUXjx49XYWFhm0JNYWGh3n//fR08eFBJSUmSpN/97ncaOHCgdu/eraFDh6qsrEw/+9nPlJKSIkkaMGCAv31ZWZluueUWDR48WJLUt2/foMcQLC4/AQBMKSUlRSNGjND//d//SZI++ugjvfHGG7r77rslSbW1tVq0aJEGDx6snj17qnv37tq6davKyspadfz9+/crKSnJH2gkafjw4WfVe/HFFzVy5EjFxcWpe/fuevjhh1vdR8O+rr76an+gkaSRI0fK5/OptLTUv2/gwIGy2Wz+5/Hx8frss8+C6qthn0lJSf5AI0lXXnmloqOjtX//fknS9OnTdc899ygjI0OPP/64Pv74Y3/d+++/X4sXL9bIkSO1YMGCNi3MDhYzNQCA4IR1q5sxCVXfQbj77rs1bdo0/e///q/y8vLUr18/XX/99ZLqvij5f/7nf/TMM89o8ODBioyMVG5urk6dOnXehltcXKw77rhDCxcuVGZmppxOp9atW6ennnrqvPXRUP2ln3oWi0U+n+9r6Uuq++TWD3/4Q7388st65ZVXtGDBAq1bt07f//73dc899ygzM1Mvv/yyXn31Vbndbj311FOaNm3a1zYeZmoAAMGxWOouAYVia8V6moZuv/12Wa1WrV27Vr/73e/04x//2L++ZufOnbr55pv1ox/9SFdffbX69u2rDz/8sNXHvuKKK3To0CEdPXrUv2/Xrl0Bdd566y316dNHc+fOVVpamgYMGKBPP/00oE7Xrl1VW1t7zr7ee+89VVVV+fft3LlTVqtVl19+eavHHIz68zt06JB/3wcffKDjx4/ryiuv9O+77LLL9OCDD+rVV1/Vf/3XfykvL89flpSUpJ/+9Kdav369ZsyYoV/96ldfy1jrEWoAAKbVvXt3TZw4UXPmzNHRo0c1ZcoUf9mAAQNUUFCgt956S/v379dPfvKTgE/2nEtGRoYuu+wy3XXXXXrvvff0xhtvaO7cuQF1BgwYoLKyMq1bt04ff/yxli1bpg0bNgTUufTSS3Xw4EHt2bNH//rXv+T1es/q64477lBERITuuusu7du3T9u3b9e0adN05513+tfTtFVtba327NkTsO3fv18ZGRkaPHiw7rjjDr3zzjt6++23NXnyZF1//fVKS0vTV199pZycHL3++uv69NNPtXPnTu3evVtXXHGFJCk3N1dbt27VwYMH9c4772j79u3+sq8LoQYAYGp33323Pv/8c2VmZgasf3n44Yc1ZMgQZWZmKj09XXFxccrKymr1ca1WqzZs2KCvvvpK1113ne655x49+uijAXW+973v6cEHH1ROTo5SU1P11ltvad68eQF1brnlFo0bN0433HCDLr744iY/Vt6tWzdt3bpV//nPfzR06FDdeuut+s53vqPly5cH98towokTJ3TNNdcEbBMmTJDFYtHGjRvVo0cPjR49WhkZGerbt69efPFFSZLNZtO///1vTZ48WZdddpluv/123XjjjVq4cKGkurDkcrl0xRVXaNy4cbrsssu0YsWKdo+3JRbDMIyvtYcLRGVlpZxOpzwej6KiokI9HADoME6ePKmDBw8qOTlZERERoR4OTKilv7Fg3r+ZqQEAAKZAqAEAAKZAqAEAAKZAqAEAAKZAqAEAAKZAqAEAtEon+bAsQuB8/W0RagAALaq/9f6XX4bom7lhevV/W42/5iFYfPcTAKBFNptN0dHR/i9G7Natm/+rBoD2MAxDX375pT777DNFR0cHfBlnWxBqAADnFBcXJ0lt/sZnoCXR0dH+v7H2INQAAM7JYrEoPj5eMTExqq6uDvVwYCJhYWHtnqGpR6gBALSazWY7b29AwPnGQmEAAGAKhBoAAGAKhBoAAGAKhBoAAGAKhBoAAGAKhBoAAGAKhBoAAGAKhBoAAGAKhBoAAGAKQYUat9utoUOHyuFwKCYmRllZWSotLW2xzfr165WWlqbo6GhFRkYqNTVV+fn5AXUMw9D8+fMVHx8vu92ujIwMHThwIKDOpZdeKovFErA9/vjjwQwfAACYWFChpqioSC6XS7t27VJBQYGqq6s1duxYVVVVNdumZ8+emjt3roqLi7V3715lZ2crOztbW7du9ddZsmSJli1bplWrVqmkpESRkZHKzMzUyZMnA471yCOP6OjRo/5t2rRpQZ4uAAAwK4thGEZbGx87dkwxMTEqKirS6NGjW91uyJAhGj9+vBYtWiTDMJSQkKAZM2Zo5syZkiSPx6PY2FitXr1akyZNklQ3U5Obm6vc3Nw2jbWyslJOp1Mej0dRUVFtOgYAAPhmBfP+3a41NR6PR1LdbExrGIahwsJClZaW+kPQwYMHVV5eroyMDH89p9OpYcOGqbi4OKD9448/rl69eumaa67Rk08+qZqammb78nq9qqysDNgAAIB5tflbun0+n3JzczVy5EgNGjSoxboej0eJiYnyer2y2WxasWKFxowZI0kqLy+XJMXGxga0iY2N9ZdJ0v33368hQ4aoZ8+eeuuttzRnzhwdPXpUTz/9dJN9ut1uLVy4sK2nBwAAOpg2hxqXy6V9+/bpzTffPGddh8OhPXv26MSJEyosLNT06dPVt29fpaent7q/6dOn+x9fddVV6tq1q37yk5/I7XYrPDz8rPpz5swJaFNZWamkpKRW9wcAADqWNoWanJwcbdq0STt27FDv3r3PWd9qtap///6SpNTUVO3fv19ut1vp6emKi4uTJFVUVCg+Pt7fpqKiQqmpqc0ec9iwYaqpqdEnn3yiyy+//Kzy8PDwJsMOAAAwp6DW1BiGoZycHG3YsEHbtm1TcnJymzr1+Xzyer2SpOTkZMXFxamwsNBfXllZqZKSEg0fPrzZY+zZs0dWq1UxMTFtGgMAADCXoGZqXC6X1q5dq40bN8rhcPjXvDidTtntdknS5MmTlZiYKLfbLalubUtaWpr69esnr9erzZs3Kz8/XytXrpQkWSwW5ebmavHixRowYICSk5M1b948JSQkKCsrS5JUXFyskpIS3XDDDXI4HCouLtaDDz6oH/3oR+rRo8f5+l0AAIAOLKhQUx9EGq+FycvL05QpUyRJZWVlslrPTABVVVXpvvvu0+HDh2W325WSkqI1a9Zo4sSJ/jqzZs1SVVWVpk6dquPHj2vUqFHasmWLIiIiJNVdSlq3bp1+8YtfyOv1Kjk5WQ8++GDAmhkAANC5tes+NR0J96kBAKDj+cbuUwMAAHChINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTINQAAABTCCrUuN1uDR06VA6HQzExMcrKylJpaWmLbdavX6+0tDRFR0crMjJSqampys/PD6hjGIbmz5+v+Ph42e12ZWRk6MCBA00ez+v1KjU1VRaLRXv27Alm+AAAwMSCCjVFRUVyuVzatWuXCgoKVF1drbFjx6qqqqrZNj179tTcuXNVXFysvXv3Kjs7W9nZ2dq6dau/zpIlS7Rs2TKtWrVKJSUlioyMVGZmpk6ePHnW8WbNmqWEhIRghg0AADoBi2EYRlsbHzt2TDExMSoqKtLo0aNb3W7IkCEaP368Fi1aJMMwlJCQoBkzZmjmzJmSJI/Ho9jYWK1evVqTJk3yt3vllVc0ffp0/elPf9LAgQP17rvvKjU1tVV9VlZWyul0yuPxKCoqKqjzBAAAoRHM+3e71tR4PB5JdbMxrWEYhgoLC1VaWuoPQQcPHlR5ebkyMjL89ZxOp4YNG6bi4mL/voqKCt17773Kz89Xt27d2jNsAABgQl3a2tDn8yk3N1cjR47UoEGDWqzr8XiUmJgor9crm82mFStWaMyYMZKk8vJySVJsbGxAm9jYWH+ZYRiaMmWKfvrTnyotLU2ffPLJOcfn9Xrl9Xr9zysrK4M5PQAA0MG0OdS4XC7t27dPb7755jnrOhwO7dmzRydOnFBhYaGmT5+uvn37Kj09vVV9Pfvss/riiy80Z86cVo/P7XZr4cKFra4PAAA6tjZdfsrJydGmTZu0fft29e7d+9ydWK3q37+/UlNTNWPGDN16661yu92SpLi4OEl1l5caqqio8Jdt27ZNxcXFCg8PV5cuXdS/f39JUlpamu66664m+5wzZ448Ho9/O3ToUFtOFQAAdBBBzdQYhqFp06Zpw4YNev3115WcnNymTn0+n//SUHJysuLi4lRYWOhf9FtZWamSkhL993//tyRp2bJlWrx4sb/9kSNHlJmZqRdffFHDhg1rso/w8HCFh4e3aXwAAKDjCSrUuFwurV27Vhs3bpTD4fCveXE6nbLb7ZKkyZMnKzEx0T8T43a7lZaWpn79+snr9Wrz5s3Kz8/XypUrJUkWi0W5ublavHixBgwYoOTkZM2bN08JCQnKysqSJF1yySUB4+jevbskqV+/fq2aKQIAAOYXVKipDyKN18Lk5eVpypQpkqSysjJZrWeualVVVem+++7T4cOHZbfblZKSojVr1mjixIn+OrNmzVJVVZWmTp2q48ePa9SoUdqyZYsiIiLaeFoAAKCzadd9ajoS7lMDAEDH843dpwYAAOBCQagBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmQKgBAACmEFSocbvdGjp0qBwOh2JiYpSVlaXS0tIW26xfv15paWmKjo5WZGSkUlNTlZ+fH1DHMAzNnz9f8fHxstvtysjI0IEDBwLqfO9739Mll1yiiIgIxcfH684779SRI0eCGT4AADCxoEJNUVGRXC6Xdu3apYKCAlVXV2vs2LGqqqpqtk3Pnj01d+5cFRcXa+/evcrOzlZ2dra2bt3qr7NkyRItW7ZMq1atUklJiSIjI5WZmamTJ0/669xwww36wx/+oNLSUv3pT3/Sxx9/rFtvvbUNpwwAAMzIYhiG0dbGx44dU0xMjIqKijR69OhW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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 3. SGD with momentum\n", + "\n", + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 0.001,momentum=0.6), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ka90HMJy2fU3" + }, + "source": [ + "Momentum increases the accuracy with the learning rate = 0.001." + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 797 + }, + "id": "41BRkqCf2Sbe", + "outputId": "d9dd1d82-a858-4c04-b09f-7447fcf63abc" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.1049 - loss: 2.2986 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0947 - loss: 2.3021 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1077 - loss: 2.3025 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1237 - loss: 2.2997 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1119 - loss: 2.2989 - val_accuracy: 0.1076 - val_loss: 2.3094\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1042 - loss: 2.3033 - val_accuracy: 0.1076 - val_loss: 2.3093\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.0972 - loss: 2.3028 - val_accuracy: 0.1076 - val_loss: 2.3093\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1198 - loss: 2.3011 - val_accuracy: 0.1076 - val_loss: 2.3093\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1106 - loss: 2.3021 - val_accuracy: 0.1076 - val_loss: 2.3093\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0975 - loss: 2.3036 - val_accuracy: 0.1076 - val_loss: 2.3093\n" + ] + }, + { + "data": { + "image/png": "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i/91q7ntDcMIsvpT6/bbb1daWppee+01vfHGG3K73Xrqqac0efJkXX755friiy+0du1a5efn67LLLpPL5dKTTz7ZpjU3pEV7arKysrRmzRpt3LhRPXv2PPkkISHq06ePEhMTNWXKFF133XVyu92Sag7mkqSKioqAPhUVFf51tT9wdd555/nXh4WFqVevXo0m6LCwMEVFRQVcAACtZ7FY1KXzGW1y+TG/RfTOO+9o4sSJuuaaazR48GDFxsbq888//9Hma4jdbpfD4VBJSYl/2bFjx/TBBx+0eMwBAwbo6NGjKi4u9i/75ptvVFZWFvC6mpCQoLvuuksrV67UlClT9MILL/jXnXXWWbrlllu0bNkyPfPMM3r++edbXM+PKag9NYZhaPLkyVq1apXeeustOZ3OFk3q8/n8x7s4nU7FxsaqoKBAiYmJkmr2qhQXF+s3v/mNJPmPTi8rK9PIkSMl1Xwm+fnnn+ucc85pUQ0AANTVt29frVy5UldeeaUsFotmzpzZ5B6XH8vkyZPldrvVp08f9e/fXwsXLtSBAweaFei2bdsmm83mv22xWHTBBRfo6quv1h133KHnnntONptNDz74oHr06KGrr75akpSdna3LL79c/fr104EDB7Rx40YNGDBAkjRr1ixddNFFGjhwoLxer9asWeNfd7oJKtS4XC4tX75cq1evls1m8x/zYrfb/b+yOWHCBPXo0cO/J8btdispKUm9e/eW1+vV2rVrlZeXp8WLF0uqucOzs7M1d+5c9e3bV06nUzNnzlR8fLz/62tRUVG66667NHv2bCUkJOicc87R/PnzJUnXX3/9KbkjAAAd29NPP61bb71VI0aM0JlnnqkHHnigTb5k8sADD6i8vFwTJkxQaGioJk2apLS0tGb9evWoUaMCboeGhuro0aPKzc3VvffeqyuuuEJHjhzRqFGjtHbtWv9HYceOHZPL5dLevXsVFRWlsWPH6ve//72kmnPtTJ8+XZ9//rmsVqt+/vOfa8WKFad+w0+FYL5yJanBS25urr/NJZdcYtxyyy3+2zNmzDD69OljhIeHG127djWGDx9urFixImBcn89nzJw503A4HEZYWJhx2WWXGWVlZQFtjhw5YkyZMsWIiYkxbDabkZqaamzfvr3ZtfOVbgBomaa+bosf37Fjx4x+/fr5T4ViRqfqK90Ww2jjo5N+IpWVlbLb7fJ4PBxfAwBBOHz4sHbt2iWn06nw8PC2Lsf0vvjiC73xxhu65JJL5PV6tWjRIuXm5urDDz88bT/2aa2mnmPBvH7z208AAJxGQkJCtHTpUg0dOlTJycnatm2b3nzzTdMGmlPp1JzBCAAAnBIJCQl655132rqMdok9NQAAwBQINQAAwBQINQAAwBQINQAAwBQINQAAwBQINQAAwBQINQAANCIlJUXZ2dn+2+eee66eeeaZJvtYLBb9/e9/b/Xcp2qcjoRQAwAwnSuvvFJjx45tcN3bb78ti8WirVu3Bj1uSUmJJk2a1NryAjz88MP+H3Sua9++fbr88stP6Vz1LV26VNHR0T/qHD8lQg0AwHRuu+025efna+/evSesy83NVVJSks4///ygxz3rrLPUpUuXU1HiScXGxiosLOwnmcssCDUAANO54oordNZZZ2np0qUByw8dOqS//e1vuu222/TNN9/oV7/6lXr06KEuXbpo8ODB+utf/9rkuPU/ftq5c6dGjRql8PBwnXfeecrPzz+hzwMPPKB+/fqpS5cu6tWrl2bOnKnq6mpJNXtKHnnkEX344YeyWCyyWCz+mut//LRt2zb94he/kNVqVffu3TVp0iQdOnTIv37ixInKyMjQk08+qbi4OHXv3l0ul8s/V0vs3r1bV199tSIjIxUVFaUbbrhBFRUV/vUffvihLr30UtlsNkVFRemiiy7SP//5T0k1v2F15ZVXqmvXroqIiNDAgQO1du3aFtfSHPxMAgAgOIYhVX/XNnN36iJZLCdtdsYZZ2jChAlaunSpZsyYIcsPff72t7/p2LFj+tWvfqVDhw7poosu0gMPPKCoqCi99tpruvnmm9W7d29dfPHFJ53D5/Ppl7/8pRwOh4qLi+XxeAKOv6lls9m0dOlSxcfHa9u2bbrjjjtks9k0bdo0jRs3Ttu3b9e6dev05ptvSpLsdvsJY1RVVSktLU3Dhw9XSUmJvv76a91+++3KysoKCG4bN25UXFycNm7cqE8//VTjxo1TYmKi7rjjjpNuT0PbVxtoCgsLdfToUblcLo0bN05vvfWWJOmmm27ShRdeqMWLFys0NFSlpaXq1KmTJMnlcunIkSPatGmTIiIi9NFHHykyMjLoOoJBqAEABKf6O+mx+LaZ+7dfSZ0jmtX01ltv1fz581VYWKiUlBRJNR89XXvttbLb7bLb7Zo6daq//eTJk7V+/Xq9/PLLzQo1b775pj7++GOtX79e8fE198djjz12wnEwDz30kP/6ueeeq6lTp2rFihWaNm2arFarIiMjdcYZZyg2NrbRuZYvX67Dhw/rxRdfVEREzfYvWrRIV155pZ544gk5HA5JUteuXbVo0SKFhoaqf//+Sk9PV0FBQYtCTUFBgbZt26Zdu3YpISFBkvTiiy9q4MCBKikp0dChQ7V7927df//96t+/vySpb9++/v67d+/Wtddeq8GDB0uSevXqFXQNweLjJwCAKfXv318jRozQ//t//0+S9Omnn+rtt9/WbbfdJkk6duyY5syZo8GDB6tbt26KjIzU+vXrtXv37maNv2PHDiUkJPgDjSQNHz78hHYvvfSSkpOTFRsbq8jISD300EPNnqPuXBdccIE/0EhScnKyfD6fysrK/MsGDhyo0NBQ/+24uDh9/fXXQc1Vd86EhAR/oJGk8847T9HR0dqxY4ckKScnR7fffrtSU1P1+OOP67PPPvO3veeeezR37lwlJydr9uzZLTowO1jsqQEABKdTl5o9Jm01dxBuu+02TZ48WX/4wx+Um5ur3r1765JLLpEkzZ8/X//3f/+nZ555RoMHD1ZERISys7N15MiRU1ZuUVGRbrrpJj3yyCNKS0uT3W7XihUr9NRTT52yOeqq/einlsVikc/n+1Hmkmq+uXXjjTfqtdde0+uvv67Zs2drxYoVuuaaa3T77bcrLS1Nr732mt544w253W499dRTmjx58o9WD3tqAADBsVhqPgJqi0szjqep64YbblBISIiWL1+uF198Ubfeeqv/+Jp33nlHV199tX7961/rggsuUK9evfTJJ580e+wBAwZoz5492rdvn3/Zli1bAtq8++67OuecczRjxgwlJSWpb9+++uKLLwLadO7cWceOHTvpXB9++KGqqqr8y9555x2FhIToZz/7WbNrDkbt9u3Zs8e/7KOPPtLBgwd13nnn+Zf169dP9913n9544w398pe/VG5urn9dQkKC7rrrLq1cuVJTpkzRCy+88KPUWotQAwAwrcjISI0bN07Tp0/Xvn37NHHiRP+6vn37Kj8/X++++6527NihO++8M+CbPSeTmpqqfv366ZZbbtGHH36ot99+WzNmzAho07dvX+3evVsrVqzQZ599pgULFmjVqlUBbc4991zt2rVL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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 0.0001,momentum=0.8), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "tkKpvKAM3PCP" + }, + "source": [ + "Momentunm does not change the results significantly with the learning rate = 0.0001." + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 797 + }, + "id": "dQW8gN3o3a2F", + "outputId": "24c99b98-cf9d-4c8e-9b45-623203227ed2" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - accuracy: 0.1039 - loss: 2.3055 - val_accuracy: 0.0833 - val_loss: 2.3106\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1144 - loss: 2.3017 - val_accuracy: 0.0833 - val_loss: 2.3098\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1017 - loss: 2.3064 - val_accuracy: 0.1076 - val_loss: 2.3087\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1126 - loss: 2.3003 - val_accuracy: 0.0833 - val_loss: 2.3096\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.1018 - loss: 2.3025 - val_accuracy: 0.0833 - val_loss: 2.3075\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0853 - loss: 2.3073 - val_accuracy: 0.0833 - val_loss: 2.3086\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0883 - loss: 2.3021 - val_accuracy: 0.1042 - val_loss: 2.3075\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1113 - loss: 2.3048 - val_accuracy: 0.1076 - val_loss: 2.3092\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1033 - loss: 2.3030 - val_accuracy: 0.0833 - val_loss: 2.3099\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0918 - loss: 2.3041 - val_accuracy: 0.0833 - val_loss: 2.3106\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjUAAAGdCAYAAADqsoKGAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAf6FJREFUeJzt3Xd8zff3wPHXvdl7kUQiiBk7iK2qtatKS2srpTpCq3Sp7pUu/fZX3YuiRtWsGtXYRMwYRawQIYlYiUT2/fz++MglRWR/7jjPxyMPNzefez8nwr0n78/7nKNTFEVBCCGEEMLM6bUOQAghhBCiPEhSI4QQQgiLIEmNEEIIISyCJDVCCCGEsAiS1AghhBDCIkhSI4QQQgiLIEmNEEIIISyCJDVCCCGEsAi2WgdQWQwGA+fOncPNzQ2dTqd1OEIIIYQoBkVRuHr1KgEBAej1Ra/FWE1Sc+7cOYKCgrQOQwghhBClcObMGapXr17kMVaT1Li5uQHqX4q7u7vG0QghhBCiONLS0ggKCjK+jxfFapKagktO7u7uktQIIYQQZqY4W0dko7AQQgghLIIkNUIIIYSwCJLUCCGEEMIiSFIjhBBCCIsgSY0QQgghLIIkNUIIIYSwCJLUCCGEEMIiSFIjhBBCCIsgSY0QQgghLIIkNUIIIYSwCJLUCCGEEMIiSFIjhBBCCIsgSU1Z5WXD/GFw9G+tIxFCCCG0kZsJS5+FxH2ahiFJTVlt/xaOrID5Q+HQMq2jEUIIISpXegr82hdifoMFIyAvR7NQJKkpq/bh0PgRMOTCwtGw/3etIxJCCCEqR0os/NQVEnaCoyf0/wZs7TULx1azM1sKGzsY8BPYOalZ6uJxkHsNWo3SOjIhhBCi4pzcAAtGQnYqeAXDsIVQpZ6mIclKTXnQ28BDX0HYGECBP59XL0sJIYQQlmjPbJgzQE1ogtrB2EjNExqQpKb86PXQZxq0H69+vvpV2DxN25iEEEKI8mQwwD/vwPLxYMiDJgNh5DJw8dE6MkAuP5UvnQ56vA/2LrDxY4h8V90Rft9U9WtCCCGEucrNhCVPw6Gl6uedX4b7XjOp9zdJasqbTqf+kO2c4J+3YdOn6j+EHu+b1A9eCCGEKLb0FJg/RN0QrLeDh6ZD6BCto7qFJDUVpdMLYOcMq16GqK/UzcMPTFMvUwkhhBDmIiUWfnsUrpxWK5wG/wa1Omkd1W1JUlOR2j6lrtgsfw52/QK5WWp2ayN/7UIIIcyACVY4FUWWDSpay5HwyI+gs4F9c2HxWMjP1ToqIYQQomgmWuFUFFkyqAzNHgU7R7U5379L1BWbR2eq9wkhhBCmxGCAde/Bls/Vz5s+qrYtMYP3LFmpqSwN+8KQeWDrCEdXwbzBkHNN66iEEEKIG3Iz4Y/RNxKae19RrzaYQUIDktRUrnrdYejvYOcCJ9ery3pZaVpHJYQQQtyY4XRoqVrh1P87kyvZvhtJaipb7XthxBJwcIf4bTC7P2Re1joqIYQQ1uy/M5xGLjXJku27kaRGCzXawuPLwckLzu5WM+OMC1pHJYQQwhqd3AA/dVdLtr2CYew/JluyfTeS1GgloAWM+gtcfCHpAMx4ANIStY5KCCGENdkzy+wqnIoiSY2W/BrD6JXgFgAXYmFGb7gSr3VUQgghLJ3BoHa9Xz5BneHU9FGTmuFUWpLUaK1KPXhiFXjWhMtx8EtvuHhC66iEEEJYKmOF0//Uz82swqkoktSYAq9aMHoV+NSFtAT1UtT5I1pHJYQQwtJYQIVTUSSpMRUegWpi49sY0pNg5gOQuE/rqIQQQliK80fgp/vNvsKpKJLUmBJXXxi1AqqFwrWLajadsEvrqIQQQpi7kxvg5x7qvk0zr3AqiiQ1psbZWy33DmoLWakwqx+c2qp1VEIIIcyVhVU4FUWSGlPk6AHDF0NwZ8hJV/8xHo/UOiohhBDmxEIrnIoiSY2pcnBVRyrU6wF5meqsqCMrtY5KCCGEObDgCqeiSFJjyuycYNBv6jDM/Bz4fQQcXKR1VEIIIUyZhVc4FUWSGlNnaw8DZ0LTx9Tlw0VjIWau1lEJIYQwRVZQ4VQUW60DEMVgYwsPf6cuG+6ZBUufgdxr0Hqs1pEJIYQwFSc3wIKR6oZgr2AYttBiNwTfiazUmAu9DfT9Eto+rX7+12TYNl3bmIQQQpiGmyucarS36AqnoshKjTnR6aDXR+pemy3/g79fVzeDdX7JKq6VCiGE+A+DAda9e2NDcNNHod/XYOugbVwakaTG3Oh00PUtsHOB9e/D+g/US1Fd35LERgghrEluJix5Wt0QDGqFU5cpVv1eIEmNOdLp4N6X1BWbv6eqGXpuJvSMAL1cURRCCIuXngLzh6gbgvV28NB0q9oQfCeS1JizDuPVzcN/TYbo79QVmwe/UPffCCGEsEznj8DcR9WRB46eMPg3ixx5UBol+rU+IiKC1q1b4+bmhq+vL/379yc2NrbIxyxevJiwsDA8PT1xcXEhNDSU2bNn33JMjx498PHxQafTERMTc8vzZGVlER4ejo+PD66urgwYMIDk5OSShG+ZWo+F/t+CTq9uFFvyFOTnaR2VEEKIimAlM5xKq0RJzcaNGwkPD2f79u2sXbuW3NxcevToQUZGxh0f4+3tzdSpU4mKimL//v2MHj2a0aNHs2bNGuMxGRkZdOrUiY8//viOz/PCCy/w559/snDhQjZu3Mi5c+d45JFHShK+5QodCgN+Br0tHFgIf4yCvBytoxJCCFGepMLprnSKoiilfXBKSgq+vr5s3LiRzp07F/txLVu2pE+fPrz33nuF7j916hTBwcHs3buX0NBQ4/2pqalUrVqVuXPnMnDgQACOHDlCw4YNiYqKol27dnc9Z1paGh4eHqSmpuLu7l7sWM1K7Cr4faTafbhudxg0W913I4QQwnxZeYVTSd6/y7SrNDU1FVBXY4pDURQiIyOJjY0tURK0e/ducnNz6datm/G+kJAQatSoQVRUVMmCtmQNesPQBWDrBMfXwm+PQna61lEJIYQorVtmOL2qznCykoSmpEq9UdhgMDBx4kQ6duxIkyZNijw2NTWVwMBAsrOzsbGx4ZtvvqF79+7FPldSUhL29vZ4enoWut/Pz4+kpKTbPiY7O5vs7Gzj52lpacU+n1mrcz8MXwRzH4NTm2HOI2pXSUcPrSMTQghRElLhVGKlXqkJDw/n4MGDzJ8//67Hurm5ERMTw86dO/nggw+YNGkSGzZsKO2piyUiIgIPDw/jR1BQUIWez6TU6qiOl3f0gDPR8OtDcO2S1lEJIYQoLiuf4VRapUpqxo8fz4oVK1i/fj3Vq1e/+0n0eurWrUtoaCiTJ09m4MCBREREFPt8/v7+5OTkcOXKlUL3Jycn4+/vf9vHTJkyhdTUVOPHmTNnin0+i1A9DB5fAc4+kBgDM/tA+nmtoxJCCHE3J9bfqHDyrq1uCJYKp2IpUVKjKArjx49nyZIlrFu3juDg4FKd1GAwFLo0dDetWrXCzs6OyMhI432xsbHEx8fTvn372z7GwcEBd3f3Qh9Wp1ozGLUSXP3h/CGY0RtSz2odlRBCiDvZMwt+G3ijwmnMP1ClrtZRmY0S7akJDw9n7ty5LFu2DDc3N+N+Fg8PD5yc1CqbkSNHEhgYaFyJiYiIICwsjDp16pCdnc3KlSuZPXs23377rfF5L126RHx8POfOnQMw9r7x9/fH398fDw8PxowZw6RJk/D29sbd3Z0JEybQvn37YlU+WTXfEBi9Emb1g4vH1cTm8eXgVUvryIQQQhSw8gqn8lKipKYgEenSpUuh+2fMmMGoUaMAiI+PR39Tq/6MjAyeffZZEhIScHJyIiQkhDlz5jBo0CDjMcuXL2f06NHGzwcPHgzAW2+9xdtvvw3A//73P/R6PQMGDCA7O5uePXvyzTfflCR86+VTR01sfn0ILsfBL9cTG+lvIIQQ2rtlhtOr0OVVq57hVFpl6lNjTqyiT83dpCWqKzYXYsGlqrqZ2K+x1lEJIYT1upoE84fB2V1qhVO/r6D5YK2jMimV1qdGmBn3auqKjV9TyEhRNw+f26t1VEIIYZ2OrIRv2qsJTUGFkyQ0ZSJJjbVxqQKj/oTAVpB5Wb0kFR+tdVRCCGE9cq7BiklqD5rMS+DfFJ5cJxVO5UCSGmvk5AUjlkKNDpCdBrMfhpMbtY5KCCEsX9IB+KEL7PpZ/bz9eLVk26eOpmFZCklqrJWju9p5uPZ9kJuhdiA+tlbrqIQQwjIZDBD1Dfx4v7qv0dUfRiyBnh9IhVM5kqTGmtk7w5D5UL835GXBvCFw+E+toxJCCMtyNVntPbNmijpwuH5veGarOtZGlCtJaqydnaM6zbvxw2DIhT+egNMyJFQIIcrF0TXwbQc4EQm2jtBnGgyZp+5vFOVOkhoBNnYw4GcIeVD9LWLBMLgUp3VUQghhvnIzYeVL6qX9axfArwmM2witx0r/mQokSY1Q6W3gkR+gWnO4dhHmDoLMK1pHJYQQ5if5kLp3ZscP6uftnlU3A/uGaBuXFZCkRtxg7wJDFoBbgLqRbeEoyM/TOiohhDAPigLR36vVTecPgYsvDFsEvSLUS/2iwklSIwpzr6Ze77VzhpPrYdXL6n9UIYQQd5aeol5qWvUy5GdDvR7wzDao103ryKyKJDXiVgGh8MiPgE7tpRD9vdYRCSGE6Tr2j7oZ+NjfYOMAvT+Fob+Da1WtI7M6ktSI22v4IHR/R729Zoq6g18IIcQNuVmwegr8NgAyzoNvIxi3HtqOk83AGpGkRtxZh+egxQhQDGqpd9JBrSMSQgjTcP4I/NQVtn+jft7mKXXUgQwJ1pQkNeLOdDro8znUugdy0mHeYLWJlBBCWCtFgZ0/wQ/3QvJBcK6iXmp64BOwc9I6OqsnSY0omq09PDYLfOpC6hmYP1TtvyCEENYm46L6GvjXZLULe91u6mbg+j21jkxcJ0mNuDtnb/U3EUdPOLsLlj6jzjERQghrcWIdfNseYleCjT30jIChC8HNT+vIxE0kqRHF41MHBs0BvR38uwQ2RGgdkeWTUnohtJeXDWumwuyHIT0Zqoaoe2faPwt6eQs1NfITEcUXfA/0/UK9vekT2P+7puFYtPQU+KUXfNsRcjK0jkYI65RyFH7qBlFfqZ+3HgtPrgf/ptrGJe5IkhpRMi2GQ8fn1dvLwiF+u7bxWKIrZ2BGLzizXd2IuH+B1hEJYV0UBXbNgO87Q9J+cPKGwfPUYZT2zlpHJ4ogSY0oua5v3xh+OX+oDL8sTxeOqSs0F4+r1+0Bon+QS1FCVJZrl2DBcFgxEfIyofZ98GwUhDygdWSiGCSpESWn1xcefjlvMGSlah2V+TsXA7/0hLQEqFIfntoEdi6QchjiNmkdnRCW7+RGtTPwkRXq/sEeH8DwxeDmr3VkopgkqRGlY+8CQ+aDWzVIOSLDL8vq1Fb4ta+aJFYLhdGrwLchhA5Rvy6jKoSoOHk5sPZNmNUPriaqv1Q8GQkdxstmYDMjPy1Reu4BamJj56yWO8rwy9I5+jfMeQSy06BmR3j8T3Cpon6tzTj1z9iVcPmUZiEKYbEuHIefu8PW/wMUaDUaxm1UV6KF2ZGkRpSNDL8smwN/wPwhaiOv+r1g+CJwdL/x9aoNoM79gAI7ftQsTCEsjqLAnlnw/T2QGANOXmrbir5fyGZgMyZJjSi7W4Zf/q1tPOZi58+waCwY8qDpo+oL6u3arLd5Sv1z72wp7xaiPGRehoWPw/IJkHsNgjurnYEb9tU6MlFGktSI8tHhObXcu2D4ZfK/WkdkuhQFNk+DvyYBitr74uEfwMbu9sfX6wFewepmbCnvFqJsTm1R+z8dWgZ6W+j2DoxYpl5OF2ZPkhpRPnQ66PO/68Mvr8LcQZB+XuuoTI+iqBsSI99VP7/nRXjgs6I3I+r1N/bWSHm3EKWTn6v+v5v5IKSdBe86MPYf6DRRNgNbEPlJivJTMPzSu446/HLeEBl+eTNDPvz5HGz7Uv28x/vQ9Q01IbybFsOkvFuI0rp4Qm2XsHkaoECLEWrLhIAWWkcmypkkNaJ8OXvDsIU3Db98VoZfgloy+scT6sZEnR4e+go6TCj+4x09pLxbiJJSFIiZq3YGPrtbfV16bBb0+wocXLWOTlQASWpE+TMOv7SFfxfDxo+0jkhbORlqg8JDS9WGXgNnQMsRJX8eKe8Wovgyr6i/SCx9BnLSoWYneGYrNOqndWSiAklSIypG8D3w4Bfq7Y0fW+/wy8wr6nTfE5FqP5+hC6Bx/9I9183l3Tt/KscghbAwp7fBd53UX6r0ttD1TXh8OXhU1zoyUcEkqREVp+UI6x5+mX5e3ZR4Jlq9fDRyGdTtWrbnLCjv3jNLyruF+K/8PFj3Aczso+7r8wqGJ/6GeyaD3kbr6EQlkKRGVKxCwy+HWc9lkyvx6sbE5APg4gujVkJQm7I/r5R3C3F7l+LU6fabPlFbS4QOg6c3Q/VWWkcmKpEkNaJiFRp+eUEt9bb04ZcpsfBzT7h0EjxrwBOrwb9J+Ty3lHcLcat9C+C7eyBhJzh4wMBfoP834OCmdWSikklSIyqeNQ2/PLcXZvSGq+egSgN4Yo26cbo8SXm3EKqsVLUr95Jxan+sGu3hmS3QZIDWkQmNSFIjKsd/h1+uflXriMrfqS0w8/qk7YAW6qTtiuhSKuXdQsD5I+pm4AMLQWcD970Oo/5SV0eF1ZKkRlSem4df7vzRst6QY1fDnAHqb4u17oGRy8HFp+LOV3AJ6ugq69mnJEQBRYEVE9W9a5411Uu8974km4GFJDWikjV8ELq9rd5e/aplDL/c/zvMH6pO2m7wAAz7o/Ck7YpQtQHUvk/dECnl3cLanFgH8VFg66gmNOWxCV9YBElqROXr+LzlDL/c8SMsHgdKPjQbpHYrtXOsnHO3fVr9U8q7hTVRFFj/gXo7bIwMohSFSFIjKt8twy8Hm9/wS0WBTZ/CyhcBRb0c1P+7O0/arghS3i2s0dE16sgDO2d1GKUQN5GkRmij0PDLePXyjbkMv1QU+Pt1WPe++vm9r0DvTyp/0q+Udwtrc/MqTZsnwdVX23iEyZGkRmjH2RuG/q4OmUvYqXYdNvU3ZkM+LB8PUV+pn/eMgPteK96k7Yog5d3Cmhz+E5L2g70rdHhe62iECZKkRmirSl0YNFudz3JwEWww4eGXedlqj529c9RJ2/2+hvbPahuTlHcLa2EwwIYI9Xa7Zyq2ulCYLUlqhPaCO8OD/1Nvb/wI9i/UNp7byclQuyEfXg429vDor+pmZ1Mg5d3CGvy7GM4fUjsGtw/XOhphoiSpEaah5Ujo8Jx6e9mzEB+tbTw3y7wMs/rDyfXqpZ6hv0Ojh7SO6gYp7xaWzpB/YxW3w3hw8tI2HmGyJKkRpqPbOzcNvxxqGqsOV5NhRh9I2KHu/Rm5DOrcp3VUt5LybmHJDiyEi8fUZKbg37oQt1GipCYiIoLWrVvj5uaGr68v/fv3JzY2tsjHLF68mLCwMDw9PXFxcSE0NJTZs2cXOkZRFN58802qVauGk5MT3bp149ixY4WO2bNnD927d8fT0xMfHx/GjRtHenp6ScIXpq5g+KV/M9MYfnn5tDpp+/y/4OoHo1dCUGvt4ilKofLu37WORojyk597Y5Wm4/MV39hSmLUSJTUbN24kPDyc7du3s3btWnJzc+nRowcZGXf+zdDb25upU6cSFRXF/v37GT16NKNHj2bNmjXGYz755BO+/PJLvvvuO6Kjo3FxcaFnz55kZWUBcO7cObp160bdunWJjo5m9erV/Pvvv4waNap037UwXfYuMHTBTcMvR2sz/PL8ETWhuRx3ow27X+PKj6O49Hq1xBXUDcOmXkUmRHHtm6f+P3SpemP/mBB3oFOU0r/6paSk4Ovry8aNG+ncuXOxH9eyZUv69OnDe++9h6IoBAQEMHnyZF588UUAUlNT8fPzY+bMmQwePJgffviBN954g8TERPTXe4EcOHCAZs2acezYMerWrXvXc6alpeHh4UFqairu7pLpm7xzMeq069xr0PpJ6PNZ5Z377G6YMxAyL0HVEBixFNyrVd75SyvzCnzeCHIz1NlTte/VOiIhyiYvB6a3UntZ9fxQNghbqZK8f5dpT01qqnppwNvbu1jHK4pCZGQksbGxxiQoLi6OpKQkunXrZjzOw8ODtm3bEhUVBUB2djb29vbGhAbAyckJgC1bttz2XNnZ2aSlpRX6EGYkIFS9FGUcfvlD5Zw3bhP8+pCa0AS2uj5p2wwSGgAnzxvl3Tsq6e9LiIq0d5aa0Lj6Q9gTWkcjzECpkxqDwcDEiRPp2LEjTZo0KfLY1NRUXF1dsbe3p0+fPkyfPp3u3bsDkJSUBICfn1+hx/j5+Rm/dv/995OUlMSnn35KTk4Oly9f5tVXXwUgMTHxtueMiIjAw8PD+BEUFFTab1VopWHfm4ZfvgLH1lbs+Y6sVFdoctLVMvORy9QGgeakYHk+dqVpbLQWorRys2DTNPX2PZPBzknbeIRZKHVSEx4ezsGDB5k/f/5dj3VzcyMmJoadO3fywQcfMGnSJDZs2FDsczVu3Jhff/2VadOm4ezsjL+/P8HBwfj5+RVavbnZlClTSE1NNX6cOXOm2OcTJuTm4ZcLR0PyoYo5z775sGA45GerFVhDF4KDW8WcqyJJebewFLtnwNVz4F4dWj2udTTCTJQqqRk/fjwrVqxg/fr1VK9e/e4n0eupW7cuoaGhTJ48mYEDBxIRoXaG9Pf3ByA5ObnQY5KTk41fAxg6dChJSUmcPXuWixcv8vbbb5OSkkLt2rVve04HBwfc3d0LfQgzdMvwy0HlP/wy+ntY8pQ6abv5ELWxXmVN2q4IUt4tzF3ONdj8uXq784tg66BtPMJslCipURSF8ePHs2TJEtatW0dwcHCpTmowGMjOzgYgODgYf39/IiMjjV9PS0sjOjqa9u3b3/JYPz8/XF1dWbBgAY6OjsbLWMKC3Xb4ZVbZn1dRYOMnsOpl9fO2T0O/b8DGtuzPrSUp7xbmbuePkHFerTw0lc7dwiyUKKkJDw9nzpw5zJ07Fzc3N5KSkkhKSiIz88Z05ZEjRzJlyhTj5xEREaxdu5aTJ09y+PBhpk2bxuzZsxk+XP2HqtPpmDhxIu+//z7Lly/nwIEDjBw5koCAAPr37298nq+++oo9e/Zw9OhRvv76a8aPH09ERASenp5l+xsQ5qG8h18aDLDmtRsTf7tMgV4fVf6k7Yog5d3CnGVfhS1fqLfvfQVs7DQNR5iXEv1K+u233wLQpUuXQvfPmDHD2DMmPj6+0D6XjIwMnn32WRISEnByciIkJIQ5c+YwaNAg4zEvv/wyGRkZjBs3jitXrtCpUydWr16No+ONSwA7duzgrbfeIj09nZCQEL7//ntGjBhR0u9XmLOC4ZezH4aDf4BPXbhvyt0f91/5efDncxDzm/p5r4/UAXmWJHQYrPvgxvRuKe8W5iL6e7X60KcuNBt09+OFuEmZ+tSYE+lTY0H2zILlE9Tbj/wEzR4t/mPzsuGPJ+DICtDZqJO2C8qgLc1fk9XNwiEPwuDftI5GiLvLSoUvmkHWlZL/3xYWq9L61AihiULDL8OLP/wyOx3mPqYmNDbX9+lYakIDUt4tzE/UN2pCUzUEmjyidTTCDElSI8yTcfhl9vXhl6eLPv7aJZjVD05uUCdtD/sDGj5YKaFqRsq7hTm5dgm2f6Pe7jIF9DbaxiPMkiQ1wjyVZPjl1SSY2QfO7lKn/D7+p/XsMZHybmEutk2H7DTwawoNH9I6GmGmJKkR5qvQ8MvD6l6Z/w6/vBR3fdL2IbXV+uhVUL2VNvFqoV538Kol5d3CtGVcUDcIg7r53xKqEIUm5F+OMG/uATBkHtg5w/F/YM1N1VDnD8MvvdT9JF611Enbvg21ilQbepsbe2ukvFuYqi3/UwexBrSABg9oHY0wY5LUCPMX0OL68EvUQY7RP0DCLnXKd3oS+DaCJ9aAd+maRZq90GHqPqKUw3Bqs9bRCFHY1aQbe77um6p2EReilCSpEZbhv8Mvf30IMi9DYBiM+gvc/It8uEVz8oTmg9XbBUv8QpiKzZ9DXhZUbwN1u2kdjTBzktQIy9Fx4o3hl7kZULuLeU7argiFyrvvUikmRGVJTVAHVwLcL6s0ouwkqRGWo2D4Zeux0O5ZdayCg6vWUZkG3xAp7xamZ/M0yM+Bmp0g2EoqEkWFkqRGWBZbe+gzDXpFyGTf/zKWd/8q5d1Ce5dPw57Z6m1ZpRHlRJIaIayFlHcLU7LpEzDkqiuINTtoHY2wEJLUCGEtbi7v3vGDlHcL7Vw8ATHz1Nv3v65tLMKiSFIjhDUpKO8+f0jKu4V2Nn4MSj7U6wnVw7SORlgQSWqEsCZS3i20lhJ74/LnfVOKPlaIEpKkRghrI+XdQksbIgBFHUgb0ELraISFkaRGCGsj5d1CK0kH4d8l6u0uskojyp8kNUJYo7ZPqX9KeXfxndoK6z6ArDStIzFfGyLUPxs/DP5NtI1FWCRJaoSwRvV6SHl3SZzdDXMeUcuQF40BQ77WEZmfc3vhyArQ6WWVRlQYSWqEsEZS3l18aedg3lB1PhHAsb9h7ZvaxmSO1l9fpWn6KFRtoG0swmJJUiOEtZLy7rvLzYT5Q9Vp71VD4KHp6v1RX8HuX7WNzZyc2QnH1oDOBu59RetohAWTpEYIayXl3UVTFFgWrl42cfKCIfOg5Ujo8pr69b8mQZwkg8Wy/gP1z9Ah4FNH21iERZOkRghrJuXdd7b5Mzi4CPS28Ngs8K6t3n/vy9D4ETDkwe8j4NJJbeM0dae3wcn1oLeDzi9rHY2wcJLUCGHNpLz79g7/CeveV28/8CkEd77xNZ0O+n8DAS0h8zLMHaRuuBa3UhS1Ygyg5QjwqqltPMLiSVIjhLUzlnfPgpxr2sZiCpIOwOLrfydtxkHYE7ceY+cEg+eCWwBcOAoLR0N+XuXGaQ7iNsLpLWBjD/dM1joaYQUkqRHC2hnLu6/AASsv705PgXlDIDcDgu+FnhF3Pta9mrrPxtYJTkTC3zKYsZCbV2lajQaP6trGI6yCJDVCWLuby7ujv7fe8u68bFgwHFLPqPtnHp0JNrZFPyYgFB65vsk6+lvY9UtFR2k+jv8DCTvA1hHumaR1NMJKSFIjhLhe3u1sveXdigIrJsGZ7eDgAUMWgLN38R7bqB/cf32VZuVLcHJjxcVpLhTlRsVT67Hg5q9tPMJqSFIjhLhe3j1EvW2N5d3bv4GYOWq324G/QNX6JXv8PS+qTeUMefD7SLh4omLiNBexK9VSeDsX6PSC1tEIKyJJjRBCZa3l3cfW3tgP0+MDqNet5M+h08FDX0FgmLo3ae5jamWUNTIYYP2H6u22T4FLFW3jEVZFkhohhMo3BGp3sa7y7pRY+OMJ9XtuMRzaPVP657JzVCui3KvDxeOwcBTk55ZbqGbj8HJIPggO7tBhgtbRCCsjSY0Q4oa2T6t/WkN597VLMG8wZKdBjfbQ53N1xaUs3Pxg6Hz1ssvJDbDaygY3GvJvTOJu92zx9yUJUU4kqRFC3GAt5d35uepKyqWT4FEDHpsNtg7l89z+TeGRHwAd7PwRdvxYPs9rDg4uhpQj4OgJ7Z/VOhphhSSpEULcYC3l3aunqI3h7FzUXjOuVcv3+Rs+CN3eUm+vegVOrCvf5zdF+Xk3Vmk6TABHD23jEVZJkhohRGGWXt6982d1BQUdDPgR/JtUzHk6TlQrypR8+H0UpBytmPOYiv0L4NIJcPK+0aVaiEomSY0QojBLLu+O2wSrrg9VvP91COlTcefS6aDv/0FQW8hOhXmD1H08lig/FzZ+rN7uNBEc3DQNR1gvSWqEELeyxPLuSyfVHjKGPGgysHJmEdk6wKDfwCPoxvktsSJq7xy4chpcfKH1k1pHI6yYJDVCiFtZWnl3VhrMHaz2jgloCf2+KnulU3G5VoUh88HeVb2ct/Ily9qrlJcNmz5Tb98zCeydtY1HWDVJaoQQt2cp5d2GfFg0Bi7Egls1tZeMnVPlxuDfBAb8BOhg9wzY8UPlnr8i7f4V0hLUieWtRmsdjbByktQIIW7PUsq7/3kbjv2tDlYcPFedrq2FBr2h+7vq7dWvwrF/tImjPOVmwuZp6u3Ok9UGhEJoSJIaIcTt6W1u7I8w1/LumLmw7Uv1dr+vIbCltvF0mAChw9XLen+MVjsam7Ndv0B6ktrrp8VIraMRQpIaIUQRWgy/qbx7i9bRlEx8NPz5vHq780vQdKC28YC6j+fBz6FGB7WT8dzHzLciKicDtvxPvX3vS2Brr208QiBJjRCiKIXKu7/TNJQSuXIGFgyD/BwIeRC6vKZ1RDfYOsCg2eBZEy6fggUjIC9H66hKbscPkJECXsE3/o0IoTFJaoQQRTO38u6cDJg/RH3D9WsKD38PehN7qXOpAkMXgL0bnN4Cf00yr8t7WWmw9f/U211eBRs7beMR4joT+58uhDA55lTebTDAkqch6QA4V4Ehc8HBVeuobs+3ITw6A3R62Dsbtn+jdUTFF/2dWh7vUw+aPqp1NEIYSVIjhLg7cynv3vgRHF4OejsY/Bt41tA6oqLV6w49PlBv//06HF2jbTzFkXkZtn2l3u7yqrqhXAgTIUmNEOLuzKG8++DiG636+/4f1GinbTzF1e4ZaPn49YqoMZB8SOuIihb1tTr2wbcRNH5E62iEKKRESU1ERAStW7fGzc0NX19f+vfvT2xs0SWJixcvJiwsDE9PT1xcXAgNDWX27NmFjlEUhTfffJNq1arh5OREt27dOHbsWKFjjh49Sr9+/ahSpQru7u506tSJ9evXlyR8IURpmXp597m9sPRZ9Xb78dBimLbxlIROBw98BrXugZyr6oyojAtaR3V7GRdh+7fq7S5TTG+vkrB6JfoXuXHjRsLDw9m+fTtr164lNzeXHj16kJGRccfHeHt7M3XqVKKioti/fz+jR49m9OjRrFlzY5n1k08+4csvv+S7774jOjoaFxcXevbsSVZWlvGYBx98kLy8PNatW8fu3btp3rw5Dz74IElJSaX4toUQJWaq5d1Xk2DeUMjLhLrdbzS4Mye29vDYLLWS6Eo8LBiujh8wNdv+D3LSwb8ZNOyrdTRC3EKnKKX/lSslJQVfX182btxI586di/24li1b0qdPH9577z0URSEgIIDJkyfz4osvApCamoqfnx8zZ85k8ODBXLhwgapVq7Jp0ybuueceAK5evYq7uztr166lW7dudz1nWloaHh4epKam4u7uXrpvWAhrt2IS7PpZLZMe/JvW0agdbWf2gbO7oUoDGLsWHD20jqr0UmLhp25qD5vQYWrDwMqaUXU36efh/5pD7jUYsgAa9NI6ImElSvL+Xaa1w9TUVEBdjSkORVGIjIwkNjbWmATFxcWRlJRUKDHx8PCgbdu2REVFAeDj40ODBg2YNWsWGRkZ5OXl8f333+Pr60urVq1ue67s7GzS0tIKfQghyujm8u4r8drGoiiw/Dk1oXH0hCHzzDuhAaja4EZFVMxvN7ohm4It/1MTmsAwqN9T62iEuK1SJzUGg4GJEyfSsWNHmjRpUuSxqampuLq6Ym9vT58+fZg+fTrdu3cHMF4+8vPzK/QYPz8/49d0Oh3//PMPe/fuxc3NDUdHRz7//HNWr16Nl5fXbc8ZERGBh4eH8SMoKKi036oQooAplXdv/ULdtKyzUS/d+NTRNp7yUrcb9PpIvb32LYhdpW08AGmJsPNn9fZ9r5nO6pEQ/1HqpCY8PJyDBw8yf/78ux7r5uZGTEwMO3fu5IMPPmDSpEls2LCh2OdSFIXw8HB8fX3ZvHkzO3bsoH///vTt25fExMTbPmbKlCmkpqYaP86cOVPs8wkhilBQ3r37V+3Ku4+shH/eUW8/8AnUvlebOCpKm3EQ9gSgwKKxkHRQ23g2T4P8bKjRHurcr20sQhShVEnN+PHjWbFiBevXr6d69ep3P4leT926dQkNDWXy5MkMHDiQiIgIAPz9/QFITk4u9Jjk5GTj19atW8eKFSuYP38+HTt2pGXLlnzzzTc4OTnx66+/3vacDg4OuLu7F/oQQpSDej3UFv9alXcn/wuLnwQUCBsDrcdWfgwVTaeD3p9AcGd1Y+68weqeFi1cOQN7rr/O3jdVVmmESStRUqMoCuPHj2fJkiWsW7eO4ODgUp3UYDCQna3u7A8ODsbf35/IyEjj19PS0oiOjqZ9+/YAXLum/jao/0/5oF6vx2AwlCoGIUQp6W1u7K2J/qFyy7szLqhv8Dnpagl0748r79yVzcYOHv0VvOtA6hm1Iio36+6PK2+bPlVnaNW6B4LvqfzzC1ECJUpqwsPDmTNnDnPnzsXNzY2kpCSSkpLIzMw0HjNy5EimTJli/DwiIoK1a9dy8uRJDh8+zLRp05g9ezbDhw8H1P0yEydO5P3332f58uUcOHCAkSNHEhAQQP/+/QFo3749Xl5ePP744+zbt4+jR4/y0ksvERcXR58+fcrhr0EIUSLG8u5/K6+8Oy8Hfh+pblD2Clb30Vj6zCFnb3VGlKMHnLk+dbwyk8hLceqGZYD7X6+88wpRSrYlOfjbb9WmS126dCl0/4wZMxg1ahQA8fHxhVZUMjIyePbZZ0lISMDJyYmQkBDmzJnDoEGDjMe8/PLLZGRkMG7cOK5cuUKnTp1YvXo1jo6OAFSpUoXVq1czdepU7r//fnJzc2ncuDHLli2jefPmpfm+hRBlUTC9e9fP6hygiv4NXlFg5WQ4vRUc3NU3eufiVV2avSr11BWbOQNg/3y1QuqeSZVz7o2fgCEP6nQ1nw7NwqqVqU+NOZE+NUKUs/NH4Ju2avnx8/sqds7S9u9g9SvquYb+rs5MsjY7f4K/Jqu3B82p+OZ3F47B123USrex66D67dtnCFHRKq1PjRDCilVWeffxSFhz/ZJ293etM6EBdUN0wV6mxeMgcV/Fnm/DR+rPtn5vSWiE2ZCkRghRehVd3n3hGCwcrb65hg5T5zpZs54Rakl17jWYNwSuJt/9MaWRfAgOLlJv3/daxZxDiAogSY0QovQqsrw787Ja6ZSdCkFt4cH/STmxjS0MnAE+9SDtLMwfqo6KKG8bIgAFGj4E1ZqV//MLUUEkqRFClF5FlXfn56krNBePg0eQuofE1qF8ntvcOXler4jyhLO7YNn48q2IStwPh5cDOlmlEWZHkhohRNlURHn331Ph5Hr1eYfMA1ff8nleS+FTBwbNBr0tHPwDNn1Wfs+9QW2MSpMB4Nuw/J5XiEogSY0QomycPKH5YPV29Hdlf77dM288zyM/gH/Tsj+nJQruDA98qt5e/z4cWlb25zy7Wx1WqtNDl1fL/nxCVDJJaoQQZdfmKfXPsk7vPrXlRtnyfa9XfNmyuQt7Ato+o95e/BSciynb863/UP2z2SC1P44QZkaSGiFE2ZVHefflU7BghNrsrckA6PxieUZouXq8r072zstUK6LSbj/k967io+H4P+rU83tfLt8YhagkktQIIcpHwWpNacq7s6+qb8iZlyCgBfT72uQqnY4mX2VudDwGg4n1K7WxhYG/QJUGcPUczB9SuvL69e+rf7YYBt61yzdGISqJJDVCiPJRv+dN5d0Li/84Qz4sehLOHwJXfxg8F+ycKizM0th56hIPf72V15YcYGnMWa3DuZWjBwydD07ecG4vLHu2ZBVRcZshbhPo7aDzSxUXpxAVTJIaIUT5KFTe/X3x31TXvQdHV4GNg5rQuAdUXIylEHXiIiN/3kFGTj4AC3claBzRHXjXVkvf9Xbw7xLYWMwJ5ooC6z9Qb7d6vGLHXQhRwSSpEUKUn5KWd+9bAFv+p97u97XJtePfcuwCo2fuIDM3n9a1vACIOnmRhMsV0D25PNTqCA9+rt7eEHGjK3BRTqyD+Cg1qbxncsXGJ0QFk6RGCFF+bi7v3vF90ccm7ILlE9Tb90yGZo9WaGgltSH2PE/8upOsXAP3NajK7DFt6VDHB4DFe0zwElSBliNvjJNY+qxapn0nN6/StB5jcqtkQpSUJDVCiPJVsGH4yF93Lu9Ovd7iPz8bGvRRy7dNyD+Hkhk3azc5eQa6N/LjuxGtcLSzYUDL6gAs2pOAUp5dfMtb93ehXk/Iy4J5Q9W/79s59rea9Ng5Q6cXKjdGISqAJDVCiPJ1t/LunGtqhU56Mvg2Vhvs6U3npWj1wUSenrObnHwDDzT155thLXGwtQGgVxN/nO1tOH3xGrtOX9Y40iLobWDAT+DbCNKTrldEZRQ+5uZVmjZPStdmUWb5JlAZaDqvJEIIy1GwWrNnVuHyYkWBpc9A4j5w9lFHIDi4ahPjbfy57xzhc/eSZ1B4qHkAXw5ugZ3NjZdJFwdbHmhaDYBFu010w3ABR3cYMh+cq6h/30ueBoPhxtePrFDvt3eFDs9rF6ewCEmpWXT5bD2zt5/WNLmRpEYIUf4KyrszLxcu7974CRxaqlboDJoDXjU1C/G/luxN4Pn5e8k3KDzSIpD/DQrF1ubWl8iCS1B/7U8k83pFlMnyqqn+PdvYq0MqN1zvGGww3Oge3PZpcPHRLkZhET5fG8uZS5ks3XsWvYYtpiSpEUKUv9uVdx9aduNN9cHPoWYH7eL7j4W7zjDp930YFBgUFsSnjzbH5g6vzG2DvQn0dOJqdh5/H0qq5EhLoWZ76Pt/6u1Nn8L+hXBoidoXyMEDOozXNj5h9o4kpbHw+srlaw+EoNOwcaYkNUKIinFzeff2b9XLHwDtwtUKHRMxNzqel/7Yj6LAsLY1iHik6R0TGgC9XseAVupqzR+mfgmqQOhQ6Hj9EtOycPj7TfV2+3Bw8tIuLmERIlYeQVGgdxN/WtX01jQWSWqEEBXj5vLuNVMg9xrU6apW5piIWVGneG3JAQBGdajF+/2boC/G2vmAloEAbD1+gaTUrAqNsdx0fQsaPKBWnKUlqMlMu2e0jkqYuS3HLrDxaAq2eh2v9ArROhxJaoQQFahgwzCATz11RpGNrXbx3OSnzSd5c9m/AIztFMxbfRsVe9m8po8LbWp5Y1Bg8V4zWa3R26iVZn5N1M87TlQ3EwtRSgaDwocrDwMwvF1NalVx0TgiSWqEEBXJNwRajACvYBi6QF29MQHfbTzB+3+pL8bPdKnD1D4NS7wPYEArdbVm0W4T71lzMwc3GLVCHUfR4TmtoxFmbsnesxxKTMPNwZbnutbTOhxAkhohREXr9xU8HwM+dbSOBIDpkcf4aNURAJ7rWo+XezYo1cbGB5pWw9FOz4mUDGLOXCnnKCuQkxeE9DGp3kDC/GTl5vPZ37EAPHtfXbxd7DWOSCX/qoUQVkFRFD7/O5Zpa48CMLl7fSZ1r1/qSg03Rzt6NfYH1A7DQliTn7fEkZiaRYCHI6M71tI6HCNJaoQQFk9RFD5ZE8uX644D8GrvECaUw3J5QRXUn/sSyco18Z41QpSTi+nZfLvhBAAv9myAo52NxhHdIEmNEMKiKYq6mbHgRfiNBxvx9L3lcymsQ50q+Ls7kpqZS+Th8+XynEKYui8jj5GenUfjAHf6hwZqHU4hktQIISyWoii88+chftwcB8C7/RozplNwuT2/jV7HI9fLu+USlLAGJ1PS+S1aHVT72gMNi9UCoTJJUiOEsEgGg8LrSw8yc9spdDqIeKQpI9vXKvfzFFyC2ng0hfNXzaRnjRCl9MnqWPIMCl0aVKVj3Spah3MLSWqEEBYn36Dw6uL9/BYdj04HnwxoxpA2NSrkXHWqutKihif5BoVle89VyDmEMAW7Tl1i9b9J6HUwpXdDrcO5LUlqhBAWJd+g8NLCffy+KwG9Dv73WCiPhgVV6DkLhlwu2mNGPWuEKIGCvWkAj4UF0cDfTeOIbk+SGiGExcjLNzBxQQyL957FRq/jyyEt6N+i4jcy9m0WgL2tniNJV/n3XFqFn0+IyrbqYBJ74q/gZGfDpO71tQ7njiSpEUJYhNx8AxPm7eXPfeews9Hx9dCWPNgsoFLO7eFsR/dGfoAZDbkUophy8gx8vFptWPlk59r4ujtqHNGdSVIjhDB72Xn5PPvbHlYdTMLeRs+3w1rRq4l/pcYw8PolqOX7zpGTZ6jUcwtRkeZsP83pi9eo4urAU51rax1OkSSpEUKYtazcfJ6evZu1h5Kxt9Xzw8hWdLu+alKZ7qlXhapuDlzKyGF9rPSsEZYhNTOXL9cdA+CF7vVwcTCNgbR3IkmNEMJsZebk8+SsXayPTcHRTs8vj7emSwNfTWKxtdHzcIsbQy6FsATfbDjOlWu51PV1ZVAFb7gvD5LUCCHM0rWcPJ6YuZPNxy7gbG/DjFFt6FRP274ZBVVQ646c52J6tqaxCFFWCZevMWPrKQBe7RWCrY3ppwymH6EQQvxHenYeo37ZSdTJi7jY2/DrE21oX8dH67Bo4O9G00AP8gwKy/dJzxph3qb9fZScPANtg73p2lCbFdCSkqRGCGFW0rJyGflzNDtOXcLNwZbZY9vSupa31mEZDZCxCcICHDybypK9ZwGY2qdhqafZVzZJaoQQZiP1Wi4jft7BnvgruDva8tuTbWlZw0vrsAp5KDQQOxsdB8+mcSRJetYI83Nzo71+oQE0q+6pbUAlIEmNEMIsXM7IYdjP29l35gpeznbMfbKdSb7YervYc3+IulQvG4aFOdoQm8K2Exext9HzYo8GWodTIpLUCCFM3sX0bIb8uJ2DZ9PwcbFn3rh2NAn00DqsOyrYMLxk7zny8qVnjTAfefkG4yrNqI61CPJ21jiikpGkRghh0s5fzWLwD9s5knSVqm4OzB/XjhB/d63DKlKXBr54u9hzIT2bTcdStA5HiGJbuDuBY+fT8XCyI7xLXa3DKTFJaoQQJis5TU1ojp1Px9/dkQXj2lHPzzQH6d3M3lZPv1B1RMOi3Wc1jkaI4snIzuPztUcBmHB/XTyc7TSOqOQkqRFCmKRzVzIZ9H0UJ1MyCPR0YsFT7ahd1VXrsIqt4BLU2kPJpF7L1TgaIe7ux80nSbmaTZC3EyPa19Q6nFKRpEYIYXLOXLrGoB+iOHXxGtW9nJg/rh01fVy0DqtEGge4E+LvRk6+geX7pWeNMG3nr2bxw6aTALzcMwQHWxuNIyodSWqEECbl9MUMBv+wnTOXMqnp48zvT7U3u82KADqdjoGt1NUaqYISpu5/a49xLSef0CBPHmxWTetwSq1ESU1ERAStW7fGzc0NX19f+vfvT2xsbJGPWbx4MWFhYXh6euLi4kJoaCizZ88udIyiKLz55ptUq1YNJycnunXrxrFjx4xf37BhAzqd7rYfO3fuLMm3IIQwYSdT0hn0/XbOXsmkdlUXFoxrT4Cnk9ZhlVq/0EBs9Dpizlzh+Pl0rcMR4raOJV9lwc54wLwa7d1OiZKajRs3Eh4ezvbt21m7di25ubn06NGDjIyMOz7G29ubqVOnEhUVxf79+xk9ejSjR49mzZo1xmM++eQTvvzyS7777juio6NxcXGhZ8+eZGVlAdChQwcSExMLfYwdO5bg4GDCwsJK+a0LIUzJ8fNXGfTDdpLSsqjn68r8ce3w93DUOqwyqermQJf6VQHpMCxM10erjmBQoEcjP5Pqzl0aOkVRlNI+OCUlBV9fXzZu3Ejnzp2L/biWLVvSp08f3nvvPRRFISAggMmTJ/Piiy8CkJqaip+fHzNnzmTw4MG3PD43N5fAwEAmTJjAG2+8UaxzpqWl4eHhQWpqKu7upl0OKoS1OZKUxrAfo7mYkUOIvxu/jW2Lj6uD1mGVi5UHEnn2tz34uzuy9dX7sdGb72/BwvJEnbjIkB+3Y6PX8fcLnaljgpvxS/L+XaY9NampqYC6GlMciqIQGRlJbGysMQmKi4sjKSmJbt26GY/z8PCgbdu2REVF3fZ5li9fzsWLFxk9evQdz5WdnU1aWlqhDyGE6fn3XCpDftjOxYwcGge4M+/JdhaT0AB0beiLh5MdSWlZbD1+QetwhDAyGG6MQxjapoZJJjQlVeqkxmAwMHHiRDp27EiTJk2KPDY1NRVXV1fs7e3p06cP06dPp3v37gAkJSUB4OfnV+gxfn5+xq/9188//0zPnj2pXr36Hc8ZERGBh4eH8SMoKKgk354QohIcSEhl6I/RXL6WS/PqHswd2w4vF3utwypXDrY2PNT8es8auQQlTMjyfec4cDYVVwdbnu9WT+twykWpk5rw8HAOHjzI/Pnz73qsm5sbMTEx7Ny5kw8++IBJkyaxYcOGUp03ISGBNWvWMGbMmCKPmzJlCqmpqcaPM2fOlOp8QoiKsTf+MkN/2k5qZi4ta3gye2xbs2z2VRwDrldBrfk3ibQs6VkjtJeVm8+na9RCn6fvrU0VC1kdtS3Ng8aPH8+KFSvYtGlTkaslBfR6PXXrqu2WQ0NDOXz4MBEREXTp0gV/f38AkpOTqVbtRhlZcnIyoaGhtzzXjBkz8PHx4aGHHirynA4ODjg4WMYPSQhLs+vUJUbN2El6dh6ta3kxY3QbXB1K9XJkFppX96CuryvHz6ezcn8ig9vU0DokYeV+3XaKs1cy8Xd3ZEyn2lqHU25KtFKjKArjx49nyZIlrFu3juDg4FKd1GAwkJ2dDUBwcDD+/v5ERkYav56WlkZ0dDTt27e/5fwzZsxg5MiR2NlZ5m90Qli67ScvMvKXHaRn59G+tg+/PmHZCQ2oPWsKOgzLJSihtcsZOXy1/jgAk3rUx8nePBvt3U6JXknCw8OZO3cuy5Ytw83NzbjnxcPDAycntZfEyJEjCQwMJCIiAlD3toSFhVGnTh2ys7NZuXIls2fP5ttvvwXU/+wTJ07k/fffp169egQHB/PGG28QEBBA//79C51/3bp1xMXFMXbs2LJ+30IIDWw9foExv+4kK9fAPfWq8MOIMIt6QS3Kwy0C+XTNEXaeusypCxnUqmJeHZKF5Zi+7jhXs/II8XczJtuWokRJTUEi0qVLl0L3z5gxg1GjRgEQHx+PXn9jASgjI4Nnn32WhIQEnJycCAkJYc6cOQwaNMh4zMsvv0xGRgbjxo3jypUrdOrUidWrV+PoWLhHxc8//0yHDh0ICQkpSdhCCBOwIfY8T83eTXaegfsaVOXb4a1wtLOOhAbA38ORTvWqsuloCov3JDCpRwOtQxJW6PTFDGZvPwXAaw80tLgWA2XqU2NOpE+NENqJPJzMM3P2kJNvoFtDP74e1sJsZ8uUxbKYszw/P4ZATyc2v3wfegt7QxGmL3zuHv7an8g99aowe0xbrcMplkrrUyOEEHez9lAyT8/ZTU6+gd5N/PlmWEurTGgAejb2x83BlrNXMomOu6R1OMLK7Im/zF/7E9Hp1FUaSyRJjbAo2Xn5PD9/L68vPYCVLEKatKzcfF7+Yx+5+Qp9mwcwfUgL7G2t92XH0c6GB5urVZ5/yJBLUYkUReHDv9RGewNaVqdhNcu8YmG9ry7CIn2yOpZlMeeYsz2ePfGXtQ7H6v21P5HL13IJ9HTif481x9ZGXnIKNmauOphIRnaextEIa7Hm32R2nb6Mo52eyT3qax1OhZFXGGExIg8n8/OWOOPns6JOaxiNAJi9Xf0ZDG1bQxKa61rV9KKWjzPXcvJZdfD2XdOFKE+5+QY+Xn0EgDGdgqnm4aRxRBVHXmWERUhKzeLFhfsA6NJAnYq88kAiF9KztQzLqh1ISCXmzBXsbHQMai1jSgoU6lkjl6BEJZi3I564Cxn4uNjz9L11tA6nQklSI8xevkHh+fl7uXwtl8YB7nw/ohWhQZ7k5iss2CnjMbQy5/oqzQNNq1lMC/by8nDLQACiTl4k4fI1jaMRluxqVi7/988xAJ7vVg83R8tuXCtJjTB7X68/TnTcJVzsbfhqqFpZM7J9TQB+236avHyDxhFan9RruSzbdxaAEe1qahyN6anu5UyHOj4ALN5zVuNohCX7buMJLmbkULuKC0OsYDyHJDXCrO2Iu8QX/xwF4L3+TQi+3qX1gabV8Hax51xqFuuOnNcyRKv0x54EsnINhPi70aqml9bhmKSCS1CL9yRIpZ6oEImpmfy0Wd1n+ErvEOysYF+b5X+HwmJdzsjh+fl7MSjwSMtAHrmp3bejnQ2Phan7OAo2q4rKYTAoxktPI9rXRKeTBnO307upPy72Npy6eI3dp6VST5S/aX8fJTvPQOtaXvRo5Kd1OJVCkhphlhRF4aU/9pOYmkVwFRfe69fklmOGta2BTgebj13gZEq6BlFap20nLhJ3IQM3B1v6hwZqHY7Jcra3pXdT6VkjKsahc2nG4amvPdDQan65kKRGmKVZUaf553Ay9jZ6pg9pgcttpjwHeTtzfwNfAOZsj6/sEK1WwVyZAa2q3/bnIm4ouAT11/5EMnPyNY5GWJKIVYdRFOjTrBotaljPJWBJaoTZ+fdcKh9c74w55YEQmgR63PHYEdc3DC/cfYZrOdLorKIlpmay9lAyAMPbWf6mxLJqG+xNdS8nrmbn8fch6VkjysfGoylsPnYBOxsdr/S0rgHQktQIs5KRnceEuXuvD0b0ZVSHWkUe37leVWr6OHM1K4/lMecqJ0grNi86HoMC7Wv7UNfXTetwTJ5erzPuBZNLUKI85BsUIlaqv/SNaFeLGj7OGkdUuSSpEWblzWX/cvJCBv7ujnw6sPldrxPr9TqGt1VXa2ZFnZYqkwqUk2dg3vW+QAUrZOLuBlzvWbP1+AWSUrM0jkaYu0V7EjiSdBU3R1sm3F9X63AqnSQ1wmws2ZvAoj0J6HXwf4ND8XKxL9bjHg2rjoOtnkOJaTIPqgL9fSiJlKvZ+Lo50N1KKi3KQ00fF9rU8sagwOK9slojSi8zJ59pf8cCMOH+usV+jbQkktQIsxB3IYPXlxwE4Pmu9Wlb26fYj/V0tueh5gEAzJZ5UBWm4O92SJsaVtEPozwNaKWu1izaLT1rROn9vOUkyWnZBHo6MbJ9La3D0YS88giTl52Xz4R5e8jIyadtsDfjS7GkWvAffOWBJJkHVQGOJl8lOu4SNnqdVXQtLW8PNK2Go52eEykZ7EtI1TocYYYupGfz3caTALzcqwGOdjYaR6QNSWqEyft4VSwHz6bh5WzHF4NDsdGXvN9C0+oehAZ5kpNvkHlQFaCg2V6PRn74ezhqHI35cXO0o1djfwD+2C3/PkXJ/d8/x0jPzqNpoAd9mwVoHY5mJKkRJi3ycDK/bFXbfH/2aHOqeTiV+rkKZhDNjY4n3yBL/OUlPTvPOL9I5jyV3oBWahXUn/sSyc6TnjWi+E6kpDN3h9qL67UHGqIvxS9+lkKSGmGyklKzeHHhPgCe6BhM14Zl23zap5k6D+rslUwiDyeXR4gCWLL3LOnZedSu6kL7OsXf6yQK61CnCtU8HEnNzCXysMwrE8X30aoj5BsUuob4Wv3/QUlqhEnKNyg8P38vl6/l0iTQnVd6Nyjzc8o8qPKnKApzrm8QHtFO5jyVhY1ex8Mt1A3D0rNGFNeOuEusPZSMXgev9rauRnu3I0mNMElfrTtOdNwlXOxtmD6kJQ625bPpTeZBla+dpy4Tm3wVJzubQgNFRekUXILaeDSF81elZ40omqIofHC90d6g1jWo5ycNLyWpESYn+uRF/i/yKADvP9yE4Cou5fbcN8+D+i1a5kGVVcGKV/8WAXg42WkcjfmrU9WVFjU8yTcoLNsrHbBF0VbsT2TfmSs429vwQvd6WodjEiSpESblckYOz8+PwaCow/4eblH+v/0PL5gHteuMDBEsg/NXs1h9MBGA4bJBuNwUDLlctEd61og7y87L55M1RwB4qnMdfN2k6hAkqREmRFEUXvpjP0lpWdSu4sK7/RpXyHnuvT4PKi0rj2UxZyvkHNbg951nyM1XaFnDk8YBdx4qKkqmb7MA7G31HEm6yr/n0rQOR5io2VGnOXMpE183B57sHKx1OCZDkhphMn7ddop/Didjb6Nn+tAWuDjYVsh5ZB5U2eXlG5h7/fKdzHkqXx7OdsYxE7JhWNxO6rVcpq87DsCk7vVxtq+Y10pzJElNObialat1CGbv4NlUPlypLqW+9kBIhf/mX3ge1JUKPZclWnfkPOdSs/B2sad3k2pah2NxBl6/BLV83zly8gwaRyNMzdcbjpOamUt9P1cevV7RKVSS1JTR+atZ9PpiM5//HYtBGrqVSnp2HhPm7SUn30C3hn483qFWhZ+z8DyoUxV+PktTsEH4sbAgq23HXpHuqVeFqm4OXMrIYUOs9KwRN5y5dI2ZW08BMKV3w1J1WLdkktSU0Zp/kzl7JZMv1x1nwvy9ZOXKxtOSenPZQeIuZFDNw5FPBzartF4nMg+qdOIuZLD52AV0OrVEXpQ/Wxu99KwRt/Xpmlhy8g10qONDlwZVtQ7H5EhSU0Yj2tXkkwHNsNXr+Gt/IoN+2C79JUpg8Z4EFu85i14H/ze4BV4u9pV27qbVPWgu86BK7LfrqzT3NfAlyNtZ42gsV0EV1Loj57koSbcA9idcYfk+tdT/tQcaSrPL25Ckphw81jqI2WPa4ulsx74zV+j/1VYOSdXCXZ1MSef1pQcBeL5rfdoEe1d6DCNlHlSJZObks/D6yoHMeapYDfzdaBroQZ5BMb6RCeulKAof/KU22nu4RSBNAqXi8HYkqSkn7ev4sOTZjtSu4sK51CwGfreNfw7JfKE7yc7LZ8K8vVzLyadtsDfj76+rSRx9mlXDy9mOs1cyWXdE9i7czZ/7z5GamUuQtxOd68vSd0Ub0FK9BLVoj1yCsnaRh88THXcJe1s9k3vU1zockyVJTTkKruLCkmc70qGOD9dy8nly9i5+2nxSSoZv46NVR/j3XBpeznb83+AWmm12c7Sz4bHWavXALNkwfFdzrl96Gta2pmxQrAQPhQZiZ6Pj4Nk0jiTJ6q+1yss3ELFKXaV5omMw1b3ksu+dSFJTzjyc7fj1iTYMaVMDRYH3/zrMa0sOkJsvZZkF/jmUzIzru/enPdYcfw9tO2EOb1vTOA8q7kKGprGYsn1nrrA/IRV7W71xMKioWN4u9twfoo71WCQbhq3Wgl1nOJGSgZezHc/eV0frcEyaJDUVwM5Gz4cPN+GNBxuh08G8HWd4/JcdXLmWo3VomktMzeSlP/YB6m8c94f4aRyROg/qvuvzoObI9O47KijjfrBpNbwrcUO3tSvYMLxk7zny5Jcjq5Oencf/1h4D4Lmu9XB3lBlrRZGkpoLodDrGdArmp5FhuNjbsO3ERR7+ZptVT4bONyg8Pz+Gy9dyaRLoziu9G2gdktEImQdVpMsZOfx5fbPqcOkgXKnuC/HFx8WeC+nZbD52QetwRCX7YdNJLqRnU8vHmWFt5f/e3UhSU8G6NvTjj2c6EOjpRNyFDB7+ZhvbTljnC9P0dcfYEXcJF3sbpg9piYOt6TRtu7deVWp4q/Oglu+TeVD/9cfuBLLzDDQOcKdFkKfW4VgVOxs9D4WqjSKlZ411SU7L4sdNJwF4uVcI9rbyln038jdUCRpWc2dJeAdCgzxJzcxl5M87mL8jXuuwKtX2kxf5MlJdQv3g4aYEV3HROKLC9Hodw9upjeRkHlRhBoPCnGj10tOIdjWlN4YGCi5BrT2UTOo1GctiLT7/+yiZufm0rOFJ7yb+WodjFiSpqSS+bo7MH9eOvs0DyDMovLr4AB+uPGwVvVEuZ+QwcX4MBgUGtqpO/+udUk3No62CcLDV8++5NPaeuaJ1OCZj8/ELnL54DTdHW+OKgahcjQPcCfF3IyffwPL90rPGGsQmXWXhbrUp6NQ+0mivuCSpqUSOdjZ8OTiU57vWA9RrpU/N3k1Gdp7GkVUcRVF46Y99JKVlUbuqC+881FjrkO7Iy8WevsZ5ULJhuEDB38XAVtVlGrBGdDodA1upqzVSBWUdIlYdxqBAr8b+tKpZ+Y1JzZUkNZVMp9PxQvf6/N/gUOxt9fxzOJmB30Vx7kqm1qFViJnbTvHP4fPY2+iZPqQFLg6m/aY48vom2L/2J8o8KCDh8jXWHVGbSA6XDsKa6hcaiI1eR8yZKxw/b70FB9Zg6/ELbIhNwVav45XeIVqHY1YkqdFIv9BA5o9rRxVXew4nptHv663ss7BLHgfPphKx8gigLp82DjD9tt7Nqnsa50H9vkvmQc3bEY9BgY51fahT1VXrcKxaVTcHulzv4iwdhi2XwaDw4Uq10d7wdjVNbv+hqZOkRkMta3ixNLwjDfzcSLmazWPfR7HCQq6Xp2fnMWHeXnLyDXRv5GdcATEHBTONfttu3fOgsvPyjYM+Zc6TaRhw/RLUkj1nrfrfpiVbGnOWf8+l4eZgy3PXtyqI4pOkRmPVvZz545n23NegKtl5BsbP3cv0yGNmX33z5rKDxF3IIMDDkU8HNjOrTW4PNquGp8yDYvXBJC6k5+Dv7ki3hto3SRTQtaEvHk52JKVlWW1rCEuWlZvPZ2tiAXjmvjrS5LIUJKkxAW6Odvz0eGue6BgMwLS1R3lhQQxZuebZBG7R7gQW7zmLXgdfDG6Bp7N5/cd0tLNh0PUxALOtuMNwQXfloW1rYGsjLxWmwMHWhoeaS88aSzVj6ynOpWYR4OFofD8QJSOvVCbCRq/jzb6NeL9/E2z0OpbGnGPYT9Fmt1n1ZEo6byw7CMDEbvVpE2yeu/aHt1PnQW06mmKV86AOJ6ax89RlbPU6BreWOU+mpKAKas2/SVzNkp41luJiejbfrD8OwOQeDXC0M53mpOakRElNREQErVu3xs3NDV9fX/r3709sbGyRj1m8eDFhYWF4enri4uJCaGgos2fPLnSMoii8+eabVKtWDScnJ7p168axY8duea6//vqLtm3b4uTkhJeXF/379y9J+GZheLua/Dq6DW6Otuw+fZn+X2/laPJVrcMqluy8fCbM28u1nHza1fYm/L66WodUajfPg/rNCldrClZpejbxx9dd24GjorBm1T2o6+tKVq6BlQcStQ5HlJPp645zNTuPRtXcedhEe3mZgxIlNRs3biQ8PJzt27ezdu1acnNz6dGjBxkZd/5N1tvbm6lTpxIVFcX+/fsZPXo0o0ePZs2aNcZjPvnkE7788ku+++47oqOjcXFxoWfPnmRlZRmPWbRoESNGjGD06NHs27ePrVu3MnTo0FJ8y6avU70qLHm2IzV9nEm4nMkj32xjQ6zp7+34aNUR/j2XhreLPf83uAU2evPZR3M7BZtjf7eyeVBXs3JZslcdFSEbhE2PTqczdhiWS1CWIe5ChvEXidceaIjezF87taRTyrAjNSUlBV9fXzZu3Ejnzp2L/biWLVvSp08f3nvvPRRFISAggMmTJ/Piiy8CkJqaip+fHzNnzmTw4MHk5eVRq1Yt3nnnHcaMGVOqWNPS0vDw8CA1NRV3d/dSPUdlu5yRw1NzdrMj7hJ6Hbz5YCNGmeh11rWHknly1i4AfhkVZhLTt8vKYFDo8tkG4i9d4+MBTRnUuobWIVWKWVGneHPZv9TzdeXvFzqb1SZva5GUmkWHjyIxKLDhxS7UkrJfs/bMnN2sOpjEvfWr8usTbbQOx+SU5P27THtqUlNTAXU1pjgURSEyMpLY2FhjEhQXF0dSUhLdunUzHufh4UHbtm2JiooCYM+ePZw9exa9Xk+LFi2oVq0avXv35uDBg3c8V3Z2NmlpaYU+zI2Xiz1zxrTl0VbVMSjw9p+HeGPpQfLyDVqHVkhiaiYv/bEPgDGdgi0ioQHrnAelKIqxg/CI9jLnyVT5ezjSqZ7as2ax9KwxS7n5BqJOXOSdP/9l1cEk9Dp1lUaUTamTGoPBwMSJE+nYsSNNmjQp8tjU1FRcXV2xt7enT58+TJ8+ne7duwOQlJQEgJ9f4TdCPz8/49dOnlSnlL799tu8/vrrrFixAi8vL7p06cKlS5due86IiAg8PDyMH0FB5rnZ0d5WzycDm/Fq7xB0OrUaZ/TMnaRmmsYGwbx8A8/Pi+HKtVyaBnrwcq8GWodUrqxtHtT2k5c4dj4dZ3sbua5v4ga0VH8+i/acxSA9a8xC6rVclsWcZcK8vbR6by1DftzOjK2nALXKsIG/m7YBWoBS96wPDw/n4MGDbNmy5a7Hurm5ERMTQ3p6OpGRkUyaNInatWvTpUuXYp3LYFBXJqZOncqAAQMAmDFjBtWrV2fhwoU89dRTtzxmypQpTJo0yfh5Wlqa2SY2Op2Op++tQy0fF15YEMPmYxcY8O02fnm8NTV8nDWNbfq64+w4dQkXexumD2mBg61l7dgvmAf1x+4EZkedpmUNL61DqlAF1/UfbhGIm6OdxtGIovRs7I+bgy1nr2QSHXeJ9nV8tA5J3MaJlHQiDycTefg8u05fLtQ00dvFnvsa+NKtoS89GssU7vJQqqRm/PjxrFixgk2bNlG9evW7Hq/X66lbV62ECQ0N5fDhw0RERNClSxf8/dUfZHJyMtWqVTM+Jjk5mdDQUADj/Y0aNTJ+3cHBgdq1axMfH3/bczo4OODg4FCab89k9WriT3Wv9oz9dRfHz6fT7+st/DAyjNa1tCmb3n7yItPXqVVqHz7S1GKv649oV5M/difw1/5EXu/TEB9Xy/p3VSA5LYs1/6qrozLnyfQ52tnwYPNqzNtxhj92J0hSYyJy8w3sPHWJyMPnWXfk/C0tIRr4udG1oS9dG/oSGuRl9gUVpqZEl58URWH8+PEsWbKEdevWERxcuk2rBoOB7Gy1/0pwcDD+/v5ERkYav56WlkZ0dDTt27cHoFWrVjg4OBQqH8/NzeXUqVPUrGldL75NAj1YNr4jTQM9uHwtl2E/RmsytfdSRg4T58dgUNS+Gf1CLfdSRfMgT5pX9yAn38ACC54HNX/HGfIMCq1redGwmnlsprd2BT1rVh1MJCM7T+NorNeVazks3XuW8XP30PK9tQz9MZqft8QRdyEDOxsd99SrwjsPNWbzy/ex5oXOvNwrhFY1vSWhqQAlWqkJDw9n7ty5LFu2DDc3N+OeFw8PD5ycnAAYOXIkgYGBREREAOrelrCwMOrUqUN2djYrV65k9uzZfPvtt4B6aWXixIm8//771KtXj+DgYN544w0CAgKMfWjc3d15+umneeuttwgKCqJmzZp8+umnADz66KPl8hdhTvzcHfn9qfZM+j2GVQeTmLxwHydS0nmxR4NKKQVUFIWXFu4jKS2L2lVdeOehxhV+Tq2NaF+LfQv38dv2eJ7qXMfiXoxy8w3M3aFeepJVGvPRsoYXwVVciLuQweqDScbZUKJiKYrCiZQM9bLSkfPs/s9lJR8Xe+4L8aVriC/31K+Kq0Opd3qIEirR33RBIvLfvTAzZsxg1KhRAMTHx6PX31gAysjI4NlnnyUhIQEnJydCQkKYM2cOgwYNMh7z8ssvk5GRwbhx47hy5QqdOnVi9erVODreaPr16aefYmtry4gRI8jMzKRt27asW7cOLy/L3uNwJ072Nnw9tCXT1sby9foTfLPhBCdTMvjfoFCc7Ct2X8uMraeIPHIee1s904e0wMUK/sM+2Kwa7/91iLNXMll/5DzdGllGhVeByMPJJKdlU8XVnl5N5Nq+udDpdDzSIpBpa4/yx+4ESWoqUG6+gZ1xl/jn8HnWHUnm1MVrhb4e4u/G/SG+dG3oR2iQp8X94mMuytSnxpyYY5+a4lq0O4FXF+8nN1+haaAHPz0ehl8FdYE9eDaVR77ZRk6+gXf7NWZk+1oVch5TFLHyMN9vOknn+lWZZWG9JIb9tJ2txy8Sfl8dXuoZonU4ogTOXsmk08frUBTY8sp9VPfStnjAklzOyGHD0fNEHj7PxqMpXM26cYnP3kZPuzo+dA3x5f4QX4K85e+9opTk/dvyf8W2AgNaVSfI25mnZu/iwNlU+n21lZ8eD6NJoEe5nic9O48J8/aSk2+gRyM/q+s2O6xtTX7YfJJNR1M4dSHDYjZGHz+fztbjF9HrYEgb62gwaEkCPZ1oX9uHbScusnjPWZ7rWk/rkMyWelkpncjD569XK13i5mr5Kq5qtVLXhr50qieXlUyR/EQsRJtgb5aGd2TM9cqoR7+L4ovBofQsxzLBN5ceJO5CBgEejnwysJnVNWar4eNMl/pVWR+bwpztp3n9wUZ3f5AZ+C1a3Utzf4if/JZvpga0rH49qUlgwv11re7/Zlnk5N2oVoo8kszp21xWUquV/Ait7ikjDEycJDUWpKaPC4uf7UD4b3vYfOwCT8/Zzcs9Q3j63tplfpFbtDuBxXvPotfB/w1pgaezfTlFbV5Gtq/F+tgUft91hsk9GlT4/qWKdi0nzzg/aER761p5syS9m/rz5rKDnLp4jd2nLxOmUZsHc3E5I4f1seeJPHKeTbEpXM0ufFmpfR0fujZULytJom9eJKmxMO6OdswY1Zp3/jzE7O2n+Xj1EU6mpPPBw02xty1dA+mTKem8sUwdSfFCt/qa9cUxBZ3rVyXI24kzlzL5c985Hmttng0dCyyPOcfVrDxq+jhzT90qWocjSsnZ3pbeTavxx+4E/tidIEnNfyiKwvHz6UQeOU/k4WR2n758h8tKftxTr4pVFD9YKvnJWSBbGz3v9W9CXV9X3vnzXxbuTuD0pWt8N7wV3i4lW2HJzstn/Ny9XMvJp31tH569r24FRW0ebPQ6hretScSqI8zafopHw6qb7VK/oijMuj7naXjbmrKsbuYGtqpubBL59kONcbQz71XEssrJM7Aj7hKRR9RuvvGXbr2s1K2hH10b+tJcLitZDElqLNjjHWpR08eZ8XP3siPuEg9/s5WfH29NXV/XYj9HxMojHEpMw9vFni8Gh0qZIvBYWBDT1h7l4Nk0Ys5coYWZjk7Ye+YKhxLTcLDVG5u4CfPVppY31b2cSLicyZp/kyy6IeadXMrIYUOsusl309HbX1bq1tCX+xv6EejppGGkoqJIUmPhujTwZdEzHRjz605OX7zGw99s5dthrehU7+6XGtYeSmbmtlMAfPZosworEzc3Xi729G0WwKI96jwoc01q5lxfpenbPACvEq7gCdOj1+t4pGV1vow8xh+7E6wiqVEUhWPnC6qVktkT/9/LSg7cH1KVrg396FRXLitZA/kJW4EG/m4sDe/IU7N3s/v0ZR6fsYN3+zVmWNs7bww9dyWTl/7YB8DYTsHcH2JZzebKamT7mizak8CK/YlMNcN5UJcyclixPxHA6krzLdmAloF8GXmMrccvkJSahb+HZf4icjE9m7nR8SzcnXDLZaWG1dzpdr1aqVmgh1xWsjKS1FiJKq4O/Da2La8u2s/SmHNMXXKQE+czmNqn4S2XlPLyDUycH8OVa7k0DfTg5V7SjO2/mgd50qy6B/sTUvl9VwLPdKmjdUgl8vuuM+TkG2hW3YPmQZ5ahyPKSU0fF9rU8mbHqUss3pvAs10saw/c4cQ0ZmyNY2nMOXLyDADY2+rpUMeHrg396BriS4BcVrJqktRYEUc7G/43KJQ6VV2ZtvYov2yN49TFDP5vcChujnbG46avO86OU5dwdbBl+pAWpa6asnQj2tXkpT/2M2f7acZ1rm02+43yDYqxN43MebI8A1oFsuPUJRbtTuCZe+uY7Ub2AvkGhcjDyfyyNY7tJy8Z729e3YNRHWvRs7E/zvbyViZU8m5lZXQ6HRO61uProS1xsNWz7sh5Bn4bRcJldQk36sRFpq87BsAHDzexmK65FaFv8wA8ne2M86DMxaajKZy5lImHkx19mwVoHY4oZw80rYajnZ4TKRnsS0jVOpxSS8vK5afNJ7nvsw2Mm72b7ScvYaPX0adZNRY904Gl4R15uEV1SWhEIfKvwUr1aVaNQC8nnpy1i9jkq/T/eisfD2jGa0sOYFDg0VbVrWKjYVk42tnwWFgQP2w6yeztp81myOXs7eoqzaOtqpt980BxKzdHO3o19mdpzDn+2H2GUDO7vBh3IYNft51i4a4zZOTkA+DhZMfQtjUY0a6mXF4SRZKVGisWGuTJsvCONKzmzoX0HMb8uovktGxqV3XhnX6NtQ7PLAxvWxOdDjZenwdl6s5cusb6WHVVaZhcerJYA1upTSH/3JdIdl6+xtHcnaIobDl2gSdm7uT+aRuYue0UGTn51PN15cOHm7J9Slde6RUiCY24K0lqrFyApxN/PN2ebg3VVQZ7Wz1fDWkpS7rFVDAPCm7MUDJlv0XHoyhwT70qBMulRYvVvo4P1TwcSc3MJfKw6V4azczJZ96OeHp+sYnhP0ez7sh5FAXuD/Fl9pg2/P1CZ4a2rSEriqLY5J1L4OJgy/cjWrF071lqVXGmUUDRo91FYSPa17w+DyqBSd1Ndx5UVm4+v+86A0gZt6Wz0et4uEUg32w4wR+7E3igaTWtQyokMTWTWVGnmbcjnivXcgFwtlcv5z7eoZYk3KLUJKkRgPoiOEC6ypbKvfV9zWIe1KqDiVzKyCHAw5H7Q3y1DkdUsAGtqvPNhhNsPJpCytVsqrpp20tJURT2xF9hxtY4Vh1MIv96l7zqXk6M6lCLx1oH4X5TFaYQpSFJjRBlZKPXMaxtTT4y8XlQs693EB7atga2NnLl2dLVqepKixqe7I2/wrKYs4y9p7YmceTkGVh1MJFftsQVqsZqV9ub0R2D6dbQz2zaIQjTJ0mNEOXgsbAgPjfheVAHz6ayJ/4KdjY6k11JEuVvQMvq7I2/wh+7ExjTKbhSk+2Crr+zt5/m/NVsQN2z1695AKM7BstlblEhJKkRohx43zwParvpzYMq2MTcq0k1fN0ss3W+uFXfZgG8u+IQR5Ku8u+5NJoEelT4OW/X9beqmwMj29VkaNsaZjdSRJgXSWqEKCcjbpoH9XqfRnibyJDI1Mxclu49B8gGYWvj4WxH90Z+/LU/kT92J1RYUlPQ9XfG1lNEnbxovL9ZdQ+e6BjMA02rSWdyUSkkqRGinITeNA9qwc4zJjMPavGeBDJz82ng50brWqa1giQq3sBW1flrfyLL953jtQcalmtycTUrl993JfDrtlPGwZI2eh29mvjzRMdatKzhZZL7y4TlkqRGiHJUMA/qt2jTmAelKIqxg/Dw9jXlDcYK3VO3ClXdHEi5ms2G2PP0aOxf5ue8U9ffIW1qMLK9dP0V2pGkRohy1Ld5AB+sPEzC5Uw2xJ6na0NtRydEnbjIyZQMXB1sebiFjL2wRrY2eh5uEcgPm07yx+6EUic1iqKw9fhFZmyNY12s2iQPoJ6vK6M7BvNwi0CT7dEkrIckNUKUo5vnQc2KOq15UlOwSvNIy0BcHeS/u7Ua0LI6P2w6yfrY81zKyCnRfq/MnHyWxpxlxtY4jianG++/P8SX0R1r0aluFVkBFCZDXuWEKGfD2tbgx80n2Xg0hdMXM6jpo0131MTUTP4+lAzAcNkgbNUa+LvRNNCDA2dTWR5zllEdg+/6mMTUTGZHnWbuf7r+PtqqOo93qEXtqq4VHbYQJSZJjRDlrKaPC/fWr8qG2BTmbD/N1D6NNIlj3o4z5BsU2gZ7U9/PTZMYhOkY0DKQA2dT+WNPQpFJzZ74y/yy5fZdfx8NC8LDSbr+CtMlSY0QFWBk+5psuD4PanKPBjjaVe5eg9x8A/N2xANqqbkQD4UG8sHKwxw8m8aRpDRC/G80vzN2/d16in1nrhjvbxvszROdpOuvMB+S1AhRAe6t70t1LycSLmeyfN85Hgur3C6+f/+bbJz306NR2atdhPnzdrHn/hBf1vybzKLdCUzt04iL6dnM2xHPrKhbu/6O6liLxgEV36xPiPIkSY0QFcBGr2N4O3Ue1Oyo0zzaqnLnQc3efgqAIa2DpOmZMBrYKog1/yazZO850jLzWBJztlDX3xHXu/5WKaLrb35+Prm5uZUVsrACdnZ22NiUz2q2JDVCVJCCeVAHzqayLyGV0CDPSjnvseSrbD95CRu9jiFta1TKOYV56NKgKj4u9lxIz2bBrjOA2vV3dMda9GkaUGQCrCgKSUlJXLlypZKiFdbE09MTf3//Mv/yJ0mNEBXE28WeB5tVY/Ges8yKOkVoUGilnHfO9TLubg19qeYhTdDEDXY2ep6+tw6f/R1Lt4Z+PNGp+F1/CxIaX19fnJ2dpYxblAtFUbh27Rrnz58HoFq1amV6PklqhKhAI9vXYvGes5U2DyojO49Fe84CMKJdrQo9lzBPT3auzZOda5foMfn5+caExsfHp4IiE9bKyUn95ev8+fP4+vqW6VKUXGwXogI1r+5B00APcvIM/H59ub8iLY05S3p2HrWruNChjrz5iPJRsIfG2dlZ40iEpSr4t1XW/VqS1AhRgXQ6nbGkes7208a+HxVBURRmR6mXnoa1q4leSnBFOZNLTqKilNe/LUlqhKhgDzUPwMPJjoTLmWw8er7CzrP79GWOJF3F0U7PwJbVK+w8QghhqiSpEaKCqfOg1CRj1vWVlIpQMOepX/NAPJyl66sQFaFWrVp88cUXxT5+w4YN6HQ6qRqrJJLUCFEJCmYvFcyDKm8X0rNZeSARkA7CQoB6OaOoj7fffrtUz7tz507GjRtX7OM7dOhAYmIiHh4V28hQkieVJDVCVIKCeVCKAr9Fx5f78y/YeYbcfIXQIE+aBEoXWCESExONH1988QXu7u6F7nvxxReNxyqKQl5eXrGet2rVqiXaMG1vb18u/VdE8UhSI0QlGXl9BeX3XWfIys0vt+fNNyjMvZ4ojZBp3EIA4O/vb/zw8PBAp9MZPz9y5Ahubm6sWrWKVq1a4eDgwJYtWzhx4gT9+vXDz88PV1dXWrduzT///FPoef97+Umn0/HTTz/x8MMP4+zsTL169Vi+fLnx6/9dQZk5cyaenp6sWbOGhg0b4urqSq9evUhMTDQ+Ji8vj+eeew5PT098fHx45ZVXePzxx+nfv3+p/z4uX77MyJEj8fLywtnZmd69e3Ps2DHj10+fPk3fvn3x8vLCxcWFxo0bs3LlSuNjhw0bRtWqVXFycqJevXrMmDGj1LFUJElqhKgkXRqo86CuXMtl+b5z5fa864+c5+yVTDyd7ejTrGyNq4QoDkVRuJaTp8mHopRfBeGrr77KRx99xOHDh2nWrBnp6ek88MADREZGsnfvXnr16kXfvn2Jjy96dfWdd97hscceY//+/TzwwAMMGzaMS5cu3fH4a9eu8dlnnzF79mw2bdpEfHx8oZWjjz/+mN9++40ZM2awdetW0tLSWLp0aZm+11GjRrFr1y6WL19OVFQUiqLwwAMPGEuow8PDyc7OZtOmTRw4cICPP/4YV1dXAN544w0OHTrEqlWrOHz4MN9++y1VqlQpUzwVRZrvCVFJbPQ6hrWtycerjzBn++lyG3JZsEF4UFhQpU8DF9YpMzefRm+u0eTch97tibN9+bx1vfvuu3Tv3t34ube3N82bNzd+/t5777FkyRKWL1/O+PHj7/g8o0aNYsiQIQB8+OGHfPnll+zYsYNevXrd9vjc3Fy+++476tSpA8D48eN59913jV+fPn06U6ZM4eGHHwbgq6++Mq6alMaxY8dYvnw5W7dupUOHDgD89ttvBAUFsXTpUh599FHi4+MZMGAATZs2BaB27RsNGuPj42nRogVhYWGAulplqmSlRohKNOj6gMn9CanEnLlS5uc7fTGDjUdT0OlgqMx5EqJECt6kC6Snp/Piiy/SsGFDPD09cXV15fDhw3ddqWnWrJnxtouLC+7u7sa2/7fj7OxsTGhAHQ1QcHxqairJycm0adPG+HUbGxtatWpVou/tZocPH8bW1pa2bdsa7/Px8aFBgwYcPnwYgOeee47333+fjh078tZbb7F//37jsc888wzz588nNDSUl19+mW3btpU6loomKzVCVKKb50HNjjpd5iGXBZuO761flZo+LuUQoRB352Rnw6F3e2p27vLi4lL4/8yLL77I2rVr+eyzz6hbty5OTk4MHDiQnJycIp/Hzq5wCwWdTofBYCjR8eV5Wa00xo4dS8+ePfnrr7/4+++/iYiIYNq0aUyYMIHevXtz+vRpVq5cydq1a+natSvh4eF89tlnmsZ8O7JSI0QlK9jM++f+c1zKKPrFsihZufnG0QuyQVhUJp1Oh7O9rSYfFVlFtHXrVkaNGsXDDz9M06ZN8ff359SpUxV2vtvx8PDAz8+PnTt3Gu/Lz89nz549pX7Ohg0bkpeXR3R0tPG+ixcvEhsbS6NGjYz3BQUF8fTTT7N48WImT57Mjz/+aPxa1apVefzxx5kzZw5ffPEFP/zwQ6njqUiyUiNEJQsN8qRpoAcHzqby+64zPH1vnbs/6DZW7E/kyrVcAj2d6NLAt5yjFML61KtXj8WLF9O3b190Oh1vvPFGkSsuFWXChAlERERQt25dQkJCmD59OpcvXy5WQnfgwAHc3NyMn+t0Opo3b06/fv148skn+f7773Fzc+PVV18lMDCQfv36ATBx4kR69+5N/fr1uXz5MuvXr6dhw4YAvPnmm7Rq1YrGjRuTnZ3NihUrjF8zNZLUCFHJdDodI9rV5OVF+/kt+jRP3lMbm1LMaSrYIDysXY1SPV4IUdjnn3/OE088QYcOHahSpQqvvPIKaWlplR7HK6+8QlJSEiNHjsTGxoZx48bRs2fPYk2v7ty5c6HPbWxsyMvLY8aMGTz//PM8+OCD5OTk0LlzZ1auXGm8FJafn094eDgJCQm4u7vTq1cv/ve//wFqr50pU6Zw6tQpnJycuOeee5g/f375f+PlQSmBDz/8UAkLC1NcXV2VqlWrKv369VOOHDlS5GMWLVqktGrVSvHw8FCcnZ2V5s2bK7NmzSp0jMFgUN544w3F399fcXR0VLp27aocPXq00DE1a9ZUgEIfERERxY49NTVVAZTU1NTif8NCVJBr2XlKs7fXKDVfWaFEHk4q8eP3nbms1HxlhVLvtZVKytWsCohQiBsyMzOVQ4cOKZmZmVqHYpXy8/OV+vXrK6+//rrWoVSYov6NleT9u0R7ajZu3Eh4eDjbt29n7dq15Obm0qNHDzIy7tz23dvbm6lTpxIVFcX+/fsZPXo0o0ePZs2aG+WAn3zyCV9++SXfffcd0dHRuLi40LNnT7Kysgo917vvvluoI+SECRNKEr4QJsPJvmzzoOZcX6V5oKk/VVwdyjU2IYS2Tp8+zY8//sjRo0c5cOAAzzzzDHFxcQwdOlTr0ExeiS4/rV69utDnM2fOxNfXl927d9+y5FWgS5cuhT5//vnn+fXXX9myZQs9e/ZEURS++OILXn/9deO1vVmzZuHn58fSpUsZPHiw8bFubm74+/uXJGQhTNawtjX5cXOccR5UcauXUq/lsixGbd4nc56EsDx6vZ6ZM2fy4osvoigKTZo04Z9//jHZfSympEzVT6mpqYC6GlMciqIQGRlJbGysMQmKi4sjKSmJbt26GY/z8PCgbdu2REVFFXr8Rx99hI+PDy1atODTTz8tclZHdnY2aWlphT6EMCW1qpRuHtTC3WfIzjPQsJo7LWt4VWCEQggtBAUFsXXrVlJTU0lLS2Pbtm13XDgQhZV6o7DBYGDixIl07NiRJk2aFHlsamoqgYGBZGdnY2NjwzfffGPs4piUlASAn59focf4+fkZvwZqY6CWLVvi7e3Ntm3bmDJlComJiXz++ee3PWdERATvvPNOab89ISrFiHY12Xg0hd93nWFS9/p37QhsMCjGBGhEu5oyJE8IIW5S6qQmPDycgwcPsmXLlrse6+bmRkxMDOnp6URGRjJp0iRq1659y6WpokyaNMl4u1mzZtjb2/PUU08RERGBg8OtewqmTJlS6DFpaWkEBZVPW3ohyst9Ib4Eejpx9komf+47x6N3GZ2w9cQF4i5k4OZgS7/QgEqKUgghzEOpLj+NHz+eFStWsH79eqpXr373k+j11K1bl9DQUCZPnszAgQOJiIgAMO6RSU5OLvSY5OTkIvfPtG3blry8vDs2RnJwcMDd3b3QhxCmxkavY/j1xnkFJdpFmX19U/GAVtVxcZCODEIIcbMSJTWKojB+/HiWLFnCunXrCA4OLtVJDQYD2dnZAAQHB+Pv709kZKTx62lpaURHR9O+ffs7PkdMTAx6vR5fX2k6JszbY2HVsbdR50HtK2Ie1LkrmfxzWE3+h7eTOU9CCPFfJfpVLzw8nLlz57Js2TLc3NyMe148PDxwcnICYOTIkQQGBhpXYiIiIggLC6NOnTpkZ2ezcuVKZs+ezbfffguojcgmTpzI+++/T7169QgODuaNN94gICCA/v37AxAVFUV0dDT33Xcfbm5uREVF8cILLzB8+HC8vGSjpDBvPq4O6jyovWeZFXWaaXeYBzU3Oh6DAu1r+1DX1+22xwghhDUrUVJTkIj8dy/MjBkzGDVqFKCOKNfrbywAZWRk8Oyzz5KQkICTkxMhISHMmTOHQYMGGY95+eWXycjIYNy4cVy5coVOnTqxevVqHB0dAfVS0vz583n77bfJzs4mODiYF154odCeGSHM2Yj2NVm89yx/7j/H1D4N8XaxL/T1nDwD83fGG48VQghxK52iaDwatJKkpaXh4eFBamqq7K8RJkdRFPp+tYWDZ9OY0juEp/4zD2r5vnM8N28vvm4ObH31fuxsZBatqDxZWVnExcURHBxs/GXTWnTp0oXQ0FC++OILAGrVqsXEiROZOHHiHR+j0+lYsmSJ8WpDaZXX85iDov6NleT9W14ZhTABOp2Oke1qATAn+jT5hsK/a8y5vkF4SJsaktAIUQx9+/alV69et/3a5s2b0el07N+/v8TPu3PnTsaNG1fW8Ap5++23CQ0NveX+xMREevfuXa7n+q+ZM2fi6elZoeeoTPLqKISJ6Ns8AA8nO85cymTT0RTj/UeS0thx6hI2eh1D28oGYSGKY8yYMaxdu5aEhIRbvjZjxgzCwsJo1qxZiZ+3atWqODs7l0eId+Xv73/bliXiziSpEcJEONnb8GirgnlQp4z3F8x56tnYDz9361r6F6K0HnzwQapWrcrMmTML3Z+ens7ChQsZM2YMFy9eZMiQIQQGBuLs7EzTpk2ZN29ekc9bq1Yt46UogGPHjtG5c2ccHR1p1KgRa9euveUxr7zyCvXr18fZ2ZnatWvzxhtvkJubC6grJe+88w779u1Dp9Oh0+mMMet0OpYuXWp8ngMHDnD//ffj5OSEj48P48aNIz093fj1UaNG0b9/fz777DOqVauGj48P4eHhxnOVRnx8PP369cPV1RV3d3cee+yxQi1Y9u3bZyzicXd3p1WrVuzatQtQZ1j17dsXLy8vXFxcaNy4MStXrix1LMUhjS6EMCHD29Xkpy1xbDiaQvzFa3i52LFkz1nj14QwCYoCude0ObedMxSjk7atrS0jR45k5syZTJ061dh9e+HCheTn5zNkyBDS09Np1aoVr7zyCu7u7vz111+MGDGCOnXq0KZNm7uew2Aw8Mgjj+Dn50d0dDSpqam33Wvj5ubGzJkzCQgI4MCBAzz55JO4ubnx8ssvM2jQIA4ePMjq1av5559/ALWi+L8yMjLo2bMn7du3Z+fOnZw/f56xY8cyfvz4Qonb+vXrqVatGuvXr+f48eMMGjSI0NBQnnzyybt+P7f7/goSmo0bN5KXl0d4eDiDBg1iw4YNAAwbNowWLVrw7bffYmNjQ0xMDHZ2doBaMZ2Tk8OmTZtwcXHh0KFDuLq6ljiOkpCkRggTUquKC53rV2XT0RR+iz5NdS8nMnLyqVPVhfa1fbQOTwhV7jX4UKOO1q+dA/viDX994okn+PTTT9m4caOxanfGjBkMGDAADw8PPDw8ePHFF43HT5gwgTVr1vD7778XK6n5559/OHLkCGvWrCEgQP37+PDDD2/ZB/P6668bb9eqVYsXX3yR+fPn8/LLL+Pk5ISrqyu2trZFNpydO3cuWVlZzJo1CxcX9fv/6quv6Nu3Lx9//LFx1JCXlxdfffUVNjY2hISE0KdPHyIjI0uV1ERGRnLgwAHi4uKMHflnzZpF48aN2blzJ61btyY+Pp6XXnqJkJAQAOrVq2d8fHx8PAMGDKBp06YA1K5du8QxlJRcfhLCxIy8viKzYNcZfr2+QVjmPAlRciEhIXTo0IFffvkFgOPHj7N582bGjBkDQH5+Pu+99x5NmzbF29sbV1dX1qxZQ3x88QbMHj58mKCgIGNCA9y2aeyCBQvo2LEj/v7+uLq68vrrrxf7HDefq3nz5saEBqBjx44YDAZiY2ON9zVu3Bgbmxsz5KpVq8b58+dLdK6bzxkUFFRoxFCjRo3w9PTk8OHDgDrCaOzYsXTr1o2PPvqIEydOGI997rnneP/99+nYsSNvvfVWqTZml5Ss1AhhYm6eB3XlWi5OdjY80uru40iEqDR2zuqKiVbnLoExY8YwYcIEvv76a2bMmEGdOnW49957Afj000/5v//7P7744guaNm2Ki4sLEydOJCcnp9zCjYqKYtiwYbzzzjv07NkTDw8P5s+fz7Rp08rtHDcruPRTQKfTYTAYKuRcoFZuDR06lL/++otVq1bx1ltvMX/+fB5++GHGjh1Lz549+euvv/j777+JiIhg2rRpTJgwocLikZUaIUyMjV7HsJvGIPRvEYi7o10RjxCikul06iUgLT5KuGL52GOPodfrmTt3LrNmzeKJJ54wrnpu3bqVfv36MXz4cJo3b07t2rU5evRosZ+7YcOGnDlzhsTERON927dvL3TMtm3bqFmzJlOnTiUsLIx69epx+nThOW/29vbk5+ff9Vz79u0jIyPDeN/WrVvR6/U0aNCg2DGXRMH3d+bMGeN9hw4d4sqVKzRq1Mh4X/369XnhhRf4+++/eeSRR5gxY4bxa0FBQTz99NMsXryYyZMn8+OPP1ZIrAUkqRHCBA0KC8LeVv3vKXOehCg9V1dXBg0axJQpU0hMTDR2vwd1/8fatWvZtm0bhw8f5qmnnrpluHJRunXrRv369Xn88cfZt28fmzdvZurUqYWOqVevHvHx8cyfP58TJ07w5ZdfsmTJkkLH1KpVi7i4OGJiYrhw4YJxNuLNhg0bhqOjI48//jgHDx5k/fr1TJgwgREjRhj305RWfn4+MTExhT4OHz5Mt27daNq0KcOGDWPPnj3s2LGDkSNHcu+99xIWFkZmZibjx49nw4YNnD59mq1bt7Jz504aNmwIwMSJE1mzZg1xcXHs2bOH9evXG79WUSSpEcIE+bg6MOuJNvw4MozGAbdWQgghim/MmDFcvnyZnj17Ftr/8vrrr9OyZUt69uxJly5d8Pf3L1H3Xr1ez5IlS8jMzKRNmzaMHTuWDz74oNAxDz30EC+88ALjx48nNDSUbdu28cYbbxQ6ZsCAAfTq1Yv77ruPqlWr3ras3NnZmTVr1nDp0iVat27NwIED6dq1K1999VXJ/jJuIz09nRYtWhT66Nu3LzqdjmXLluHl5UXnzp3p1q0btWvXZsGCBQDY2Nhw8eJFRo4cSf369Xnsscfo3bs377zzDqAmS+Hh4TRs2JBevXpRv359vvnmmzLHWxQZkyCEEKJI1jwmQVQOGZMghBBCCHETSWqEEEIIYREkqRFCCCGERZCkRgghhBAWQZIaIYQQQlgESWqEEEIUS0V2phXWrbz+bcmYBCGEEEWyt7dHr9dz7tw5qlatir29vcwiE+VCURRycnJISUlBr9djb29fpueTpEYIIUSR9Ho9wcHBJCYmcu6cRjOfhEVzdnamRo0a6PVlu4AkSY0QQoi7sre3p0aNGuTl5d11TpEQJWFjY4OtrW25rP5JUiOEEKJYdDoddnZ2t0yCFsJUyEZhIYQQQlgESWqEEEIIYREkqRFCCCGERbCaPTUFw8jT0tI0jkQIIYQQxVXwvl3wPl4Uq0lqrl69CkBQUJDGkQghhBCipK5evYqHh0eRx+iU4qQ+FsBgMHDu3Dnc3NzKvWlUWloaQUFBnDlzBnd393J9blFy8vMwLfLzMC3y8zA98jMpmqIoXL16lYCAgLv2sbGalRq9Xk/16tUr9Bzu7u7yD9KEyM/DtMjPw7TIz8P0yM/kzu62QlNANgoLIYQQwiJIUiOEEEIIiyBJTTlwcHDgrbfewsHBQetQBPLzMDXy8zAt8vMwPfIzKT9Ws1FYCCGEEJZNVmqEEEIIYREkqRFCCCGERZCkRgghhBAWQZIaIYQQQlgESWrK6Ouvv6ZWrVo4OjrStm1bduzYoXVIVisiIoLWrVvj5uaGr68v/fv3JzY2VuuwBPDRRx+h0+mYOHGi1qFYtbNnzzJ8+HB8fHxwcnKiadOm7Nq1S+uwrFJ+fj5vvPEGwcHBODk5UadOHd57771izTcSdyZJTRksWLCASZMm8dZbb7Fnzx6aN29Oz549OX/+vNahWaWNGzcSHh7O9u3bWbt2Lbm5ufTo0YOMjAytQ7NqO3fu5Pvvv6dZs2Zah2LVLl++TMeOHbGzs2PVqlUcOnSIadOm4eXlpXVoVunjjz/m22+/5auvvuLw4cN8/PHHfPLJJ0yfPl3r0MyalHSXQdu2bWndujVfffUVoM6XCgoKYsKECbz66qsaRydSUlLw9fVl48aNdO7cWetwrFJ6ejotW7bkm2++4f333yc0NJQvvvhC67Cs0quvvsrWrVvZvHmz1qEI4MEHH8TPz4+ff/7ZeN+AAQNwcnJizpw5GkZm3mSlppRycnLYvXs33bp1M96n1+vp1q0bUVFRGkYmCqSmpgLg7e2tcSTWKzw8nD59+hT6fyK0sXz5csLCwnj00Ufx9fWlRYsW/Pjjj1qHZbU6dOhAZGQkR48eBWDfvn1s2bKF3r17axyZebOagZbl7cKFC+Tn5+Pn51fofj8/P44cOaJRVKKAwWBg4sSJdOzYkSZNmmgdjlWaP38+e/bsYefOnVqHIoCTJ0/y7bffMmnSJF577TV27tzJc889h729PY8//rjW4VmdV199lbS0NEJCQrCxsSE/P58PPviAYcOGaR2aWZOkRlik8PBwDh48yJYtW7QOxSqdOXOG559/nrVr1+Lo6Kh1OAI10Q8LC+PDDz8EoEWLFhw8eJDvvvtOkhoN/P777/z222/MnTuXxo0bExMTw8SJEwkICJCfRxlIUlNKVapUwcbGhuTk5EL3Jycn4+/vr1FUAmD8+PGsWLGCTZs2Ub16da3DsUq7d+/m/PnztGzZ0nhffn4+mzZt4quvviI7OxsbGxsNI7Q+1apVo1GjRoXua9iwIYsWLdIoIuv20ksv8eqrrzJ48GAAmjZtyunTp4mIiJCkpgxkT00p2dvb06pVKyIjI433GQwGIiMjad++vYaRWS9FURg/fjxLlixh3bp1BAcHax2S1eratSsHDhwgJibG+BEWFsawYcOIiYmRhEYDHTt2vKXFwdGjR6lZs6ZGEVm3a9euodcXfgu2sbHBYDBoFJFlkJWaMpg0aRKPP/44YWFhtGnThi+++IKMjAxGjx6tdWhWKTw8nLlz57Js2TLc3NxISkoCwMPDAycnJ42jsy5ubm637GVycXHBx8dH9jhp5IUXXqBDhw58+OGHPPbYY+zYsYMffviBH374QevQrFLfvn354IMPqFGjBo0bN2bv3r18/vnnPPHEE1qHZt4UUSbTp09XatSoodjb2ytt2rRRtm/frnVIVgu47ceMGTO0Dk0oinLvvfcqzz//vNZhWLU///xTadKkieLg4KCEhIQoP/zwg9YhWa20tDTl+eefV2rUqKE4OjoqtWvXVqZOnapkZ2drHZpZkz41QgghhLAIsqdGCCGEEBZBkhohhBBCWARJaoQQQghhESSpEUIIIYRFkKRGCCGEEBZBkhohhBBCWARJaoQQQghhESSpEUIIIYRFkKRGCCGEEBZBkhohhBBCWARJaoQQQghhESSpEUIIIYRF+H/eQk6aF7DduQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 0.1,momentum=0.8), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "JJuOI6Kp4jnW" + }, + "source": [ + "\n", + "\n", + "Momentum increases the accuracy with the learning rate = 0.1.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 800 + }, + "id": "bmg2bc1q4puw", + "outputId": "e1c93bef-4433-49ce-df2f-c97dd74ef941" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.1054 - loss: 2.3202 - val_accuracy: 0.0833 - val_loss: 2.3494\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0881 - loss: 2.3457 - val_accuracy: 0.0972 - val_loss: 2.3089\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.0966 - loss: 2.3443 - val_accuracy: 0.0938 - val_loss: 2.3455\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0759 - loss: 2.3347 - val_accuracy: 0.0972 - val_loss: 2.3600\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.1194 - loss: 2.3298 - val_accuracy: 0.0833 - val_loss: 2.3392\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.0822 - loss: 2.3439 - val_accuracy: 0.1215 - val_loss: 2.3266\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.0841 - loss: 2.3334 - val_accuracy: 0.1007 - val_loss: 2.3865\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.1035 - loss: 2.3407 - val_accuracy: 0.1215 - val_loss: 2.3062\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.0809 - loss: 2.3400 - val_accuracy: 0.0833 - val_loss: 2.3562\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.0957 - loss: 2.3412 - val_accuracy: 0.0833 - val_loss: 2.3375\n" + ] + }, + { + "data": { + "image/png": "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vDEAb3fb/Fp6+eWXee+992jRogWBgYGkpqZy1113MW3aNDw8PPjmm2+45557SEpKokmTikejXn/9dd555x3effddZsyYwZgxYzhx4gRBQUHlnn/lyhXee+895s6di16v56GHHuL555/n22+/BWD69Ol8++23zJ49m3bt2vHRRx/x008/cfvtt1f7vY4bN47k5GSWLFmCn58fL730EnfddRcHDhzAzc2N2NhY8vPz2bBhAz4+Phw4cMAyCvXqq69y4MABli9fTr169Th8+DBXr16tdiz2JAmLEEI4izMJyvP5I2AsAr2LquGo6Y033qBfv36Wr4OCgujSpYvl6zfffJPFixezZMkS4uLiKrzOuHHjGD16NABvv/02H3/8Mdu3b2fgwIHlnl9QUMBnn31Gy5YtAYiLi+ONN96w/HzGjBlMmTKFe++9F4CZM2daRjuqw5yobN68mZ49ewLw7bffEh4ezk8//cQDDzxASkoKw4cPp1OnTgC0aNHC8vqUlBS6du1KVFQUoIwyaZUkLEII4Qxys+D8YeW4KA8yT0Jg02pdysvNhQNvDLBhcFW/r62YfwGbZWdn889//pNff/2VM2fOUFhYyNWrV0lJSan0Op07d7Yc+/j44OfnR3p6eoXne3t7W5IVgIYNG1rOz8zM5OzZs/To0cPycxcXF7p3747RaLTq/ZklJibi6urKTTfdZPlecHAwbdq0ITExEYBnnnmGp556it9++42+ffsyfPhwy/t66qmnGD58OLt27aJ///4MGzbMkvhojdSwCCGEM0jbW/Zrc/JSDTqdDm9311p/2HIPIx8fnzJfP//88yxevJi3336bjRs3kpCQQKdOncjPz6/0Om5ubtf9t6ksuSjvfLW37Hvsscc4evQoDz/8MPv27SMqKooZM2YAMGjQIE6cOMGzzz7L6dOnufPOO3n++edVjbcikrAIIYQzOJ1Q9uvzR1QJQ6s2b97MuHHjuPfee+nUqRMNGjTg+PHjtRqDv78/9evXZ8eOHZbvFRUVsWvXrmpfs127dhQWFrJt2zbL986fP09SUhLt27e3fC88PJwnn3ySRYsW8dxzz/HFF19YfhYSEsIjjzzCvHnz+PDDD/n888+rHY89yZSQEEI4g9O7lWdXTyjMrdEIizNq3bo1ixYt4p577kGn0/Hqq69WexqmJp5++mni4+Np1aoVbdu2ZcaMGVy8eLFKo0v79u3DYDBYvtbpdHTp0oWhQ4fy+OOP85///AeDwcDLL79M48aNGTp0KACTJk1i0KBBREREcPHiRdauXUu7du0AeO211+jevTsdOnQgLy+PpUuXWn6mNZKwCCGEMzAX3EYMgAM/w/nkSk+vaz744AP+9re/0bNnT+rVq8dLL71EVlZWrcfx0ksvkZaWxtixY3FxceGJJ55gwIABuLjcuH6nd+/eZb52cXGhsLCQ2bNnM3HiRO6++27y8/Pp3bs3y5Yts0xPFRUVERsby8mTJ/Hz82PgwIH8+9//BpReMlOmTOH48eN4eXlx2223sWDBAtu/cRvQmdSeXLOBrKws/P39yczMxM/PT+1whBCiduVmwb/CleMRc+H7h5XGcZP23filubkcO3aM5s2b4+npaedAxbWMRiPt2rVjxIgRvPnmm2qHYzcV/T2z5ve3jLAIIYSjMxfc+odDk5uV40upUJALbpKEaMmJEyf47bff6NOnD3l5ecycOZNjx47x4IMPqh2a5knRrRBCODpzwW3DLuATAh7+gAkuHlMzKlEOvV7PnDlziI6OplevXuzbt4/ff/9ds3UjWiIjLEII4ejM9SuNIkGng+CWcHqXUngbKr8ItSQ8PJzNmzerHYZDkhEWIYRwdJYRlq7Kc3Ar5VlWCgknIgmLEEI4styskhVBjSKVZ3PCkiEJi3AekrAIIYQjMxfc+oWBTz3lOLi4NbyMsAgnIgmLEEI4MvN0kHl0BWRKSDglSViEEMKRlS64NTMnLFcy4OrF2o5ICLuQhEUIIRzZtQW3AB6+YGioHJ8/WushCWEPkrAIIYSjys0qmfYpPcICMi1UBTExMUyaNMnydbNmzfjwww8rfY1Op+Onn36q8b1tdZ26RBIWIYRwVGl7AVPZglszS+Gt8+0pdM899zBw4MByf7Zx40Z0Oh179+61+ro7duzgiSeeqGl4Zfzzn/8kMjLyuu+fOXOGQYMG2fRe15ozZw4BAQF2vUdtkoRFCCEcVXkFt2ZOPMLy6KOPsmrVKk6ePHndz2bPnk1UVBSdO3e2+rohISF4e3vbIsQbatCgAR4eHrVyL2chCYsQQjiq8gpuzYJbK8/VSVhMJsjPqf1HFffivfvuuwkJCWHOnDllvp+dnc0PP/zAo48+yvnz5xk9ejSNGzfG29ubTp068d1331V63WunhJKTk+nduzeenp60b9+eVatWXfeal156iYiICLy9vWnRogWvvvoqBQUFgDLC8frrr7Nnzx50Oh06nc4S87VTQvv27eOOO+7Ay8uL4OBgnnjiCbKzsy0/HzduHMOGDeO9996jYcOGBAcHExsba7lXdaSkpDB06FB8fX3x8/NjxIgRnD171vLzPXv2cPvtt2MwGPDz86N79+78+eefgLIn0j333ENgYCA+Pj506NCBZcuWVTuWqpDW/EII4ajKK7g1s4ywHFESAZ2u6tctuAJvN6pxeFZ75TS4+9zwNFdXV8aOHcucOXOYOnUquuL39sMPP1BUVMTo0aPJzs6me/fuvPTSS/j5+fHrr7/y8MMP07JlS3r06HHDexiNRu677z7q16/Ptm3byMzMLFPvYmYwGJgzZw6NGjVi3759PP744xgMBl588UVGjhzJ/v37WbFiBb///jsA/v7+110jJyeHAQMGcMstt7Bjxw7S09N57LHHiIuLK5OUrV27loYNG7J27VoOHz7MyJEjiYyM5PHHH7/h+ynv/ZmTlfXr11NYWEhsbCwjR45k3bp1AIwZM4auXbsya9YsXFxcSEhIwM3NDYDY2Fjy8/PZsGEDPj4+HDhwAF9fX6vjsIYkLEII4YjyLldccAsQ2BR0LkrycfkM+KmQgNjR3/72N959913Wr19PTEwMoEwHDR8+HH9/f/z9/Xn++ect5z/99NOsXLmS77//vkoJy++//87BgwdZuXIljRop/+3efvvt6+pO/v73v1uOmzVrxvPPP8+CBQt48cUX8fLywtfXF1dXVxo0aFDhvebPn09ubi7ffPMNPj5KwjZz5kzuuecepk+fTv369QEIDAxk5syZuLi40LZtWwYPHszq1aurlbCsXr2affv2cezYMcLDwwH45ptv6NChAzt27CA6OpqUlBReeOEF2rZtC0Dr1q0tr09JSWH48OF06tQJgBYtWlgdg7WsSlji4+NZtGgRBw8exMvLi549ezJ9+nTatGlT4WsWLVrE22+/zeHDhykoKKB169Y899xzPPzww5ZzsrOzefnll/npp584f/48zZs355lnnuHJJ5+s/jsTQghndqaSglsAFzcIbAYXjiiJjTUJi5u3MtpR29yqXj/Stm1bevbsyVdffUVMTAyHDx9m48aNvPHGGwAUFRXx9ttv8/3333Pq1Cny8/PJy8ur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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras.optimizers import SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=SGD(learning_rate= 1.0,momentum=0.8), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "QfSFK_aF46PY" + }, + "source": [ + "Momentum does not change the accuracy for the rate = 1.0 significantly.\n", + "In conclusion, when the learning rate are very small or very large, moumentum does not change the results." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "B_KaXXfH2uL7" + }, + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "75CAa-uQmoA6" + }, + "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": 82, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 797 + }, + "id": "tgob-Y6zmoA6", + "outputId": "04b20379-cf6f-4b1e-a140-62b4ec2f6d5e" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 8ms/step - accuracy: 0.1047 - loss: 2.3145 - val_accuracy: 0.0833 - val_loss: 2.3347\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0923 - loss: 2.3139 - val_accuracy: 0.0833 - val_loss: 2.3325\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1068 - loss: 2.3095 - val_accuracy: 0.0833 - val_loss: 2.3306\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1034 - loss: 2.3142 - val_accuracy: 0.0833 - val_loss: 2.3284\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1002 - loss: 2.3138 - val_accuracy: 0.0833 - val_loss: 2.3270\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0953 - loss: 2.3174 - val_accuracy: 0.0833 - val_loss: 2.3251\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.0936 - loss: 2.3081 - val_accuracy: 0.0833 - val_loss: 2.3241\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1191 - loss: 2.3048 - val_accuracy: 0.0833 - val_loss: 2.3227\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.1291 - loss: 2.2944 - val_accuracy: 0.0833 - val_loss: 2.3217\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 3ms/step - accuracy: 0.1033 - loss: 2.3062 - val_accuracy: 0.0833 - val_loss: 2.3206\n" + ] + }, + { + "data": { + "image/png": "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+te/0qFDB3eXUq8dP36cnj170qBBA7799lu2bNnCu+++S1hYmLtLq5fefvttPvroIyZNmsTWrVt5++23+cMf/sCHH37o7tLqND3SfQW6detGamoqkyZNAoz9peLj4xk7dizPPfecm6uTw4cPExkZyeLFi+nVq5e7y6mXiouLSU5OZvLkybz++ut06tSJ999/391l1UvPPfccy5Yt48cff3R3KQL88pe/JCoqin/84x+OY4MHD8bf35/PPvvMjZXVbeqpqaHS0lLWrl1Lnz59HMfMZjN9+vRhxYoVbqxMziosLAQgPDzczZXUX2lpaQwYMMDpvxNxj6+++oqUlBTuvfdeIiMj6dy5M3/729/cXVa91aNHDzIyMti+fTsA69evZ+nSpdxxxx1urqxuqzcbWl5tR44coaKigqioKKfjUVFRbNu2zU1VyVk2m41x48bRs2dP2rVr5+5y6qWZM2eybt061qxZ4+5SBNi9ezcfffQR48eP5/nnn2fNmjU88cQT+Pj48OCDD7q7vHrnueeeo6ioiKSkJLy8vKioqOCNN95g2LBh7i6tTlOoEY+UlpbGpk2bWLp0qbtLqZdycnJ48sknmT9/Pn5+fu4uRzCCfkpKCm+++SYAnTt3ZtOmTXz88ccKNW7wv//7v0yfPp0ZM2bQtm1bMjMzGTduHDExMfp5XAGFmhpq2LAhXl5eHDp0yOn4oUOHiI6OdlNVAjBmzBjmzp3LkiVLiIuLc3c59dLatWvJz88nOTnZcayiooIlS5YwadIkrFYrXl5ebqyw/mncuDFt2rRxOta6dWu++OILN1VUv/2///f/eO655xg6dCgA7du3Z9++faSnpyvUXAHNqakhHx8funTpQkZGhuOYzWYjIyOD7t27u7Gy+stutzNmzBhmz57NggULSEhIcHdJ9dZtt93Gxo0byczMdLxSUlIYNmwYmZmZCjRu0LNnzwuWONi+fTtNmzZ1U0X128mTJzGbnT+Cvby8sNlsbqrIM6in5gqMHz+eBx98kJSUFLp27cr7779PSUkJI0eOdHdp9VJaWhozZsxgzpw5WCwW8vLyAAgJCcHf39/N1dUvFovlgrlMgYGBREREaI6Tmzz11FP06NGDN998k/vuu4/Vq1fzySef8Mknn7i7tHpp4MCBvPHGGzRp0oS2bdvy888/89577/HQQw+5u7S6zS5X5MMPP7Q3adLE7uPjY+/atat95cqV7i6p3gJcvqZMmeLu0sRut9988832J5980t1l1Gv//e9/7e3atbP7+vrak5KS7J988om7S6q3ioqK7E8++aS9SZMmdj8/P3vz5s3tL7zwgt1qtbq7tDpN69SIiIiIR9CcGhEREfEICjUiIiLiERRqRERExCMo1IiIiIhHUKgRERERj6BQIyIiIh5BoUZEREQ8gkKNiIiIeASFGhEREfEICjUiIiLiERRqRERExCMo1IiIiIhH+P+lWkediTfWhgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Adam optimizer\n", + "from tensorflow.keras.optimizers import Adam\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=Adam(), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 83, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 797 + }, + "id": "4wQwwncCmoA6", + "outputId": "54b2982d-b23d-4b33-de14-b8288f55efa2" + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 9ms/step - accuracy: 0.3067 - loss: 2.3245 - val_accuracy: 0.7674 - val_loss: 0.7658\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.8213 - loss: 0.5843 - val_accuracy: 0.8750 - val_loss: 0.4086\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9302 - loss: 0.2436 - val_accuracy: 0.9062 - val_loss: 0.3077\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9370 - loss: 0.1910 - val_accuracy: 0.9132 - val_loss: 0.2556\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9670 - loss: 0.1084 - val_accuracy: 0.9236 - val_loss: 0.2281\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9849 - loss: 0.0690 - val_accuracy: 0.9340 - val_loss: 0.1940\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9895 - loss: 0.0493 - val_accuracy: 0.9306 - val_loss: 0.2076\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9939 - loss: 0.0358 - val_accuracy: 0.9410 - val_loss: 0.2053\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9949 - loss: 0.0304 - val_accuracy: 0.9375 - val_loss: 0.1864\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9990 - loss: 0.0233 - val_accuracy: 0.9306 - val_loss: 0.2002\n" + ] + }, + { + "data": { + "image/png": "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p4qIj9JjtkVEpG4OHjzIF198weWXX05JSQlz5swhNTWVW2+91ejSGrVm/9TeQD8L3du60lqKumpEROQCmM1mFixYQL9+/Rg8eDDbt2/nyy+/bJTjNBqTZt8yAtC7XSRbD+Ww7VA2wxNjjS5HRER8VHx8PGvXrjW6DJ/T7FtGwLUSK2jxMxERESMojACJ5Suxbs/Iocze8FPBREREmjOFEaBj6zBCAywUldrZdyzf6HJERESaFYURwGI20au8dWSbumpEREQalMJIucR2kQCkaFl4ERGRBqUwUq5iEKueUSMiItKwFEbK9S7vptmdmUdxqd3gakRE5EJdccUV3H///e73CQkJzJ49+5znmEwmli5desH3rq/rNBcKI+XiIoNpFRZAmcPJzsyGf56BiIi4DB8+nGuvvbbaz7777jtMJhPbtm3z+LobNmzgnnvuudDyqnj88cdJSko6a39mZibDhg2r13udacGCBURGRnr1Hg1FYaScyWSid/m4ET00T0TEOHfeeSerVq3i0KFDZ302f/58+vbtS+/evT2+buvWrQkJaZhHfsTExBAYGNgg92oKFEZOUzGIddshzagRETHKDTfcQOvWrc96Cnx+fj4ffPABd955JydOnOCWW24hLi6OkJAQevXqxXvvvXfO657ZTfPzzz9z2WWXERQURPfu3at9uvwjjzxCly5dCAkJoWPHjkydOpXS0lLA1TIxY8YMtm7dislkwmQyuWs+s5tm+/bt/Pa3vyU4OJiWLVtyzz33kJ9fuZTE7bffzo033sjzzz9P27ZtadmyJePHj3ffqy7S0tIYMWIEYWFhREREMHLkSI4cOeL+fOvWrVx55ZWEh4cTERFBnz592LhxI+B6xs7w4cNp0aIFoaGh9OjRgxUrVtS5lvPRcvCn6R3vGjeyVYNYRaSpcjqhtNCYe/uHQC2ejO7n58eYMWNYsGABjz76qPtp6h988AF2u51bbrmF/Px8+vTpwyOPPEJERATLly/ntttuo1OnTvTv3/+893A4HPz+978nOjqan376iZycnCrjSyqEh4ezYMECYmNj2b59O3fffTfh4eE8/PDDjBo1ih07dvD555/z5ZdfAmC1Ws+6RkFBAUOHDmXgwIFs2LCBo0ePctdddzFhwoQqgevrr7+mbdu2fP311+zbt49Ro0aRlJTE3Xfffd7vp7rvryKIfPvtt5SVlTF+/HhGjRrFN998A8Do0aNJTk7m1VdfxWKxkJKSgr+/PwDjx4/HZrOxZs0aQkND2blzJ2FhYR7XUVsKI6epaBnZf6yAnKJSrMH+xhYkIlLfSgthpkHP4PrrYQgIrdWhd9xxB8899xzffvstV1xxBeDqorn55puxWq1YrVYefPBB9/ETJ05k5cqVvP/++7UKI19++SW7d+9m5cqVxMa6/nnMnDnzrHEejz32mPt1QkICDz74IIsWLeLhhx8mODiYsLAw/Pz8iImJqfFeCxcupLi4mLfffpvQUNf3P2fOHIYPH84zzzxDdHQ0AC1atGDOnDlYLBa6du3K9ddfz+rVq+sURlavXs327dtJTU0lPj4egLfffpsePXqwYcMG+vXrR1paGg899BBdu3YFoHPnzu7z09LSuPnmm+nVqxcAHTt29LgGT6ib5jRRoQHERwUDsCNDXTUiIkbp2rUrgwYN4q233gJg3759fPfdd9x5550A2O12nnzySXr16kVUVBRhYWGsXLmStLS0Wl1/165dxMfHu4MIwMCBA886bvHixQwePJiYmBjCwsJ47LHHan2P0++VmJjoDiIAgwcPxuFwsGfPHve+Hj16YLFY3O/btm3L0aNHPbrX6feMj493BxGA7t27ExkZya5duwCYNGkSd911F0OGDOFvf/sbv/zyi/vYP//5zzz11FMMHjyY6dOn12nAsCfUMnKG3u0iST9ZREp6NoMvbmV0OSIi9cs/xNVCYdS9PXDnnXcyceJE5s6dy/z58+nUqROXX345AM899xz/+Mc/mD17Nr169SI0NJT7778fm81Wb+WuW7eO0aNHM2PGDIYOHYrVamXRokW88MIL9XaP01V0kVQwmUw4HN57Xtrjjz/OrbfeyvLly/nss8+YPn06ixYt4qabbuKuu+5i6NChLF++nC+++IJZs2bxwgsvMHHiRK/UopaRMyS5B7FmG1qHiIhXmEyurhIjtlqMFzndyJEjMZvNLFy4kLfffps77rjDPX5k7dq1jBgxgj/+8Y8kJibSsWNH9u7dW+trd+vWjfT0dDIzM937fvzxxyrH/PDDD1x00UU8+uij9O3bl86dO3Pw4MEqxwQEBGC3n3ttqm7durF161YKCgrc+9auXYvZbOaSSy6pdc2eqPj+0tPT3ft27txJdnY23bt3d+/r0qULDzzwAF988QW/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enR6y8i5pj+LiIhIJYWRetS1bTgBFjPZhaWknywyuhwRERGfoDBSjwL9LHRrGw5AisaNiIiI1IrCSD1LjI8EYJvWGxEREakVhZF65l78TC0jIiIitaIwUs8qZtTsyMilzO4wuBoREZHGT2GknnVsFUZYoB9FpXZ+PppvdDkiIiKNnsJIPTObTfSKc7WOaPEzERGR81MY8YLeFYufaVl4ERGR81IY8YJELQsvIiJSawojXlAxvXd3Vh7FpXZjixEREWnkFEa8INYaRKuwAOwOJ/89nGt0OSIiIo2awogXmEwmddWIiIjUksKIl7gXP9NKrCIiIuekMOIlifEV03s1o0ZERORcFEa8pKJlZP/xAnKKSo0tRkREpBFTGPGSqNAA2keFALBdrSMiIiI1Uhjxot7tXF01emieiIhIzRRGvCipfL0RDWIVERGpmcKIF7ln1KhlREREpEYKI17UMy4CswmO5JaQlVNsdDkiIiKNksKIF4UE+NElOhxQ64iIiEhNFEa8rGIQq1ZiFRERqZ7CiJclugexanqviIhIdRRGvOz0Z9Q4nU5jixEREWmEFEa87JKYcAL8zOQWl3HgRKHR5YiIiDQ6HoeRNWvWMHz4cGJjYzGZTCxduvS853zzzTdceumlBAYGcvHFF7NgwYI6lOqb/C1mesRGAFpvREREpDoeh5GCggISExOZO3durY5PTU3l+uuv58orryQlJYX777+fu+66i5UrV3pcrK9K1HojIiIiNfLz9IRhw4YxbNiwWh8/b948OnTowAsvvABAt27d+P777/n73//O0KFDPb29T6p4gq9aRkRERM7m9TEj69atY8iQIVX2DR06lHXr1tV4TklJCbm5uVU2X1bRMvLfw7mU2h3GFiMiItLIeD2MZGVlER0dXWVfdHQ0ubm5FBUVVXvOrFmzsFqt7i0+Pt7bZXpVQstQwoP8KClzsCcrz+hyREREGpVGOZtmypQp5OTkuLf09HSjS7ogZrPptCm+Wm9ERETkdF4PIzExMRw5cqTKviNHjhAREUFwcHC15wQGBhIREVFl83UVK7Fq3IiIiEhVXg8jAwcOZPXq1VX2rVq1ioEDB3r71o2KnuArIiJSPY/DSH5+PikpKaSkpACuqbspKSmkpaUBri6WMWPGuI+/99572b9/Pw8//DC7d+/mlVde4f333+eBBx6on+/ARySV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NmzYwJ///GcCAgIYO3as0eU1O5MnTyY3N5euXbtisViw2+08/fTTjB492ujSfFazDCPSeI0fP54dO3bw/fffG11Ks5Wens59993HqlWrCAoKMrocwRXS+/bty8yZMwFITk5mx44dzJs3T2HEAO+//z7vvvsuCxcupEePHqSkpHD//fcTGxurn0cdNcsw0qpVKywWC0eOHKmy/8iRI8TExBhUlUyYMIFPP/2UNWvW0K5dO6PLabY2bdrE0aNHufTSS9377HY7a9asYc6cOZSUlGCxWAyssPlp27Yt3bt3r7KvW7du/Oc//zGooubtoYceYvLkyfy///f/AOjVqxcHDx5k1qxZCiN11CzHjAQEBNCnTx9Wr17t3udwOFi9ejUDBw40sLLmyel0MmHCBJYsWcJXX31Fhw4djC6pWbvqqqvYvn07KSkp7q1v376MHj2alJQUBREDDB48+Kzp7nv37uWiiy4yqKLmrbCwELO56p9Pi8WCw+EwqCLf1yxbRgAmTZrE2LFj6du3L/3792f27NkUFBQwbtw4o0trdsaPH8/ChQv5+OOPCQ8PJysrCwCr1UpwcLDB1TU/4eHhZ43XCQ0NpWXLlhrHY5AHHniAQYMGMXPmTEaOHMn69et57bXXeO2114wurVkaPnw4Tz/9NO3bt6dHjx5s2bKFF198kTvuuMPo0nyXsxl7+eWXne3bt3cGBAQ4+/fv7/zxxx+NLqlZAqrd5s+fb3RpUu7yyy933nfffUaX0ax98sknzp49ezoDAwOdXbt2db722mtGl9Rs5ebmOu+77z5n+/btnUFBQc6OHTs6H330UWdJSYnRpfmsZrvOiIiIiDQOzXLMiIiIiDQeCiMiIiJiKIURERERMZTCiIiIiBhKYUREREQMpTAiIiIihlIYEREREUMpjIiIiIihFEZERETEUAojIiIiYiiFERERETGUwoiIiIgY6v8DQFGFrc5LpgUAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Extra hidden layer\n", + "\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Input, Dense\n", + "from tensorflow.keras.optimizers import Adam\n", + "import matplotlib.pyplot as plt\n", + "\n", + "\n", + "model = Sequential()\n", + "\n", + "# Input layer\n", + "model.add(Input(shape=(X_train.shape[1],))) # Input tensor specifying the shape\n", + "model.add(Dense(32, activation='relu')) # 32 neurons, ReLU activation\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(128, activation='relu')) # 128 neurons, ReLU activation\n", + "# Hidden layer\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "\n", + "# Output layer\n", + "model.add(Dense(y_train.shape[1], activation='softmax')) # softmax activation\n", + "\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=Adam(), # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")\n", + "history = model.fit(X_train, y_train,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_split=0.2)\n", + "\n", + "plt.plot(history.history['loss'], label='Training Loss')\n", + "plt.plot(history.history['val_loss'], label='Validation Loss')\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ecZMiG1p6t60" + }, + "source": [ + "Yes, model improves and the accuracy increases." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "ydzjt3e0moA6" + }, + "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": 84, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "8Ghe4LjOmoA6", + "outputId": "633d50f0-3f36-472e-c2d7-b49be694c686" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "predictions_tf = model(X_test)\n", + "predictions_tf[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": 86, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "pC9YET6bmoA6", + "outputId": "87783ae1-fc8c-4ed8-b66b-ebcdae1153bb" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(tensorflow.python.framework.ops.EagerTensor, TensorShape([360, 10]))" + ] + }, + "execution_count": 86, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(predictions_tf), predictions_tf.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "jkJPZ1BXmoA6" + }, + "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": 87, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Gn1ToO4CmoA6", + "outputId": "346ef1a3-90b1-423f-cefc-f5a1f45064f3" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 87, + "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": "SS7RB_I0moA6" + }, + "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": "iCPbAK09moA6" + }, + "source": [ + "We can also extract the label with the highest probability using the tensorflow API:" + ] + }, + { + "cell_type": "code", + "execution_count": 88, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "UlZXrID2moA6", + "outputId": "244cfaf6-e223-473d-d1f4-88bff74cfbcb" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 88, + "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": "WHDlXq2OmoA6" + }, + "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": 89, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 521 + }, + "id": "SyuhjsZGmoA6", + "outputId": "7d4df802-c17e-4ce5-b8bc-2893735aa342" + }, + "outputs": [ + { + "data": { + "image/png": "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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": "pGxkZ2oMmoA7" + }, + "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": 98, + "metadata": { + "id": "ugoN6bYimoA7" + }, + "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": 91, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "AlSqF1PtmoA7", + "outputId": "3e321ba2-3c3d-4ec4-de62-b0377ef0ff51" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ]" + ] + }, + "execution_count": 91, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "vlQ2N6QnmoA7" + }, + "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": 92, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "j5uwxApZmoA7", + "outputId": "97202be6-6f1b-43d4-f50c-1b110a0d2f5b" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 92, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers[0].weights" + ] + }, + { + "cell_type": "code", + "execution_count": 93, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "Xas6bHfHmoA7", + "outputId": "21a0a493-03a6-4486-cd19-3fa688d9cd49" + }, + "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": 93, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w = model.layers[0].weights[0].numpy()\n", + "w" + ] + }, + { + "cell_type": "code", + "execution_count": 94, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "mczg6tsmmoA7", + "outputId": "5182935f-f1f9-49f0-b1bc-ea4b3fd5c1b5" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float32(0.008835949)" + ] + }, + "execution_count": 94, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.std()" + ] + }, + { + "cell_type": "code", + "execution_count": 95, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "EZORHpncmoA7", + "outputId": "5a5f97e4-8cf7-4a25-b74c-25d42b049050" + }, + "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": 95, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = model.layers[0].weights[1].numpy()\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": 96, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 919 + }, + "id": "kit95_XfmoA7", + "outputId": "0eca4ef4-2081-4129-a13f-195c36398fdf" + }, + "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 2ms/step - accuracy: 0.1534 - loss: 2.2976\n", + "Epoch 2/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.4193 - loss: 1.9458\n", + "Epoch 3/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.6685 - loss: 1.1422\n", + "Epoch 4/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.8198 - loss: 0.6375\n", + "Epoch 5/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9078 - loss: 0.3591\n", + "Epoch 6/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9302 - loss: 0.2520\n", + "Epoch 7/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9750 - loss: 0.1315\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.9661 - loss: 0.1472\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.9753 - loss: 0.1129\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.9769 - loss: 0.0952\n", + "Epoch 11/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.9743 - loss: 0.0860\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.9853 - loss: 0.0607\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.9890 - loss: 0.0556\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.9911 - loss: 0.0468\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.9981 - loss: 0.0298\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9UAAAFfCAYAAABA/u+IAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASCdJREFUeJzt3Xd4VGXCxuHnzEwmvRAgDUJnQXpHQMWCIirKrlhYpVnWAiqyImBBVz9lUVlRUbCjInZBxRVERFzpEEF6kQ5J6Jn0TGbm+yOFBAIkYZKTTH73dc2VyZlTnmHMbp6c97zH8Hg8HgEAAAAAgDKzmB0AAAAAAIDqilINAAAAAEA5UaoBAAAAACgnSjUAAAAAAOVEqQYAAAAAoJwo1QAAAAAAlBOlGgAAAACAcrKZHaA03G63Dh48qNDQUBmGYXYcAAAAAICP83g8Sk1NVVxcnCyWM5+Prhal+uDBg4qPjzc7BgAAAACghtm3b5/q169/xterRakODQ2VlPdmwsLCTE4DAAAAAPB1DodD8fHxhX30TKpFqS4Y8h0WFkapBgAAAABUmnNdgsxEZQAAAAAAlBOlGgAAAACAcqJUAwAAAABQTtXimmoAAAAA58/lcsnpdJodA6gS/Pz8ZLVaz3s/lGoAAADAx3k8HiUlJenEiRNmRwGqlIiICMXExJxzMrKzoVQDAAAAPq6gUEdFRSkoKOi8CgTgCzwejzIyMnTo0CFJUmxsbLn3RakGAAAAfJjL5Sos1LVr1zY7DlBlBAYGSpIOHTqkqKiocg8FZ6IyAAAAwIcVXEMdFBRkchKg6in4uTifuQYo1QAAAEANwJBv4HTe+LmgVHuR2+1RltNldgwAAAAAQCWhVHtJltOlkZ8kaOSs3+Vye8yOAwAAAACoBJRqL9lxKE0/bT6knzYn69m5m8yOAwAAAKCau/TSSzVq1CizY1QIwzA0Z86cM75e1ve+e/duGYahtWvXnne2sqJUe0mbeuF6+eYOkqQZS3frvd92mRsIAAAAqKYMwzjr4+mnnzY74hlVZhGeMWOGDMPQ1VdfXWz5iRMnZBiGfvnll0rJURG+/vprPfvss6VePz4+XomJiWrTpo0k6ZdffpFhGJVyb3ZKtRdd2y5W4/q1lCQ9+/0m/bgxyeREAAAAQPWTmJhY+JgyZYrCwsKKLXvkkUcK1/V4PMrNzTUxrblsNpt++uknLVq0yKv7zcnJ8er+yioyMlKhoaGlXt9qtSomJkY2W+XfNZpS7WX3XNJEf+/eQB6P9OCnv2vdvhNmRwIAAAAKeTweZeTkmvLweEo391BMTEzhIzw8XIZhFH6/ZcsWhYaG6ocfflDnzp3l7++v3377TcOGDdOAAQOK7WfUqFG69NJLC7+/9NJL9eCDD+rRRx9VZGSkYmJiTjvrfeLECd1zzz2Kjo5WQECA2rRpo7lz50qSjh49qkGDBqlevXoKCgpS27Zt9cknnxRuO2zYMC1evFivvPJK4Vn13bt3S5I2bNigfv36KSQkRNHR0Ro8eLCOHDlSuG16erqGDBmikJAQxcbGavLkyaX6twoODtYdd9yhcePGnXW99evX6/LLL1dgYKBq166tf/zjH0pLSyuWfcCAAXruuecUFxenFi1aFA6p/vzzz3XxxRcrMDBQXbt21bZt27Rq1Sp16dJFISEh6tevnw4fPly4r1WrVunKK69UnTp1FB4ert69eyshIaFU76fAqWf8GzVqpOeff1533HGHQkND1aBBA7311luFrxcd/r17925ddtllkqRatWrJMAwNGzasTMcvi8qv8T7OMAw9c31rHTieqcXbDuvOD1Zr9v09FR/JfQEBAABgvkynS60mzDfl2Jue6asgu3cqyLhx4/TSSy+pSZMmqlWrVqm3++CDDzR69GitWLFCy5Yt07Bhw9SrVy9deeWVcrvd6tevn1JTUzVz5kw1bdpUmzZtktVqlSRlZWWpc+fOGjt2rMLCwvT9999r8ODBatq0qbp166ZXXnlF27ZtU5s2bfTMM89IkurWrasTJ07o8ssv11133aWXX35ZmZmZGjt2rG6++Wb9/PPPkqQxY8Zo8eLF+uabbxQVFaXHHntMCQkJ6tChwznf09NPP61mzZrpyy+/1MCBA097PT09XX379lWPHj20atUqHTp0SHfddZdGjhypGTNmFK63cOFChYWFacGCBcW2f+qppzRlyhQ1aNBAd9xxh/7+978rNDRUr7zyioKCgnTzzTdrwoQJmjZtmiQpNTVVQ4cO1WuvvSaPx6PJkyfrmmuu0fbt28t09vlUkydP1rPPPqvHHntMX375pe677z717t1bLVq0KLZefHy8vvrqK914443aunWrwsLCFBgYWO7jngulugLYrBa9flsn3TR9mTYnOjR8xip9dV9PhQf6mR0NAAAA8AnPPPOMrrzyyjJv165dOz311FOSpObNm2vq1KlauHChrrzySv30009auXKlNm/erL/85S+SpCZNmhRuW69evWJDzx944AHNnz9fn3/+ubp166bw8HDZ7XYFBQUpJiamcL2pU6eqY8eOev755wuXvffee4qPj9e2bdsUFxend999VzNnztQVV1whKa/8169fv1TvKS4uTg899JAef/zx087WS9KsWbOUlZWlDz/8UMHBwYWZ+vfvr0mTJik6OlpS3lnvd955R3a7XZIKz7I/8sgj6tu3ryTpoYce0qBBg7Rw4UL16tVLknTnnXcWK+eXX355seO/9dZbioiI0OLFi3XdddeV6j2V5JprrtH9998vSRo7dqxefvllLVq06LRSbbVaFRkZKUmKiopSREREuY9ZGpTqChLib9N7w7ror68v1Y5Dabpv5hrNGN5Ndhsj7gEAAGCeQD+rNj3T17Rje0uXLl3KtV27du2KfR8bG6tDhw5JktauXav69esXFupTuVwuPf/88/r888914MAB5eTkKDs7W0FBZx+Vum7dOi1atEghISGnvfbnn38qMzNTOTk56t69e+HyyMjI08ri2YwdO1Zvvvmm3nvvPd18883FXtu8ebPat29fWKglqVevXnK73dq6dWthqW7btm1hoS6q6L9Z0XWLLiv4N5Sk5ORkPfHEE/rll1906NAhuVwuZWRkaO/evaV+PyUpmqPgkoCixzULpboCxYYH6r1hXXXT9KVa+udRjf96vV66qZ0MwzA7GgAAAGoowzC8NgTbTEULoiRZLJbTrtl2Op2nbefnV3z0qGEYcrvdknTOIcIvvviiXnnlFU2ZMkVt27ZVcHCwRo0adc5JvdLS0grPCp8qNjZWO3bsOOv2pREREaHx48frX//6V7nPBp/6b1qg6L9ZQZc5dVnBv6EkDR06VEePHtUrr7yihg0byt/fXz169Djvyc/O9tmZidOmFaxVXJim3tZJVouhrxL269WF5/8DAwAAAKC4unXrKjExsdiyst6zuF27dtq/f7+2bdtW4utLlizRDTfcoNtvv13t27dXkyZNTlvXbrfL5XIVW9apUydt3LhRjRo1UrNmzYo9goOD1bRpU/n5+WnFihWF2xw/fvyMOc7kgQcekMVi0SuvvFJs+QUXXKB169YpPT292HuxWCxlOhte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", + "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": "5QzsTg-mmoA7" + }, + "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": 97, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/" + }, + "id": "xzsnp2epmoA7", + "outputId": "c07a01bb-5e95-4337-99da-571b6c68173d" + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 97, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers[0].weights" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "pyskm9vkmoA8" + }, + "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": 100, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 919 + }, + "id": "nH6kGUR1moA8", + "outputId": "3eea222b-a3f3-45d1-bd68-c7224baa76dd" + }, + "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[1m0s\u001b[0m 2ms/step - accuracy: 0.1026 - loss: 2.3034\n", + "Epoch 2/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1060 - loss: 2.3022\n", + "Epoch 3/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.0921 - loss: 2.3027\n", + "Epoch 4/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1080 - loss: 2.3027\n", + "Epoch 5/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1043 - loss: 2.3026\n", + "Epoch 6/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1012 - loss: 2.3024\n", + "Epoch 7/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1022 - loss: 2.3038\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.0955 - loss: 2.3030\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.1211 - loss: 2.3009\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.1836 - loss: 2.2328\n", + "Epoch 11/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1706 - loss: 1.8751\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.2231 - loss: 1.7155\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.3187 - loss: 1.5469\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.4343 - loss: 1.3092\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.6877 - loss: 0.9361\n" + ] + }, + { + "data": { + "image/png": "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a02cJi/bq00H/zclfORdteTlwpRwlE0XMrNUd+wSU86949XOcnOyTQUZPXq03n33XVWrVk3lypXL9XGff/65Ro4cqQ0bNmjdunXq37+/WrVqpU6dOslisahLly5KTk7WnDlzVL16de3YsUP29vaSpLS0NDVp0kTPPfecvLy89NNPP6lv376qXr26mjVrpkmTJmnPnj2qX7++Xn31VUlSxYoVlZCQoPbt2+vRRx/V+++/rwsXLui5555Tjx499Ntvv0mSRo0apZUrV+qHH36Qn5+fnn/+eW3dujVXnw9++eWXVaNGDX333Xfq3r37Nfenpqaqc+fOatGihTZt2qRTp07p0Ucf1ZAhQzR79uzs/ZYtWyYvLy9FR0fnOH7cuHH64IMPVLlyZQ0cOFC9e/eWp6enJk2aJDc3N/Xo0UNjx47VtGnTJEnJycnq16+fPvzwQ1mtVk2cOFF333239u7dK09Pz1y/VlebOHGiXnvtNT3//PP67rvv9J///Edt2rRR7dq1c+wXEhKi77//Xg8++KB2794tLy8vubq65vu8t0KpBgAApZaTg53+07a67m8UdNWU8BMa06UOU8KBEuzVV19Vp06d8nxcw4YNNW7cOElSzZo1NWXKFC1btkydOnXS0qVLtXHjRu3cuVO1atWSJFWrVi372ODgYD3zzDPZXz/11FNasmSJ5s+fr2bNmsnb21tOTk5yc3PLMRV5ypQpCg8P15tvvpm97dNPP1VISIj27NmjoKAgzZo1S3PmzFGHDh0kXSr/lSpVytVzCgoK0rBhw/TCCy9cd+GvuXPnKi0tTV988YXc3d2zM3Xt2lUTJkyQv/+lj7G6u7tr5syZ2dO+L4+yP/PMM+rcubMkadiwYerVq5eWLVumVq1aSZIGDRqUo5y3b98+x/lnzJghHx8frVy5Uvfee2+untP13H333XryySclSc8995zef/99LV++/JpSbW9vnz193M/Pj89UAwAAFNTlKeE9957WuB+368DpVD397R/6etNhvXp/fd0WyCrhKDtcHe2149XOpp3bViIiIvJ1XMOGDXN8HRgYqFOnTkmSYmJiVKlSpexCfbWsrCy9+eabmj9/vo4dO6aMjAylp6fLzc3tpuf8448/tHz58hyfBb9s//79unDhgjIyMtS8efPs7b6+vteUxZt57rnn9PHHH+vTTz9Vjx49cty3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1vr16xUdHa3MzEzdddddSk1NNTsabGzTpk36+OOP1bBhQ7OjwIbOnTunVq1aydHRUb/88ot27NihiRMnqly5cmZHg41MmDBB06ZN05QpU7Rz505NmDBBb7/9tj788EOzoyGfUlNTFRYWpqlTp173/rfffluTJ0/W9OnTtWHDBrm7u6tz585KS0sr4qTIr5u9xufPn9fWrVv10ksvaevWrVqwYIF2796t++67z4SkyI9b/Q5fFhUVpfXr1ysoKKiIktke16m2kebNm6tp06aaMmWKJMlisSgkJERPPfWURo8ebXI62Nrp06fl5+enlStXqnXr1mbHgY2kpKSocePG+uijj/T666+rUaNGJfYvpshp9OjRWrt2rVavXm12FBSSe++9V/7+/po1a1b2tgcffFCurq6aM2eOiclgC4ZhKCoqSt26dZN0aZQ6KChITz/9tJ555hlJUmJiovz9/TV79mz17NnTxLTIj6tf4+vZtGmTmjVrpkOHDqly5cpFFw4FdqPX99ixY2revLmWLFmie+65R8OHDy+RMwUZqbaBjIwMbdmyRR07dszeZmdnp44dO2rdunUmJkNhSUxMlCT5+vqanAS2NHjwYN1zzz05fpdROvz444+KiIjQQw89JD8/P4WHh+uTTz4xOxZsqGXLllq2bJn27NkjSfrjjz+0Zs0adenSxeRkKAxxcXGKj4/P8d9rb29vNW/enPdepVhiYqIMw5CPj4/ZUWADFotFffv21ahRo1SvXj2z4xSIg9kBSoMzZ84oKytL/v7+Obb7+/tr165dJqVCYbFYLBo+fLhatWql+vXrmx0HNvL1119r69at2rRpk9lRUAgOHDigadOmaeTIkXr++ee1adMmDR06VE5OTurXr5/Z8WADo0ePVlJSkurUqSN7e3tlZWXpjTfeUJ8+fcyOhkIQHx8vSdd973X5PpQuaWlpeu6559SrVy95eXmZHQc2MGHCBDk4OGjo0KFmRykwSjWQR4MHD1ZsbKzWrFljdhTYyJEjRzRs2DBFR0fLxcXF7DgoBBaLRREREXrzzTclSeHh4YqNjdX06dMp1aXE/Pnz9dVXX2nu3LmqV6+eYmJiNHz4cAUFBfEaAyVcZmamevToIavVqmnTppkdBzawZcsWTZo0SVu3bpVhGGbHKTCmf9tAhQoVZG9vr5MnT+bYfvLkSQUEBJiUCoVhyJAhWrRokZYvX65KlSqZHQc2smXLFp06dUqNGzeWg4ODHBwctHLlSk2ePFkODg7KysoyOyIKKDAwUHXr1s2x7bbbbtPhw4dNSgRbGzVqlEaPHq2ePXuqQYMG6tu3r0aMGKHx48ebHQ2F4PL7K957lX6XC/WhQ4cUHR3NKHUpsXr1ap06dUqVK1fOfu916NAhPf300woNDTU7Xp5Rqm3AyclJTZo00bJly7K3WSwWLVu2TC1atDAxGWzFarVqyJAhioqK0m+//aaqVauaHQk21KFDB/3111+KiYnJvkVERKhPnz6KiYmRvb292RFRQK1atbrmMnh79uxRlSpVTEoEWzt//rzs7HK+rbG3t5fFYjEpEQpT1apVFRAQkOO9V1JSkjZs2MB7r1LkcqHeu3evli5dqvLly5sdCTbSt29f/fnnnzneewUFBWnUqFFasmSJ2fHyjOnfNjJy5Ej169dPERERatasmT744AOlpqZqwIABZkeDDQwePFhz587VDz/8IE9Pz+zPa3l7e8vV1dXkdCgoT0/Paz4f7+7urvLly/O5+VJixIgRatmypd5880316NFDGzdu1IwZMzRjxgyzo8FGunbtqjfeeEOVK1dWvXr1tG3bNr333nsaOHCg2dGQTykpKdq3b1/213FxcYqJiZGvr68qV66s4cOH6/XXX1fNmjVVtWpVvfTSSwoKCrrp6tEoXm72GgcGBqp79+7aunWrFi1apKysrOz3X76+vnJycjIrNnLpVr/DV/+RxNHRUQEBAapdu3ZRRy04K2zmww8/tFauXNnq5ORkbdasmXX9+vVmR4KNSLru7bPPPjM7GgpJmzZtrMOGDTM7Bmzov//9r7V+/fpWZ2dna506dawzZswwOxJsKCkpyTps2DBr5cqVrS4uLtZq1apZX3jhBWt6errZ0ZBPy5cvv+7/9/br189qtVqtFovF+tJLL1n9/f2tzs7O1g4dOlh3795tbmjkyc1e47i4uBu+/1q+fLnZ0ZELt/odvlqVKlWs77//fpFmtBWuUw0AAAAAQD7xmWoAAAAAAPKJUg0AAAAAQD5RqgEAAAAAyCdKNQAAAAAA+USpBgAAAAAgnyjVAAAAAADkE6UaAAAAAIB8olQDAAAAAJBPlGoAAAAAAPKJUg0AAAAAQD5RqgEAAAAAyKf/B4zM5RUzMvY9AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Your code here\n", + "\n", + "\n", + "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=1e-3, 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'])\n", + "\n", + "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": "code", + "execution_count": 104, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 919 + }, + "id": "CbMtMeR9VnbR", + "outputId": "987a0a5a-02d6-48f1-a0db-43555048d460" + }, + "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[1m0s\u001b[0m 2ms/step - accuracy: 0.1757 - loss: 5.9985\n", + "Epoch 2/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.5313 - loss: 1.6923\n", + "Epoch 3/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.6048 - loss: 1.3562\n", + "Epoch 4/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.6614 - loss: 1.0800\n", + "Epoch 5/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.7192 - loss: 0.9042\n", + "Epoch 6/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.7461 - loss: 0.8077\n", + "Epoch 7/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.7478 - loss: 0.8489\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.7770 - loss: 0.7194\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.7846 - loss: 0.7135\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.7482 - loss: 0.7999\n", + "Epoch 11/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.7814 - loss: 0.6744\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.8195 - loss: 0.5771\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.8549 - loss: 0.5042\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.8057 - loss: 0.5599\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.7971 - loss: 0.6313\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9UAAAFfCAYAAABA/u+IAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAASdRJREFUeJzt3Xl81PW97/H3b9askxDISsImyCL72oDKFkq19co99dhyrGDV3toDCqW1mrbWrZV6PJ5Ka49LWy+ntR5rbdF7aNVCWKyKyCIWBIIoO9nYMlknyczcPyYZMmQhk+2XTF7Px+P3mJnf+pkZonnn+/19v4bf7/cLAAAAAACEzWJ2AQAAAAAA9FaEagAAAAAA2olQDQAAAABAOxGqAQAAAABoJ0I1AAAAAADtRKgGAAAAAKCdCNUAAAAAALSTzewC2sLn8+n06dOKj4+XYRhmlwMAAAAAiHB+v19lZWXKyMiQxdJye3SvCNWnT59WVlaW2WUAAAAAAPqYEydOKDMzs8XtvSJUx8fHSwq8GZfLZXI1AAAAAIBI53a7lZWVFcyjLekVobqhy7fL5SJUAwAAAAC6zeVuQWagMgAAAAAA2olQDQAAAABAOxGqAQAAAABop15xTzUAAACAjvN6vaqtrTW7DKBHsNvtslqtHT4PoRoAAACIcH6/X4WFhbpw4YLZpQA9SmJiotLS0i47GFlrCNUAAABAhGsI1CkpKYqJielQgAAigd/vV2VlpYqLiyVJ6enp7T4XoRoAAACIYF6vNxio+/fvb3Y5QI8RHR0tSSouLlZKSkq7u4IzUBkAAAAQwRruoY6JiTG5EqDnafi56MhYA4RqAAAAoA+gyzfQVGf8XBCqO5nf7ze7BAAAAABANyFUd5JTF6q07Pe7teiX75pdCgAAAACgmxCqO4kryqa/7S/URydL9VlJudnlAAAAAOjl5syZo5UrV5pdRpcwDEOvvfZai9vDfe9Hjx6VYRjas2dPh2sLV4dC9U9/+lMZhnHZN/vHP/5Ro0aNUlRUlMaNG6e//vWvHblsjxQfZdfnhgVGU8w7UGxyNQAAAEDvZRhGq8tDDz1kdokt6s4gvHbtWhmGoS984Qsh6y9cuCDDMLRly5ZuqaMr/PnPf9ajjz7a5v2zsrJUUFCgsWPHSpK2bNkiwzC6ZW72dofqHTt26LnnntP48eNb3e+9997T4sWLdccdd+jDDz/UokWLtGjRIu3bt6+9l+6xckanSpI2HCgyuRIAAACg9yooKAguTz31lFwuV8i67373u8F9/X6/6urqTKzWXDabTRs3btTmzZs79bw1NTWder5wJSUlKT4+vs37W61WpaWlyWbr/lmj2xWqy8vLdcstt+hXv/qV+vXr1+q+a9as0Re+8AXde++9Gj16tB599FFNnjxZTz/9dIvHeDweud3ukKU3mD86RZK08+g5na8w9x8hAAAA0By/36/KmjpTlrYO6puWlhZcEhISZBhG8PXBgwcVHx+vN954Q1OmTJHT6dQ777yj2267TYsWLQo5z8qVKzVnzpzg6zlz5uiee+7R9773PSUlJSktLa1Jq/eFCxf0zW9+U6mpqYqKitLYsWO1fv16SdLZs2e1ePFiDRw4UDExMRo3bpz++7//O3jsbbfdpq1bt2rNmjXBVvWjR49Kkvbt26frrrtOcXFxSk1N1a233qozZ84Ej62oqNCSJUsUFxen9PR0Pfnkk236rGJjY3X77bfr/vvvb3W/vXv3at68eYqOjlb//v31f/7P/1F5+cXbVhs+v5/85CfKyMjQyJEjg12qX3nlFV1zzTWKjo7WtGnTdOjQIe3YsUNTp05VXFycrrvuOpWUlATPtWPHDi1YsEADBgxQQkKCZs+erd27d7fp/TS4tMV/yJAheuyxx3T77bcrPj5egwYN0vPPPx/c3rj799GjRzV37lxJUr9+/WQYhm677bawrh+OdsX4ZcuW6Ytf/KJycnL04x//uNV9t23bplWrVoWsW7hwYav951evXq2HH364PaWZKrNfjEalxetgYZm2HCrW/56UaXZJAAAAQIiqWq/G/OgtU669/5GFinF0Tkvi/fffr3//93/XsGHDLtvQ19h//dd/adWqVdq+fbu2bdum2267TbNmzdKCBQvk8/l03XXXqaysTC+++KKuuOIK7d+/X1arVZJUXV2tKVOm6L777pPL5dJf/vIX3Xrrrbriiis0ffp0rVmzRocOHdLYsWP1yCOPSJKSk5N14cIFzZs3T3feead+9rOfqaqqSvfdd59uvvlmbdq0SZJ07733auvWrXr99deVkpKi73//+9q9e7cmTpx42ff00EMPafjw4Xr11Vd10003NdleUVGhhQsXKjs7Wzt27FBxcbHuvPNOLV++XGvXrg3ul5eX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OjpaOTk5+uSTT8wpFmFr7futra3Vfffdp3Hjxik2NlYZGRlasmSJTp8+bV7BCNvlfoYbu+uuu2QYhp566qluq68zEao7wR/+8AetWrVKDz74oHbv3q0JEyZo4cKFKi4uNrs0dIKtW7dq2bJlev/997VhwwbV1tbq85//vCoqKswuDV1gx44deu655zR+/HizS0EnOn/+vGbNmiW73a433nhD+/fv15NPPql+/fqZXRo6yeOPP65nnnlGTz/9tA4cOKDHH39c//Zv/6Zf/OIXZpeGdqqoqNCECRP0y1/+stnt//Zv/6af//znevbZZ7V9+3bFxsZq4cKFqq6u7uZK0R6tfb+VlZXavXu3HnjgAe3evVt//vOflZ+fr//1v/6XCZWivS73M9xg3bp1ev/995WRkdFNlXU+5qnuBDNmzNC0adP09NNPS5J8Pp+ysrJ099136/777ze5OnS2kpISpaSkaOvWrbr22mvNLgedqLy8XJMnT9Z//ud/6sc//rEmTpzYa/9iilD333+/3n33Xf397383uxR0kS996UtKTU3Vb37zm+C6L3/5y4qOjtaLL75oYmXoDIZhaN26dVq0aJGkQCt1RkaGvvOd7+i73/2uJKm0tFSpqalau3atvvrVr5pYLcJ16ffbnB07dmj69Ok6duyYBg0a1H3FoVO09B2fOnVKM2bM0FtvvaUvfvGLWrlyZa/sKUhLdQfV1NRo165dysnJCa6zWCzKycnRtm3bTKwMXaW0tFSSlJSUZHIl6GzLli3TF7/4xZCfZ0SG//f//p+mTp2qf/7nf1ZKSoomTZqkX/3qV2aXhU40c+ZM5eXl6dChQ5Kkjz76SO+8846uu+46kytDVzhy5IgKCwtD/nudkJCgGTNm8PtXhCotLZVhGEpMTDS7FHQSn8+nW2+9Vffee6+uuuoqs8vpEJvZBfR2Z86ckdfrVWpqasj61NRUHTx40KSq0FV8Pp9WrlypWbNmaezYsWaXg0708ssva/fu3dqxY4fZpaALfPbZZ3rmmWe0atUqff/739eOHTt0zz33yOFwaOnSpWaXh05w//33y+12a9SoUbJarfJ6vfrJT36iW265xezS0AUKCwslqdnfvxq2IXJUV1frvvvu0+LFi+VyucwuB53k8ccfl81m0z333GN2KR1GqAbCsGzZMu3bt0/vvPOO2aWgE504cUIrVqzQhg0bFBUVZXY56AI+n09Tp07VY489JkmaNGmS9u3bp2effZZQHSFeeeUV/f73v9dLL72kq666Snv27NHKlSuVkZHBdwz0YrW1tbr55pvl9/v1zDPPmF0OOsmuXbu0Zs0a7d69W4ZhmF1Oh9H9u4MGDBggq9WqoqKikPVFRUVKS0szqSp0heXLl2v9+vXavHmzMjMzzS4HnWjXrl0qLi7W5MmTZbPZZLPZtHXrVv385z+XzWaT1+s1u0R0UHp6usaMGROybvTo0Tp+/LhJFaGz3Xvvvbr//vv11a9+VePGjdOtt96qb3/721q9erXZpaELNPyOxe9fka0hUB87dkwbNmyglTqC/P3vf1dxcbEGDRoU/N3r2LFj+s53vqMhQ4aYXV7YCNUd5HA4NGXKFOXl5QXX+Xw+5eXlKTs728TK0Fn8fr+WL1+udevWadOmTRo6dKjZJaGTzZ8/X3v37tWePXuCy9SpU3XLLbdoz549slqtZpeIDpo1a1aTqfAOHTqkwYMHm1QROltlZaUsltBfa6xWq3w+n0kVoSsNHTpUaWlpIb9/ud1ubd++nd+/IkRDoP7kk0+0ceNG9e/f3+yS0IluvfVW/eMf/wj53SsjI0P33nuv3nrrLbPLCxvdvzvBqlWrtHTpUk2dOlXTp0/XU089pYqKCn396183uzR0gmXLlumll17S66+/rvj4+OC9WgkJCYqOjja5OnSG+Pj4JvfIx8bGqn///tw7HyG+/e1va+bMmXrsscd0880364MPPtDzzz+v559/3uzS0EluuOEG/eQnP9GgQYN01VVX6cMPP9R//Md/6Pbbbze7NLRTeXm5Dh8+HHx95MgR7dmzR0lJSRo0aJBWrlypH//4xxoxYoSGDh2qBx54QBkZGa2OII2eo7XvNz09XTfddJN2796t9evXy+v1Bn//SkpKksPhMKtshOFyP8OX/qHEbrcrLS1NI0eO7O5SO86PTvGLX/zCP2jQIL/D4fBPnz7d//7775tdEjqJpGaX//t//6/ZpaELzZ49279ixQqzy0An+p//+R//2LFj/U6n0z9q1Cj/888/b3ZJ6ERut9u/YsUK/6BBg/xRUVH+YcOG+X/wgx/4PR6P2aWhnTZv3tzs/3+XLl3q9/v9fp/P53/ggQf8qampfqfT6Z8/f74/Pz/f3KLRZq19v0eOHGnx96/NmzebXTra6HI/w5caPHiw/2c/+1m31thZmKcaAAAAAIB24p5qAAAAAADaiVANAAAAAEA7EaoBAAAAAGgnQjUAAAAAAO1EqAYAAAAAoJ0I1QAAAAAAtBOhGgAAAACAdiJUAwAAAADQToRqAAAAAADaiVANAAAAAEA7EaoBAAAAAGin/w8IirVwda4j/gAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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=1, 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'])\n", + "\n", + "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": "code", + "execution_count": 105, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 919 + }, + "id": "ThMWN5MWWyQr", + "outputId": "a0cfd9e5-9e73-4e03-859b-e397b0ff7b7c" + }, + "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[1m0s\u001b[0m 2ms/step - accuracy: 0.1324 - loss: 91.2155\n", + "Epoch 2/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1378 - loss: 65.4903\n", + "Epoch 3/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1178 - loss: 49.3681\n", + "Epoch 4/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1776 - loss: 33.7747\n", + "Epoch 5/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.2317 - loss: 24.8072\n", + "Epoch 6/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1792 - loss: 17.7368\n", + "Epoch 7/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.2278 - loss: 12.1254\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.2283 - loss: 10.1799\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.2117 - loss: 9.7754\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.2301 - loss: 8.6790\n", + "Epoch 11/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.2285 - loss: 8.8619\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.2441 - loss: 7.4984\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.2460 - loss: 7.7755\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.2306 - loss: 10.7059\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.2247 - loss: 11.2529\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9EAAAFfCAYAAABJFU/yAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAUZlJREFUeJzt3Xd8FHXixvFntmTTNyRACiSQAALSpBMRz4LH2X7HCSocIojtNKiAFe/U8yycehZsKMqJDRXvxF4OEVEhBARBkA4BQkmo6WST7M7vj4Q1oZmEhEn5vF+veSU7Mzv7JCsxT+Y73zFM0zQFAAAAAAB+k83qAAAAAAAANBSUaAAAAAAAqogSDQAAAABAFVGiAQAAAACoIko0AAAAAABVRIkGAAAAAKCKKNEAAAAAAFSRw+oAR/L5fNq1a5fCwsJkGIbVcQAAAAAAjZxpmsrLy1NcXJxsthOfa653JXrXrl2Kj4+3OgYAAAAAoInJyMhQ69atT7hPvSvRYWFhksrCh4eHW5wGAAAAANDY5ebmKj4+3t9HT6TelejDQ7jDw8Mp0QAAAACAU6YqlxQzsRgAAAAAAFVEiQYAAAAAoIoo0QAAAAAAVFG9uyYaAAAAwMnzer0qKSmxOgZQbwQEBPzm7auqghINAAAANCKmaSozM1PZ2dlWRwHqFZvNpsTERAUEBJzUcSjRAAAAQCNyuEC3bNlSwcHBVZptGGjsfD6fdu3apd27dyshIeGk/l1QogEAAIBGwuv1+gt0VFSU1XGAeqVFixbatWuXSktL5XQ6a3wcJhYDAAAAGonD10AHBwdbnASofw4P4/Z6vSd1HEo0AAAA0MgwhBs4Wm39u6BEn4SikpP7CwYAAAAAoGGhRNfQioxsnf/kAn2ycpfVUQAAAAAApwgluoa+XpOlndmHNPmDVdqyN9/qOAAAAAAauHPOOUcTJkywOkadMAxDH3744XG3V/dr37p1qwzD0IoVK046W3VRomtowuAO6pcYqXxPqW5+ezlDuwEAAIAaMgzjhMvf//53qyMe16ksvjNnzpRhGPrDH/5QaX12drYMw9C33357SnLUhQ8++EAPPfRQlfePj4/X7t271bVrV0nSt99+K8MwTsn90SnRNeSw2/TcyJ6KCgnQusw8PfjJL1ZHAgAAABqk3bt3+5dnnnlG4eHhldbdcccd/n1N01RpaamFaa3lcDj09ddfa/78+bV63OLi4lo9XnVFRkYqLCysyvvb7XbFxMTI4Tj1d22mRJ+E6PBATR3RU4YhvbMkQ3N+2mF1JAAAAKAS0zRVWFxqyWKaZpUyxsTE+Be32y3DMPyP161bp7CwMH3xxRfq3bu3XC6XfvjhB40dO1ZDhw6tdJwJEybonHPO8T8+55xzdOutt+quu+5SZGSkYmJijjqrnZ2drRtvvFHR0dEKDAxU165d9emnn0qS9u/fr5EjR6pVq1YKDg5Wt27d9M477/ifO3bsWC1YsEBTp071nzXfunWrJGn16tW68MILFRoaqujoaI0ePVr79u3zP7egoEBXX321QkNDFRsbqyeffLJK36uQkBCNGzdO99xzzwn3W7Vqlc477zwFBQUpKipKN9xwg/Lzf70M9fD375FHHlFcXJw6duzoHyI9e/ZsDRo0SEFBQerbt682bNigpUuXqk+fPgoNDdWFF16ovXv3+o+1dOlSXXDBBWrevLncbrd+97vfafny5VX6eg478ox+27Zt9eijj2rcuHEKCwtTQkKCpk+f7t9ecTj31q1bde6550qSmjVrJsMwNHbs2Gq9fnWc+treyJzVobluPa+Dps7bqHs/WK1urdxq37Lqf0EBAAAA6tKhEq9Ov/8rS157zT+GKDigdirHPffco3/9619KSkpSs2bNqvy8119/XZMmTVJaWppSU1M1duxYDRw4UBdccIF8Pp8uvPBC5eXl6a233lK7du20Zs0a2e12SVJRUZF69+6tu+++W+Hh4frss880evRotWvXTv369dPUqVO1YcMGde3aVf/4xz8kSS1atFB2drbOO+88XXfddXr66ad16NAh3X333briiiv0zTffSJLuvPNOLViwQB999JFatmype++9V8uXL9cZZ5zxm1/T3//+d7Vv317/+c9/NHz48KO2FxQUaMiQIUpOTtbSpUu1Z88eXXfddRo/frxmzpzp32/evHkKDw/X3LlzKz3/gQce0DPPPKOEhASNGzdOf/7znxUWFqapU6cqODhYV1xxhe6//35NmzZNkpSXl6cxY8boueeek2maevLJJ3XRRRdp48aN1Tq7fKQnn3xSDz30kO6991795z//0U033aTf/e536tixY6X94uPj9d///lfDhg3T+vXrFR4erqCgoBq/7m+hRNeCW8/voB+3HdDCTft189vL9WHKwFr7YQEAAABA+sc//qELLrig2s/r3r27HnjgAUlShw4d9Pzzz2vevHm64IIL9PXXX2vJkiVau3atTjvtNElSUlKS/7mtWrWqNJT8lltu0VdffaXZs2erX79+crvdCggIUHBwsGJiYvz7Pf/88+rZs6ceffRR/7p///vfio+P14YNGxQXF6cZM2borbfe0vnnny+prOy3bt26Sl9TXFycbrvtNv31r3896my8JM2aNUtFRUV64403FBIS4s906aWX6rHHHlN0dLSksrPar776qgICAiTJfxb9jjvu0JAhQyRJt912m0aOHKl58+Zp4MCBkqRrr722Uhk/77zzKr3+9OnTFRERoQULFuiSSy6p0td0LBdddJFuvvlmSdLdd9+tp59+WvPnzz+qRNvtdkVGRkqSWrZsqYiIiBq/ZlXQ9GqB3WbomSt76qJnv9eGrHzd/9Ev+tflPayOBQAAACjIadeafwyx7LVrS58+fWr0vO7du1d6HBsbqz179kiSVqxYodatW/sL9JG8Xq8effRRzZ49Wzt37lRxcbE8Ho+Cg4NP+JorV67U/PnzFRoaetS2zZs369ChQyouLlb//v396yMjI48qhydy99136+WXX9a///1vXXHFFZW2rV27Vj169PAXaEkaOHCgfD6f1q9f7y/R3bp18xfoiip+zyruW3Hd4e+hJGVlZelvf/ubvv32W+3Zs0der1eFhYXavn17lb+eY6mY4/AQ/4qvaxVKdC1pEebSsyN6atSri/WfZTvULzFSV/SJtzoWAAAAmjjDMBrFKMmKhVCSbDbbUddcl5SUHPU8p9NZ6bFhGPL5fJL0m0N+n3jiCU2dOlXPPPOMunXrppCQEE2YMOE3J+HKz8/3n/U9UmxsrDZt2nTC51dFRESEJk+erAcffLDGZ3uP/J4eVvF7ZhjGMdcd/h5K0pgxY7R//35NnTpVbdq0kcvlUnJy8klPVnai985KTCxWi5LbRWnSBWV/xbr/o9Van5lncSIAAACgcWrRooV2795daV117xncvXt37dixQxs2bDjm9oULF+qPf/yjrrrqKvXo0UNJSUlH7RsQECCvt/Ltbnv16qVffvlFbdu2Vfv27SstISEhateunZxOp9LS0vzPOXjw4HFzHM8tt9wim82mqVOnVlrfuXNnrVy5UgUFBZW+FpvNVq2z3VW1cOFC3XrrrbrooovUpUsXuVyuSpOonQqHz6gf+V7UBUp0Lbv5nPY6+7QWKirx6ea3l6nA03Sn3wcAAADqynnnnacff/xRb7zxhjZu3KgHHnhAq1evrtYxfve73+nss8/WsGHDNHfuXKWnp+uLL77Ql19+KansGuq5c+dq0aJFWrt2rW688UZlZWVVOkbbtm2VlpamrVu3at++ffL5fEpJSdGBAwc0cuRILV26VJs3b9ZXX32la665Rl6vV6Ghobr22mt155136ptvvtHq1as1duxY2WzVq2eBgYF68MEH9eyzz1ZaP2rUKAUGBmrMmDFavXq15s+fr1tuuUWjR4/2D8+uTR06dNCbb76ptWvXKi0tTaNGjarTib2OpU2bNjIMQ59++qn27t1baSby2kaJrmU2m6Gnr+ihmPBAbd5boL/OWVXlqf0BAAAAVM2QIUN033336a677lLfvn2Vl5enq6++utrH+e9//6u+fftq5MiROv3003XXXXf5z2b+7W9/U69evTRkyBCdc845iomJOWoirzvuuEN2u12nn366WrRooe3btysuLk4LFy6U1+vV73//e3Xr1k0TJkxQRESEvyg/8cQTGjRokC699FINHjxYZ511lnr37l3t/GPGjKk0GZokBQcH66uvvtKBAwfUt29fDR8+XOeff76ef/75ah+/KmbMmKGDBw+qV69eGj16tG699Va1bNmyTl7reFq1aqUHH3xQ99xzj6KjozV+/Pg6ey3DrGcNLzc3V263Wzk5OQoPD7c6To0t3XpAI6Yvltdnaspl3TSyX4LVkQAAANDIFRUVKT09XYmJiQoMDLQ6DlCvnOjfR3V6KGei60jftpG6c0jZ9QYPfPyLftmVY3EiAAAAAMDJokTXoRsGJem8Ti1VXOpTytvLlVd09GyBAAAAAICGgxJdh2w2Q09e3kNx7kBt3V+oez7g+mgAAAAAaMiqVaK9Xq/uu+8+JSYmKigoSO3atdNDDz1UqRiapqn7779fsbGxCgoK0uDBg7Vx48ZaD95QNAsJ0POjeslhM/TZz7v11uJtVkcCAAAAANRQtUr0Y489pmnTpun555/X2rVr9dhjj+nxxx/Xc88959/n8ccf17PPPquXXnpJaWlpCgkJ0ZAhQ1RUVFTr4RuKXgnNdM+FnSRJD326Vqt2cH00AAAA6o7P57M6AlDv1Nao4GrNzn3JJZco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AQAAAABQRZRoAAAAAACqiBJ9Elwulx544AG5XC6ro6AO8P42frzHjR/vcePHe9z48R43bry/jV9jfI/r3cRiAAAAAADUV5yJBgAAAACgiijRAAAAAABUESUaAAAAAIAqokQDAAAAAFBFlGgAAAAAAKqIEl1DL7zwgtq2bavAwED1799fS5YssToSasmUKVPUt29fhYWFqWXLlho6dKjWr19vdSzUkX/+858yDEMTJkywOgpq2c6dO3XVVVcpKipKQUFB6tatm3788UerY6EWeL1e3XfffUpMTFRQUJDatWunhx56SNxwpOH67rvvdOmllyouLk6GYejDDz+stN00Td1///2KjY1VUFCQBg8erI0bN1oTFjVyove4pKREd999t7p166aQkBDFxcXp6quv1q5du6wLjGr7rX/HFf3lL3+RYRh65plnTlm+2kSJroH33ntPkyZN0gMPPKDly5erR48eGjJkiPbs2WN1NNSCBQsWKCUlRYsXL9bcuXNVUlKi3//+9yooKLA6GmrZ0qVL9fLLL6t79+5WR0EtO3jwoAYOHCin06kvvvhCa9as0ZNPPqlmzZpZHQ214LHHHtO0adP0/PPPa+3atXrsscf0+OOP67nnnrM6GmqooKBAPXr00AsvvHDM7Y8//rieffZZvfTSS0pLS1NISIiGDBmioqKiU5wUNXWi97iwsFDLly/Xfffdp+XLl+uDDz7Q+vXr9X//938WJEVN/da/48PmzJmjxYsXKy4u7hQlqwMmqq1fv35mSkqK/7HX6zXj4uLMKVOmWJgKdWXPnj2mJHPBggVWR0EtysvLMzt06GDOnTvX/N3vfmfedtttVkdCLbr77rvNs846y+oYqCMXX3yxOW7cuErrLrvsMnPUqFEWJUJtkmTOmTPH/9jn85kxMTHmE0884V+XnZ1tulwu85133rEgIU7Wke/xsSxZssSUZG7btu3UhEKtOt57vGPHDrNVq1bm6tWrzTZt2phPP/30Kc9WGzgTXU3FxcVatmyZBg8e7F9ns9k0ePBgpaamWpgMdSUnJ0eSFBkZaXES1KaUlBRdfPHFlf4to/H4+OOP1adPH11++eVq2bKlevbsqVdeecXqWKglZ555pubNm6cNGzZIklauXKkffvhBF154ocXJUBfS09OVmZlZ6ee12+1W//79+d2rEcvJyZFhGIqIiLA6CmqJz+fT6NGjdeedd6pLly5WxzkpDqsDNDT79u2T1+tVdHR0pfXR0dFat26dRalQV3w+nyZMmKCBAweqa9euVsdBLXn33Xe1fPlyLV261OooqCNbtmzRtGnTNGnSJN17771aunSpbr31VgUEBGjMmDFWx8NJuueee5Sbm6tOnTrJbrfL6/XqkUce0ahRo6yOhjqQmZkpScf83evwNjQuRUVFuvvuuzVy5EiFh4dbHQe15LHHHpPD4dCtt95qdZSTRokGTiAlJUWrV6/WDz/8YHUU1JKMjAzddtttmjt3rgIDA62Ogzri8/nUp08fPfroo5Kknj17avXq1XrppZco0Y3A7Nmz9fbbb2vWrFnq0qWLVqxYoQkTJiguLo73F2jgSkpKdMUVV8g0TU2bNs3qOKgly5Yt09SpU7V8+XIZhmF1nJPGcO5qat68uex2u7Kysiqtz8rKUkxMjEWpUBfGjx+vTz/9VPPnz1fr1q2tjoNasmzZMu3Zs0e9evWSw+GQw+HQggUL9Oyzz8rhcMjr9VodEbUgNjZWp59+eqV1nTt31vbt2y1KhNp055136p577tGIESPUrVs3jR49WhMnTtSUKVOsjoY6cPj3K373avwOF+ht27Zp7ty5nIVuRL7//nvt2bNHCQkJ/t+/tm3bpttvv11t27a1Ol61UaKrKSAgQL1799a8efP863w+n+bNm6fk5GQLk6G2mKap8ePHa86cOfrmm2+UmJhodSTUovPPP1+rVq3SihUr/EufPn00atQorVixQna73eqIqAUDBw486tZ0GzZsUJs2bSxKhNpUWFgom63yrzB2u10+n8+iRKhLiYmJiomJqfS7V25urtLS0vjdqxE5XKA3btyor7/+WlFRUVZHQi0aPXq0fv7550q/f8XFxenOO+/UV199ZXW8amM4dw1MmjRJY8aMUZ8+fdSvXz8988wzKigo0DXXXGN1NNSClJQUzZo1Sx999JHCwsL811u53W4FBQVZnA4nKyws7Kjr20NCQhQVFcV1743IxIkTdeaZZ+rRRx/VFVdcoSVLlmj69OmaPn261dFQCy699FI98sgjSkhIUJcuXfTTTz/pqaee0rhx46yOhhrKz8/Xpk2b/I/T09O1YsUKRUZGKiEhQRMmTNDDDz+sDh06KDExUffdd5/i4uI0dOhQ60KjWk70HsfGxmr48OFavny5Pv30U3m9Xv/vX5GRkQoICLAqNqrht/4dH/mHEafTqZiYGHXs2PFURz15Vk8P3lA999xzZkJCghkQEGD269fPXLx4sdWRUEskHXN57bXXrI6GOsItrhqnTz75xOzatavpcrnMTp06mdOnT7c6EmpJbm6uedttt5kJCQlmYGCgmZSUZP71r381PR6P1dFQQ/Pnzz/m/3vHjBljmmbZba7uu+8+Mzo62nS5XOb5559vrl+/3trQqJYTvcfp6enH/f1r/vz5VkdHFf3Wv+MjNeRbXBmmaZqnqK8DAAAAANCgcU00AAAAAABVRIkGAAAAAKCKKNEAAAAAAFQRJRoAAAAAgCqiRAMAAAAAUEWUaAAAAAAAqogSDQAAAABAFVGiAQAAAACoIko0AAAAAABVRIkGAAAAAKCKKNEAAAAAAFTR/wMY6u0/2C+xZQAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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=10, 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'])\n", + "\n", + "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": "Ok8ifQe3W4AQ" + }, + "source": [ + "If the standard deviation of the weight initialization is too small or too large, the model’s accuracy decreases." + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "metadata": { + "colab": { + "base_uri": "https://localhost:8080/", + "height": 919 + }, + "id": "WtA5s_riWR2F", + "outputId": "306a58a8-5959-491f-bc8e-3a26eb4aed05" + }, + "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 2ms/step - accuracy: 0.1061 - loss: 2.3034\n", + "Epoch 2/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.0783 - loss: 2.3030\n", + "Epoch 3/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.0961 - loss: 2.3026\n", + "Epoch 4/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1003 - loss: 2.3017\n", + "Epoch 5/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1154 - loss: 2.3020\n", + "Epoch 6/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1145 - loss: 2.3026\n", + "Epoch 7/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1002 - loss: 2.3033\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.0952 - loss: 2.3032\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.1185 - loss: 2.3012\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.1047 - loss: 2.3015\n", + "Epoch 11/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 2ms/step - accuracy: 0.1075 - loss: 2.3034\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.1267 - loss: 2.3008\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.0915 - loss: 2.3039\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.1103 - loss: 2.3029\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.1087 - loss: 2.3025\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA+8AAAFfCAYAAAA/L/15AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAdFBJREFUeJzt3XdclXXjxvHPYSMyFGUpIOLMvUXNNDUry6zMUWJaZiVWZvtp/p7qsXyaZmm2zFVaapqVI1dpgLg1FRUVUQQHsmWe+/cHeR4tFwjejOv9evFKz7nPfS44puc633FbDMMwEBEREREREZFyy87sACIiIiIiIiJyaSrvIiIiIiIiIuWcyruIiIiIiIhIOafyLiIiIiIiIlLOqbyLiIiIiIiIlHMq7yIiIiIiIiLlnMq7iIiIiIiISDnnYHaA8sRqtZKYmIi7uzsWi8XsOCIiIiIiIlLJGYZBRkYGAQEB2NldfHxd5f0ciYmJBAYGmh1DREREREREqpiEhATq1q170ftV3s/h7u4OFP3QPDw8TE4jIiIiIiIilV16ejqBgYG2PnoxKu/nODtV3sPDQ+VdRERERERErpnLLd3WhnUiIiIiIiIi5ZzKu4iIiIiIiEg5p/IuIiIiIiIiUs5pzbuIiIiIiFR4hYWF5Ofnmx1D5B8cHR2xt7e/6vOovIuIiIiISIVlGAZJSUmkpqaaHUXkory8vPDz87vspnSXovIuIiIiIiIV1tni7uPjQ7Vq1a6qHImUNsMwyM7O5vjx4wD4+/uX+Fwq7yIiIiIiUiEVFhbairu3t7fZcUQuyNXVFYDjx4/j4+NT4in02rBOREREREQqpLNr3KtVq2ZyEpFLO/tn9Gr2ZVB5FxERERGRCk1T5aW8K40/oyrvFVR+odXsCCIiIiIiInKNqLxXMLkFhbyzLJZub6/idFae2XFERERERETkGlB5r2Ac7exYuec4yem5TPv9gNlxRERERESkgps+fTpeXl7FekyPHj0YN25cqZ+3Xr16fPDBB7bfWywWfvjhh2Kdo7hGjBjBgAEDyvQ5SoPKewVjZ2fhqT6NAJi+/hDHM3JMTiQiIiIiIldqzZo1WCyWi3717NnzmmcaPHgwe/fuLdZjFixYwOuvv277/d9Ld0nP+3fHjh3jlltuuapznHXo0CEsFgtbt2497/YPP/yQ6dOnl8pzlCWV9wqoV1MfWgd6cSa/kClr4syOIyIiIiIiV6hLly4cO3bsH1+ffvopFouFMWPGlPjceXklW1br6uqKj49PsR5Ts2ZN3N3dS/28f+fn54ezs/NVneNyPD09iz1DwAwq7xWQxWLh6ZsaAzA76jCJqWdMTiQiIiIiYj7DMMjOKzDlyzCMK8ro5OSEn5/feV+nT5/m6aef5l//+hf33HOP7didO3dyyy23UL16dXx9fQkPD+fkyZO2+3v06MHYsWMZN24ctWrVom/fvgCsXbuWjh074uzsjL+/P88//zwFBQUXzfT36e2vvfYarVu3ZubMmdSrVw9PT0+GDBlCRkbGec99dtp8jx49iI+P58knn7TNILjQeePi4rjjjjvw9fWlevXqdOjQgV9//fWSP69zp82/9tprF5ytcHbUfOnSpXTr1g0vLy+8vb257bbbiIv732BnSEgIAG3atMFisdCjRw/gn9Pmc3Nzefzxx/Hx8cHFxYVu3boRExNju//s7ImVK1fSvn17qlWrRpcuXYiNjb3k93K1HMr07FJmujbwplNITaIPpjB59X7+c2cLsyOJiIiIiJjqTH4h172yzJTn3vXvvlRzKn69Sk1N5Y477qBHjx7nTUNPTU3lxhtvZNSoUbz//vucOXOG5557jkGDBrFq1SrbcV9//TWPPvoo69evB+Do0aPceuutjBgxghkzZrBnzx4eeughXFxceO211644V1xcHD/88ANLlizh9OnTDBo0iLfeeos333zzH8cuWLCAVq1aMXr0aB566KGLnjMzM5Nbb72VN998E2dnZ2bMmMHtt99ObGwsQUFBl8309NNP88gjj9h+P3v2bF555RXat28PQFZWFuPHj6dly5ZkZmbyyiuvcOedd7J161bs7OzYsGEDHTt25Ndff6VZs2Y4OTld8HmeffZZ5s+fz9dff01wcDATJ06kb9++7N+/n5o1a9qOe/HFF3n33XepXbs2jzzyCA888IDtdSgLKu8VlMVi4ambGjPo00jmxSTwSPdQgryrmR1LRERERESukNVq5d5778XBwYHZs2efdy3wyZMn06ZNG/7zn//Ybvvyyy8JDAxk7969NGpUtA9Ww4YNmThxou2YF198kcDAQCZPnozFYqFJkyYkJiby3HPP8corr2Bnd2WTr61WK9OnT7dNjQ8PD2flypUXLO81a9bE3t4ed3d3/Pz8LnrOVq1a0apVK9vvX3/9dRYuXMjixYsZO3bsZTNVr16d6tWrAxAVFcVLL73E119/TfPmzQG4++67zzv+yy+/pHbt2uzatYvmzZtTu3ZtALy9vS+aMysriylTpjB9+nTbWvvPPvuMFStW8MUXX/DMM8/Yjn3zzTe54YYbAHj++efp168fOTk5uLi4XPZ7KQmV9wqsY0hNujeqzW97T/Dhyn28O6jV5R8kIiIiIlJJuTras+vffU177uL617/+RWRkJBs2bPjH+vFt27axevVqW1k9V1xcnK28t2vX7rz7du/eTVhY2HkfBHTt2pXMzEyOHDlyRSPcULQB3bmZ/P39OX78+BV/bxeSmZnJa6+9xk8//cSxY8coKCjgzJkzHD58uFjnOXz4MAMGDODpp59m0KBBttv37dvHK6+8QnR0NCdPnsRqtdqOP1vwLycuLo78/Hy6du1qu83R0ZGOHTuye/fu845t2bKl7df+/v4AHD9+/Ip/xsWl8l7BPdWnEb/tPcHCLUd4tEd9GvhcetMIEREREZHKymKxlGjquhm+/fZb3nnnHX766ScaNmz4j/szMzO5/fbbefvtt/9x39miCODm5lYm+RwdHc/7vcVisZXhknr66adZsWIF77zzDg0aNMDV1ZWBAwcWa6O9rKws+vfvT1hYGP/+97/Pu+/2228nODiYzz77jICAAKxWK82bNy/xRn6Xc+7P6OyHJVf7M7oUbVhXwbUK9OKm63yxGvD+r/vMjiMiIiIiIpexdetWHnzwQd566y3bJnN/17ZtW/7880/q1atHgwYNzvu6VGFv2rQpkZGR522gt379etzd3albt26pfy9nOTk5UVhYeMlj1q9fz4gRI7jzzjtp0aIFfn5+HDp06IqfwzAMhg0bhtVqZebMmefNLjh16hSxsbG89NJL9OrVi6ZNm3L69Ol/ZAQumTM0NBQnJ6fz1q7n5+cTExPDddddd8VZy4LKeyUw/qZGWCzw0/Zj7EpMNzuOiIiIiIhcxMmTJxkwYAA9evRg2LBhJCUlnfd14sQJACIiIkhJSWHo0KHExMQQFxfHsmXLGDly5CXL55gxY0hISOCxxx5jz549LFq0iFdffZXx48df8Xr3kqhXrx6//fYbR48ePW9H/HM1bNiQBQsWsHXrVrZt28a9995brJHq1157jV9//ZVPP/2UzMxM28/szJkz1KhRA29vb6ZNm8b+/ftZtWoV48ePP+/xPj4+uLq6snTpUpKTk0lLS/vHc7i5ufHoo4/yzDPPsHTpUnbt2sVDDz1EdnY2Dz74YPF+KKVM5b0SaOLnwW0tAwB4b8Vek9OIiIiIiMjF/PTTT8THx/Pzzz/j7+//j68OHToAEBAQwPr16yksLOSmm26iRYsWjBs3Di8vr0uW8Dp16vDzzz+zYcMGWrVqxSOPPMKDDz7ISy+9VKbf17///W8OHTpEaGiobWO4v3vvvfeoUaMGXbp04fbbb6dv3760bdv2ip9j7dq1ZGZm0qVLl/N+ZnPnzsXOzo5vv/2WTZs20bx5c5588kn++9//nvd4BwcHJk2axKeffkpAQAB33HHHBZ/nrbfe4u677yY8PJy2bduyf/9+li1bRo0aNa78B1IGLMaVXpCwCkhPT8fT05O0tDQ8PDzMjlMscScy6fPeWqwG/BDRldaBXmZHEhEREREpUzk5ORw8eJCQkJAy2+FbpDRc6s/qlfZQjbxXEqG1q3NX26I1LO8ujzU5jYiIiIiIiJQmlfdK5IleDXG0t/D7vpNEHzhldhwREREREREpJSrvlUhgzWoM7hAIwLvL96IVESIiIiIiIpWDynslM7ZnQ5wc7NhwKIXf9114l0cRERERERGpWFTeKxk/TxfCOwcDRWvfNfouIiIiIpVdcS43JmKG0vgz6lAKOaScebRHKHOiD7PtSBq/7j5On+t8zY4kIiIiIlLqnJycsLOzIzExkdq1a+Pk5ITFYjE7loiNYRjk5eVx4sQJ7OzscHJyKvG5VN4roVrVnRnZtR6frInj3eWx9Grig52d/hITERERkcrFzs6OkJAQjh07RmJiotlxRC6qWrVqBAUFYWdX8snvKu+V1Oju9ZkZGc+epAx+2nGM21sFmB1JRERERKTUOTk5ERQUREFBAYWFhWbHEfkHe3t7HBwcrnpWiMp7JeVVzYmHutfnvRV7ef/XvdzS3A8He21xICIiIiKVj8ViwdHREUdHR7OjiJQZtblKbGTXetSo5siBE1n8sFXTiERERERERCoqlfdKzN3FkUduCAXgw5V7ySvQLpwiIiIiIiIVkcp7JTc8rB61qjuTkHKG7zYlmB1HRERERERESkDlvZJzdbJnbM+i0fePVu4nJ1+beIiIiIiIiFQ0Ku9VwNBOQQR4upCUnsPs6MNmxxEREREREZFiUnmvApwd7Hm8V0MApqzZT1ZugcmJREREREREpDhU3quIu9vVJdi7Gicz8/g68pDZcURERERERKQYVN6rCEd7O8b1Lhp9/3TtAdJz8k1OJCIiIiIiIldK5b0K6d+qDg18qpN2Jp8vfj9odhwRERERERG5QirvVYi9nYXxfRoB8MW6g5zOyjM5kYiIiIiIiFwJlfcq5uZmflzn70FmbgFTf4szO46IiIiIiIhcAZX3KsbOzsLTfYtG37/+4xDHM3JMTiQiIiIiIiKXU6zyPmHCBDp06IC7uzs+Pj4MGDCA2NjYSz5mwYIFtG/fHi8vL9zc3GjdujUzZ8487xjDMHjllVfw9/fH1dWV3r17s2/fvvOO6d+/P0FBQbi4uODv7094eDiJiYnnHbNs2TI6d+6Mu7s7tWvX5u677+bQoUPF+RarhJ6NfWgT5EVOvpVPVmv0XUREREREpLwrVnlfu3YtERERREVFsWLFCvLz87npppvIysq66GNq1qzJiy++SGRkJNu3b2fkyJGMHDmSZcuW2Y6ZOHEikyZNYurUqURHR+Pm5kbfvn3JyfnfqHDPnj2ZN28esbGxzJ8/n7i4OAYOHGi7/+DBg9xxxx3ceOONbN26lWXLlnHy5Enuuuuu4nyLVYLFYuHpmxoDMCf6MImpZ0xOJCIiIiIiIpdiMQzDKOmDT5w4gY+PD2vXrqV79+5X/Li2bdvSr18/Xn/9dQzDICAggKeeeoqnn34agLS0NHx9fZk+fTpDhgy54DkWL17MgAEDyM3NxdHRke+//56hQ4eSm5uLnV3RZxI//vgjd9xxh+2Yy0lPT8fT05O0tDQ8PDyu+PupiAzDYOhnUUQdSGFoxyAm3NXC7EgiIiIiIiJVzpX20Kta856WlgYUja5fCcMwWLlyJbGxsbayf/DgQZKSkujdu7ftOE9PTzp16kRkZOQFz5OSksLs2bPp0qWLrZS3a9cOOzs7vvrqKwoLC0lLS2PmzJn07t37osU9NzeX9PT0876qCovFwlN/jb5/tzGB+FMXnz0hIiIiIiIi5ipxebdarYwbN46uXbvSvHnzSx6blpZG9erVcXJyol+/fnz00Uf06dMHgKSkJAB8fX3Pe4yvr6/tvrOee+453Nzc8Pb25vDhwyxatMh2X0hICMuXL+df//oXzs7OeHl5ceTIEebNm3fRXBMmTMDT09P2FRgYWKyfQUXXoV5NbmhUmwKrwYe/7rv8A0RERERERMQUJS7vERER7Ny5k2+//fayx7q7u7N161ZiYmJ48803GT9+PGvWrCn2cz7zzDNs2bKF5cuXY29vz/Dhwzk76z8pKYmHHnqI+++/n5iYGNauXYuTkxMDBw7kYisDXnjhBdLS0mxfCQkJxc5U0Z1d+75w61H2JWeYnEZEREREREQuxKEkDxo7dixLlizht99+o27dupc93s7OjgYNGgDQunVrdu/ezYQJE+jRowd+fn4AJCcn4+/vb3tMcnIyrVu3Pu88tWrVolatWjRq1IimTZsSGBhIVFQUYWFhfPzxx3h6ejJx4kTb8bNmzSIwMJDo6Gg6d+78j1zOzs44OzuX5EdQabSo60nfZr4s+zOZD37dx8f3tTU7koiIiIiIiPxNsUbeDcNg7NixLFy4kFWrVhESElKiJ7VareTm5gJF0939/PxYuXKl7f709HSio6MJCwu75DkA23mys7NtG9WdZW9vf96xcmFP9mmExQI/7TjGn4lpZscRERERERGRvylWeY+IiGDWrFnMmTMHd3d3kpKSSEpK4syZ/11qbPjw4bzwwgu230+YMIEVK1Zw4MABdu/ezbvvvsvMmTMZNmwYULRx2rhx43jjjTdYvHgxO3bsYPjw4QQEBDBgwAAAoqOjmTx5Mlu3biU+Pp5Vq1YxdOhQQkNDbQW/X79+xMTE8O9//5t9+/axefNmRo4cSXBwMG3atLnan1Ol1sTPg9tbBgDw/oq9JqcRERERERGRvytWeZ8yZQppaWn06NEDf39/29fcuXNtxxw+fJhjx47Zfp+VlcWYMWNo1qwZXbt2Zf78+cyaNYtRo0bZjnn22Wd57LHHGD16NB06dCAzM5OlS5fi4uICQLVq1ViwYAG9evWicePGPPjgg7Rs2ZK1a9fapr3feOONzJkzhx9++IE2bdpw88034+zszNKlS3F1db2qH1JVMK53Q+ws8Ovu42w5fNrsOCIiIiIiInKOq7rOe2VTla7zfiHPfLeN7zYdoVuDWswa1cnsOCIiIiIiIpXeNbnOu1Quj/dqiKO9hXX7TxIZd8rsOCIiIiIiIvIXlXexCaxZjSEdggB4b0XsRS+xJyIiIiIiIteWyrucZ+yNDXB2sCPm0Gl+23fS7DgiIiIiIiKCyrv8ja+HC+GdgwF4d7lG30VERERERMoDlXf5h0d6hFLNyZ7tR9JYsSvZ7DgiIiIiIiJVnsq7/EOt6s480DUEgPdW7MVq1ei7iIiIiIiImVTe5YIeur4+7i4O7EnKYMmOY2bHERERERERqdJU3uWCPKs5Mvr6+gB8sGIvBYVWkxOJiIiIiIhUXSrvclEju4VQo5ojB05msXDLUbPjiIiIiIiIVFkq73JR1Z0deLRHKAAfrtxHXoFG30VERERERMyg8i6XFN65HrXdnTly+gzzNiaYHUdERERERKRKUnmXS3J1suexGxsA8NGqfeTkF5qcSEREREREpOpReZfLGtwhkDperiSn5zIrKt7sOCIiIiIiIlWOyrtclrODPY/3Khp9n7ImjqzcApMTiYiIiIiIVC0q73JF7mpbl3re1TiVlcf0Pw6ZHUdERERERKRKUXmXK+Job8e43o0A+HRtHGln8k1OJCIiIiIiUnWovMsVu71VAA19qpOeU8AX6w6aHUdERERERKTKUHmXK2ZvZ+Gpm4pG37/4/QApWXkmJxIREREREakaVN6lWPo286NZgAdZeYV8ujbO7DgiIiIiIiJVgsq7FIvFYuHpmxoD8HXkIY6n55icSEREREREpPJTeZdi69G4Nm2DvMjJt/LJGo2+i4iIiIiIlDWVdym2c0ff50Qf5mjqGZMTiYiIiIiIVG4q71IiXRrUIqy+N3mFViav2md2HBERERERkUpN5V1K7Om+RTvPz9t4hEMns0xOIyIiIiIiUnmpvEuJtQuuSc/GtSm0Gny4UqPvIiIiIiIiZUXlXa7K+D5Fa99/2HqUfckZJqcRERERERGpnFTe5aq0qOvJzc38MAx4/9e9ZscRERERERGplFTe5ao92acRFgv8vCOJnUfTzI4jIiIiIiJS6ai8y1Vr7OdO/1YBALy/QqPvIiIiIiIipU3lXUrFuN6NsLezsHLPcTYfPm12HBERERERkUpF5V1KRUgtNwa2rQvAu8tjTU4jIiIiIiJSuai8S6l5rFcDHO0trN9/ij/iTpodR0REREREpNJQeZdSU7dGNYZ2DALgveV7MQzD5EQiIiIiIiKVg8q7lKqIng1wdrBjY/xp1u49YXYcERERERGRSkHlXUqVr4cLw8OCAXhXo+8iIiIiIiKlQuVdSt0jN4Ti5mTPjqNpLPsz2ew4IiIiIiIiFZ7Ku5Q67+rOPNAtBID3VsRSaNXou4iIiIiIyNVQeZcyMer6+ni4OLA3OZMl2xPNjiMiIiIiIlKhqbxLmfB0dWR09/oAfPDrPgoKrSYnEhERERERqbhU3qXMjOgaQk03Jw6ezGLBlqNmxxEREREREamwVN6lzFR3duDRG0IB+PDXfeQWFJqcSEREREREpGJSeZcyFR4WjI+7M0dTzzAvJsHsOCIiIiIiIhWSyruUKRdHex67sQEAH63aT06+Rt9FRERERESKS+VdytygDoHU8XLleEYus6LizY4jIiIiIiJS4ai8S5lzdrDniV4NAfhkTRxZuQUmJxIREREREalYVN7lmrirbR3qeVcjJSuP6X8cMjuOiIiIiIhIhaLyLteEg70dT/ZpBMCna+NIO5NvciIREREREZGKo1jlfcKECXTo0AF3d3d8fHwYMGAAsbGxl3zMggULaN++PV5eXri5udG6dWtmzpx53jGGYfDKK6/g7++Pq6srvXv3Zt++fecd079/f4KCgnBxccHf35/w8HASExP/cZ533nmHRo0a4ezsTJ06dXjzzTeL8y1KGbq9ZQCNfd1Jzyng898PmB1HRERERESkwihWeV+7di0RERFERUWxYsUK8vPzuemmm8jKyrroY2rWrMmLL75IZGQk27dvZ+TIkYwcOZJly5bZjpk4cSKTJk1i6tSpREdH4+bmRt++fcnJybEd07NnT+bNm0dsbCzz588nLi6OgQMHnvdcTzzxBJ9//jnvvPMOe/bsYfHixXTs2LE436KUITs7i230/ct1BzmVmWtyIhERERERkYrBYhiGUdIHnzhxAh8fH9auXUv37t2v+HFt27alX79+vP766xiGQUBAAE899RRPP/00AGlpafj6+jJ9+nSGDBlywXMsXryYAQMGkJubi6OjI7t376Zly5bs3LmTxo0bl+j7SU9Px9PTk7S0NDw8PEp0Drk0wzC4ffI6dh5NZ3T3+vzr1qZmRxIRERERETHNlfbQq1rznpaWBhSNrl8JwzBYuXIlsbGxtrJ/8OBBkpKS6N27t+04T09POnXqRGRk5AXPk5KSwuzZs+nSpQuOjo4A/Pjjj9SvX58lS5YQEhJCvXr1GDVqFCkpKRfNk5ubS3p6+nlfUrYsFgtP3VT04crXfxzieHrOZR4hIiIiIiIiJS7vVquVcePG0bVrV5o3b37JY9PS0qhevTpOTk70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kdKl8i6VQrvgmoTV9ya/0GDabwfMjiMiIiIiIlKqVN6l0njsr9H3bzYc5nhGjslpRERERERESo/Ku1QaYaHetAnyIrfAyhe/HzQ7joiIiIiISKlReZdKw2Kx2EbfZ0XFczorz+REIiIiIiIipUPlXSqVno19uM7fg6y8Qr7645DZcUREREREREqFyrtUKhaLxbbz/PT1B8nIyTc5kYiIiIiIyNVTeZdK5+ZmfjTwqU56TgEzo+LNjiMiIiIiInLVVN6l0rGzsxDRMxSAz38/SHZegcmJREREREREro7Ku1RKt7cMIKhmNVKy8vhmQ4LZcURERERERK6KyrtUSg72djzao2j0fdpvceQWFJqcSEREREREpORU3qXSuqttHfw9XUhOz+X7TUfMjiMiIiIiIlJiKu9SaTk72DO6e30ApqyJI7/QanIiERERERGRkilWeZ8wYQIdOnTA3d0dHx8fBgwYQGxs7CUfs2DBAtq3b4+Xlxdubm60bt2amTNnnneMYRi88sor+Pv74+rqSu/evdm3b995x/Tv35+goCBcXFzw9/cnPDycxMTECz7n/v37cXd3x8vLqzjfnlRCQzoEUau6E0dOn2Hx1gv/eRERERERESnvilXe165dS0REBFFRUaxYsYL8/HxuuukmsrKyLvqYmjVr8uKLLxIZGcn27dsZOXIkI0eOZNmyZbZjJk6cyKRJk5g6dSrR0dG4ubnRt29fcnJybMf07NmTefPmERsby/z584mLi2PgwIH/eL78/HyGDh3K9ddfX5xvTSopVyd7Rl1fNPr+8Zr9FFoNkxOJiIiIiIgUn8UwjBK3mRMnTuDj48PatWvp3r37FT+ubdu29OvXj9dffx3DMAgICOCpp57i6aefBiAtLQ1fX1+mT5/OkCFDLniOxYsXM2DAAHJzc3F0dLTd/txzz5GYmEivXr0YN24cqampV5wrPT0dT09P0tLS8PDwuOLHSfmWmVtA17dWkXYmn8n3tuG2lgFmRxIREREREQGuvIde1Zr3tLQ0oGh0/UoYhsHKlSuJjY21lf2DBw+SlJRE7969bcd5enrSqVMnIiMjL3ielJQUZs+eTZcuXc4r7qtWreK7777j448/vqI8ubm5pKenn/cllU91ZwdGdq0HwORV+7mKz6tERERERERMUeLybrVaGTduHF27dqV58+aXPDYtLY3q1avj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GDBgALGxsWbHkjLy1ltvYbFYGDdunNlRpBQdPXqUYcOG4e3tjaurKy1atGDjxo1mx5JSUlhYyMsvv0xISAiurq6Ehoby+uuvo4v3VFy//fYbt99+OwEBAVgsFn744Yfz7jcMg1deeQV/f39cXV3p3bs3+/btMyeslMilXuP8/Hyee+45WrRogZubGwEBAQwfPpzExETzAkuxXO7/4XM98sgjWCwWPvjgg2uWrzSpvFcwc+fOZfz48bz66qts3ryZVq1a0bdvX44fP252NCkFa9euJSIigqioKFasWEF+fj433XQTWVlZZkeTUhYTE8Onn35Ky5YtzY4ipej06dN07doVR0dHfvnlF3bt2sW7775LjRo1zI4mpeTtt99mypQpTJ48md27d/P2228zceJEPvroI7OjSQllZWXRqlUrPv744wveP3HiRCZNmsTUqVOJjo7Gzc2Nvn37kpOTc42TSkld6jXOzs5m8+bNvPzyy2zevJkFCxYQGxtL//79TUgqJXG5/4fPWrhwIVFRUQQEBFyjZKVP13mvYDp16kSHDh2YPHkyAFarlcDAQB577DGef/55k9NJaTtx4gQ+Pj6sXbuW7t27mx1HSklmZiZt27blk08+4Y033qB169YV9hNgOd/zzz/P+vXr+f33382OImXktttuw9fXly+++MJ22913342rqyuzZs0yMZmUBovFwsKFCxkwYABQNOoeEBDAU089xdNPPw1AWloavr6+TJ8+nSFDhpiYVkri76/xhcTExNCxY0fi4+MJCgq6duHkql3s9T169CidOnVi2bJl9OvXj3HjxlXImY8aea9A8vLy2LRpE71797bdZmdnR+/evYmMjDQxmZSVtLQ0AGrWrGlyEilNERER9OvX77z/l6VyWLx4Me3bt+eee+7Bx8eHNm3a8Nlnn5kdS0pRly5dWLlyJXv37gVg27ZtrFu3jltuucXkZFIWDh48SFJS0nl/X3t6etKpUye996rE0tLSsFgseHl5mR1FSoHVaiU8PJxnnnmGZs2amR3nqjiYHUCu3MmTJyksLMTX1/e82319fdmzZ49JqaSsWK1Wxo0bR9euXWnevLnZcaSUfPvtt2zevJmYmBizo0gZOHDgAFOmTGH8+PH861//IiYmhscffxwnJyfuv/9+s+NJKXj++edJT0+nSZMm2NvbU1hYyJtvvsl9991ndjQpA0lJSQAXfO919j6pXHJycnjuuecYOnQoHh4eZseRUvD222/j4ODA448/bnaUq6byLlJORUREsHPnTtatW2d2FCklCQkJPPHEE6xYsQIXFxez40gZsFqttG/fnv/85z8AtGnThp07dzJ16lSV90pi3rx5zJ49mzlz5tCsWTO2bt3KuHHjCAgI0GssUsHl5+czaNAgDMNgypQpZseRUrBp0yY+/PBDNm/ejMViMTvOVdO0+QqkVq1a2Nvbk5ycfN7tycnJ+Pn5mZRKysLYsWNZsmQJq1evpm7dumbHkVKyadMmjh8/Ttu2bXFwcMDBwYG1a9cyadIkHBwcKCwsNDuiXCV/f3+uu+66825r2rQphw8fNimRlLZnnnmG559/niFDhtCiRQvCw8N58sknmTBhgtnRpAycfX+l916V39niHh8fz4oVKzTqXkn8/vvvHD9+nKCgINt7r/j4eJ566inq1atndrxiU3mvQJycnGjXrh0rV6603Wa1Wlm5ciVhYWEmJpPSYhgGY8eOZeHChaxatYqQkBCzI0kp6tWrFzt27GDr1q22r/bt23PfffexdetW7O3tzY4oV6lr167/uLzj3r17CQ4ONimRlLbs7Gzs7M5/+2Rvb4/VajUpkZSlkJAQ/Pz8znvvlZ6eTnR0tN57VSJni/u+ffv49ddf8fb2NjuSlJLw8HC2b99+3nuvgIAAnnnmGZYtW2Z2vGLTtPkKZvz48dx///20b9+ejh078sEHH5CVlcXIkSPNjialICIigjlz5rBo0SLc3d1t6+k8PT1xdXU1OZ1cLXd393/sX+Dm5oa3t7f2NagknnzySbp06cJ//vMfBg0axIYNG5g2bRrTpk0zO5qUkttvv50333yToKAgmjVrxpYtW3jvvfd44IEHzI4mJZSZmcn+/fttvz948CBbt26lZs2aBAUFMW7cON544w0aNmxISEgIL7/8MgEBAZfcrVzKl0u9xv7+/gwcOJDNmzezZMkSCgsLbe+/atasiZOTk1mx5Qpd7v/hv38Y4+joiJ+fH40bN77WUa+eIRXORx99ZAQFBRlOTk5Gx44djaioKLMjSSkBLvj11VdfmR1NysgNN9xgPPHEE2bHkFL0448/Gs2bNzecnZ2NJk2aGNOmTTM7kpSi9PR044knnjCCgoIMFxcXo379+saLL75o5Obmmh1NSmj16tUX/Lf3/vvvNwzDMKxWq/Hyyy8bvr6+hrOzs9GrVy8jNjbW3NBSLJd6jQ8ePHjR91+rV682O7pcgcv9P/x3wcHBxvvvv39NM5YWXeddREREREREpJzTmncRERERERGRck7lXURERERERKScU3kXERERERERKedU3kVERERERETKOZV3ERERERERkXJO5V1ERERERESknFN5FxERERERESnnVN5FREREREREyjmVdxEREREREZFyTuVdREREREREpJxTeRcREREREREp5/4fDJ5oauae6RIAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras import initializers, optimizers\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense\n", + "import matplotlib.pyplot as plt\n", + "\n", + "input_dim = 64\n", + "hidden_dim = 64\n", + "output_dim = 10\n", + "\n", + "zero_init = initializers.Constant(value=0)\n", + "\n", + "model = Sequential()\n", + "model.add(Dense(hidden_dim, input_dim=input_dim, activation=\"tanh\",\n", + " kernel_initializer=zero_init))\n", + "model.add(Dense(hidden_dim, activation=\"tanh\",\n", + " kernel_initializer=zero_init))\n", + "model.add(Dense(output_dim, activation=\"softmax\",\n", + " kernel_initializer=zero_init))\n", + "\n", + "model.compile(optimizer=optimizers.SGD(learning_rate=0.1),\n", + " loss='categorical_crossentropy', metrics=['accuracy'])\n", + "\n", + "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=\"Zero initialization\")\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "id": "Y2stM-T1YIpu" + }, + "source": [ + "With all-zero weights, all neurons in a layer produce the same output.Accuracy does not improve, even after many epochs." + ] + } + ], + "metadata": { + "colab": { + "provenance": [] + }, + "file_extension": ".py", + "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" + }, + "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": 0 +} diff --git a/02_activities/assignments/lab_2.ipynb b/02_activities/assignments/lab_2.ipynb new file mode 100644 index 00000000..e76a4062 --- /dev/null +++ b/02_activities/assignments/lab_2.ipynb @@ -0,0 +1,1328 @@ +{ + "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." + ] + }, + { + "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": 6, + "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": [ + { + "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": {}, + "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": 8, + "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": 9, + "metadata": {}, + "outputs": [], + "source": [ + "def one_hot(n_classes, y):\n", + " return np.eye(n_classes)[y]" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 1., 0., 0., 0., 0., 0., 0.])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "one_hot(n_classes=10, y=3)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "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": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "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": 13, + "metadata": {}, + "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": {}, + "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": 14, + "metadata": {}, + "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": {}, + "source": [ + "Probabilities should sum to 1:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0\n" + ] + } + ], + "source": [ + "print(np.sum(softmax([10, 2, -3])))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "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": {}, + "source": [ + "The sum of probabilities for each input vector of logits should some to 1:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1. 1.]\n" + ] + } + ], + "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": 18, + "metadata": {}, + "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": {}, + "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": 15, + "metadata": {}, + "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": {}, + "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": 19, + "metadata": {}, + "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 + }, + "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": 22, + "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 = 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": 27, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(1, 10)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.forward(np.zeros((1,64))).shape\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "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": 24, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "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9NJL4u/vr/S3AwYMkIKCAhkxYkSRxz0hIcHkMyqUmpoq/fr1k2rVqomrq6s0a9bM5BidOXNGAMiCBQvk008/lTp16oizs7NEREQU+X2srFJSUsTR0VG6d+9u8t7p06cFgPzwww8Wa6+8MbmoIF555RVxcHCQGzduGJVnZmaKSqUSf39/ad68uSxdulS2bdsmqampytDv8ePHjdbZuXOnAJCtW7cqZfv37xdvb29p1KiRfP/997J161YZMmSIAJA1a9aUGFthDDNmzFDKZs+eLQAkLCxMYmJiZOvWrTJx4kQBIC+++KKEh4fLJ598Itu2bZPo6Ogirza899578sUXX8iGDRtkx44dMnPmTPH09JS3337bqN6QIUNEo9HI+++/L5s3b5YvvvhCfH195ZFHHjH6AnDt2jWJjIwUX19f+fzzz2Xbtm3y6aefirOzs0RHR9/3M2jXrp20b9++TDGGhobKI488Is2bN5effvpJNm3aJE899ZQAkNWrV5sdY15enjg5Ocn48eOVssIvJs8+++x996UoP/zwgwCQYcOGlWl9on+D//73v6JWq+XMmTPF1lm+fLkAkFmzZonInS9fWq1WxowZY1I3JCREXnrpJRERycnJkT///FM0Go0MGjRIuV3i5MmTInLn9iWNRiNVq1aVadOmyfbt22XcuHHi4OCgbEPk/24luvscL3Ln1pDCL0oiIufPn1duwZo7d67S3uXLl4vdt9LGUFLflJmZKS1btpTq1avL7Nmz5bfffpPPP/9cXF1d5ZVXXjFqr7TnThGRQYMGyYIFC2Tz5s2yfft2+fjjj8XJyUk+//xzpU5+fr44OztLQECA/Oc//5E1a9bIr7/+Ki1bthQHBwdJSkpS6hb2Y9euXVPK7u0HUlJSjPrJM2fOyNixY5X4Co9pVlZWkX3lmTNnJDAwUIKCgmTevHmybds2GTNmjDg4OBjVW7p0qajVannnnXdk48aNEhcXJ/Pnzzc5XvfKz8+X4OBgadOmjcl7LVu2FFdXVwkICJCvvvpKtm3bJm+99ZYAMPpbLdxHf39/6dy5s6xYsUI2bdok586dK3WfVVBQIL179xYvLy+ZOnWqbN++XSZPniw1atQQLy8vee2110o87suWLRONRiPt27eX7777TuLi4uSLL76Qnj17isidRGHw4MHi6Ogou3btUo77rVu3TD4jkTv/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J5YuXYotW7bg4MGDGDhwII4cOcKRbSKih4zZt0W5ubmhVq1aqFWrFiZOnIj69evjwIEDeOyxx8ojPiIisjNOTk5YuXIlhg4dioYNGyI0NBTz5s1Dv379AAAHDx7E0aNHjeZHvPPOO7hy5QpeeeUV5OTk4PHHH8eePXsQHBxsq90gIqJy8EC/c7Fr1y6o1Wp2DkRE/zLNmzdHYmJike+1atXK5BYojUaDKVOmYMqUKdYIj4iIbKTUycXYsWPRuHFj1K9fH3l5eVi/fj3Gjx+PkSNHws/PrzxjJCIiIiKiCqDUycWFCxcwfPhwnD9/Hh4eHggPD8e3336L559/vjzjIyIiIiKiCqLUycW8efPKMw4iIiIiIqrgzH5aFBERERERUVGYXBARERERkUUwuSAiIiIiIotgckFERERERBbB5IKIiIiIiCyCyQUREREREVkEkwsiIiIiIrIIJhdERERERGQRTC6IiIiIiMgimFwQEREREZFFMLkgIiIiIiKLYHJBREREREQW4WjrAKji27Fjh61DKJKnp6etQyhWVFSUrUMgIiIisjiOXBARERERkUUwuSAiIiIiIotgckFERERERBbB5IKIiIiIiCyCE7qJiIiIyDZUKuu0I2KddogjF0REREREZBlMLoiIiIiIyCKYXBARERERkUUwuSAiIiIiIotgckFERERERBbB5IKIiIiIiCyCyQUREREREVkEkwsiIiIiIrIIJhdERERERGQRD5RczJ07FxqNBkOHDrVUPEREREREVEGVObn45ptv4O7ujtu3b6NFixaWjImIiIiIiCqgMiUXK1asQG5uLnx8fACAyQUREREREZmfXMTFxSEuLg5vvvkmdDodPD09ER4eXmz9vLw8ZGZmGi1ERERERPTwMSu5SExMxJQpUzBjxgwAgE6nQ/PmzaFSqYpdJzY2Fp6ensoSEBDwQAETEREREZF9KnVykZqaikGDBuG7776DVqsFACQnJ9/3lqiYmBhkZGQoS1pa2oNFTEREREREdsmxtBWnTp2KAwcOGI08FBQUIDY2Fnv27EFcXFyR62m1WiUZISIiIiKih1epk4sxY8Zg+PDhyuukpCRERUVh69atqF27drkER0REREREFUepk4ugoCCj13v27IGbmxvat29f4pwLIiIiIiL6dyjz71wcPnwY4eHhTCyIiIiIiAiAGSMX95o+fbol4yAiIiIiogquzCMXREREREREd2NyQUREREREFsHkgoiIiIiILILJBRERERERWQSTCyIiIiIisggmF0REREREZBFMLoiIiIiIyCKYXBARUZkYDAZMnjwZQUFB8PDwQJcuXZCWllaqdbdv346AgADUrVu3nKMkIiJrYnJBRERlMmTIEMyaNQvz589HfHw8srOzMXDgwPuul5iYCL1eD2dnZ7Ro0cIKkRIRkbUwuSAiIrNt2bIFCxcuxIYNG9CpUyeEh4dj1KhR2LZtG3Jzc4td79ixY/j6668xaNAgnDhxosTkIi8vD5mZmUYLERHZNyYXRERktmnTpqFXr16IjIxUynx8fCAiuHTpUpHr/PPPP3jvvffw2Wef4cCBAxCREpOL2NhYeHp6KktAQICld4OIiCyMyQUREZnlxo0biIuLQ58+fYzKL168CADw8vIyWefq1at48cUXMWvWLFSqVAk6nQ4uLi5o1KhRse3ExMQgIyNDWUo7n4OIiGzH0dYBUOnodDpbh1CsRYsW2TqEIs2YMcPWIRA9lFJSUlBQUIAmTZoYlScmJiIkJATu7u5G5Tk5OejRowfGjRuH4OBgAEBycjKaNGkCR8fiuyGtVgutVmv5HSAionLD5IKIiMxy7do1AICvr69R+apVq9C9e3eT+qtXr8auXbvQuXNnpcxgMAAAXF1dkZGRAY1GU44RExGRtTC5ICIisxQmFVevXoW3tzcAYMWKFTh+/DjWrVtnUr9Tp05ISUlRXhsMBjRt2hQTJ05Ez549mVgQET1EOOeCiIjMEhERgYCAAEyYMAEnTpzA0qVLERUVhUmTJqFWrVrIyspC3bp1sWbNGgB3kpEGDRooi4uLC27fvo0OHTqgTp06tt0ZIiKyKI5cEBGRWZycnLBy5UoMHToUDRs2RGhoKObNm4d+/foBAA4ePIijR48W+3Snw4cPAwDCw8OtFjMREVkHkwsiIjJb8+bNkZiYWOR7rVq1gogUu26PHj1KfJ+IiCou3hZFREREREQWweSCiIiIiIgsgskFERERERFZBJMLIiIiIiKyCCYXRERERERkEUwuiIiIiIjIIphcEBERERGRRTC5ICIiIiIii2ByQUREREREFsHkgoiIiIiILMLs5GLixIlQqVRGi6urKwoKCsojPiIiIiIiqiDMTi7i4+MxaNAgpKenK8vZs2ehVqvLIz4iIiIiIqogHM1dISEhAdOmTUP16tVLVT8vLw95eXnK68zMTHObJCIiIiKiCsCskYuzZ8/i/PnzeP/991GlShW0atUKmzZtKnGd2NhYeHp6KktAQMADBUxERERERPbJrOQiKysLX3/9NdauXYtffvkFvr6+6NGjB44ePVrsOjExMcjIyFCWtLS0Bw6aiIiIiIjsj1m3RdWvXx/169dXXv/000/w9PTEli1bEB4eXuQ6Wq0WWq32waIkIiIiIiK790CPotVoNFCr1ZzMTURERERED5ZcLFu2DAUFBejataul4iEiIiIiogqq1LdF/fTTT7h9+zaaNm0Kg8GA9evXY/z48Zg4cSKCg4PLM0YiIiIiIqoASp1cnD9/HnPnzkVaWhrc3d3RoEEDLFu2DE899VR5xkdERERERBVEqZOL6OhoREdHl2MoRERERERUkT3QnAsiIiIiIqJCTC6IiIiIiMgimFwQEREREZFFMLkgIiIiIiKLYHJBREREREQWweSCiIiIiIgsgskFERERERFZBJMLIiIiIiKyCCYXRERERERkEUwuiIiIiIjIIphcEBERERGRRTC5ICIiIiIii3C0dQBUOjNmzLB1CMXKyMiwdQhFCgoKsnUIxVqzZo2tQyiWTqezdQhFio6OtnUIJjIzM20dAhFVZCqVddoRsU47RODIBRERERERWQiTCyIiIiIisggmF0REREREZBFMLoiIiIiIyCKYXBARERERkUUwuSAiIiIiIotgckFERERERBbB5IKIiIiIiCyCyQUREREREVkEkwsiIiIiIrIIJhdERERERGQRTC6IiIiIiMgimFwQEREREZFFMLkgIqIyMRgMmDx5MoKCguDh4YEuXbogLS2t2PpLly5Fly5d4Ofnh0qVKqFNmzZISEiwYsRERFTeypxc6HQ69OnTB1WqVIGLiwsiIiJw7tw5S8ZGRER2bMiQIZg1axbmz5+P+Ph4ZGdnY+DAgcXWX758Ofr06YONGzciPj4elSpVQteuXXHz5k0rRk1EROXJsSwrbdy4EVFRURg9ejTGjx8PrVaLxMRE+Pr6Wjo+IiKyQ1u2bMHChQuRmJiIyMhIAMCoUaPw9NNPIzc3F87OzibrrF692uj1e++9hyeffBJ//fUXGjZsaI2wiYionJmdXFy+fBn9+vXDihUr0L59e6U8LCzMooEREZH9mjZtGnr16qUkFgDg4+MDEcGlS5cQEBBw323s3LkT7u7uCA4OLvL9vLw85OXlKa8zMzMfOG4iIipfZt8WNWfOHISFhWHt2rUIDAxEUFAQ3n33XeTn5xdZPy8vD5mZmUYLERFVXDdu3EBcXBz69OljVH7x4kUAgJeX1323sXbtWkyePBmff/45KlWqVGSd2NhYeHp6KktpEhYiIrIts5OLlStXIikpCQaDAatWrcLYsWMxc+ZMzJgxo8j67ByIiB4uKSkpKCgoQJMmTYzKExMTERISAnd39xLXnz17Nl544QV8+eWXGDRoULH1YmJikJGRoSwlTRYnIiL7YNZtUXl5eTh8+DCeffZZzJo1CwDQrFkzLF++HDt37sTIkSNN1omJicGIESOU15mZmUwwiIgqsGvXrgGAyTy7VatWoXv37sWud/v2bQwbNgwrVqzAxo0b0a5duxLb0Wq10Gq1Dx4wERFZjVnJxdWrV2EwGNC3b1+jcgcHB7i6uha5DjsHIqKHS2FScfXqVXh7ewMAVqxYgePHj2PdunVFrnP16lX07dsXFy5cQHx8PEJCQqwWLxERWY9Zt0V5e3vDwcEBIqKUXb58Gbt27ULnzp0tHhwREdmfiIgIBAQEYMKECThx4gSWLl2KqKgoTJo0CbVq1UJWVhbq1q2LNWvWAABSU1PRokULZGdnY/Xq1XB1dcX58+dx/vx5GAwG2+4MERFZlFkjF87OzujcuTMmT56M2rVr48aNGxgxYgRq166N/v37l1eMRERkR5ycnLBy5UoMHToUDRs2RGhoKObNm4d+/foBAA4ePIijR48qt8BOnz4df/31FwCgTp06ynZcXFyQmZkJBwf+niuRTahU1mnnrovS9PAz+1G03377Ld566y088cQTcHFxQc+ePTFp0iRoNJryiI+IiOxQ8+bNkZiYWOR7rVq1Mhrh/vLLL/Hll19aKzQiIrIhs5OL6tWrY/ny5eURCxERERERVWAciyYiIiIiIotgckFERERERBbB5IKIiIiIiCyCyQUREREREVkEkwsiIiIiIrIIJhdERERERGQRTC6IiIiIiMgimFwQEREREZFFMLkgIiIiIiKLYHJBREREREQWweSCiIiIiIgsgskFERERERFZhKOtA6DS0el0tg6hwmnfvr2tQyALCgoKsnUIJm7evGnrEIiIiOwKRy6IiIiIiMgimFwQEREREZFFMLkgIiIiIiKLYHJBREREREQWweSCiIiIiIgsgskFERERERFZBJMLIiIiIiKyCCYXRERERERkEUwuiIiIiIjIIphcEBERERGRRTC5ICIiIiIii2ByQUREREREFsHkgoiIiIiILILJBRERERERWQSTCyIiIiIisgizkosVK1ZApVIVuQwfPry8YiQiIiIiogrArOSia9euSE9PN1qio6Ph5eWF0aNHl1eMRERERERUATiaU9nV1RWurq7K65MnT+Krr77CtGnTUK1atSLXycvLQ15envI6MzOzjKESEREREZE9e6A5F8OGDUPDhg0xZMiQYuvExsbC09NTWQICAh6kSSIiIiIislNlTi5WrFiBLVu2YN68eXBwKH4zMTExyMjIUJa0tLSyNklERERERHbMrNuiCt24cQPR0dEYNmwYGjduXGJdrVYLrVZbpuCIiIiIiKjiKNPIxUcffQQRwccff2zpeIiIiIiIqIIye+RCr9dj1qxZ+PHHH+Hu7l4eMRERERERUQVk1siFiGDo0KHo2LEjnnnmmfKKiYiIiIiIKiCzRi6+/vprJCcn4+DBg+UVDxERERERVVBmjVy89tpruHnzJkJDQ8srHiIiIiIiqqAe6HcuiIiIiIiICjG5ICIiIiIii2ByQUREREREFsHkgoiIiIiILILJBRERERERWYTZP6JHREREVOGpVNZpR8Q67RDZCY5cEBERERGRRXDkgoiIyJp4xZyIHmIcuSAiojIxGAyYPHkygoKC4OHhgS5duiAtLa3EddasWYMmTZrA1dUVkZGR2Llzp5WiJSIia2ByQUREZTJkyBDMmjUL8+fPR3x8PLKzszFw4MBi6y9ZsgTPPfccXnvtNRw8eBDt2rVD7969kZmZacWoiYioPDG5ICIis23ZsgULFy7Ehg0b0KlTJ4SHh2PUqFHYtm0bcnNzTepfvnwZb775JqZNm4ahQ4ciJCQEn3zyCa5cuYI9e/bYYA+IiOyESmWdxUqsPudC/v89oLxSZZ6CggJbh0BkUzdv3rR1CCYKY5J/4b3t06ZNQ69evRAZGamU+fj4QERw6dIlBAQEGNVfsGABXF1d8frrrytllSpVgkajwcWLF4tsIy8vD3l5ecrrjIwMAOw/Sq2E42TIy7FSCPysSvoc/jUx2Lp9e4nB1h7gGBT+Xy5Nf2f15CIrKwsATDoe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", + "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 + }, + "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": 25, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average NLL over the last 100 samples at step 100: 325\n", + "Average NLL over the last 100 samples at step 200: 412\n", + "Average NLL over the last 100 samples at step 300: 403\n", + "Average NLL over the last 100 samples at step 400: 242\n", + "Average NLL over the last 100 samples at step 500: 190\n", + "Average NLL over the last 100 samples at step 600: 248\n", + "Average NLL over the last 100 samples at step 700: 92\n", + "Average NLL over the last 100 samples at step 800: 60\n", + "Average NLL over the last 100 samples at step 900: 136\n", + "Average NLL over the last 100 samples at step 1000: 215\n", + "Average NLL over the last 100 samples at step 1100: 153\n", + "Average NLL over the last 100 samples at step 1200: 73\n", + "Average NLL over the last 100 samples at step 1300: 173\n", + "Average NLL over the last 100 samples at step 1400: 93\n", + "Average NLL over the last 100 samples at step 1500: 129\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 + }, + "source": [ + "Evaluate the trained model on the first example:" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABcyUlEQVR4nO3de3zP9f//8ft7p/cOtjEWozHmMOchIconH/GhA6IzNREfpUilDzogNSXJIYkOipScVc6TJIqNzZzluHIO2xw2sz1/f/Tb++vtvWmb9/bedLteLu/Lxfv5fr5er8fr9bbX831/vw5vizHGCAAAAACuk5urCwAAAABwYyBcAAAAAHAKwgUAAAAApyBcAAAAAHAKwgUAAAAApyBcAAAAAHAKwgUAAAAApyBcAAAAAHAKwgUAAAAApyBcFFMHDx6UxWLJ02P37t2uLlfr16+XxWLRypUrXV1KoSpbtqwGDBiQ7+nOnTsnd3d3vfvuu06rJSEhQRaLRQsWLMj3tGfPntW4cePUrl073XzzzfL19VXdunX1wQcfyBjjtBqBG1lcXJx69uypKlWqyGq1qmzZsrr77rv1008/Xdd8Dx48qOHDh+vQoUNOqvTa1qxZo5EjRxbLv/3C2Hdu375dFotFc+fO/du+ffr0UaVKlezarh4HZs2aJYvFor1799raFi5cqPHjxzvMz5Vj5b59+1ShQgV9/fXXRb7sazl+/LgsFosmTpxoa8tpu+fF9OnT9fnnnzu05/QeudLevXv1yiuvqHnz5goODlZAQIBatWqlVatW2fU7e/as/P39tWjRIhdVWkAGxVJycrLZsGGD7bFy5UojyXTu3NmufcOGDSYrK8vV5Zrjx4+bDRs2mEuXLrm6lELz22+/GUlmxowZ+Z52zZo1RpJZu3at0+r5+OOPjSSTlJSU72mnT59uKleubIYNG2a+//57s3LlSvPII48YSebtt992Wo3Ajeq1114zbm5u5t///reZPn26Wb16tZk+fbpp0KCBcXNzMzNnzizwvKdMmWIkmaNHjzqx4tw9/PDDplatWkWyrPwqjH3n9OnTjSRz+PDhv+27bds2s3PnTtvznMaBw4cPm19//dVuuubNm5v27ds7zM9VY+XZs2dNjRo1TL9+/Yp0uXmxePFiI8ls2LDB1nb1ds+rChUqmL59+zq05/QeuVLPnj1N06ZNzXvvvWdiYmLMwoULTZMmTYyHh4dZt26dXd9evXqZ22+/3UWVFgzhooRYt26dkWQmTpyYp/7p6emFXNE/z9dff20kmV27duV72nfffde4u7ub8+fPO62e//73v6ZChQoFmvbo0aMmMzPTri0zM9NUrlzZ1KxZ0xnlATesV1991UgyY8aMcXgtLS3NhIeHm8DAQHP27NkCzf+pp54yFStWvN4y86xGjRrm0UcfLZJl5XdsKox9Z//+/Qu878zLOHD58mXj4+Njhg4dWtASne7+++834eHhTtuOWVlZTvuc8corrxgPDw9z8eLF65rPH3/8YSSZqVOnOqWuwvTHH384tO3du9dIMn369LFrnz9/vrFYLAX6ItFVOC2qhNi8ebMkqXHjxg6v1axZUz169NDnn3+uyMhIeXl56Z133rEd+v3mm2/s+mcfZn7nnXfs2k+ePKlnn31WoaGh8vHxUf369TVz5sw81VezZk09/vjjtufZh37nz5+v559/XpUqVVKpUqXUqVMnJScn6/jx4+rdu7duuukmlS5dWj179lRGRobdPGfNmqX27dsrJCREVqtVlStX1nPPPacLFy7Y9TPGaNKkSapTp468vb1Vr149LVmyRI8++qjq1q1r1zcjI0Njx4619a1ataqGDRumS5cu/e06btq0SQEBAapZs2a+a9y0aZPq1aun9evX6/bbb5efn5+qV6+uDz74wGE5ea1x06ZNuuWWW/627pxUqFBBbm72f/7Zzy9evFigeQL/BBs2bNCbb76pJ554Qi+++KLD61arVX369FFycrJiYmJs7U2bNlXHjh0d+j/44IOqU6eOJCklJUVubm6aNm2ajhw5Yjv19Z577pEkjR07Vm5ubvr222/Vpk0bBQQEKCgoSI888ohOnz5tm2du+3hJKl++vJ5++mlJ0rfffms7VST7tBGLxXLNU5DyWoOU+9gkSenp6YqOjlbdunXl4+OjatWqaejQoUpLS7ObR372nRMnTlTr1q1Vvnx5eXt7Kzw8XMOHD1dWVpbDPJs1a6avv/5aTZo0ka+vr+rUqeNwmlT2OLZ69Wq7aa8cBzIzM+Xr66vXXnvNVoOHh4cuXryot956y7ZNs+d99Vgp/fV+vfLKKwoPD5e3t7dq1qypcePGOdS9YsUKtWvXThUqVJC3t7cqV66shx56SJmZmbm+X5I0Z84czZ8/XxMmTJCvr6+t/dlnn1VwcLDmz5+v5s2by8/PT+XLl9czzzxjNw5kr+PQoUP13nvvKSIiQp6enrbPFnkdszIzMzV69GjVqFFD3t7eatasmWJjY7Vx40bVq1dP3t7euW53Sdq6dau6d++uSpUq2cbbqKgoZWVl6YUXXrCdRtWnTx/bdo+NjXV4j7Lt3btXPXr0UIUKFeTn56emTZtqyZIldn0OHz4si8Wijz/+WGPGjFFERIR8fHwUGRmp9evXX3O7X0vFihUd2nIbgxs3bixjjNauXVvg5RU5V6cb5E3Pnj2Nm5ubOXfunF17SkqKsVgspmLFiqZp06Zm1qxZZtWqVWbPnj22Q7979+61m2bt2rVGklm5cqWtbfPmzaZMmTKmQYMG5osvvjArV640ffv2NZLMwoULr1lbdg3vv/++rW3ixIlGkqlRo4YZMmSIWblypRk1apSRZB599FETERFh3nzzTbNq1SozcODAHL9tePHFF80HH3xglixZYtasWWPGjx9vAgMDzXPPPWfXr2/fvsbT09O8/PLLZvny5eaDDz4wwcHBplKlSuaJJ56w9Ttz5oyJjIw0wcHB5r333jOrVq0y77zzjvH29jYDBw782/egdevW5s477yxQjeHh4aZSpUqmadOm5uuvvzbLli0z99xzj5FkFixYkO8a09PTjZeXlxkxYoStLTk52VgsFvPggw/+7brk5MsvvzSSTP/+/Qs0PfBP8J///Me4u7ubQ4cO5dpnzpw5RpKZMGGCMcaYS5cuGavVaoYNG+bQt1q1auaxxx4zxhhz4cIF8/PPPxtPT0/Tu3dv26mv+/fvN8b8dfqSp6enuemmm8zYsWPN6tWrzfDhw42bm5ttHsb836lEV+7jjfnr1BBJZtq0acYYY44dO2Y7BWvy5Mm25Z06dSrXdctrDdcam1JSUkzz5s1NhQoVzMSJE80PP/xg3nvvPePr62t69uxpt7y87juNMaZ3795m2rRpZvny5Wb16tXmjTfeMF5eXua9996z9cnIyDDe3t4mNDTU/Pvf/zYLFy403333nWnevLlxc3MzcXFxtr7Z49iZM2dsbVePA4mJiXbj5KFDh8zrr79uqy97m6ampuY4Vh46dMhUrlzZhIWFmSlTpphVq1aZYcOGGTc3N7t+s2bNMu7u7ub55583S5cuNTExMWbq1KkO2+tqGRkZpmrVqqZVq1YOrzVv3tz4+vqa0NBQ89FHH5lVq1aZZ5991kiy+7+avY4VK1Y07du3N3PnzjXLli0zR44cyfOYlZmZae6//35TunRpM2bMGLN69WozevRoc/PNN5vSpUubp5566prbffbs2cbT09Pceeed5vPPPzcxMTHmgw8+MJ07dzbGGLNnzx7Tp08f22lF2dv90qVLDu+RMX/9jfj6+pq2bdua+fPnm+XLl5uHH37YuLm5mR9++MHWb8GCBUaSqV69uundu7f57rvvzJw5c0xoaKgJCwuz256LFi2y/S0VxFNPPWUkmblz59q1p6WlGUl2431xR7goISIjI01ERIRDe/Yg0rJlS5ORkWH3Wv/+/U1gYKDDNRnjxo0zksyff/5pjDHm/PnzpnLlyuaWW24xFy5csOt72223mbZt216ztuwafvrpJ1tbVFSUkWTmz59v17d69erGw8PDrm9WVpbx8fFx+EB+pcuXL5uMjAzTo0cP07BhQ1t79iD++eef2/UfPny4w2lkXbt2NaVLlza7d++26zt06FBjtVrN5cuXc11+VlaW8ff3N4MHD853jadPnzaSTN26de227/nz501QUJB56KGH8l3jpk2bjCSzZMkSW58ff/zRuLu7m3fffTfXGnOzYsUK4+vra2rVqlXgUzmAG93p06eNu7u76dChwzX7ffbZZ0aSmT59ujHGmNjY2Bz3h2fOnDGSzNixY21t27dvz7GvMX/tP93d3c3mzZvt2rt27Wr8/f1tz9999127fXy27A9KV36A/uCDD3Lsm5u81nCtsenxxx83ZcqUsYWmbC+99JKxWCwmNTXVGJO/fefVsvfHt99+u+nUqZOtfcuWLUaSadu2rd2poUeOHDEWi8W8/PLLtraoqCgTHh5ue57TOJD9Jd6Vp6y89NJLOY69V4+VWVlZpmnTpqZKlSrmxIkTdn0fffRRU716ddvz1q1bm//85z+5rm9uvvnmmxyDWEZGhvHx8TGBgYEOp9s0adLE1KtXz2EdH374YYf553XMevfdd43FYjHr16+369enTx+HLxev3u5bt241np6ef/vF1wMPPGAaNGjg0H71e3Ty5ElTtmxZ06VLF7v3KCMjw1SsWNE88MADtrbsUyCvHlezvyy98v/lyJEjjbu7u9m0adM168zJm2++mes2vnDhgpFkhgwZku/5ugqnRZUAly5d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VmdkZGju3LmKjIyUp6enJMftfvr0aV28ePFvf/MityN+Ob1HJ06ccFhv6a8vcv/44w+1a9dO0l+h9ejRow6fWYwx2rJli/r06XPNmq5l3759uueee5SUlKT58+erc+fOufZdtGiR/P391bJlywIvr8i59KQs5MnTTz/tcHGTMcacO3fOuLm55fi7BMuXLzeSzJo1a+za+/fv73CufqtWrUyjRo0K9HsZ2TVcec5w9jm8V59D+sorrxir1epwf+8+ffqY8uXL254PGTLESLK7eD01NdXUqlXLSLKd63vo0CEjybz++ut281uyZImRZHeB2CuvvGLc3d2veaHitbRo0cLufNe81miMMaGhocZqtdq9fxkZGaZVq1YmIiLCdj5yXmu8cOGC8fDwMKNHjy7QuiQlJZnIyEhjtVoL9JsdwD9VZmamqVatmgkKCjKnT592eH3GjBnGzc3N4SLbkJAQExUVZdf2yy+/GHd3d4cbMAQEBJhBgwY5zPv+++83ksy3335r1559G8/t27cbY4zZvXu33fUe2bKvw7jyYtPNmzcbSWbx4sV5WPu813CtsSn7Ormrx6bPP//cSDLz5s2zteV13/nII4+Y4OBgu/n98ccfJjg42O56krS0NOPp6WkqVapkdx1IamqqqVGjht31hTldi3L1OJB9fcyVNc+fP99IMlu3brWrJ6exsnv37qZ8+fIFuqVr9o1ZrvXenTp1ykjKcaxo3LixkWQSExPt2rt3724CAwPNyZMn7dZx9uzZDvPI65iVfa3Jxx9/bNc+ZswYh5uIXL3dMzMzjY+Pz9/eKvm9994zkkxKSopde07v0d13322qVatmd83N5cuXzV133WVCQkJs1/x89913RpLD72Ps2rXLSDJfffXVNWvKzZo1a0zZsmVNpUqVHK5dutrRo0eNl5eXefrppwu0LFchXJQALVq0MFWrVnVo/+mnn4wkExMT4/DagQMHjJubm4mKijInTpwwe/bsMQMGDDBly5Y1ksyxY8dsfbN36vfff79ZuHCh+fHHH82cOXPMa6+99rcXEGXXcOVA0atXL1O5cmWHvv/5z3/Mrbfe6tDepEkTc/fdd9ueZ/+gziOPPGJiYmLMp59+aiIiIkzVqlXtwklWVpa59dZbjb+/v5k0aZL54YcfzKhRo0yVKlXs7ohijDE7d+40Pj4+plGjRuaLL74w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ChU0b9482/OkpCQ99thjKlOmjMqUKaNHH31UZ86cKepVK3byHS5WrFihzz77TEuWLFG7du0UERGhwYMHa9WqVUpLSyuMGgEAxVRcXJxKlSp1zYu5L1y4oPT0dAUHB9u1z58/Xw0bNlRoaGhhlwngH87d3V3r1q2TJMXHx+vo0aNavny54uPj9e233yozM1Nr1qzRggULtHXrVhlj1KBBA9v0R48e1fHjx21fhvz2229q0qSJwsPDtWHDBq1atUr79u3TSy+95JL1K07yfc3F2LFj1aVLF0VGRtragoKCZIzRyZMnHQaJ9PR0paen255zQR4A3Dji4uLUqFGja94b3dfXV35+fjp9+rSt7fDhw/r88881efLkoigTwD+cm5ubjhw5orJly9oCQkZGhnbu3KmnnnpKb731lq3v6tWrVa1aNfn7+9vatmzZIj8/P4WHh0uS/vvf/6pfv35214UNHjyYcKF8Hrk4d+6cYmJi1LVrV7v27IvxSpcu7TBNdHS0AgMDbQ++oQKAki0jI0Px8fGKj4/XL7/8oooVKyo+Pl779++X9NctamvXrm13weTdd9+tSZMmKTExUevWrVPbtm3Vpk0b9ejRw0VrAeCfZsuWLXanYe7YsUOXLl3Sc889Z9cvPj7e4XTN+Ph4NWjQQBaLRYcOHVJMTIzGjBmjUqVK2R7du3e3u67snypfWyAxMVGZmZk5njd7dcLLNmTIEA0aNMj2PCUlhYABACXYxo0b1apVK9vzxMREzZ49W71799a0adO0bds27dq1y25fP2HCBPXp00ctW7ZUYGCgoqKi9Nprr/FLvwCKzNWhISEhQSEhIapZs6Zdv4SEBHXo0MGubdOmTbZpExISFBQUpF9//dVhGT4+PoVQecmSr3CRfZFKTufN3nvvvTlOY7VaZbVaC1geAKC4admypcw1bjHaokULh9fLly+vRYsWFXZpAJCrxMREdenSxfY8Pj5ejRo1cui3Z88eDRw40Pb81KlTWrlypd59911Jkqenp1JTUxUSEiI/P79Cr7ukyddXRtmh4srzZufOnau9e/eqf//+zq0MAAAAcJKsrCxt3bpVR44cUXJyshISEnIMF+XKldPGjRslSb///rsee+wxnT9/3nbkolmzZgoICFCPHj0UHx+v3377TcuWLdOAAQOKdH2Kq3wduci+q8fIkSP12muv6ddff1WfPn301ltvqXr16oVVIwAAAIqxgv6oXVEaNWqUXn75ZY0bN06DBg1SQkKC+vXr59DvvffeU79+/TRjxgzVr19fDz/8sFauXKn69etL+utGRkuWLNHLL7+s1q1byxij6tWrcw3Z/5evcOHl5aV58+apX79+ql+/vsLDwzVlyhR17969sOoDAAAArlv37t3tPrOOHTs2x34dO3bUoUOH7Np69+5t9/zWW2/VDz/84PwibwD5vqS9adOmth8+AgAAAIBs3KYDAAAAgFMQLgAAAAA4BeECAAAAgFMQLgAAAAA4BeECAAAAgFMQLgAAAAA4BeECAAAAgFMQLgAAAAA4BeECAAAA18diKdpHCfD1118rJCTE9rxv37569NFHr2uezphHYcv3L3QDAAAAuLaEhAQ1bNjQ9jw6OlpWqzVP0549e1ZBQUHavHmzIiMjCzQPVyFcAAAAAFcxxigzM1MeHgX7uJyQkGAXDIKCgvI87aZNm+Tt7a169erZtednHq7CaVEAAAC44R0/flwWi0Xjx49Xo0aN5O3trbp162rdunWSpDVr1sjT01Pff/+9mjRpIi8vL23ZskWS9N133+mWW26Rt7e3qlatqilTptjN+48//lCnTp3k6+urmjVr6scff7Q7cnHw4EFZLBYdOnTINs2BAwf00EMPKSgoSH5+fmrWrJl27typ4cOHq127drp48aI8PT1lsVi0dOnSHOexdu1atW7dWn5+fqpcubKio6Pt6mrVqpWGDh2q559/XjfddJPKlCmjESNGFMr2zcaRi6vEx8e7uoQcLVq0yNUl5GrAgAGuLiFH48ePd3UJuVqzZo2rS8hV586dXV0CAABOlx0UJk+erI8++kghISEaNGiQHnvsMR04cEDx8fFyd3fXO++8owkTJigoKEjVqlXTuHHjNH78eI0dO1aNGzfWxo0bFRUVpbp16+r222/XiRMn1KxZM915553avHmzjhw5or59++rIkSO2Ixfx8fEqXbq0qlSpIknavHmz7rjjDkVFRWnVqlXy9fXVkiVLFBAQoEGDBmnHjh2yWq0aM2aMJKlcuXL67rvv7OaxdOlSdevWTW+++aamT5+ubdu26ZFHHtHNN9+sHj16yBijxMREHTx4UMOGDdP69eu1dOlSPffcc4qKirLNx9kIFwAAALjhJSQkyNPTU8uWLVPVqlUlSSNHjtQtt9yiP/74QwkJCSpbtqwWL16swMBASX8dXXj11VcVFxenWrVqSZKqVq2qmTNn6ocfftDtt9+uIUOGqFq1apoxY4YkKSIiQl26dNH48eNVs2ZN27Kzj2JkZWXpiSeeULdu3TRp0iRbfREREbZ/79mzR71791aFChXs6s+ex6VLl9SrVy8NHz5cAwcOtNXVtWtXfffdd+rRo4cOHDiglJQUjR07Vr1795YkPfnkk3ruued08uRJwgUAAABQUPHx8br//vttwUKS3cXR8fHxeuKJJ2zBQpK++OILXbhwQU2aNLGbV1pamlq0aKG0tDR99dVX+vLLL+1e9/T0VL169eTu7m6bd3YwWLdunXbu3KnVq1fnWOelS5e0Y8cOu4vBr57H6tWrderUKfXt29euj5eXl5KTkyX9FUa8vb3t7i61f/9+SVJ4eHhum+m6ES4AAABww8sOD1favHmzypUrp/Lly2vHjh16++237V5PSEhQ7969NXjwYIf53XTTTdq9e7cuXryoxo0bO8z3you5ExISdN9990n66/Ss8PBwBQcH51jn9u3blZGRoQYNGjjUkj2P7du3q3LlygoICLDrs2PHDrVp08bWv0GDBvL19bW9vmXLFlWpUkVlypTJcdnOQLgAAADADe3ixYvau3evMjMzbW1ZWVkaP368nnjiCe3atUuXLl1So0aN7Kbz9PTU+fPnVb169Rzn6+bmZpt/tu3bt2vp0qWaOHGiJCklJUUHDx60HXXw9PRUSkpKrrUmJiaqSpUqdkdQrp6Hv7+/0tLS7Kb79ddf9csvv2jq1KmS/goXV6/Pli1b7EJPYeBuUQAAALihJSYmymKxaObMmdqwYYN27typhx56SGfPntUrr7yihIQEVapUyeFoQseOHfXNN99o8uTJ2r9/vxISEvTJJ5/os88+kyTVqFFDwcHBGjp0qPbs2aMffvhB3bp1U1ZWli0IJCQkyN3dXXXr1pUktWnTRn/++af+97//ae/evdq6daveffddnTp1StJfoefMmTPasWOHjh07pszMTId5tG3bVqdOndKYMWN08OBBLVq0SF27dtWQIUNsfRISEhyOqMTHxxMuAAAAUMwZU7SPfIqPj1dERIReeeUVdevWTbfccovc3Ny0YcMGlS5d2uE3KbI98cQTevvtt/X++++rTp06ateunebPn2/7AO/t7a2ZM2dq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tdPXX3+tDz74QDt37tSkSZNsR0Di4+MVEREhq9UqSTp27JgiIyO1YMEC7dq1Sy+++KL69++vHTt2SJJ++uknPfnkkxo0aJC2bdumNWvWqHPnzgoKCtLZs2fVtm1bNWvWTOvXr9fmzZv10ksvqUKFCk7awoA9D1cXAAAAUFg2b96siIgI+fr6Orzm6ekpd3d3ubn99V1rQkKCWrduLUnat2+fRo0apcWLF6tDhw6SpDFjxmjq1Km205UyMjK0c+dO2/MyZcpo165dGjZs2DU/vL///vvavn27duzYoeDgYElStWrVbK9ffb1FzZo1bdd0SNIzzzyjN998U7t371adOnW0cuVKRURE6OGHH5bFYpEkW+DZvHmzkpOTNXDgQAUGBkr666J1oLBw5AIAANyw4uLi1Lhx4xxf27Nnj92RhYSEBNuH8hkzZigyMtIWLKS/rq+wWCy2Pjt27NClS5dszw8cOKCzZ8/meJTkSlOmTNHQoUNtweJqV4eLDRs2qFu3bqpRo4YCAgJUqlQpHT16VDfffLMkqW3btkpMTFTDhg31xhtv6LfffrNN27BhQ1WqVEkREREaMGCAfv7552vWBlwvwgUAALhhbdmyJcdwcfHiRS1atEhdu3aVJB0+fFhnzpyxfahPSEhwmG7Xrl0yxtjCQ0JCgipXrmy7eDs+Pl5BQUEKDQ3NtZ7k5GQdOHBAzZs3z/H1y5cva/v27bY6fvjhB915552KiIjQ9OnTtWnTJn344Yd212TccccdOnTokAYOHKiffvpJERERmjdvnqS/7ma1c+dOTZkyRcnJyWrTpo2ef/75PG49IP84LQoAANyQ9u/fr7NnzzqEhKysLPXr108eHh6235KIj49XQECAwsLCJEnu7u46d+6c3XTjx49XaGiogoKCbNNceZQiMTFR9evXv2ZNHh4eslgsSk5OzvH1nTt3Kj093RYuZsyYoY4dO2rUqFG2Pq+88opq1aolHx8fW1u5cuX05JNP6sknn9Sdd96pX375xRacvL291alTJ3Xq1ElVq1bVd999d80agetBuAAAADekuLg4SVJISIiOHTumlJQUxcXFacKECTp06JC+/fZb21GH7FOisq9ZaNmypV555RUtXrxY9erV0/Tp0zV79my1bdvWNv+EhAS1bNnS9jwrK0u///679u3bJz8/vxyvu/Dz81OrVq306quvqnTp0goODlZCQoKsVqvuvvtuxcfH6+abb1bZsmUlSUFBQfrhhx+0efNmeXp6asKECVq+fLnuu+8+SdLChQu1Z88etW3bVkFBQVq9erViY2P1xhtvaP/+/Zo4caLuv/9+hYaGas+ePfriiy/01FNPFc4GB0S4AAAAN6jNmzdL+uuCaHd3dwUGBioiIkL33HOP+vXrZzsCIdlfbyFJ/fr1U3x8vLp3767AwED16dNHzZs3V7Nmzeymefrpp23Pe/XqpWXLlqlOnToqVaqU/vzzzxzr+vLLLzVw4EDdfffdSk9PV506dTRx4kTbPK+83mLw4MGKj49Xy5YtFRoaqpdeeklxcXG2PllZWZo7d65GjRolY4zq1aun2bNnq1WrVtqxY4e2b9+uGTNm6Ny5cwoLC9MzzzzDaVEoVBZjjHF1EQAAAMXZrl271KBBA23dujXH28sC+AtHLgAAAK7y4YcfqlGjRipfvrzi4uI0ePBg9enTh2AB/A2OXAAAAFzliSee0Pfff68LFy6oRo0a+u9//6u+ffvafhMDQM4IFwAAAACcgvgNAAAAwCkIFwAAAACcgnABAAAAwCkIFwAAAACcgnABAAAAwCkIFwAAAACcgnABAAAAwCkIFwAAAACc4v8BCc+hNTli4KEAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 31, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABYhklEQVR4nO3dd3hUZd7G8e9Mei8QeiCEGnoTQWxgQUC6ZUVUFBVY29rFV91dVEBdLKiI2BXRVUBELKAgIAJCkIQSQgkEQksCIb3PnPePA8EsNUByMpP7c13nwpw8Z+aXQWbuPOcpNsMwDEREREQsYre6ABEREanZFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLeVpdwNlwOp3s37+foKAgbDab1eWIiIjIWTAMg5ycHBo0aIDdfur+D5cII/v37ycyMtLqMkREROQcpKSk0KhRo1N+3yXCSFBQEGD+MMHBwRZXIyIiImcjOzubyMjIss/xU3GJMHLs1kxwcLDCiIiIiIs50xALDWAVERERSymMiIiIiKUURkRERMRSLjFm5GwYhkFpaSkOh8PqUqSCvLy88PDwsLoMERGxiFuEkeLiYg4cOEB+fr7Vpcg5sNlsNGrUiMDAQKtLERERC7h8GHE6nezatQsPDw8aNGiAt7e3FkZzIYZhkJ6ezt69e2nRooV6SEREaiCXDyPFxcU4nU4iIyPx9/e3uhw5BxERESQnJ1NSUqIwIiJSA53TANb33nuPa665htq1a2Oz2di2bdsZr5k3bx5dunTB39+fTp06sXz58nN56lM63TKzUr2pJ0tEpGY7p0/wnJwcRowYwW233UZwcDAtWrQ4bfuZM2dy8803c88997Bp0yauuOIKhg0bRnZ29jkVLSIiIu7jnMLII488wp133klOTg6dO3c+7W+2hw4d4r777mPKlCmMGzeO6OhoXnzxRQ4fPsyqVavOuXB39sUXX9CgQQOrywBgzJgxjBgx4rRtxo4dyy233FJFFYmIiLs5rzEj69ato0+fPqdt89577+Hv78/YsWPLzgUGBuLl5UVaWtpJrykqKqKoqKjs65rWgzJw4ECuu+46q8sAYNKkSfj4+Jy2TXx8PIMHD66iikRExN2c80CLoqIiNm/eTNeuXU/bbt68eQwePBhPz+O5JzMzk5KSEsLCwk56zaRJkwgJCSk7atqOvYGBgad8bapaeHg4AQEBp/y+YRhs3LiRTp06VV1RIiLiVs45jGzcuJGSkpIzhpH4+Hi6dOlS7lxsbCwAHTt2POk148ePJysrq+xISUk51zKrLafTycSJE2nRogW+vr7UrVuX2267DYCoqCg++eSTsrZ79+5l4MCB+Pv707JlS5YsWULt2rX59ttvAUhOTsZmszF37lwuv/xy/Pz86Nq1K8nJySxdupTu3bvj7+9P7969ycjIKHtch8PBSy+9RPPmzfH396d79+6sXr267PvHHnf37t1l51atWkXXrl3x9fXliiuuYOnSpeTl5Z3y71JERKxT4nCSkVfM7sN5bNqXxcqkQyzcfJA56/by6apk3v51By//lMhz325i8/4sy+o859s069atIzAw8LSDV/Pz8ykqKiIiIqLc+blz59KxY8dT9nj4+Pic8dbAqRiGQUGJNauw+nl5nPXMkEmTJvHFF18wY8YMoqOj2bt3L4mJiWRmZrJ79+6yD/eDBw/SvXt3+vfvz5o1a0hNTWXs2LEcPny4rE1cXBwA06ZNY+LEiQQGBjJkyBBuu+02AgMDefvttzEMg/79+/PBBx/w+OOPA3D77bezfv163n33XaKiopg6dSoDBw5k27ZthIWFERcXR2hoKE2aNAFg2bJl9O3bl+eff54bbriBxYsXc+ONN1KnTh3q169/gV9NERE5xuE0OJJfzJG8YjLyijmSX0xGXglH8ovJzC8mM7+EzIISsvJLyCowj+zCEvKLz/7zsFtUOG0bhFTiT3Fq5xVGOnfufNoptf7+/gQEBJT7bXzPnj188sknTJs27Vyf+rQKShy0eW5hpTz2mSRM6Iu/99m9pAsXLmTAgAH07t0bgCZNmtCrVy+WLVuGl5cXbdq0AcxeosaNG/Pee+9hs9lo164d119/PR9++CFRUVGA2fsUFhbGl19+Se3atQHo3bs3S5YsISEhoew2y0UXXcTBgwcBWLBgAXPmzGH79u1lofCVV15h2rRprF69mn79+hEfH18WeBwOB/feey+PP/54WZi5++67+eCDDwgODr4Ar56ISM1iGAY5RaWkZhWSml1EWk4h6TlFpOUUkZ5TxKHcIg7nFnMot4iM/GIM49yfK8DbgyBfL4J8PQn09STI14tAHw8CvM2vA308aR5h3SrYFQojJSUlbN68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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "def sigmoid(X):\n", + " X = np.clip(X, -500, 500)\n", + " return 1 / (1 + np.exp(-X))\n", + " \n", + "\n", + "\n", + "def dsigmoid(X):\n", + " s = sigmoid (X)\n", + " d_s = s* (1-s)\n", + " return d_s\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": 44, + "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 = np.dot(X, self.W_h)+ self.b_h\n", + " self.H = sigmoid(self.Z_h) \n", + " # Apply the sigmoid activation function\n", + " return self.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", + " self.Y = sigmoid(self.Z_o)\n", + " # Apply the sigmoid activation function\n", + " return self.Y\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 1.0\n", + "\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": 45, + "metadata": {}, + "outputs": [], + "source": [ + "n_hidden = 10\n", + "model = NeuralNet(n_features, n_hidden, n_classes)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.loss(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0.13817943680419123" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.accuracy(X_train, y_train)" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABcnUlEQVR4nO3deVhU5f//8dewOCyyiJJioShquIKaqVlZfsw+tplpu5alaZalWdlHbVEztcXMJTNtM80Wdyt3zMy0EBDELcyVck8FXEBk7t8f/Ziv44ABDgzY83Fd57o899z3ud/njJx73nOfc8ZijDECAAAAgEvk4e4AAAAAAFweSC4AAAAAuATJBQAAAACXILkAAAAA4BIkFwAAAABcguQCAAAAgEuQXAAAAABwCZILAAAAAC5BcgEAAADAJUguyqg9e/bIYrEUavntt9/cHa7WrVsni8WiFStWuDuUElW5cmX179+/yO1OnjwpT09PvfPOOy6LJTk5WRaLRfPnzy9W+w8++ED33Xef6tatKw8PD1133XUuiw34N0hISNBjjz2mmjVrymq1qnLlyrr99tv1008/XdJ29+zZo2HDhmnv3r0uivTiVq9erREjRsgYUyr9FUVJnDu3bNkii8WiOXPm/GPd3r1768orr3Qou3AcmDVrliwWi3bs2GEvW7BggcaPH++0PXeOlTt37lS1atX01VdflXrfF3Po0CFZLBZNnDjRXpbfcS+Mzz77TNOnT3cqz+89cqczZ85oyJAh6tixo8LCwmSxWDRkyBCneidOnFBAQIAWLlzohiiLj+SijAoJCdH69evtS96J6O6773YoX79+verVq+fmaKU6depo/fr1uummm9wdSonZuXOnjh07phYtWhS5bUJCgmw2m1q2bOmyeOLj4yWpWPHk5uZqwoQJysnJ0Z133iljjJo1a+ay2IDL3WuvvaZrr71WaWlpGjFihJYuXap3331Xf/zxh2666SZ98cUXxd72smXLNHz4cFmtVhdGXLAPP/zQ/uGrrCnJc2dhttm/f3/Fxsba1/MbB2644Qb9+uuvqlu3rr3szTff1JIlS5y2566xMj09XR07dtQ999yjBx54oFT7/idxcXGSHMeyC497YQ0ePFjr1693Ks/vPXKnTZs2adGiRapSpYpuuOEGScp3DA4ODtb999+vsWPHlnaIl8agXFi7dq2RZCZOnFio+tnZ2SUc0b/PV199ZSSZ7du3F7ntO++8Yzw9Pc2pU6dcFs+TTz5pqlWrdsnbWblypZFkPv74YxdEBVz+XnnlFSPJvP32206vZWVlmcjISBMUFGROnDhRrO0/8cQTpnr16pcaZqHVrVvXPPTQQ6XSV1HHppI4d/br16/Y587CjAPnzp0zvr6+ZsiQIcUN0eXuueceExkZ6bLjaLPZXPY54+WXXzZeXl7mzJkzl7SdP//800gyU6dOdUlcpeXll182kszOnTvzfX3evHnGYrGYtLS0Uo6s+Ji5KCcSExMl5Z/Z1qtXT927d9f06dMVExOjChUq6K233rJP/X7zzTcO9fOmmd966y2H8iNHjuiZZ55ReHi4fH191bhxY82cObNQ8dWrV0+PPPKIfT1v6nfevHl67rnndOWVV6pixYrq1KmT0tPTdejQIfXq1UtXXHGFgoOD9dhjjyknJ8dhm7NmzdKtt96qsLAwWa1W1ahRQ88++6xOnz7tUM8Yo0mTJqlBgwby8fFRo0aNtHjxYj300ENq2LChQ92cnByNHTvWXrdWrVoaOnSozp49+4/7uGHDBgUGBjrMFBU2xg0bNqhRo0Zat26dbrjhBvn7+6tOnTp6//33nfopbIwbNmzQNddc849x/5OL/d8C4Gj9+vV644039Oijj+qFF15wet1qtap3795KT093+Oa1RYsWuu2225zq33fffWrQoIEkKSMjQx4eHpo2bZr2799vv/T1jjvukCSNHTtWHh4e+vbbb9WuXTsFBgYqJCREDz74oI4dO2bfZkHneEmqWrWqnnrqKUnSt99+a79UJG/mwmKxXPQSpMLGIBU8NklSdna2Ro8erYYNG8rX11e1a9fWkCFDlJWV5bCNopw7J06cqLZt26pq1ary8fFRZGSkhg0bJpvN5rTNli1b6quvvlLz5s3l5+enBg0aOF0mlTeOrVq1yqHt+eNAbm6u/Pz89Oqrr9pj8PLy0pkzZzRq1Cj7Mc3b9oVjpfT3+/Xyyy8rMjJSPj4+qlevnsaNG+cU9/Lly9WhQwdVq1ZNPj4+qlGjhu6//37l5uYW+H5J0uzZszVv3jxNmDBBfn5+9vJnnnlGoaGhmjdvnlq1aiV/f39VrVpVTz/9tM6cOWOvl7ePQ4YM0bvvvquoqCh5e3vbP1sUdszKzc3VmDFjVLduXfn4+Khly5aKj49XXFycGjVqJB8fnwKPu/T3t/3dunXTlVdeaR9ve/ToIZvNpueff95+GVXv3r3txz0+Pt7pPcqzY8cOde/eXdWqVZO/v79atGihxYsXO9TZt2+fLBaLPvroI7399tuKioqSr6+vYmJitG7duose98JKTExUcHCwateune/rzZo1kzFGa9ascUl/pcLd2Q0K57HHHjMeHh7m5MmTDuUZGRnGYrGY6tWrmxYtWphZs2aZlStXmtTUVPPZZ58ZSWbHjh0ObdasWWMkmRUrVtjLEhMTTaVKlUyTJk3M559/blasWGH69OljJJkFCxZcNLa8GN577z172cSJE40kU7duXTN48GCzYsUKM3LkSCPJPPTQQyYqKsq88cYbZuXKlWbAgAH5ftvwwgsvmPfff98sXrzYrF692owfP94EBQWZZ5991qFenz59jLe3t3nppZfMsmXLzPvvv29CQ0PNlVdeaR599FF7vePHj5uYmBgTGhpq3n33XbNy5Urz1ltvGR8fHzNgwIB/fA/atm1rbr755mLFGBkZaa688krTokUL89VXX5mlS5eaO+64w0gy8+fPL3KM2dnZpkKFCmb48OH2svT0dGOxWMx99933j/tyvgceeMBYrVZz9uzZIrUD/o3++9//Gk9PT7N3794C68yePdtIMhMmTDDGGHP27FljtVrN0KFDnerWrl3bPPzww8YYY06fPm1+/vln4+3tbXr16mXWr19v1q9fb3bt2mWM+ftv1dvb21xxxRVm7NixZtWqVWbYsGHGw8PDvg1jjFm9erXTOd4YY/bt22ckmWnTphljjDl48KCZMmWKkWQmT55s7+/o0aMF7lthY7jY2JSRkWFatWplqlWrZiZOnGh++OEH8+677xo/Pz/z2GOPOfRX2HOnMcb06tXLTJs2zSxbtsysWrXKvP7666ZChQrm3XfftdfJyckxPj4+Jjw83PznP/8xCxYsMN99951p1aqV8fDwMAkJCfa6eePY8ePH7WUXjgMpKSkO4+TevXvNa6+9Zo8v75hmZmbmO1bu3bvX1KhRw0RERJgpU6aYlStXmqFDhxoPDw+HerNmzTKenp7mueeeM0uWLDGxsbFm6tSpTsfrQjk5OaZWrVrm+uuvd3qtVatWxs/Pz4SHh5sPP/zQrFy50jzzzDNGksP/1bx9rF69urn11lvNnDlzzNKlS83+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rTI+Pj4mMjLSTJ061axatcrMmjXL3HXXXcZisZi+ffs63ChsjDHt2rUz4eHhZtOmTebQoUPmiy++MPXr1zeSzJgxYxzq5j1cIzY21qxfv94cO3bMXl6jRg1Tu3Zt89VXX5kVK1aY3r17Gw8PDzNlyhR7+9OnTxt/f39z6623mj/++MPs2bPHvP7666ZatWpGkvnll1/sdXft2mUkmUcffdT+hJ2LPdiisDFcbGw6efKkqVGjhrn66qvNN998Y2JjY80LL7xgvL29zYsvvmivV5Rz54QJE4wk079/fxMbG2smTZpkIiIizJVXXmlq165tr/frr7/at3n//febFStWmC+//NJER0eb8PBw8+eff9rr9uzZ0+FpQPmNAzNmzDCSzJ49e+xlq1atMpLMSy+9ZH7++Wf7zb35jZWrVq0yHh4e5qabbjJff/21+fHHH828efPM6NGjTa9evez1rrvuOvP888+bb775xqxevdp8+OGHJiIiwkRHR5usrKwC369z584ZLy8vh5iN+b+nDdaoUcM0a9bMLFy40CxevNh06dLFeHt7m++++85pH/P7DYbCjlmnT5824eHhJjQ01HzyyScmNjbWPPfccyYgIMDpgSwXHndj/n4ipMViMS+88IJZvny5+e6778zw4cPNW2+9Za/zySefGElm3LhxZt26dWbTpk0FvkfffvutkWR69OhhVqxYYebOnWvatm1rAgICzPr16+31RowYYby9vZ2O8cyZM52exNmvXz/j6enp9JCC/CxfvtzMnj3bvp1bbrnFPganp6c71B0wYICxWq0XfTpdWURyUcbl5uYaf39/06VLF6fX3nvvPWOxWAr8oaYpU6aYq666ylitVhMdHW3ef/9907t373x/nGnOnDnmuuuuM5UqVTK+vr6mVq1apmvXrg4nwvzkxXD+H0RMTEy+H9hDQ0PNU0895VB29uxZU6FCBfPqq686lI8aNcqEhYUZPz8/c/3115ulS5eaDh06OCUnu3fvNv/9739NxYoVTWhoqOnRo4f9JHPhH3liYqLp1KmTCQsLMxUqVDDVq1c37du3Nx999NFF9zE5OdlIMgsXLixyjN9//719QH/iiSdMYGCgCQwMNF27djWpqalOfRUmxvHjxzu97y+++KKRZJKTky+6L8YY07FjRyMp3+Xbb7/9x/bAv11ycrK59957TWhoqPH29jbVq1c39913n/nxxx/zrb9lyxbTunVr4+PjY6pXr2769Olj5s2bZySZ5cuXO9RdsmSJadCggalQoYL9yU55H7QnTpxoRo4cacLCwozVajUtW7Z0+CCYZ/78+aZOnTrGarWaq6++2owcOdIMGzbMeHp6Oj0R8M033zRXXnml8fDwyPcJR3mKEsM/jU2pqanmrrvuMpUrVzYVK1Y0119/vZk9e7ZDnaKcO8+dO2f/8iwgIMDceuutJi4uztSrV8/h0dx5T8bauXOn6dKli/H39zdVqlQxjz/+uNm/f7/DNi8cx/IbBwYMGGAqV67s0M5ms5nnnnvOXHHFFcZisZjGjRs7HJMLPzyuWrXKtG/f3oSGhhqr1WrCw8PNHXfcYX+6U25urnnqqadMTEyMCQ4ONn5+fqZBgwZm2LBhTtvKT9OmTZ2eqhUXF2d/IlnePvj6+pp27do5Pc1pwIABJiQkpMDtF3ZcTUpKMm3atDG+vr4mNDTUPPjgg/anmm3ZssVeL7/PD6dPnzavvfaaqVevnvHx8TEhISGmbdu2Dn9vWVlZplu3bqZSpUpGkrnzzjvt8V/4HhljzBdffGGaNGlifH19TbVq1Uy3bt2cEqi7777bNG3a1Kntc8895/S30qJFi4sepzy5ubmmYsWK+Y6/FovFZGRk2Otu27bNeHt7mxEjRvzjdssaizHGuHgyBHCbM2fO6D//+Y8CAwO1dOlSd4cDAJds8eLFuv322/XLL7/kex/DvyUGFN2wYcM0bdo0/fHHH/ZLbyZPnqynn35aBw8edLpJG2VDbm6ubrzxRnl4eOiHH35wuiG/rCtf0QLniY+P15w5c9SmTRsFBAQoNTVVEydO1NGjR/Xzzz+7OzwAcIn4+Hh5e3u79WkxZSEGFN3jjz+uUaNGac2aNWrbtq2kv9/L8PBwEosybMSIETpw4IDWr19f7hILieQC5djJkye1YsUKffDBBzpz5oyqV6+u2267Ta+88kq+TyIBgPIoPj5ejRo1uuijOP8NMaDoatSooY8//linT5+2l8XHxxfptxhQuk6ePClPT0+tWLGi3CaAXBYFAAAAwCX4ET0AAAAALkFyAQAAAMAlSC4AAAAAuESp39Bts9m0f/9+BQQEFPnXoAGgLDHGKDMzU9WrV7f/0itKDuMHALhHUca7Uk8u9u/fr/Dw8NLuFgBKTFpamq666ip3h3HZY/wAAPcqzHhX6slFQECApL+DCwwMLO3uy60TJ064O4QCzZo1y90h5GvTpk3uDqFATz31lLtDKFCTJk3cHUK5kZGRofDwcPt5DSWL8QMA3KMo412pJxd5U9mBgYEMDkVgs9ncHUKByupzzytUqODuEApUsWJFd4dQIP4ui45LdEoH4wcAuFdhxjsuEgYAAADgEiQXAAAAAFyC5AIAAACAS5T6PRcAAAAov4wxOnfunHJzc90dClzI09NTXl5el3wfIckFAAAACuXs2bM6cOCATp8+7e5QUAL8/PwUFhZ2SQ/FIbkAAADAP7LZbNq9e7c8PT1VvXp1VahQgaflXSaMMTp79qyOHDmi3bt3q27dusX+cViSCwAAAPyjs2fPymazKTw8XH5+fu4OBy7m6+srb29v7d27V2fPni32Tw1wQzcAAAAKrbjfaKPsc8V7y/8OAECxTJs2TbfccouqVKkii8Wi1NTUf2yzYMECNWvWTH5+foqJidGaNWtKIVIAQGkhuQAAFEtmZqYeeughde/eXYGBgapbt+5F68+cOVP333+/nnjiCW3evFlt27bVPffco4yMjFKKGABQ0kguAADFMnDgQD322GPKzMxU06ZNL3pj59GjR/X0009r7Nix6tu3r2rXrq033nhDf/31l9avX59vm+zsbGVkZDgsAICyjRu6AQCXJCEhQe3atbtonWnTpsnPz09PPvmkvaxixYry9vbW4cOH820zevRoDR8+3KWxlgUR//u+VPrZM+b2UukHkErv/3We4v7/HjBggPbs2aMFCxa4NiDYFWvmwmazacyYMYqIiFBgYKA6duyotLQ0V8cGACjjsrOztWXLFjVv3vyi9RYsWKBOnTrJy+v/vtM6ceKEcnJyVKlSpXzbDB48WOnp6faFcQbApdqwYYOuvfbaAl/PyckpxWguT8VKLvr06aMJEyZo6tSpiouL06lTp9SzZ09XxwYAKONSUlKUk5Pzj8lFcnKymjVr5lAWHx8vSYqOjs63jdVqVWBgoMMCAMWRk5OjChUqaN26dRo6dKgsFotatmypHj166OGHH9Yrr7yisLAwNW3aVKdPn5anp6d+/vlnh21Uq1ZNc+fOta+npaXp4YcfVqVKlVSpUiU99NBDOn78eGnvWplT5ORi+fLl+vTTT7V48WJ16NBBUVFRGjRokFauXKmsrKySiBEAUEYlJCSoYsWKF72Z+/Tp08rOzlZoaKhD+bx58xQdHa3w8PCSDhPAv5ynp6fWrl0rSUpKStKBAwe0bNkyJSUl6dtvv1Vubq5Wr16t+fPna9OmTTLGqEmTJvb2Bw4c0KFDh+xfhvz+++9q3ry5IiMjtX79eq1cuVI7d+7Uiy++6Jb9K0uKfM/F2LFj1blzZ8XExNjLQkJCZIzRkSNHnAaJ7OxsZWdn29e5IQ8ALh8JCQlq2rTpRZ+N7ufnJ39/fx07dsxetm/fPk2fPl2TJ08ujTAB/Mt5eHho//79qly5sj1ByMnJ0bZt2/TEE09o1KhR9rqrVq1S7dq1FRAQYC/buHGj/P39FRkZKUl68skn1bdvX4f7wgYNGkRyoSLOXJw8eVKxsbHq0qWLQ3nezXjBwcFObUaPHq2goCD7wjdUAFC+5eTkKCkpSUlJSfrll19UvXp1JSUladeuXZL+fkRt/fr1HW6YvP322zVp0iSlpKRo7dq1at++vdq1a6fu3bu7aS8A/Nts3LjR4TLMrVu36uzZs3r22Wcd6iUlJTldrpmUlKQmTZrIYrFo7969io2N1dtvv62KFSval27dujncV/ZvVaQjkJKSotzc3Hyvm70ww8szePBgDRw40L6ekZFBggEA5VhcXJyuv/56+3pKSoq+/vpr9erVS9OmTdPmzZu1fft2h3P9hAkT1Lt3b7Vp00ZBQUHq0aOHXn31VX7pF0CpuTBpSE5OVlhYmOrVq+dQLzk5WR07dnQo27Bhg71tcnKyQkJC9Ouvvzr14evrWwKRly9FSi7yblLJ77rZO++8M982VqtVVqu1mOEBAMqaNm3ayBhT4OutW7d2er1q1apauHBhSYcGAAVKSUlR586d7etJSUlq2rSpU73U1FQNGDDAvn706FGtWLFC77zzjiTJ29tbmZmZCgsLk7+/f4nHXd4U6SujvKTi/Otm58yZox07dqhfv36ujQwAAABwEZvNpk2bNmn//v1KT09XcnJyvslFlSpVFBcXJ0n6448/9PDDD+vUqVP2mYuWLVsqMDBQ3bt3V1JSkn7//XctXbpU/fv3L9X9KauKNHOR91SPESNG6NVXX9Wvv/6q3r17a9SoUapTp05JxQgAAIAyrDz8aOPIkSP10ksvady4cRo4cKCSk5PVt29fp3rvvvuu+vbtqxkzZqhx48Z64IEHtGLFCjVu3FjS3w8yWrx4sV566SW1bdtWxhjVqVOHe8j+vyIlFxUqVNDcuXPVt29fNW7cWJGRkZoyZYq6detWUvEBAAAAl6xbt24On1nHjh2bb73bbrtNe/fudSjr1auXw/q1116rH374wfVBXgaKfEt7ixYt7D98BAAAAAB5eEwHAAAAAJcguQAAAADgEiQXAAAAAFyC5AIAAACAS5BcAAAAAHAJkgsAAAAALkFyAQAAAMAlSC4AAAAAuATJBQAAAC6NxVK6Sznw1VdfKSwszL7ep08fPfTQQ5e0TVdso6QV+Re6AQAAAFxccnKyoqOj7eujR4+W1WotVNsTJ04oJCREiYmJiomJKdY23IXkAgAAALiAMUa5ubny8irex+Xk5GSHxCAkJKTQbTds2CAfHx81atTIobwo23AXLosCAADAZe/QoUOyWCwaP368mjZtKh8fHzVs2FBr166VJK1evVre3t76/vvv1bx5c1WoUEEbN26UJH333Xe65ppr5OPjo1q1amnKlCkO2/7zzz/VqVMn+fn5qV69evrxxx8dZi727Nkji8WivXv32tvs3r1b999/v0JCQuTv76+WLVtq27ZtGjZsmDp06KAzZ87I29tbFotFS5YsyXcba9asUdu2beXv768aNWpo9OjRDnFdf/31GjJkiJ577jldccUVqlSpkoYPH14ixzcPMxflxHvvvefuEApU0v9JL0d79uxxdwgFWr16tbtDAADA5fIShcmTJ+vDDz9UWFiYBg4cqIcffli7d+9WUlKSPD099dZbb2nChAkKCQlR7dq1NW7cOI0fP15jx45Vs2bNFBcXpx49eqhhw4a64YYbdPjwYbVs2VI333yzEhMTtX//fvXp00f79++3z1wkJSUpODhYNWvWlCQlJibqxhtvVI8ePbRy5Ur5+flp8eLFCgwM1MCBA7V161ZZrVa9/fbbkqQqVarou+++c9jGkiVL1LVrV73xxhv67LPPtHnzZj344IO66qqr1L17dxljlJKSoj179mjo0KFat26dlixZomeffVY9evSwb8fVSC4AAABw2UtOTpa3t7eWLl2qWrVqSZJGjBiha665Rn/++aeSk5NVuXJlLVq0SEFBQZL+nl145ZVXlJCQoKuvvlqSVKtWLc2cOVM//PCDbrjhBg0ePFi1a9fWjBkzJElRUVHq3Lmzxo8fr3r16tn7zpvFsNlsevTRR9W1a1dNmjTJHl9UVJT936mpqerVq5eqVavmEH/eNs6ePauePXtq2LBhGjBggD2uLl266LvvvlP37t21e/duZWRkaOzYserVq5ck6fHHH9ezzz6rI0eOkFwAAAAAxZWUlKR77rnHnlhIcrg5OikpSY8++qg9sZCkzz//XKdPn1bz5s0dtpWVlaXWrVsrKytLX375pb744guH1729vdWoUSN5enrat52XGKxdu1bbtm3TqlWr8o3z7Nmz2rp1q8PN4BduY9WqVTp69Kj69OnjUKdChQpKT0+X9Hcy4uPj4/B0qV27dkmSIiMjCzpMl4zkAgAAAJe9vOThfImJiapSpYqqVq2qrVu36s0333R4PTk5Wb169dKgQYOctnfFFVfot99+05kzZ9SsWTOn7Z5/M3dycrLuuusuSX9fnhUZGanQ0NB849yyZYtycnLUpEkTp1jytrFlyxbVqFFDgYGBDnW2bt2qdu3a2es3adJEfn5+9tc3btyomjVrqlKlSvn27QokFwAAALisnTlzRjt27FBubq69zGazafz48Xr00Ue1fft2nT17Vk2bNnVo5+3trVOnTqlOnTr5btfDw8O+/TxbtmzRkiVLNHHiRElSRkaG9uzZY5918Pb2VkZGRoGxpqSkqGbNmg4zKBduIyAgQFlZWQ7tfv31V/3yyy+aOnWqpL+Tiwv3Z+PGjQ5JT0ngaVEAAAC4rKWkpMhisWjmzJlav369tm3bpvvvv18nTpzQyy+/rOTkZF155ZVOswm33XabvvnmG02ePFm7du1ScnKyPv74Y3366aeSpLp16yo0NFRDhgxRamqqfvjhB3Xt2lU2m82eCCQnJ8vT01MNGzaUJLVr105//fWX/ve//2nHjh3atGmT3nnnHR09elTS30nP8ePHtXXrVh08eFC5ublO22jfvr2OHj2qt99+W3v27NHChQvVpUsXDR482F4nOTnZaUYlKSmJ5AIAAABlnDGluxRRUlKSoqKi9PLLL6tr16665ppr5OHhofXr1ys4ONjpNynyPProo3rzzTf13nvvqUGDBurQoYPmzZtn/wDv4+OjmTNnavPmzbrmmms0dOhQPfLII7JYLPbLmpKTkxUVFWW/vyMqKkpz5szR0qVL1aRJE/3nP//Rr7/+qsqVK0uS7rnnHrVs2VLNmzdX9erVdfLkSadt1K5dW998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375dL7zwgvr166etW7dKkn766Sc9/vjjGjhwoDZv3qzVq1fr7rvvVkhIiE6cOKH27durZcuWWrdunRITE/Xiiy+qWrVqLjrCgCMvdwcAAABQUhITExUVFSU/Pz+n17y9veXp6SkPj7+/a01OTlbbtm0lSTt37tTIkSO1aNEidezYUZL09ttva+rUqfbLlXJycrRt2zb7eqVKlbR9+3YNHTr0oh/e33vvPW3ZskVbt25VaGioJKl27dr21y+836JevXr2ezok6emnn9Ybb7yh3377TQ0aNNCKFSsUFRWlBx54QBaLRZLsCU9iYqLS09M1YMAABQUFSfr7pnWgpDBzAQAALlsJCQlq1qxZvq+lpqY6zCwkJyfbP5TPmDFDMTEx9sRC+vv+CovFYq+zdetWnT171r6+e/dunThxIt9ZkvNNmTJFQ4YMsScWF7owuVi/fr26du2qunXrKjAwUBUrVtSBAwd01VVXSZLat2+vlJQURUdH6/XXX9fvv/9ubxsdHa0rr7xSUVFR6t+/v37++eeLxgZcKpILAABw2dq4cWO+ycWZM2e0cOFCdenSRZK0b98+HT9+3P6hPjk52and9u3bZYyxJw/JycmqUaOG/ebtpKQkhYSEKDw8vMB40tPTtXv3brVq1Srf18+dO6ctW7bY4/jhhx908803KyoqSp999pk2bNigDz74wOGejBtvvFF79+7VgAED9NNPPykqKkpz586V9PfTrLZt26YpU6YoPT1d7dq103PPPVfIowcUHZdFAQCAy9KuXbt04sQJpyTBZrOpb9++8vLysv+WRFJSkgIDAxURESFJ8vT01MmTJx3ajR8/XuHh4QoJCbG3OX+WIiUlRY0bN75oTF5eXrJYLEpPT8/39W3btik7O9ueXMyYMUO33XabRo4caa/z8ssv6+qrr5avr6+9rEqVKnr88cf1+OOP6+abb9Yvv/xiT5x8fHzUqVMnderUSbVq1dJ333130RiBS0FyAQAALksJCQmSpLCwMB08eFAZGRlKSEjQhAkTtHfvXn377bf2WYe8S6Ly7llo06aNXn75ZS1atEiNGjXSZ599pq+//lrt27e3bz85OVlt2rSxr9tsNv3xxx/auXOn/P39873vwt/fX9dff71eeeUVBQcHKzQ0VMnJybJarbr99tuVlJSkq666SpUrV5YkhYSE6IcfflBiYqK8vb01YcIELVu2THfddZckacGCBUpNTVX79u0VEhKiVatWKT4+Xq+//rp27dqliRMn6p577lF4eLhSU1P1+eef64knniiZAw6I5AIAAFymEhMTJf19Q7Snp6eCgoIUFRWlO+64Q3379rXPQEiO91tIUt++fZWUlKRu3bopKChIvXv3VqtWrdSyZUuHNk899ZR9vWfPnlq6dKkaNGigihUr6q+//so3ri+++EIDBgzQ7bffruzsbDVo0EATJ060b/P8+y0GDRqkpKQktWnTRuHh4XrxxReVkJBgr2Oz2TRnzhyNHDlSxhg1atRIX3/9ta6//npt3bpVW7Zs0YwZM3Ty5ElFRETo6aef5rIolCiLMca4OwgAAICybPv27WrSpIk2bdqU7+NlAfyNmQsAAIALfPDBB2ratKmqVq2qhIQEDRo0SL179yaxAP4BMxcAAAAXePTRR/X999/r9OnTqlu3rp588kn16dPH/psYAPJHcgEAAADAJUi/AQAAALgEyQUAAAAAlyC5AAAAAOASJBcAAAAAXILkAgAAAIBLkFwAAAAAcAmSCwAAAAAuQXIBAAAAwCX+Hyv4DuKhkf+eAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 49, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random init: train loss: 1.00000, train acc: 0.138, test acc: 0.111\n", + "Epoch #1, train loss: 1.00000, train acc: 0.181, test acc: 0.156\n", + "Epoch #2, train loss: 1.00000, train acc: 0.453, test acc: 0.419\n", + "Epoch #3, train loss: 1.00000, train acc: 0.680, test acc: 0.656\n", + "Epoch #4, train loss: 1.00000, train acc: 0.737, test acc: 0.700\n", + "Epoch #5, train loss: 1.00000, train acc: 0.766, test acc: 0.719\n", + "Epoch #6, train loss: 1.00000, train acc: 0.816, test acc: 0.759\n", + "Epoch #7, train loss: 1.00000, train acc: 0.842, test acc: 0.789\n", + "Epoch #8, train loss: 1.00000, train acc: 0.869, test acc: 0.822\n", + "Epoch #9, train loss: 1.00000, train acc: 0.879, test acc: 0.863\n", + "Epoch #10, train loss: 1.00000, train acc: 0.892, test acc: 0.870\n", + "Epoch #11, train loss: 1.00000, train acc: 0.898, test acc: 0.881\n", + "Epoch #12, train loss: 1.00000, train acc: 0.893, test acc: 0.874\n", + "Epoch #13, train loss: 1.00000, train acc: 0.902, test acc: 0.878\n", + "Epoch #14, train loss: 1.00000, train acc: 0.908, test acc: 0.889\n", + "Epoch #15, train loss: 1.00000, train acc: 0.914, test acc: 0.900\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": 50, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGxCAYAAABBZ+3pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAsNElEQVR4nO3deXhU9b3H8c+EhAlZJiQQxMikBMGCGLMpKNhSUeAiyl6pCgoXEG2pFbwKqEXlyqpYWYrWuFwEbWkxxAXEBaQIEmMmCSayBEQEZQkI2UAmITn3Dx+mjlkgITA/xvfrefLHnJwz8/0FTd7POWcSm2VZlgAAAAwW4OsBAAAATodgAQAAxiNYAACA8QgWAABgPIIFAAAYj2ABAADGI1gAAIDxCBYAAGA8ggUAABiPYAH80O7du2Wz2c7oY/v27Wf9evv27ZPNZlNqamqDjr/ssst0xx13nPUcDTFo0CAlJCT45LUBnLlAXw8AoPFFRUVp06ZNnsdlZWXq1auXBg4cqEmTJnnte9lll53164WGhmrTpk264oor6n2sZVl69dVXFRsbe9ZzNERWVpb69Onjk9cGcOYIFsAPORwOXXPNNZ7HGzdulCTdcMMNXttrU15erqZNm57x60VERJzR89bEZrM1+NizdfDgQX3zzTe6+uqrffL6AM4cl4SAn4Hs7GxJUnJycrXPXXbZZRoxYoQWL16sxMRENW3aVHPmzJEkvf766+rTp48uvvhi2e12xcbG6r777tPx48e9nqN379769a9/7Xm8Z88e2Ww2vfjii3rqqafUsWNHNWvWTImJifrkk0+8jp0xY4aaNm0qt9vt2dauXTuNGjVKaWlp6tatm0JCQhQbG1vjJacdO3bo1ltvVfPmzRUREaH//u//VnZ2tmw2m/71r3/V+XX57LPPJElXXXWV1/Zly5bpuuuuk8Ph0EUXXaTbbrtN3377rdc+R44c0cMPP6yOHTsqJCREkZGR6tKli9LT0z37ZGZmatCgQWrTpo3sdrtiYmLUv39/HT58uM65AFTHGRbgZyAnJ0cBAQHV7tUoLS3Vzp07dezYMW3fvl2TJk1Sq1atPJdncnJyNGDAAN1///0KCQnR5s2bNXXqVNlsNs2bN8/r+YcPH+55fCqQZs+erd/85jeaO3euvv/+e02cOFF33HGHvvrqK699O3fuLLvdLkkqKirSV199pYCAAO3evVv333+/IiMjNWPGDN1zzz264YYb1K5dO0nS1q1b1a1bN8XFxWnhwoWKjo7WggULdOutt0rSac+cZGVlyW63Kz4+3rPtj3/8o1544QVNnDhR06ZN08GDB/Xoo4+qd+/ecrlcCg4OVkVFhXr06CGbzabJkycrLi5OR48e1SeffKImTZpIkj7++GP17NlTw4cP1/PPP6+wsDDt2bNHK1euVERERP3+AQFIFgC/l5iYaHXs2LHa9nXr1lmSrO7du1sVFRV1PsfJkyetiooKa8SIEVZCQoJn++7duy1J1pIlSzzb/vznP1uSrKefftrrOZ588klLknX8+HHPtrZt21qjR4/2PF6zZo0lybrlllusqqoqz/YNGzZYkqxVq1ZZlmVZlZWVVnx8vNWxY0fL7XZ79isrK7PCwsKsFi1anOarYln9+vWzunTp4nn88ssvW5KsFStWeO23cuVKS5K1cuVKy7Is66OPPrIkWRkZGbU+91133VXj1xxAw3BJCPBz5eXl+uKLL2q8HORyuSRJ8+bNU2Cg9wnXY8eO6ZlnnlFKSoqioqIUGBiooKAgLVmyRKGhodWe48fPn52drdatW+v+++/3es7vvvtOzZs3V7NmzST9cFll9+7d1Y6VpFmzZslms3kdK0kxMTGSpLffflt5eXmaP3++1/02oaGhiomJOaP7UrKysrwuB82aNUs9evTQwIEDvfbr0KGDpB8udUlSixYtZLPZNGHCBL355ps6duxYtedu2bKltm/frokTJyo7O1uWZZ12HgC1I1gAP5efn6+KiooagyU7O1uxsbFKSUnx2n78+HF169ZNc+bM0cCBA7V06VJlZGRow4YNCgwM9Ho3UHZ2tkJDQ9WxY0evbX379vVcHvnx9qSkJK/HkrxePzs7W3Fxcbr88surHdu0aVPP9nfffVeRkZG68cYbq63rm2++qXZfyk/t3btXBw8e9ITNnj17VFBQoAEDBlTb91SotGnTRpIUHx+v5cuXKyAgQEOHDlXLli01ZMgQr7eIP/HEE5o0aZLS0tKUkpKi2NhYTZ06VeXl5XXOBaBmBAvg53JyciTVfMOty+VS165dq21fsmSJPv/8c7399tv685//rJtuukldu3bV4cOHdfLkSa8YcLlcSkxMVEDAD99ODhw4oP3791cLBsuylJOT4xUnLpdLgYGBuvLKK7221RQbWVlZuvLKKxUUFCTphyhp3bq111kYSdqwYYOOHz9+RvevSP+5z6WwsFCSdPHFF1fbd/Xq1QoODtavfvUrz7bBgwdrw4YN+u677/Tcc89pzZo1uvPOOz2fDw0N1cyZM7V7924VFBTopptu0v/+7//qpZdeqnMuADUjWAA/d+osxo/PbEg/XPIpKCioMQ6+/vprSfI6y1FWVub5HS4/PiY7O9srhk5dIvrp8xYUFKikpKRasHTq1MlziaisrEw7d+6scSaXy+V1bKtWrbRnzx6VlZV5tp08eVKTJ0+u8fV/6rPPPlNoaKg6deokSWrbtq0kVftFetu3b9fChQs1duzYGm+WdTgcGjlypFJSUnTy5MkaX6tDhw569NFHPTMCqD/eJQT4uZycHMXFxal58+bVtldVVdX4g/3aa6+VJI0dO1ZjxozR119/rTlz5qi8vFx2u91zSeibb75RYWFhtUs6QUFB1d6RdOqMxk9j58dnLWqb6dtvv9WBAwe8tg8dOlSvvPKKhg0bpvvuu0/ff/+9/vKXv2j79u265JJLPPe61CYrK0vJycmeM0MtW7bU4MGD9cwzz6hly5a64oorlJubq+nTp6tr166aPXu2JGnp0qVavHixBg8erA4dOqiiokLLly/XRx99pNdff12SNGTIEEVHR6tHjx6KiYnRnj179PTTT6tNmza67bbb6pwLQC18fdcvgHOnsrLSCg0NtYYMGVLtc88++6xls9msoqKiGo+dMWOGdfHFF1shISHWddddZ61evdrq3bu317tq0tPTLUnW559/7tk2cOBAKykpqdrzTZgwwYqIiPC886eoqMiy2WzW/PnzTzvTm2++aUmysrOzvbbPnz/fiouLs4KDg63k5GRryZIl1rXXXmvdeeedp/3aREVFWRMmTPDaVlxcbI0fP95yOp1WcHCwdfnll1uzZs2yysvLPfu8//771s0332y1adPGstvtVuvWra2bbrrJ+ve//+3ZZ+rUqVbXrl2tFi1aWMHBwVaHDh2sCRMmWAcOHDjtXABqZrMsbl0H4B/S09M1ePBgbdy40XOWCIB/4JIQgAvSo48+qri4OLVr106lpaV6//33lZqaqgcffJBYAfwQwQLggrRv3z698sorOnTokOx2u5KSkrR48WL97ne/8/VoAM4BLgkBAADj8bZmAABgPIIFAAAYj2AB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Hj58WBs2bPDLy35bt27VRRdd5HXptrS0VEVFRQoM9K9vey6XS0lJSV6XuaKjo3Xs2DGVl5eradOmkqQFCxbIsiyNHDnSR5M2jprWK0lr167V0KFDddttt2nevHl+8+9c03oXLVokt9vtefz222/rsccek8vl0kUXXeSLMc8P397zay632205nU7rzjvvtHbu3Gm99tprVmhoqDVnzhxfj9bo3nzzTSs0NNQaPXq0tW/fPmv//v3W/v37rUOHDvl6tPPihRdesEJDQ62qqipfj3JO9e3b10pJSbE2b95sbdy40eratat19dVXW+Xl5b4erdH9+9//tmw2m/Xkk09aX375pfXJJ59Y119/vdWqVStr//79vh7vrJWXl1s5OTlWTk6OFR8fbw0bNszKycmxvvzyS8uyLKuwsNAKDQ21Jk+ebO3atcuaN2+eFRQUZC1btszHkzfM6db7t7/9zQoKCrKmTp3q+f61f/9+68iRIz6evGFOt96fevjhh63LL7/8PE95/hEsdcjMzLRSUlKsZs2aWVdccYW1ZMkSX490TnTs2NGSVO3jxhtv9PVo58X9999vpaSk+HqMc27//v3W0KFDrcjISCsmJsb6/e9/bxUVFfl6rHPm1VdftTp37mwFBwdbTqfTGjlypLV7925fj9UoNmzYUOP/s2PGjPHss2rVKqtTp05Ws2bNrC5duljvvvuuDyc+O3Wtt7Ky0goNDT3t1+NCcib/vj82cOBAa8iQIed5yvPPZlk/OkcMAABgIG66BQAAxiNYAACA8QgWAABgPIIFAAAYj2ABAADGI1gAAIDxCBYAAGA8ggUAABiPYAEAAMYjWAAAgPEIFgAAYLz/B4WrLvTHCwP6AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(losses)\n", + "plt.title(\"Training loss\");" + ] + }, + { + "cell_type": "code", + "execution_count": 51, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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Qe9Q//oViYddB16+FlYmIiKuqFU9N+PHjycpKckxqTg+Ph53d3eys7M5evSos2uUTsxWY2fhhkMATB8TA+UFsPU/5sER2m5BREScr1XhZsSIEaSnp7NgwQKOHj2Kj48P/fv35/Dhw4wbN87ZNUontnprDnkllXQP9OFn8ZGQ+g5UV0BEPPQcaXV5IiLigloVbubOnet4npubS1paGjt27KB79+5awE8a+aB2k8zrRvXGy8O9wSaZWttGRETaRqvCzaJFiwgNDeXyyy8nIiKCcePGqcdGmjhcUM43O3IBc7sFcrfDofXg5gGJN1pcnYiIuKpWTSj+4x//SF5eXpP2H3/8kb179551UeIaPlp/EMOAc+PC6Nc9ANLeMw8MvBKCIq0tTkREXFarws3evXsZPXp0k/bdu3dz++23n3VR0vnV2A0+TjHvkpo+JhZqqiH9A/Og1rYREZE21KpwExERweHDh5u0jx07ltTU1LMuSjq/NTtzySqsIMTPi/FDo2DPV1ByFPzCYNBVVpcnIiIurFXhZvr06fz5z3/GZrM1ai8tLcXd3alL50gn9UHtJpnTRvTC18sDUheYBxJvAE9vCysTERFX16ok8vTTT5OVlUVSUhJLly4lOzubHTt28MQTTzBmzBhn1yidTE5xBau35gC1Q1Jl+bB9uXkwWWvbiIhI22rV3VIBAQH88MMPPP7449x0002Ul5cD0K9fP/7zn/84tUDpfBZuOES13WBEbDcGRwXBujehpgqihkN0otXliYiIi2v1GFJISAivvfYax44dIzU1lczMTLZv3058fLwz65NOxjAMPqzdbmH66FizsW5ISr02IiLSDloVbu644w7+9re/AeDj40NiYiLx8fF4eHg4szbphH7Yc4z9x8oI9PFkUmI0ZG+GI2ng7gXDb7C6PBER6QJaFW4+++wzzj333Cbtr7/+Om+//fZZFyWd1wfrzF6byUk9CfDxrF/bZvBVEBBuYWUiItJVtCrcFBUVERER0aR98ODB/OUvfznroqRzOl5axcpMc+PU6WNioMYGm2p3ideQlIiItJNWhZuhQ4fy/fffN2nv168fBw4cOOuipHP6JPUwVTV2EqKDGd4rBHZ+AaW5ENADBlxhdXkiItJFtCrcPPHEEzzyyCN88803jdo3bdpE9+7dnVKYdC6GYTg2yZw+JgY3N7f6TTITbwAP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7rmn0WaEYWFh5OTktHd5Ttfc9Z6oqqqKH3/80WV+f53smt99911KSkqYOnUqaWlpDB06lMDAQAsqbB8KN2eppKSE1atXc+211zZqr/vF0NabdHYEjz76KBs3buSvf/2r1aW0iZSUFP7yl7/wt7/9DTDnoYwePdrpu8p3JIsWLWLDhg3Y7XYWL17M008/zd///nfH34EriY2N5c9//jMzZ87Ex8eHqKgo+vXrx8qVKzvM6ufOUFlZyebNmxt98W3dupXt27c3+/urbs+/zqq56z1RdXU1M2bMoLS0lFmzZrVjdW3jZNe8bNkyPvvsM5588knA/B3m0kNSKNyctYyMDGpqahg5cmSj9pSUFOLi4ggKCrKosrZXWVnJbbfdxrvvvsvq1asb9Vy5ih07dnDnnXfyzjvvOJYwT01NdelfDJWVlWzZsoXrrruOefPmcc455/CrX/2KK6+80qUm2QIYhsENN9zAkiVLWLlyJevXr+f+++/no48+cpn5NnUyMjKw2WyNvvjS0tJwc3NjxIgRjc5NSUnp9D0ZzV1vQwUFBUyaNIkNGzbw7bff0rt373au0Pmau+bvv/+eWbNm8Y9//AM3NzdqamrIzMx06d9hoHBz1uruKDhxkuXixYuZPHmyFSW1i+zsbC677DIyMjJYt24dY8aMsbqkNvHCCy+wadMmYmJi8PT0xNPTk927dzNnzhx+9rOfWV1em8jPz8dut3Pdddc1and3d8ff39+iqtrGJ598wvLly1mxYgVXXnklycnJvPzyywAsWLDA4uqca8OGDQQGBjaaaHr8+HGCgoIa7T1UWVnJ8uXLO/3vr+aut87OnTs599xzsdvt/PTTTwwYMMCCCp2vuWv+85//TEpKCt26dcPT0xMfHx8qKiq45557XPomEE+rC+js6kJNfn6+oxt34cKF7Ny5k6VLl1pZWptJT09nypQpnHPOOfzrX/8iICDA6pLazJNPPslDDz3keL1hwwZmzJjBF198waBBgyysrO2Ehobi7u6O0WDbuby8PL777juXG3rcunUrkZGRjYaPi4uLKSgowNPTtX49btiwgREjRjQaaouIiKC0tJSqqiq8vb0BePnllzEMgxkzZlhUqXM0d70AX375Jddddx3Tp0/n73//u0v9Ozd3za+99hqVlZWO1//5z394+umn2bBhA5GRkVaU2T6snc/c+VVWVhoxMTHGbbfdZuzatcv497//bQQEBBjPP/+81aW1iU8//dQICAgw7rjjDiMrK8s4cuSIceTIESM3N9fq0trFG2+8YQQEBBh2u93qUtrUhAkTjFGjRhnp6enG999/b4wdO9YYPXq0UVVVZXVpTvXNN98Ybm5uxrPPPmvs3r3bWLt2rXHZZZcZPXr0MI4cOWJ1eWetqqrKSE1NNVJTU43hw4cbN954o5Gammrs3r3bMAzDyMnJMQICAow//OEPxp49e4y///3vhpeXl/Hhhx9aXHnrnO56X3/9dcPLy8t46qmnHL+7jhw5YuTn51tceeud7ppP9MQTTxgJCQntXGX7U7hxgnXr1hmjRo0y/Pz8jGHDhhnvvvuu1SW1mSFDhhhAk8cVV1xhdWnt4je/+Y0xatQoq8toc0eOHDGuu+46IzQ01OjZs6fx61//2igoKLC6rDbxr3/9yxg6dKjh6+trxMTEGDNmzDD27dtndVlO8d133zX7v9c777zTcc7y5cuN+Ph4w8/PzxgzZoyxYsUKCys+O6e63pqaGiMgIOC0fx+dTUv+jRu6+uqrjWuvvbadq2x/bobRoO9ZREREpJPThGIRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS1G4EREREZeicCMiIiIuReFGREREXIrCjYiIiLgUhRsRERFxKQo3IiIi4lIUbkRERMSlKNyIiIiIS/n/PFnPXrlWMBgAAAAASUVORK5CYII=", + "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": 52, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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li1bKiEhQfHx8WrUqJF8fHwK3e7S39/2d+3aVVdffbV9vO3evbtsNpteeOEF+2lUvXr1sm/3hIQEp/co3/bt29WtWzdVq1ZN/v7+atGihRYuXOjQZ+/evbJYLPr444/1zjvvKCoqSr6+voqJidGaNWsuuN2LKikpScHBwapdu3aBrzdr1kzGGK1atcolyysV7k43KJonnnjCeHh4mBMnTji0Z2ZmGovFYqpXr25atGhhZsyYYZYvX27S0tLM559/biSZ7du3O0yzatUqI8ksW7bM3paUlGQqVapkmjRpYr744guzbNky07t3byPJzJs374K15dfw/vvv29vGjx9vJJm6deuaQYMGmWXLlpkRI0YYSeaRRx4xUVFR5s033zTLly83/fv3L/DbhhdffNF88MEHZuHChWblypVm7NixJigoyDz33HMO/Xr37m28vb3Nyy+/bJYsWWI++OADExoaaq6++mrz+OOP2/sdO3bMxMTEmNDQUPPee++Z5cuXm7ffftv4+PiY/v37X/Q9aNOmjbn11lsvqcbIyEhz9dVXmxYtWpivv/7aLF682Nx1111Gkpk7d26xa8zJyTEVKlQww4YNs7dlZGQYi8ViHnjggYuuy7keeughY7VazZkzZ4o1HfBP9J///Md4enqaPXv2FNpn5syZRpIZN26cMcaYM2fOGKvVaoYMGeLUt3bt2ubRRx81xhhz6tQp88svvxhvb2/Ts2dPs3btWrN27Vqzc+dOY8zff6ve3t7mqquuMqNHjzYrVqwwQ4cONR4eHvZ5GGPMypUrnfbxxhizd+9eI8lMmTLFGGPMgQMHzKRJk4wkM3HiRPvyjhw5Uui6FbWGC41NmZmZplWrVqZatWpm/Pjx5scffzTvvfee8fPzM0888YTD8oq67zTGmJ49e5opU6aYJUuWmBUrVpg33njDVKhQwbz33nv2Prm5ucbHx8eEh4ebf//732bevHnm+++/N61atTIeHh4mMTHR3jd/HDt27Ji97fxxIDU11WGc3LNnj3n99dft9eVv06ysrALHyj179pgaNWqYiIgIM2nSJLN8+XIzZMgQ4+Hh4dBvxowZxtPT0zz//PNm0aJFJi4uzkyePNlpe50vNzfX1KpVy9x0001Or7Vq1cr4+fmZ8PBw89FHH5nly5ebZ5991khy+L+av47Vq1c3t99+u5k1a5ZZvHix2bdvX5HHrLy8PHPfffeZ4OBg884775gVK1aYUaNGmWuuucYEBwebp5566oLb/ZtvvjHe3t7m1ltvNVOnTjVxcXHmgw8+MPfee68xxpi0tDTTq1cv4+XlZVavXm3f7mfOnHF6j4z5+2/Ez8/PtGvXzsyZM8csWbLEPPTQQ8bDw8P8+OOP9n5z5841kkydOnVMz549zffff29mzpxpwsPDTUREhMP2nD9/vv1vqTiqVatm2rZtW+jr2dnZRpLDeF/WES7KiZiYGBMVFeXUnj+ItG7d2uTm5jq81rdvXxMUFGRsNptD+5gxY4wk89dffxljjDl58qSpUaOGue6668ypU6cc+t54442mXbt2F6wtv4aff/7Z3ta9e3cjycyZM8ehb506dYyXl5dDX5vNZnx9fZ0+kJ/r7NmzJjc313Tr1s1ER0fb2/MH8alTpzr0Hzp0qNNpZJ07dzbBwcHmt99+c+g7ePBgY7VazdmzZwtdvs1mMwEBAWbgwIHFrvHo0aNGkmnYsKHD9j158qQJCQkxDz74YLFrXL9+vZFkFi5caO/z008/GU9PT/Puu+8WWmNB6tWrZ6677rpiTQP8Ex09etR4enqaDh06XLDfZ599ZiSZzz//3BhjTEJCQoH7w2PHjhlJZvTo0fa2zZs3F9jXmL/3n56eniYpKcmhvXPnziYgIMD+/N1333XYx+fL/6B07gfoDz74oMC+hSlqDRcamx577DFTqVIle2jK99JLLxmLxWKysrKMMcXbd54vf3988803m44dO9rbN2zYYCSZdu3amby8PHv7vn37jMViMS+//LK9rXv37iYyMtL+vKBxIP9LvHNPWXnppZcKHHvPHyttNptp0aKFqVmzpjl06JBD30ceecTUqVPH/rxNmzbmP//5T6HrW5hvv/22wCCWm5trfH19TVBQkNPpNs2bNzeNGjVyWseHHnrIaf5FHbPeffddY7FYzJo1axz69erVy+nLxfO3+8aNG423t7fp27fvBdf1/vvvN02aNHFqP/89Onz4sKlcubLp1KmTw3uUm5trqlevbu6//357W/4pkOePq/lflp77/3L48OHG09PTrF+//oJ1nmvfvn1GknnxxRcL7XPq1CkjyQwaNKjI83U3TosqB86cOaPNmzcXeNpKYmKiJGns2LHy8vJyeC0hIUFNmzZ1ukgvMTFRNWvWVEhIiCTp448/1t69e/X222/L29tbZ8+etT8aN26snTt3XrC+xMREeXh4KCYmxqGtVatW6tSpk0PfzMxM3X333brpppsc1u/MmTP2eiTp5MmTeu+999S8eXOFhITIy8tL3t7emjZtmvz9/e393nzzTbVu3drpMHP+Iev8C8Q2btyo2bNnq1+/fqpdu7bDOjZq1Eg5OTnat29foeu4bds2ZWVlOZyGVNQa8y8efOONN+Tr62tv9/PzU926dXXw4MFi17h+/XpJcqjnlltu0dmzZ/XCCy8Uuh7ny8rK0vbt2zklCiiClJQU5eXlqXHjxhfsl39Baf7fVf4+4Py/s/z997nt+W3Nmzd36Hv8+HHt2LFDjz/+uJo2berwWv369ZWVlWU/pSghIUEREREO+9T8eVeoUEGNGjVyaKtVq5ZT34IUp4bCxqY//vhD06dP13PPPadatWo5zKNu3boyxuiPP/6wr4d08X2nJP31118aOnSoGjdurMDAQPv++Oeff3bYH+fvO9966y15ePzfR6CwsDBdddVVDvNMTEx0eG8KGgcSExMVGhqqa665xmm6gsbec8fK7777TuvXr9fQoUNVqVIlp7F3165d9mmrVKmiH3/8UcOHD9e2bdtUVN98842CgoLsp9bl27Rpk06fPq0XXnjBoXbp7/fyyJEjDnV7enrq/fffd+hX1DHr7Nmzio2NVZcuXXTDDTc4zCP/lMDzt+m52/31119X1apV9c4771xwXRMTE53+bvLbz32PJk+erOPHj+udd95xeI+8vLwUERGhvXv32tuSkpJUrVo19e/f32Gef/31l4KDgx3+X7766qs6e/ZssU5XLmgfcL78v4fQ0NAiz9fdCBflwKZNm5Sbm1vgf76kpCTVqFHD6Q/q7NmzSk5OLvQP7dz2/HMM27ZtK29vb4fHRx99pODg4AvWl5SUpHr16qlixYqSpOzsbG3dutXp/OI//vhDhw4dUocOHRzaU1NTlZeXZx+sTp06pRtvvFFvv/227r33Xk2fPl2//vqrVq9eLS8vL/vAeODAASUnJ+v+++93qik9PV1eXl6Kjo52WMdhw4Y5reMjjzwiSRdcz/PvzFTUGvOn9ff31z333OM03wMHDig8PLzYNSYkJKhmzZqXvbPZsGEDd4oCiigzM1PShQf5rKwsffXVV6pfv749hKxfv16VK1dWzZo1HfomJibK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W7FihfHx8TGRkZFm8uTJZsWKFWbGjBnmnnvuMRaLxfTp08fhQmFjjGnbtq0JDw83GzduNAcPHjRffvmlqV+/vpFkRo0a5dA3/+YacXFxZu3atebo0aP29ho1apjatWubr7/+2ixbtsz06tXLeHh4mEmTJtmnP3XqlPH39ze33367+eOPP8zu3bvNG2+8YapVq2YkmV9//dXed+fOnUaSefzxx+132LnQjS2KWsOFxqYTJ06YGjVqmGuvvdZ8++23Ji4uzrz44ovG29vbvPTSS/Z+xdl3jhs3zkgy/fr1M3FxcWbChAkmIiLCXH311aZ27dr2fuvWrbPP88EHHzTLli0zX331lYmOjjbh4eHmzz//tPft0aOHw92AChoHpk2bZiSZ3bt329tWrFhhJJmXX37Z/PLLL/aLewsaK1esWGE8PDzMv/71L/PNN9+Yn376ycyZM8fExsaanj172vvdeOON5oUXXjDffvutWblypfnoo49MRESEiY6ONtnZ2YW+X2fPnjVeXl4ONRvzf3cbrFGjhmnWrJmZP3++WbhwoencubPx9vY233//vdM6FvQbDEUds06dOmXCw8NNaGio+fTTT01cXJx5/vnnTUBAgNMNWc7f7sb8fUdIi8ViXnzxRbN06VLz/fffm2HDhpm3337b3ufTTz81ksyYMWPMmjVrzMaNGwt9j7777jsjyXTv3t0sW7bMzJ4927Rp08YEBASYtWvX2vsNHz7ceHt7O23j6dOnO92Js2/fvsbT09PpJgUFWbp0qZk5c6Z9Prfddpt9DM7IyHDo279/f2O1Wi94d7qyiHBRxuXl5Rl/f3/TuXNnp9fef/99Y7FYCv2hpkmTJplrrrnGWK1WEx0dbT744APTq1evAn+cadasWebGG280lSpVMr6+vqZWrVqmS5cuDjvCguTXcO4fRExMTIEf2ENDQ81///tfh7YzZ86YChUqmNdee82hfeTIkSYsLMz4+fmZm266ySxevNi0b9/eKZzs2rXL/Oc//zEVK1Y0oaGhpnv37vadzPl/5ElJSaZjx44mLCzMVKhQwVSvXt20a9fOfPzxxxdcx5SUFCPJzJ8/v9g1/vDDD/YB/amnnjKBgYEmMDDQdOnSxaSlpTktqyg1jh071ul9f+mll4wkk5KScsF1McaYDh06GEkFPr777ruLTg/806WkpJj777/fhIaG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uyRqBACUUYmJiapYseIFL+Y+deqUcnJyFBoa6tA+Z84cRUdHKzw8vKTLBPAP5+npqdWrV0uSkpOTtX//fi1ZskTJycn67rvvlJeXp5UrV2ru3LnauHGjjDFq0qSJffr9+/fr4MGD9i9Dfv/9dzVv3lyRkZFau3atli9frh07duill15yy/qVJcW+5mL06NHq1KmTYmJi7G0hISEyxujw4cNOg0ROTo5ycnLsz7kgDwCuHImJiWratOkF743u5+cnf39/HT161N62d+9eTZ06VRMnTiyNMgH8w3l4eGjfvn2qXLmyPSDk5uZq69ateuqppzRy5Eh73xUrVqh27doKCAiwt23YsEH+/v6KjIyUJD399NPq06ePw3VhAwcOJFyomEcuTpw4obi4OHXu3NmhPf9ivODgYKdpYmNjFRQUZH/wDRUAlG+5ublKTk5WcnKyfv31V1WvXl3JycnauXOnpL9vUVu/fn2HCybvvPNOTZgwQampqVq9erXatWuntm3bqlu3bm5aCwD/NBs2bHA4DXPLli06c+aMnnvuOYd+ycnJTqdrJicnq0mTJrJYLNqzZ4/i4uL0zjvvqGLFivZH165dHa4r+6cq1hZITU1VXl5egefNnp/w8g0aNEgDBgywP8/MzCRgAEA5Fh8fr5tuusn+PDU1Vd9884169uypKVOmaNOmTdq2bZvDvn7cuHHq1auXWrduraCgIHXv3l2vvfYav/QLoNScHxpSUlIUFhamevXqOfRLSUlRhw4dHNrWr19vnzYlJUUhISFat26d0zJ8fX1LoPLypVjhIv8ilYLOm7377rsLnMZqtcpqtV5ieQCAsqZ169YyxhT6+g033OD0etWqVTV//vySLg0ACpWamqpOnTrZnycnJ6tp06ZO/dLS0tS/f3/78yNHjmjZsmV69913JUne3t7KyspSWFiY/P39S7zu8qZYXxnlh4pzz5udNWuWtm/frr59+7q2MgAAAMBFbDabNm7cqH379ikjI0MpKSkFhosqVaooPj5ekvTHH3/o0Ucf1cmTJ+1HLlq2bKnAwEB169ZNycnJ+v3337V48WL169evVNenrCrWkYv8u3oMHz5cr732mtatW6devXpp5MiRqlOnTknVCAAAgDKsPPxo44gRI/Tyyy9rzJgxGjBggFJSUtSnTx+nfu+995769OmjadOmqXHjxnrooYe0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TNq5c6dSUlI0cOBA/frrr1qwYIHWr1/P9iqGTz75RAEBATp79qxatmzp7nLKtEWLFun222/XLbfcopUrV2rjxo363//+5/TrzEB54O6xJisrS4888oi6deumwMBA1a1bt9SWXVbGjsjISE2dOlVbtmzRkiVLdPDgQT322GOlWkM+d44F8fHx6tmzp/bv329/7N27V56enqVWgzv373fccYfDuu/fv1/9+/dXcHCwBg8eXOLLl6SMjAzdeOONOnLkiBYsWKDk5GTVr19fd955p44fP14qNWzZskU33nijatasqZ9++knz5s3TkiVL9Nprr5XK8ovElENLliwxnp6eZsOGDfa27777zlgsFnP69Gn3FVaODBkyxISEhLi7jHJh5syZZsKECeb77783ksyWLVvcXVKZdfjwYRMSEmJWrFjh7lKAy1aWxpoePXqYNm3alOoyC1IWxo7BgwebunXrlvpy3T0WVKtWzXz55ZelusxzlbX9+44dO4yvr6+ZOHFiqS3zhx9+MJLMoUOH7G0bNmwwksymTZtKpYb777/fdOjQwaEtNjbW1K5du1SWXxTl8sjF6NGj1alTJ8XExNjbQkJCZIzR4cOH3VdYOfLzzz8rOjra3WWUeXFxcYqLi9Mzzzyj5ORkBQUFKSoqyt1llVkTJkxQ3bp1NX/+fNWoUUMRERF64YUXlJub6+7SgGIrS2NNYmKimjdvXqrLLIg7x468vDz99NNP+vzzz/XKK6+U6rLdPRbs3btXBw4c0Msvv6wqVarohhtu0OLFi0tt+VLZ27/37dtXjRs3Vu/evUttmQ0bNpSPj4/mzJkjm82mgwcPaujQobr55ptVv379UqkhISHB6ahZWlqa/vrrr1JZfpG4O90UV1ZWlvH09DRfffWVQ/vcuXONJJOZmemmysqPl156yVSsWNHh2zg4W79+vbnttttMdna2McaYLl26mHbt2rm5qrKtUaNGxsvLyzz77LNm/fr15tNPPzWenp7m7bffdndpQLGUpbEmOzvbeHt7u/Vba2PcN3asX7/e+Pv7G09PTxMUFGR++OGHUl++u8eCTZs2mY8//tgkJiaaNWvWmLvvvttUqFDBbN26tdRqKEv795kzZxpPT0+TlJRUqsu12Wxm1KhRxmKxGC8vLyPJ9O/f35w8ebLUarjllltM06ZNzcGDB83p06fNpEmTjIeH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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "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": 67, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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N1fx8fEe2z8zeQAAAHVgGIYuXrxY5+1zc3PVo0cP9xX0I4Q8AAAAScePH5efn5/mz5+vhIQENW7cWN26dVNGRoYk6YsvvlBgYKDWrVunXr16KSgoSDk5OZKkv//97+rdu7caN26sdu3aadGiRU77/u677zRs2DCFhIQoNjZWX375pcdn8jhdCwAAIDkC28KFC/X6668rKipK06ZN0+jRo/Wvf/1LVqtVAQEBeumll5SWlqbIyEi1b99eL7/8subPn6958+apZ8+eyszMVFJSkrp166Y77rhDJ06cUN++fXX33Xdr+/btKiws1MSJE1VYWOjRmbw6hbw33nhD77//vnJycvT9999r7969io2NdXdtAAAAXpObm6vAwEBt2LBB7dq1kyTNmjVLvXv31nfffafc3Fw1b95ca9euVXh4uCTpX//6l5577jllZ2erc+fOkqR27dpp2bJl+sc//qE77rhDycnJat++vd59911JUpcuXTR8+HDNnz/fo/mpTiGvrKxMjzzyiLp37663335bnTp1cnddAAAAXmW1WvXAAw84Ap4kWSwWp+8fffRRR8CTpL/85S86e/asevXq5bSviooKJSYmqqKiQitWrNBf//pXp+8DAwPVvXt3BQQEeOho6hjypk2bJkmaMGGCEhIS5OftO2YAAADc7FKI+6Ht27erRYsWatWqlXbt2qW5c+c6fZ+bm6sJEyZo+vTpVfZ33XXXae/evTp37px69uxZZb+ePFUr1fOavOzsbPXr189dtQAAAPjEuXPntH//flVWVjra7Ha75s+fr0cffVR79uzR+fPnlZCQ4LRdYGCgysvL1bFjx2r36+/v79j/JTt37tTHH3+sV1991QNH8oO+67qhzWbTzp07q0xPVrdeaWmp0wIAAHA1ycvLk5+fn5YtW6atW7dq9+7deuihh3T69Gn9/ve/V25urq6//nq1bNnSabvBgwfr/fff18KFC3Xo0CHl5ubqrbfe0pIlSyRJnTp1UsuWLfXss89q3759+sc//qGRI0fKbrd79M5aqR4hLy8vTxcuXLhiyEtJSVF4eLhjiY6OrmuXAAAAHmG1WtWlSxf9/ve/18iRI9W7d2/5+/tr69atatasWY3PtHv00Uc1d+5cvfLKK7rxxhs1YMAArV69Wt26dZMkNW7cWMuWLVN+fr569+6tGTNmaNy4cfLz89NN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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAnkAAAEnCAYAAADVZVW7AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA070lEQVR4nO3deVyVdd7/8TcgqwKCmmKD4YaaEuKS0TKVt+mtaWppTbnEjDbmZOk4kw05LTqOYHM7JXmb2aJOZlOikTOaWTTmkBaCHAT3ZUomXDAUEOWInOv3x/w8dydAWc4il6/n43H9cb5c1/X5HLKvb6/VyzAMQwAAADAVb083AAAAAOcj5AEAAJgQIQ8AAMCECHkAAAAmRMgDAAAwIUIeAACACRHyAAAATIiQBwAAYEKEPAAAABMi5JnIN998Iy8vrzot+/fv93S7NbJarVq6dKnuu+8+RUVFKTAwUF27dtUf/vAHXbhwwdPtAQDQZHjxWjPzKC0t1Z49e+yfz549q3vuuUejRo3SM88847DugAED5OXl5e4Wr+iLL77Q2LFjNX78eN15550KDg7W+vXrtWjRIk2dOlVLlizxdIsAADQJhDwT+/LLL3X77bfr1Vdf1bRp0664/oULF+Tn5+eGzmp36tQphYSEVOvj9ttvV05OjkpLS+Xj4+Oh7gAAaDo4XWtiO3fulCT16dOn2s+io6M1YcIErVy5Ur1795afn59eeukl7d69W15eXvrggw8c1j979qx8fHz00ksvOYwXFRXpySefVGRkpAIDAxUTE6NVq1Y1uOfWrVvXGDS9vb1ltVpls9kavG8AAK4lzTzdAFwnJydH3t7eio2NdRgvKyvToUOHVF5erv379+uZZ57Rddddpw4dOmjbtm2SqgfDnJwc2Ww2h/GcnBz913/9lyIjIzV//nxFREQoNTVVEyZMUHBwsEaOHGlft1WrVurSpYu+/vrren+PL7/8UhkZGbr33nvl6+tb7+0BALgWEfJMLCcnR9HR0WrevLnD+M6dO2UYhjp27KgtW7aoWbP/+2OQkpKi0NBQde7c2WGb7OxsSf8X/s6dO6dRo0apc+fO2rp1qwIDAyVJgwYNUl5enhYvXmwPed9++61KSkp088031/s7WCwWjR49Wtddd50WL15c7+0BALhWEfJM6sKFC9q9e7fGjh1b7WeXAtuiRYscAp4kZWVlKS4urtpNGdnZ2brhhhsUHh4uSXrzzTd19OhRrVixQr6+vrp48aJ93ZiYGH366af2zzfccIPDz+tq06ZNeuihh9SmTRtt3LhRN9xwQ733AQDAtYpr8kwqPz9flZWVNV6Pt3PnTnXo0EF9+/Z1GL948aIsFku1cek/Ie+H4xs3bpQkDRw4UL6+vg7L66+/rpYtWzaq/1dffVXDhw9X79699fXXXys6OrpR+wMA4FrDkTyTysnJkVTzTRfZ2dkaMGBAtfG9e/eqoqKi2jYFBQXat2+fxo0b5zA2cOBALViwoMb6DQ15Fy9e1FNPPaXXXntNCQkJev311z1+xy8AAE0RIc+kLt1ZGxcX5zBeXl6uAwcO6Oc//3m1bY4dOyZJuv766x3GX3rpJRmG4RD+wsPDdfr0afXt29dpz9s7c+aMxo4dq/T0dCUnJ1d7th8AAKg7Qp5J5eTkqGPHjtWOqF26S7Zfv37VtomOjpa3t7dWrFihG2+8UWfOnNH//u//6r333pPkeFTwscce06OPPqoxY8Zo4sSJCgsL08mTJ5WXl6fKykrNnz9fkrRjxw7Fx8frueee0wsvvFBrv0VFRbrjjjvsd/veeeed+uqrr+w/DwsLU7du3RrzKwEA4JrCNXkmZLPZtGvXrlpP1Xp5edV43V1UVJSWLFmizz77TJGRkRo7dqyio6P1wAMPqH379mrbtq193YkTJyo1NVXHjx/Xz3/+c/33f/+3Zs2apT179mjIkCH29Xbs2KGqqqpqRxR/7PPPP7e/am3BggWKj493WHjTBQAA9cMbLwAAAEyII3kAAAAmRMgDAAAwIUIeAACACRHyAAAATIiQBwAAYEKEPAAAABNy+8OQbTabCgsLFRwc7LQ3JQBoPMMwVFZWpvbt28vbm3//NQTzGwBXq89c7faQV1hYqMjISHeXBVBHBQUF+slPfuLpNpok5jcA7lKXudrtIS84ONjdJT2mQ4cObq+5YcMGt9Z799133VpPkpKTk91e81pyLf0/6myXfncFBQUKCQnxcDcAzKi0tFSRkZF1mqvdHvKupVMYnjjl5e6/oAMCAtxaD653Lf0/6myXfnchISGEPAAuVZe5mgtvAAAATIiQBwAAYEKEPAAAABNy+zV5AADA/KqqqlRZWenpNpocX19f+fj4OGVfhDwApvXGG2/ogw8+UE5Ojr7//nvt379f0dHRl90mLS1Nc+fO1b59+xQdHa2UlBT99Kc/dVPHQNNnGIaOHz+uM2fOeLqVJqtly5Zq165do2+EI+QBMK2ysjI98sgj6tWrl95++2117dr1suuvWrVKkyZN0iuvvKIhQ4Zo0aJFuv/++3XkyBHulgXq6FLAu+666xQUFMQd+/VgGIbOnTunkydPSpIiIiIatT9CHgDTmjlzpiRp8uTJiouLu+xfNqdOndITTzyhhQsXaurUqZKkP/7xj0pJSdH27ds1ZMgQt/QMNGVVVVX2gNeqVStPt9MkBQYGSpJOnjyp6667rlGnbht044XNZlNycrKioqIUEhKioUOHqqCgoMFNAIArZWdnq2/fvpdd54033lBQUJAef/xx+1iLFi3k6+tr/1f1j1mtVpWWljoswLXs0jV4QUFBHu6kabv0+2vsNY0NOpI3ZcoUbdiwQStWrFCHDh30y1/+UpMmTdLmzZsb1QwAOJvVatXu3bv19NNPX3a9tLQ0jRw5Us2a/d+0eObMGVVWViosLKzGbZKSkjRnzhyn9msGUb9z/pt3vkm+1+n7hOtwirZxnPX7q/eRvM2bN2v58uXauHGjBg8erO7du2vWrFn67LPPVFFR4ZSmAMBZ8vLyVFlZecUjebm5uerTp4/DWFZWliQpNja2xm0SExNVUlJiXzijAeBqUu8jeQsXLtTo0aPVu3dv+1h4eLgMw1BRUREv5wZwVcnOzlaLFi0ue9PFuXPnZLVa1aZNG4fxdevWKTY2ttZ5zd/fX/7+/k7tFwCcpV4h7+zZs0pPT9eqVascxi9dr9KyZctq21itVlmtVvtnrlkB4E7Z2dmKi4u77Lukg4KC1Lx5cxUXF9vHjh49qpUrV2rJkiXuaBMwPVecxr+chp7inzFjhr755hulpaU5tyEPqNfp2ry8PFVVVdV4SqNTp04KDg6utk1SUpJCQ0PtC0f6ALhaZWWlLBaLLBaLvvrqK7Vv314Wi0VHjhyR9J9Hq/To0cNhEr/33nu1ePFi5eXlKSMjQ4MGDdLAgQM1YcIED30LAJ6wY8cO3XzzzbX+vCk94LleIe/06dOSVOMpjREjRtS4DdesAHC3zMxMxcXFKS4uTnl5eXr//fcVFxenpKQkSVJ+fr727dvn8I/OlJQUdejQQbfddpsefvhhPfTQQ1q3bt1ljwACMI/Kykr5+flp27Ztmj17try8vDRgwAAlJCRo3Lhxeu655xQREaG4uDidO3dOPj4++vLLLx320a5dO61du9b+uaCgQOPGjVNYWJjCwsL0yCOP2LOUO9TrdO2lcFdcXGy/2yw1NVUHDx7U+vXra9yGa1YAuNttt90mwzBq/Xl8fHy1n7dt21YfffSRq1sDcJXy8fFRRkaGBgwYIIvForZt2yogIEB33XWXjhw5omnTpmnLli3y9vbWrl27ZBiGbrrpJvv2x44d04kTJ+w3ah06dEi33nqrHn/8cW3fvl3l5eX61a9+paefflpvvvmmW75TvULepQuQ586dq+eff15ff/21fvnLX2r+/Pnq0qWLq3oEAABwKW9vbxUWFqpVq1b2oFZZWam9e/fqscce0/z58+3rfv7559UuU8vJyVHz5s3VuXNnSdLjjz+uqVOnOjxmadasWVd8nJMz1Svk+fn5ae3atZo6dapiYmLUuXNnLV26VOPHj3dVfwAAAG6Rk5Pj8MikPXv26MKFC3rqqacc1rNYLNUerWSxWHTTTTfJy8tL3377rdLT07Vt2zYtXLjQvk5VVZVb702o9yNU+vfvb392FAAAgFn8OLzl5uYqIiJC0dHRDuvl5uZq6NChDmM7duywb5ubm6vw8HB9/fXX1Wpcem2ZO3BFMQAAgP7zFJEfXmdnsVgUFxdXbb0DBw6oW7du9s+nTp3Sp59+ag95vr6+KisrU0REhLp06eKwXH/99a7/Iv8fIQ8AAECSzWbTrl27VFhYqJKSEuXm5tYY8lq3bq3MzExJ0r///W+NGzdO5eXl9pA3YMAAhYSEaMKECbJYLDp06JA2bdqk6dOnu/X7EPIAAAAkzZs3T++//76uv/56zZ07V7m5uQ5v+Lrkz3/+s9asWaO2bdsqISFBY8eOlZeXl2JiYiT9501gGzdu1OnTp3XnnXeqT58+evbZZxUVFeXW71Pva/IAAADqq6FvoHCn8ePHO9xM+sObJn5o2LBh+vbbbx3GJk+e7PD55ptv1j/+8Q/nN1kPHMkDAAAwIUIeAACACRHyAAAATIiQBwAAYELXzI0XNd0d42ppaWlur7llyxa31nvhhRfcWk+SXnnlFbfXPHPmjNtrAgDQGBzJAwAAMCFCHgAAgAkR8gAAAEyIkAcAAGBChDwAAAAP+Otf/6qIiAiX7f+aubsWAAB4kJeXe+sZhnvrNUBubq5iY2Ndtn+O5AEAADSAYRi6ePFig7fPzc116SPeCHkAAACSTpw4IS8vLy1atEhxcXEKCAhQz549lZGRIek/z6L19fXVhg0b1LdvX/n5+SknJ0eS9Pe//139+vVTQECAOnbsqKVLlzrs+7vvvtPIkSMVFBSk6OhoffHFFy4/ksfpWgAAAMke2JYsWaLXX39dERERmjlzpsaNG6d//etfslgs8vHx0UsvvaSUlBSFh4erU6dOevnll7Vo0SItXLhQffr0UWZmphISEtSzZ0/dcccdOnnypAYMGKC7775bO3fuVGFhoaZMmaLCwkKXHslrUMh744039MEHHygnJ0fff/+99u/fr+joaGf3BgAA4Da5ubny9fXVpk2b1LFjR0nS3Llz1a9fP3333XfKzc1Vq1attH79eoWGhkqS/vWvf+m5555Tdna2unXrJknq2LGjVq1apX/84x+64447lJiYqE6dOumdd96RJHXv3l2jR4/WokWLXJqfGhTyysrK9Mgjj6hXr156++231bVrV2f3BQAA4FYWi0X333+/PeBJkr+/v8PPH330UXvAk6S//OUvOnfunPr27euwr4qKCsXHx6uiokLvvfee3n33XYef+/r6qlevXvLx8XHRt2lgyJs5c6YkafLkyYqLi5OXu++YAQAAcLJLIe6Hdu7cqdatW6tt27bas2ePFixY4PDz3NxcTZ48WbNmzaq2v+uuu0779+/X+fPn1adPn2r7deWpWqmR1+RlZ2dr4MCBzuoFAADAI86fP6+DBw+qqqrKPmaz2bRo0SI9+uij2rdvny5cuKC4uDiH7Xx9fVVeXq4uXbrUuF9vb2/7/i/ZvXu3Pv74Y7366qsu+CY/qN3QDa1Wq3bv3l3t8GRN65WWljosAAAAV5O8vDx5eXlp1apV2r59u/bu3auHHnpIZ86c0e9//3vl5ubq+uuvV5s2bRy2GzZsmD744AMtWbJER44cUW5urt566y0tX75cktS1a1e1adNGzz77rA4cOKB//OMfGjNmjGw2m0vvrJUaEfLy8vJUWVl5xZCXlJSk0NBQ+xIZGdnQkgAAAC5hsVjUvXt3/f73v9eYMWPUr18/eXt7a/v27WrZsmWtz7R79NFHtWDBAr3yyiu68cYbNXjwYK1bt049e/aUJAUEBGjVqlXKz89Xv379NHv2bE2cOFFeXl666aabXPqd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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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cyQPAACgHgzD0MWLF+u9fU5Ojnr37u2+hn6EkAcAACDpxIkTslgsWrRokeLj49W0aVP16NFD6enpkqStW7cqICBAGzduVN++fRUYGKjs7GxJ0j//+U/169dPTZs2VYcOHbR06VKnfX/33XcaMWKEQkJCFBsbq88//9zjR/I4XQsAACA5AtuSJUv0+uuvKyoqSjNmzNCjjz6qr7/+WlarVf7+/nrllVeUkpKiyMhIdezYUa+++qoWLVqkBQsWqE+fPsrIyNCECRPUo0cP3XnnnTp58qT69++vu+++W7t27VJhYaEmT56swsJCjx7Jq1fIe+ONN/T+++8rOztb33//vfbv36/Y2Fh39wYAAOA1OTk5CggI0ObNm9WhQwdJ0pw5c9SvXz999913ysnJUcuWLbVhwwaFh4dLkr7++mu98MILysrKUteuXSVJHTp00KpVq/Svf/1Ld955pxITE9WxY0e98847kqRu3bpp1KhRWrRokUfzU71CXllZmR555BH17NlTb7/9trp06eLuvgAAALzKarXq/vvvdwQ8SQoKCnL6+WOPPeYIeJL017/+VefOnVPfvn2d9lVRUaGEhARVVFTo3Xff1d/+9jennwcEBKhnz57y9/f30LepZ8ibMWOGJGnSpEmKj4+Xxdt3zAAAALjZpRD3Q7t27VKrVq3Upk0b5efna/78+U4/z8nJ0aRJkzRz5sxq+7vuuuu0f/9+nT9/Xn369Km2X0+eqpUaeE1eVlaWBgwY4K5eAAAAfOL8+fM6ePCgqqqqHGN2u12LFi3SY489pn379unChQuKj4932i4gIEDl5eXq3Llzjfv18/Nz7P+SPXv26KOPPtJrr73mgW/yg9r13dBms2nPnj3VDk/WtF5paanTAgAAcDXJzc2VxWLRqlWrtGPHDu3du1cPPfSQzpw5o9///vfKycnR9ddfr9atWzttN3ToUL3//vtasmSJjhw5opycHL311ltavny5JKlLly5q3bq1nn/+eR04cED/+te/NHr0aNntdo/eWSs1IOTl5uaqsrLyiiEvKSlJ4eHhjiU6Orq+JQEAADzCarWqW7du+v3vf6/Ro0erX79+8vPz044dO9SiRYtan2n32GOPaf78+Vq4cKFuvPFGDRo0SOvWrVOPHj0kSU2bNtWqVauUl5enfv36adasWRo/frwsFotuuukmj34ni2HU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TdKxY8ccy9GjR+Xv7+/2Wp6ew4YOHer0PY4dO6bp06erRYsWev75591S45KSkhLddtttOnXqlDZs2CCr1aru3bvr3nvv1ZkzZ9xWJz8/X7fddptuuOEGff7551q/fr0+/vhjvfjii26r4RLjKvfxxx8b/v7+RnZ2tmPsH//4h2GxWIzz58/7rjEPmzVrlhEZGenrNjxizZo1xuLFi41//vOfhiQjPz/f1y25XVFRkREZGWl89tlnvm4FJuCLeXDixInGXXfd5ZF918Rbc97zzz9vdOnSxSP79sbc1rZtW+Nvf/ub2/f7Y76Yww4fPmwEBwcbS5Yscfu+N27caEgyTp486RjLzs42JBl5eXluqzNmzBhjyJAhTmNJSUlGx44d3VbDFVf9kbwFCxZo1KhR6t27t2MsMjJShmGoqKjId4152L///e9aX4remKWlpSktLU1PPvmkrFarwsPD1a1bN1+35XaLFy9Wly5d9OGHH6p9+/aKiYnRb3/7W1VWVvq6NTRCvpgHs7Ky1LdvX4/suyaenvOqqqr0+eefa8WKFfr973/v9v17Y247evSojh8/rueee06tWrVSQkKCNm/e7NYal/hiDps6dap69eqlyZMnu33fPXr0UNOmTbVu3TrZ7XadOHFCL7/8su688051797dbXUyMzOrHcE9cOCAvv/+e7fVcIlPomUdlZWVGf7+/sa7777rNP7BBx8YkozS0lIfdeZZzz77rNG8eXOnf7Wbwc6dO4177rnHqKioMAzDMEaPHm0MHDjQx115Rs+ePY0mTZoYTz31lLFz507j7bffNvz9/Y1XXnnF162hkfHFPFhRUWEEBAR45YiRYXh2ztu5c6fRrFkzw9/f3wgPDzc2btzokRremNvy8vKMN99808jKyjK2b99uDB8+3AgMDDT27t3r9lrensPWrFlj+Pv7G7t27fLI/u12u5GcnGxYLBajSZMmhiRj+vTpRnl5uVvr/PSnPzXi4+ONEydOGOfPnzeWLl1q+Pn5eezo8ZVc1SFv+/bthiRj//79TuOzZs3y2aFPT6qoqDDGjRtntG3b1vjqq6983Y5b7d+/34iLizMKCwsdY506dTJmzZrlw648o6KiwvDz8zN+/vOfO40PGTLEGDZsmI+6QmPli3lw586dhiRj3759Htn/Jd6Y886ePWscPHjQ2LFjhzFq1CijXbt2RllZmdv278u5rby83GjSpImxaNEit+7X23NYWVmZcf311xvTpk1z+74N478Bb/To0catt95qfPzxx0Z2drYxdepUo127dsZ3333n1lpWq9Xo0qWLIckICAgwHnzwQSMuLq7a79JbruqQd+kcenFxsdN49+7dPfaHwVeOHz9uJCQkGL179zaOHj3q63bcbtKkSYbFYjH8/f0diyTDz8/PGDBggK/bc6vCwkJDkpGamuo0fu+99xoPPvigj7pCY+WLeXDp0qVG8+bNjaqqKo/s3zB8M+ft2bPHkGR88cUXbtunL+e2CxcuGEFBQcbixYvdul9vz2G/+c1vjHbt2nns7NzatWuNkJAQ4/Tp007j7dq1M+bPn++RmsePHzdKSkqMY8eOGU2aNDHWrFnjkTpXclVfk3fpDp7i4mLHWGpqqg4ePKipU6f6qi23y8nJ0S233KKoqCilp6c7vTTdLGbNmqXdu3fLarXKarXqrbfekiR98sknWrlypY+7c6+IiAj5+fnJ+MFroU+dOqX09HQNHjzYh52hMfLFPJiVlaX4+Hj5+XnmrwhfzXnp6eny9/dXhw4d3LZPX85t7733nqqqqjR06FC37tebc1hOTo5SUlK0cOFChYaGunXfl+zdu1dt2rRRixYtHGNlZWU6c+aMmjRp4pGabdq0UVhYmGbPnq3Y2FiNHDnSI3WuyCfRso5sNpsRHR1tjB8/3jh06JDxt7/9zWjWrJmprmv68MMPjWbNmhkTJ040CgsLjWPHjhnHjh0zioqKfN2aRy1btsxo1qyZYbfbfd2KRwwZMsTo27evkZOTY3zxxRdG//79jZtvvtm4cOGCr1tDI+OtefDChQtGdna2kZ2dbfTq1ct46KGHjOzsbOPw4cNureOtOe/FF180PvjgA+PAgQNGbm6ukZycbAQHBxu/+93v3Frnxzw1t7377rvGO++8Y+Tn5xt5eXnG/PnzjZCQECM5OdmtdS7xxhxmt9uNhIQEY/DgwW7bZ00+//xzw2KxGHPnzjUOHz5sbN++3bj77ruN6667zjh27Jjb6hw6dMh46623jAMHDhg7duwwJkyYYERGRhq5ubluq+GqqzrkGYZhZGRkGH379jWCg4ONnj17Gu+8846vW3Krbt26GZKqLWa9IeGS6dOnG3379vV1Gx5z7NgxY/To0UZERITRrl0749e//rVx5swZX7eFRsob82B6enqNc9GkSZPcWsdbc97kyZON9u3bG4GBgUarVq2MO+64o9rNK57gqbnt1VdfNbp06WI0bdrUaN26tXH33Xcb//jHP9xe5xJvzGHLli0zmjZtahw6dMit+63JX//6V6NHjx5G06ZNjejoaGPChAnGN99849YaX375pdG9e3cjKCjIaNu2rfHLX/7SKCgocGsNV1kM4wfHYwEAAGAKV/U1eQAAAKgfQh4AAIAJEfIAAABMiJAHAABgQoQ8AAAAEyLkAQAAmBAhDwAAwIQIeQAAACZEyAMAADAhQh4AAIAJEfIAAABMiJAHAABgQv8f7kRTFoTPiCcAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Your code here\n", + "import matplotlib.pyplot as plt\n", + "y_pred_probs = nn.forward(X_test) # Predicted probabilities for each class\n", + "y_pred_labels = np.argmax(y_pred_probs, axis=1) # Predicted class labels\n", + "true_class_probs = y_pred_probs[np.arange(len(y_test)), y_test]\n", + "true_probs = y_pred_probs[np.arange(len(y_test)), y_test] # probability assigned to the true class\n", + "worst_indices = np.argsort(true_probs)[:5] # indices of 5 samples with lowest confidence in true class\n", + "classes = np.arange(nn.output_size) # 0-9 for MNIST\n", + "\n", + "worst_idx = np.argsort(y_pred_probs[np.arange(len(y_test)), y_test])[:5]\n", + "\n", + "for idx in worst_idx:\n", + " fig, (ax0, ax1) = plt.subplots(1, 2, figsize=(8, 3))\n", + " ax0.imshow(X_test[idx].reshape(8, 8), cmap='gray')\n", + " ax0.set_title(f\"True: {y_test[idx]}\")\n", + " ax1.bar(classes, one_hot(len(classes), [y_test[idx]])[0], label='true')\n", + " ax1.bar(classes, nn.forward(X_test[idx]), label='pred', color='red')\n", + " ax1.set_xticks(classes); ax1.legend()\n", + " plt.show()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "After visualizing the worst predictions, consider the following:\n", + "\n", + "Are the misclassified samples visually similar to other classes?\n", + "\n", + "Could the model be confusing certain classes due to their features?\n", + "\n", + "What improvements can be made to the model to reduce such errors?\n", + "\n", + "Potential improvements might include:\n", + "\n", + "Increasing the model's complexity (e.g., adding more layers or neurons).\n", + "\n", + "Using different activation functions like ReLU.\n", + "\n", + "Training for more epochs or using better initialization techniques.\n", + "\n", + "Implementing data augmentation to provide more diverse training examples." + ] + }, + { + "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": 65, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Your code here\n", + "import numpy as np\n", + "\n", + "class NeuralNet2Hidden:\n", + " \"\"\"MLP with 2 hidden layers using sigmoid activation\"\"\"\n", + "\n", + " def __init__(self, input_size, hidden1_size, hidden2_size, output_size):\n", + " # Initialize weights and biases\n", + " self.W1 = np.random.uniform(-0.1, 0.1, (input_size, hidden1_size))\n", + " self.b1 = np.random.uniform(-0.1, 0.1, hidden1_size)\n", + " self.W2 = np.random.uniform(-0.1, 0.1, (hidden1_size, hidden2_size))\n", + " self.b2 = np.random.uniform(-0.1, 0.1, hidden2_size)\n", + " self.W3 = np.random.uniform(-0.1, 0.1, (hidden2_size, output_size))\n", + " self.b3 = np.random.uniform(-0.1, 0.1, output_size)\n", + "\n", + " self.input_size = input_size\n", + " self.hidden1_size = hidden1_size\n", + " self.hidden2_size = hidden2_size\n", + " self.output_size = output_size\n", + "\n", + " # Forward pass\n", + " def forward(self, X):\n", + " self.Z1 = np.dot(X, self.W1) + self.b1\n", + " self.H1 = sigmoid(self.Z1)\n", + "\n", + " self.Z2 = np.dot(self.H1, self.W2) + self.b2\n", + " self.H2 = sigmoid(self.Z2)\n", + "\n", + " self.Z3 = np.dot(self.H2, self.W3) + self.b3\n", + " self.Y = sigmoid(self.Z3)\n", + " return self.Y\n", + "\n", + " # Gradient (backpropagation)\n", + " def grad_loss(self, X, y_true):\n", + " y_true = one_hot(self.output_size, [y_true]) if np.isscalar(y_true) else one_hot(self.output_size, y_true)\n", + " y_pred = self.forward(X)\n", + "\n", + " # Output layer error\n", + " error3 = y_pred - y_true\n", + " grad_W3 = np.dot(self.H2.T, error3)\n", + " grad_b3 = np.sum(error3, axis=0)\n", + "\n", + " # Hidden layer 2 error\n", + " error2 = np.dot(error3, self.W3.T) * dsigmoid(self.Z2)\n", + " grad_W2 = np.dot(self.H1.T, error2)\n", + " grad_b2 = np.sum(error2, axis=0)\n", + "\n", + " # Hidden layer 1 error\n", + " error1 = np.dot(error2, self.W2.T) * dsigmoid(self.Z1)\n", + " grad_W1 = np.dot(X.T, error1)\n", + " grad_b1 = np.sum(error1, axis=0)\n", + "\n", + " return {\"W1\": grad_W1, \"b1\": grad_b1,\n", + " \"W2\": grad_W2, \"b2\": grad_b2,\n", + " \"W3\": grad_W3, \"b3\": grad_b3}\n", + "\n", + " # Single-sample training\n", + " def train(self, x, y, lr=0.01):\n", + " x = x[np.newaxis, :] if x.ndim == 1 else x\n", + " grads = self.grad_loss(x, y)\n", + " self.W1 -= lr * grads[\"W1\"]\n", + " self.b1 -= lr * grads[\"b1\"]\n", + " self.W2 -= lr * grads[\"W2\"]\n", + " self.b2 -= lr * grads[\"b2\"]\n", + " self.W3 -= lr * grads[\"W3\"]\n", + " self.b3 -= lr * grads[\"b3\"]\n", + "\n", + " # Prediction\n", + " def predict(self, X):\n", + " Y = self.forward(X)\n", + " return np.argmax(Y, axis=1) if X.ndim > 1 else np.argmax(Y)\n", + "\n", + " # Accuracy\n", + " def accuracy(self, X, y):\n", + " return np.mean(self.predict(X) == y)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LR=0.001, Hidden=(32,16) -> Test Accuracy: 0.1185\n", + "LR=0.001, Hidden=(64,32) -> Test Accuracy: 0.0630\n", + "LR=0.01, Hidden=(32,16) -> Test Accuracy: 0.0889\n", + "LR=0.01, Hidden=(64,32) -> Test Accuracy: 0.0926\n", + "LR=0.05, Hidden=(32,16) -> Test Accuracy: 0.4778\n", + "LR=0.05, Hidden=(64,32) -> Test Accuracy: 0.6852\n", + "\n", + "Best Test Accuracy: 0.6852 with LR=0.05, Hidden=64,32\n" + ] + } + ], + "source": [ + "# Hyperparameters to try\n", + "learning_rates = [0.001, 0.01, 0.05]\n", + "hidden_configs = [(32, 16), (64, 32)] # (hidden1_size, hidden2_size)\n", + "best_acc = 0\n", + "best_params = None\n", + "\n", + "for lr in learning_rates:\n", + " for h1, h2 in hidden_configs:\n", + " # Initialize a new network for each hyperparameter set\n", + " nn = NeuralNet2Hidden(input_size=64, hidden1_size=h1, hidden2_size=h2, output_size=10)\n", + " \n", + " # Train over the dataset (example: 1 epoch for simplicity)\n", + " for i in range(len(X_train)):\n", + " nn.train(X_train[i], y_train[i], lr=lr)\n", + " \n", + " # Evaluate accuracy\n", + " acc = nn.accuracy(X_test, y_test)\n", + " print(f\"LR={lr}, Hidden=({h1},{h2}) -> Test Accuracy: {acc:.4f}\")\n", + " \n", + " if acc > best_acc:\n", + " best_acc = acc\n", + " best_params = (lr, h1, h2)\n", + "\n", + "print(f\"\\nBest Test Accuracy: {best_acc:.4f} with LR={best_params[0]}, Hidden={best_params[1]},{best_params[2]}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By experimenting with different learning rates and hidden layer sizes, the best test accuracy achieved was ~69% using a learning rate of 0.05, with 64 neurons in the first hidden layer and 32 neurons in the second. Adding a second hidden layer improved performance, while extreme learning rates either slowed training or caused instability." + ] + } + ], + "metadata": { + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/02_activities/assignments/lab_3.ipynb b/02_activities/assignments/lab_3.ipynb new file mode 100644 index 00000000..cf44b6a1 --- /dev/null +++ b/02_activities/assignments/lab_3.ipynb @@ -0,0 +1,16993 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Recommender Systems\n", + "\n", + "In this lab, we'll be using Keras to build a recommender system. We'll be using the MovieLens dataset, a common benchmark dataset for recommender systems. \n", + "\n", + "MovieLens is a web-based recommender system and virtual community that recommends movies for its users to watch, based on their film preferences using collaborative filtering of members' movie ratings and movie reviews. You can check out the website here: https://movielens.org/\n", + "\n", + "We will download a subset of the dataset containing 100k ratings. There are tens of millions of ratings in the full dataset, spanning hundreds of thousands of users and movies. The subset we'll be using is a good example to demonstrate the concepts in this lab." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from zipfile import ZipFile\n", + "from urllib.request import urlretrieve\n", + "from pathlib import Path\n", + "\n", + "ML_100K_URL = \"http://files.grouplens.org/datasets/movielens/ml-100k.zip\"\n", + "ML_100K_FILENAME = Path(\"ml-100k.zip\")\n", + "ML_100K_FOLDER = Path(\"ml-100k\")\n", + "\n", + "if not ML_100K_FOLDER.exists():\n", + " if not ML_100K_FILENAME.exists():\n", + " urlretrieve(ML_100K_URL, ML_100K_FILENAME.name)\n", + " with ZipFile(ML_100K_FILENAME.name) as zip_file:\n", + " zip_file.extractall()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The goal of MovieLens is to enable models to predict the rating a user would give to a movie they have not yet watched. This is a classic example of a recommendation system. The dataset is huge, and contains many parts giving information about the movies, the users, and the ratings. To begin with, we will look at the ratings file. Each line in the ratings file (u.data) is formatted as:\n", + "\n", + "`user_id, item_id, rating, timestamp`\n", + "\n", + "Which tells us a single user's rating of a single movie.\n", + "\n", + "We will start by loading the ratings data into a pandas dataframe and then take a look at the first few rows. If you haven't used Pandas before, it's an extremely powerful library for dealing with tabular data. You can think of it as a Python version of Excel." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "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", + "raw_ratings = pd.read_csv(ML_100K_FOLDER / \"u.data\", sep='\\t',\n", + " names=[\"user_id\", \"item_id\", \"rating\", \"timestamp\"])\n", + "raw_ratings" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The second file we'll look at is the movie metadata. This file (u.item) contains information about each movie, including the title and release date. Each line in the file is formatted as:\n", + "\n", + "`movie_id | movie_title | release_date | video_release_date | IMDb_URL | unknown | Action | Adventure | Animation | Children's | Comedy | Crime | Documentary | Drama | Fantasy | Film-Noir | Horror | Musical | Mystery | Romance | Sci-Fi | Thriller | War | Western`\n", + "\n", + "As you can see, the genres are binary variables. As with one-hot encoding, a 1 indicates that the movie is of that genre, and a 0 indicates that it is not. We aren't going to work with the genre data in this lab, but it's easy to imagine that it could be useful in a real-world recommendation system." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "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", + " encoding='latin-1', usecols=range(5))\n", + "items" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default, the `release_date` column is a string. We can convert it to a `datetime` object using the `pd.to_datetime` function. This will make it easier to work with in the future (if we want to do things like check which date came first, for example).\n", + " \n", + "We can also extract the year from the date and store it in a separate column. This will make it easier to do things like plot the number of movies released each year." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "items['release_date'] = pd.to_datetime(items['release_date']) # Pandas makes this easy!\n", + "items['release_year'] = items['release_date'].dt.year # For later use" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For our purposes, it will be easier to work with the data if we merge our two dataframes into a single dataframe. We can do this using the `merge` method. We'll merge the `items` dataframe into the `raw_ratings` dataframe, using the `item_id` column as the key. This will add the movie title and release year to each rating." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "all_ratings = pd.merge(items, raw_ratings)" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "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()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Data preprocessing\n", + "\n", + "It's always important to understand the data you've collected. Thankfully, Pandas continues to make this easy for us. Using the `describe` method, we can get a quick statistical summary of the data." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "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()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's do a bit more pandas magic to compute the popularity of each movie (number of ratings). We will use the `groupby` method to group the dataframe by the `item_id` column and then use the `size` method to compute the number of ratings for each movie. We will use the `reset_index` method to convert the resulting Series into a dataframe with an `item_id` column." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "popularity = all_ratings.groupby('item_id').size().reset_index(name='popularity')\n", + "items = pd.merge(popularity, items)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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zT/+9ddfa+rUqVq/fr1uueUWs33o0KGSpFdeeUXbt29XdXW1YmJiJElpaWmy2+1m38zMTB07dkzl5eUKDg6WJE2dOlVFRUVKT0/vwdEAAIDewKsrP8uWLdPQoUO1YcMGXXLJJRoyZIhmz56tU6dOSZKys7M1Y8YMM/hIUkREhBoaGiSduSSWl5enuXPnmsHnx30AAAB+yKsrP++8846qq6s1evRoFRYWas+ePZo+fbqioqKUkpKimpoarVy50uWYhoYGhYeHS5JKS0vV3NysiRMnnrNPZ5xOp5xOp/m5paXFc4MCAAA+zWvhx+l0au/evZo8ebJycnIkSdddd53WrVunsrIyXXzxxfLz81NSUpLLcRUVFUpMTJR05kbp6OhoRUVFnbNPZ7KysvT00097eEQAAKA38Nplr8bGRnV0dGjSpEku7f7+/howYICampoUEhKiwMBAc5/T6dSmTZs0fvx4SWee8rLZbC7H19fXa8eOHWafzixYsEDNzc3mVltb68GRAQAAX+a1lZ/w8HD5+/vLMAyz7euvv9a2bduUnZ2tkJAQtba2qr29Xf369ZMk5ebmyjAMTZs2TZJks9nU2Njocl673a64uDilpKSc828HBga6hCoAAGAdXlv5CQoK0p133qklS5aoqqpK5eXlSklJ0bBhw/TQQw8pOTlZQUFBysjI0OHDh5WTk6P09HQtX75cgwYNkiSNGzdOdXV1ys3N1aFDh7Ro0SLl5+drxYoV6tvXq7czAQAAH+XVp70KCgoUFxen5ORk3X///Ro1apS2bNmigIAA2Ww2rVu3Ths2bFB8fLxWrVqljRs3avLkyebx8fHxKigo0NKlS5WQkKDy8nKVlZVp7NixXhwVAADwZX7GD687WVRLS4vCwsLU3Nys0NBQj557yPziLh/7xZJ7PFgJAAAXlq5+f3v9Dc8AAAA9ifADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAshfADAAAsxevhJzMzU35+fi7bgAEDdPr0aUlSW1ub5syZo+joaIWHh2vKlClqampyOUdTU5NSU1MVGRmpwYMHKy0tTW1tbd4YDgAA8HFeDz87d+5Uamqq6uvrze3LL79Unz591NHRoQkTJqi4uFiFhYUqLS1VVVWV5s2bZx5/8uRJJScnq6amRiUlJSosLFRhYaGys7O9OCoAAOCr+nq7gE8++UTPP/+8oqKiztqXn5+v7du3q7q6WjExMZKktLQ02e12s09mZqaOHTum8vJyBQcHS5KmTp2qoqIipaen98wgAABAr+HVlZ8vv/xSX331lebNm6fIyEjdeOON+tvf/mbuz87O1owZM8zgI0kRERFqaGiQdOaSWF5enubOnWsGnx/36YzT6VRLS4vLBgAArMGr4ef48ePKz8/Xhg0bVFRUJJvNpgkTJqi6ulr79u1TTU2NJk6c6HJMQ0ODwsPDJUmlpaVqbm7+yT6dycrKUlhYmLnFxsZ6fnAAAMAnefWyV3x8vOLj483Pb7/9tsLCwrR582bZbDb5+fkpKSnJ5ZiKigolJiZKkhwOh6Kjo8+6ZPbDPp1ZsGCBZs2aZX5uaWkhAAEAYBFev+H5hwICAtSnTx/16dNHTU1NCgkJUWBgoLnf6XRq06ZNGj9+vKQzT3nZbDaXc9TX12vHjh1mn84EBgYqNDTUZQMAANbgU+Fn7dq1On36tMaNGyebzabW1la1t7eb+3Nzc2UYhqZNmyZJstlsamxsdDmH3W5XXFycUlJSerJ0AADQS3jtstfbb7+t7777TqNGjVJHR4eKi4v19NNPKzMzU3FxcRo4cKCCgoKUkZGh3//+9+bTW2+99ZYGDRokSRo3bpzmz5+v3Nxc3XPPPSooKFB+fr7+8z//U337ev1BNgAA4IO8lhC++uor5eXlqba2ViEhIbr66qu1du1ac8XGZrNp3bp1mj17tl588UUlJCRo48aNuuuuu8xzxMfHq6CgQIsXL9b8+fN1ww03qKysTKNHj/bWsAAAgI/zMwzD8HYR3tbS0qKwsDA1Nzd7/P6fIfOLu3zsF0vu8WAlAABcWLr6/e1T9/wAAAB0N8IPAACwFMIPAACwFMIPAACwFMIPAACwFMIPAACwFLfDD0/GAwCA3szt8JOYmKiSkpLuqAUAAKDbuR1+pkyZovvuu0/33nuv9u/f3x01AQAAdBu3w096err279+vyMhIJSYm6sknnzzrx0UBAAB8VZdueI6KilJBQYHKy8tVWVmpoUOH6sUXX9R3333n6foAAAA86mc97ZWUlKQtW7ZoxowZmj17tuLj41VUVOSp2gAAADzO7V91r66u1ieffGJulZWVam9v11VXXaWRI0fqt7/9rf75n/9ZK1euVERERHfUDAAA0GVur/xcddVVmj17tg4fPqyUlBQVFRXp2LFjqqqq0htvvKEDBw4oICBADzzwQHfUCwAA8LO4vfJz4MABXX755efcHx4erhdeeEFDhw79WYUBAAB0B7dXfhwOhz788MOf7BMVFaX09PQuFwUAANBd3A4/ixYt0tdff31W+44dO3T48GFJUr9+/ZSRkfHzqwMAAPAwt8PP4cOHdf3115/VfvDgQf3ud7/zSFEAAADdxe3wY7PZ9Pe///2s9htuuEG7d+/2SFEAAADdxe3w88ADD+iPf/yjTp065dLe2toqf39+JB4AAPg2t9NKRkaG6urqlJiYqI0bN+rIkSPav3+/0tPTNXr06O6oEQAAwGPcftQ9ODhY27dv14IFC/Tggw/q22+/lSTFxcXxdmcAAODzunSdKiwsTHl5efrmm2+0e/duffbZZ6qpqdGIESM8XR8AAIBHub3yI0m1tbU6evSorrjiCl1zzTWergkAAKDbuB1+Fi9erD/+8Y+SJD8/P1166aUaOXKkud17772erhEAAMBj3L7stXTpUuXk5OjEiRNyOBx6+umnNWTIEH300Uf67W9/2x01AgAAeIzbKz8BAQEaN26cBgwYoISEBCUkJOihhx7qjtoAAAA8zu2Vn9/85jfasmVLd9QCAADQ7dxe+enfv7/sdrv69eunBx54QEFBQd1RFwAAQLdwe+WnrKxMLS0teuSRR/SLX/xCN954o9LS0pSfn69PP/20O2oEAADwGLdXfrZu3SrpzA+cOhwOVVVVqbKyUllZWfrf//1ffffddx4vEgAAwFO69J4f6cwbnePi4nTfffeZbSdOnPBIUQAAAN3F7ctep06d0p/+9Cfddtttuvvuu3X06FFz38CBAz1aHAAAgKe5HX5mzZql119/XePGjdNHH32k48ePS5KeeuoprV692uMFAgAAeJLb4eevf/2rCgoKNGvWLPXt+39Xza677jr95S9/8WhxAAAAnuZ2+Dl58qRiYmLOah8+fLiqq6s9UhQAAEB3cTv8JCcnq7i4+Kz206dP69SpUz+rmLy8PAUEBOjRRx8129ra2jRnzhxFR0crPDxcU6ZMUVNTk8txTU1NSk1NVWRkpAYPHqy0tDS1tbX9rFoAAMCFye2nvZ599lmNHTtWISEhks78uKkk5eTk6KqrrupyIa+99ppCQkL03Xff6YYbbpAkdXR0aMKECaqtrVVhYaH69++vBx98UPPmzdMrr7wi6cxKVHJyskJDQ1VSUqLjx49r0qRJuvjii5Went7legAAwIXJ7fBz1VVXqbi4WL/73e/U2tqqX/3qV2psbNTRo0f13nvvdamI9evXq62tTVFRUZJkhp/8/Hxt375d1dXV5qW2tLQ02e1289jMzEwdO3ZM5eXlCg4OliRNnTpVRUVFhB8AAHCWLr3n58Ybb9Tnn3+ubdu2qbKyUgEBAbr11ls1dOhQt89VUlKikpISvfTSS7Lb7QoLC9Pw4cMlSdnZ2ZoxY4bLPUYRERFqaGiQdOaSWF5enux2uxl8ftynM06nU06n0/zc0tLidt0AAKB3cjv87N69W/Hx8erXr59uvvlm3XzzzV3+4xUVFXr22WdVVFQkSXI4HLr++uvl5+enffv2qaamRitXrnQ5pqGhQeHh4ZKk0tJSNTc3a+LEiefs05msrCw9/fTTXa4bAAD0Xm6Hn+uvv17+/v668sorlZiY6LJddNFF532e/fv3KzU1Ve+//74CAwMlnQlWU6ZMkXQmCPn5+SkpKcnluIqKCiUmJpp9oqOjzctlnfXpzIIFCzRr1izzc0tLi2JjY8+7dgAA0Hu5/bRXS0uLysrKlJaWpuDgYK1Zs0Z33XWXYmJi3Ao/f/7zn1VVVaXY2Fj17dtXffv21cGDB5WVlaVbb71VTU1NCgkJMYORdOZy1aZNmzR+/HhJZ57ystlsLuetr6/Xjh07zD6dCQwMVGhoqMsGAACswe2VnwEDBmjMmDEaM2aM2bZv3z499NBDeuCBB877PAsXLtSTTz5pft61a5emTZumLVu2aNiwYdq+fbtaW1vV3t6ufv36SZJyc3NlGIamTZsmSbLZbGpsbHQ5r91uV1xcnFJSUtwdGgAAsAC3V346M2LECL355pv6+OOPz/uYIUOG6Oqrrza39vZ2BQcH65ZbbtHFF1+s5ORkBQUFKSMjQ4cPH1ZOTo7S09O1fPlyDRo0SJI0btw41dXVKTc3V4cOHdKiRYuUn5+vFStWuLx9GgAA4Htuh5/6+vpO20eMGKFPPvmky4Xs3btXw4cPN98bZLPZtG7dOm3YsEHx8fFatWqVNm7cqMmTJ5vHxMfHq6CgQEuXLlVCQoLKy8tVVlamsWPHdrkOAABwYfMzDMNw5wB/f39FRkZq5MiRSkxM1MiRI3XllVdq586deuaZZ84ZjnxZS0uLwsLC1Nzc7PH7f4bMP/tt2OfriyX3eLASAAAuLF39/nb72tDevXtVWVmpyspKORwOrV69WvX19QoODtayZcvcPR0AAECPcjv8DB8+XMOHD9evf/1rs621tVX9+/eXv79HbiECAADoNm6nlRdeeEEffvihvvnmG7MtODiY4AMAAHoFt1d+1q5dq0WLFqmtrU3R0dHmvT/fb8OGDTNvWgYAAPA1boefhx56SC+99JIee+wx9evXT1VVVVq2bJlaW1tlGIb69++vq6++WomJiVq+fHl31AwAANBlboefZ555RsXFxRo1apTZtnDhQk2ePFmPP/64+vfvr6qqKu3Zs8ejhQIAAHiC2+Hn5MmTCgoKcmmz2Wyy2+2aM2eOPv74Y919990eKxAAAMCT3L5LedKkSZozZ45+/HqgiIgIORwOT9UFAADQLdxe+Vm6dKluvvlmjRgxQo8//riuueYatbe3y26368orr+yOGgEAADzG7fATGhqqHTt26IUXXtDSpUt18OBBSVJCQoJef/11jxcIAADgSV369c+goCAtWLBACxYsUEtLi/z9/TVw4EBP1wYAAOBxXQo/q1ev1ocffqiAgABlZWV5/PewAAAAuovbNzw//fTTmjlzpgYMGKAVK1aosbFRkpSdna3Nmzd7vEAAAABPcjv85Ofn66233lJOTo4CAgLM9n/6p3/Sc88959HiAAAAPM3t8PPNN990+lRXQkKCqqqqPFIUAABAd3E7/IwePVplZWVntffr108nT570SFEAAADdxe0bnrOysvRv//Zvio2NlZ+fn/kjpqtXr9bll1/u8QIBAAA8ye3wc+ONNyovL0/333+/Tpw4occff1zNzc3avn273njjje6oEQAAwGPcCj+nT5/We++9pzvuuEOHDh3Su+++q8rKSgUEBMhut+vmm2/urjoBAAA8wq3w06dPH02dOlWff/65LrvsMj388MPdVRcAAEC36NINz4cPH+6OWgAAALqd2+HniSeeUHp6umpra7ujHgAAgG7l9g3P999/vyQpPj5e9957r5KTk5WUlKSEhAT169fP4wUCAAB40nmHnxMnTmjgwIE6fPiwHA6HHA6HKisrlZWVpS+++EJ9+vTR8OHDedEhAADwaecdfsLDw1VfX69LL71Ul156qSZMmGDuO378uBwOB8EHAAD4vPO+5+f06dPq6OgwP9900006cuSIJCkkJES//OUv9Yc//MHzFQIAAHiQ2zc8f6+qqkqtra2erAUAAKDbdTn8AAAA9EZuhZ/Vq1fr008/1alTpyTJ/F0vAACA3uK8b3geO3asMjIydPz4cQUEBOi7777TwoUL9ctf/lLXXnutEhMTFRQU1J21AgAA/GznHX7KysokSQcOHNCuXbv06aefateuXVq4cKGOHTumvn378qg7AADweW6/5HDo0KEaOnSopkyZYrYdPnxYFRUV2r17t0eLAwAA8DS3w09n4uLiFBcXZ779GQAAwFfxtBcAALAUwg8AALAUr4efJ554QsOGDVNwcLDCwsJ0xx13aN++feb+trY2zZkzR9HR0QoPD9eUKVPU1NTkco6mpialpqYqMjJSgwcPVlpamtra2np6KAAAoBfwevi5/PLL9frrr2vv3r364IMPdOTIET388MOSpI6ODk2YMEHFxcUqLCxUaWmpqqqqNG/ePPP4kydPKjk5WTU1NSopKVFhYaEKCwuVnZ3trSEBAAAf5pEbnn+OJ5980vzfl156qVJSUrRu3TpJUn5+vrZv367q6mrFxMRIktLS0mS3281jMjMzdezYMZWXlys4OFiSNHXqVBUVFSk9Pb0HRwIAAHoDr4ef750+fVrbtm3TypUrlZWVJUnKzs7WjBkzzOAjSREREWpoaJB05pJYXl6e7Ha7GXx+3KczTqdTTqfT/NzS0uLp4QAAAB/l9cteFRUVGjhwoAIDAzVhwgS9+uqrevjhh7Vv3z7V1NRo4sSJLv0bGhoUHh4uSSotLVVzc/NP9ulMVlaWwsLCzC02NtbzAwMAAD7J6+FnxIgRcjgc2rZtm/71X/9V06dP14kTJ+RwOOTn56ekpCSX/hUVFUpMTJQkORwORUdHKyoq6px9OrNgwQI1NzebW21trecHBgAAfJLXw09wcLCuuOIKjRkzRpmZmaqrq1NVVZWampoUEhKiwMBAs6/T6dSmTZs0fvx4SWee8rLZbC7nq6+v144dO8w+nQkMDFRoaKjLBgAArMHr4eeHtm3bpj59+iguLk42m02tra1qb2839+fm5sowDE2bNk2SZLPZ1NjY6HIOu92uuLg4paSk9GTpAACgl/Ba+MnIyNB7772nAwcO6LPPPtOzzz6rmTNnmu/0SU5OVlBQkDIyMnT48GHl5OQoPT1dy5cv16BBgyRJ48aNU11dnXJzc3Xo0CEtWrRI+fn5WrFihfr29Zl7uQEAgA/xWkI4cuSInnzySX311VcKDQ3V8OHDVVBQYP5gqs1m07p16zR79my9+OKLSkhI0MaNG3XXXXeZ54iPj1dBQYEWL16s+fPn64YbblBZWZlGjx7trWEBAAAf52cYhuHtIrytpaVFYWFham5u9vj9P0PmF3f52C+W3OPBSgAAuLB09fvbp+75AQAA6G6EHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCl9vV0Azm3I/OKfdfwXS+7xUCUAAFw4WPkBAACWQvgBAACWQvgBAACWQvgBAACW4tXw09HRocWLF2vMmDEKDw9XRESEJk+erCNHjph92traNGfOHEVHRys8PFxTpkxRU1OTy3mampqUmpqqyMhIDR48WGlpaWpra+vp4QAAgF7Aq+Hn0KFDqqys1Ny5c7Vjxw5t3LhRn3zyiR555BFJZ8LRhAkTVFxcrMLCQpWWlqqqqkrz5s0zz3Hy5EklJyerpqZGJSUlKiwsVGFhobKzs701LAAA4MO8+qj7FVdcoXfeecf8fOWVV+o3v/mNXnrpJUlSfn6+tm/frurqasXExEiS0tLSZLfbzWMyMzN17NgxlZeXKzg4WJI0depUFRUVKT09vQdHAwAAegOfe8/P1q1blZiYKEnKzs7WjBkzzOAjSREREWpoaJB05pJYXl6e7Ha7GXx+3KczTqdTTqfT/NzS0uLpYQAAAB/lUzc8z507V59++qmys7O1b98+1dTUaOLEiS59GhoaFB4eLkkqLS1Vc3PzT/bpTFZWlsLCwswtNjbW84MBAAA+ySfCj9Pp1MMPP6w333xTJSUlGjlypBwOh/z8/JSUlOTSt6KiwlwZcjgcio6OVlRU1Dn7dGbBggVqbm42t9raWs8PCgAA+CSvX/Y6cuSI7rvvPn377bfauXOnuQrT1NSkkJAQBQYGmn2dTqc2bdqkp556yuxjs9lczldfX68dO3bo3//938/5NwMDA13OCwAArMOrKz+VlZUaPXq0oqOjtW3bNpfLTzabTa2trWpvbzfbcnNzZRiGpk2bZvZpbGx0OafdbldcXJxSUlJ6ZAwAAKB38Vr42bhxo2666SbdfvvtWrZsmY4fP66vvvpKX3/9tSQpOTlZQUFBysjI0OHDh5WTk6P09HQtX75cgwYNkiSNGzdOdXV1ys3N1aFDh7Ro0SLl5+drxYoV6tvX64taAADAB3kt/MybN0+tra167bXXFBMTo+joaEVHR+uBBx6QdGZVZ926ddqwYYPi4+O1atUqbdy4UZMnTzbPER8fr4KCAi1dulQJCQkqLy9XWVmZxo4d661hAQAAH+dnGIbh7SK8raWlRWFhYWpublZoaKhHzz1kfrFHz+eOL5bc47W/DQBAd+vq97dPPO0FAADQUwg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUngT4AXs5zxmz2PyAIALFSs/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUgg/AADAUvp6u4BXX31Vf/3rX7V792598803qqmp0bBhw8z9bW1t+n//7//prbfeUltbm+6880699NJLCg8PN/s0NTVpzpw5eu+99+Tv769JkyYpOztbQUFB3hjSBWHI/OIuH/vFkns8WAkAAJ7l9ZWf48eP68EHH9RDDz2k0NBQDR061NzX0dGhCRMmqLi4WIWFhSotLVVVVZXmzZtn9jl58qSSk5NVU1OjkpISFRYWqrCwUNnZ2d4YDgAA8HFeX/mZNWuWJCk1NVVJSUny8/Mz9+Xn52v79u2qrq5WTEyMJCktLU12u93sk5mZqWPHjqm8vFzBwcGSpKlTp6qoqEjp6ek9OBIAANAbeH3l53u7du3SqFGjXNqys7M1Y8YMM/hIUkREhBoaGiSduSSWl5enuXPnmsHnx30AAAB+yCfCj9Pp1Oeff+4Sfvbt26eamhpNnDjRpW9DQ4N5v09paamam5t/ss+5/l5LS4vLBgAArMEnws+ePXt06tQpl/DjcDjk5+enpKQkl74VFRVKTEw0+0RHRysqKuqcfTqTlZWlsLAwc4uNjfXgaAAAgC/zifCza9cuDRw40OVm56amJoWEhCgwMNBsczqd2rRpk8aPH2/2sdlsLueqr6/Xjh07zD6dWbBggZqbm82ttrbWwyMCAAC+yus3PEtnwk9SUpL8/f8vi9lsNrW2tqq9vV39+vWTJOXm5sowDE2bNs3s09jY6HIuu92uuLg4paSknPPvBQYGuoQqAABgHV5b+Tl16pQcDoccDod27NihmJgYORwOHTp0SJKUnJysoKAgZWRk6PDhw8rJyVF6erqWL1+uQYMGSZLGjRunuro65ebm6tChQ1q0aJHy8/O1YsUK9e3rE7kOAAD4GK+Fn507dyopKUlJSUnas2eP1q5dq6SkJGVlZUk6s6qzbt06bdiwQfHx8Vq1apU2btyoyZMnm+eIj49XQUGBli5dqoSEBJWXl6usrExjx4711rAAAICP8zMMw/B2Ed7W0tKisLAwNTc3KzQ01KPn/jlvSu6teMMzAKAndPX72ydueAYAAOgp3BgDj+N3wQAAvoyVHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCmEHwAAYCn8thcuGPymGADgfLDyAwAALIWVH/iUn7N6AwDA+WDlBwAAWArhBwAAWArhBwAAWArhBwAAWAo3PAM/E4/YA0DvwsoPAACwFMIPAACwFC57AeL9QgBgJaz8AAAASyH8AAAASyH8AAAASyH8AAAASyH8AAAAS+FpL8CLeEEiAPQ8wg9gQYQuAFZG+AF6Kd5NBABdQ/gB4BZWjQD0dtzwDAAALIWVHwAXPFarAPwQ4QdAjyGEAPAFF0z46ejo0HPPPaeXX35ZjY2Nuummm/TKK68oNjbW26UB8ABu8AbgKRdM+JkxY4aKi4u1cuVKXXLJJfr973+vRx55RJs3b/Z2aQB6MVargAvPBRF+Nm/erBUrVqiiokIjR46UJM2dO1f33nuv2traFBQU5N0CAVgSwQnwTRdE+Hn++ed13333mcFHkiIiImQYho4ePXrWpS+n0ymn02l+bm5uliS1tLR4vLYO50mPnxPAhe+S/2+dt0voNT57+s4uH3t1xgeW+rsXmu+/tw3DcO9Ao5c7fvy40adPH2PNmjUu7e+++64hyWhpaTnrmIyMDEMSGxsbGxsb2wWw1dbWupUdev3Kz549e3T69Glde+21Lu0VFRW67LLLFBISctYxCxYs0KxZs8zPHR0damxs1C9+8Qv5+fl5rLaWlhbFxsaqtrZWoaGhHjvvhYw56xrmzX3MWdcwb+5jzrrmfObNMAwdP35cMTExbp2714efpqYmSZLNZnNpLyws1Pjx4zs9JjAwUIGBgS5tgwYN6pb6JCk0NJR/8G5izrqGeXMfc9Y1zJv7mLOu+UfzFhYW5vY5e334+T70NDY2Kjw8XJK0fv16HThwQBs3bvRmaQAAwAf1+p+3SExMVGxsrBYvXqyDBw9q9erVmjZtmv70pz/piiuu8HZ5AADAx/T6lZ9+/frpnXfe0aOPPqqEhARdfvnlevnllzV16lRvl6bAwEBlZGScdYkN58acdQ3z5j7mrGuYN/cxZ13TnfPmZxjuPh8GAADQe/X6y14AAADuIPwAAABLIfwAAABLIfwAAABLIfx0k46ODi1ZskRDhgxRaGio7r77btXW1nq7LK969dVXdfvttysyMlJ+fn7av3+/y/62tjbNmTNH0dHRCg8P15QpU8yXWH6vqalJqampioyM1ODBg5WWlqa2traeHEaP6Ojo0OLFizVmzBiFh4crIiJCkydP1pEjR8w+zFfnnnjiCQ0bNkzBwcEKCwvTHXfcoX379pn7mbd/LC8vTwEBAXr00UfNNubtbJmZmfLz83PZBgwYoNOnT0tizn6Kw+HQxIkTFRkZqf79+ysxMVF1dXWSemjeuv6rWvgpqampRnR0tPHBBx8Y+/btM375y18at99+u7fL8qrnn3/eKCgoMGbOnGmEhoYaHR0d5r7Tp08bd9xxhzFixAijvLzc2L17tzFixAhj+vTpZp/W1lbjmmuuMcaOHWs4HA5j69atxkUXXWTY7XZvDKdbHThwwPjVr35lvPPOO0Z1dbWxdetWY8iQIcY999xjGAbz9VOWLl1qlJeXG1988YWxfft245prrjGuu+46wzCYt/ORn59vvPHGG4YkY8WKFYZhMG/nMn78eCM1NdWor683t6NHjxqGwZz9lE2bNhmDBw82li5dauzZs8fYv3+/sXr1aqO9vb3H5o3w0w0++OADo0+fPsbu3bvNtqKiIsPPz8/49ttvvVeYj3jkkUeMf/mXf3FpW758uRESEmL8/e9/N9tyc3ONqKgo8/OCBQuMSy65xDhx4oTZNnv2bGPMmDHdXrMvWLhwoREREWEYBvPljvT0dGPo0KGGYTBv/8i6deuMZcuWGf/xH/9hSDL27t1rGAbzdi5RUVHGqlWrOt3HnHXu6NGjRkREhPHhhx92ur+n5o3LXt3g+eef13333aeRI0eabRERETIMQ0ePHvVeYT5i165dGjVqlEtbdna2ZsyY4fLjdBEREWpoaJB0Zhk0Ly9Pc+fOVXBwcKd9LnRbt25VYmKiJObrfJw+fVr/9V//pZUrV2rRokWSmLefUlJSopKSEv3hD3+Qw+FQWFiYhg8fLol568yXX36pr776SvPmzVNkZKRuvPFG/e1vfzP3M2edW7ZsmYYOHaoNGzbokksu0ZAhQzR79mydOnVKUs/NW69/w7OvOXHihEpKSvTWW2+5tH//H6U7f0C1N3A6nfr88881Z84cs23fvn2qqanRypUrXfo2NDSYv9dWWlqq5uZmTZw48Zx9LmRz587Vp59+qq1btzJf/0BFRYWSk5PV1tamgQMHavXq1Ro3bhzz9hMqKir07LPPqqioSNKZ+zGuv/56+fn5MW/ncPz4ceXn5yspKUlOp1NZWVmaMGGCKisrZRgGc3YO77zzjqqrqzV69GgVFhZqz549mj59uqKiopSSktJj80b48bA9e/bo9OnTuvbaa13aKyoqdNlllykkJMRLlfmGPXv26NSpUy4rPw6HQ35+fkpKSnLpW1FRYa50OBwORUdHKyoq6px9LkROp1PTp0/Xli1bVFJSopEjR2rNmjXM108YMWKEHA6Hvv76az333HOaPn26ampq+Hd2Dvv371dqaqref/9982cEdu/erSlTpkji/5/nEh8fr/j4ePPz22+/rbCwMG3evFk2m40564TT6dTevXs1efJk5eTkSJKuu+46rVu3TmVlZbr44ot7bN647OVh39+R/v2vzX+vsLBQ48eP90ZJPmXXrl0aOHCghg4darY1NTUpJCTE5fdbnE6nNm3aZM5ZU1PTWXNaX1+vHTt2XLDzeuTIEd1yyy3as2ePdu7cqdGjR0tivv6R4OBgXXHFFRozZowyMzNVV1enqqoq5u0c/vznP6uqqkqxsbHq27ev+vbtq4MHDyorK0u33nor83aeAgIC1KdPH/Xp04c5O4fGxkZ1dHRo0qRJLu3+/v4aMGBAj84b4cfDvv+P0tjYaLatX79eBw4c0GOPPeatsnzGrl27lJSUJH////unZ7PZ1Nraqvb2drMtNzdXhmFo2rRpZp8fzqkk2e12xcXFKSUlpUdq70mVlZUaPXq0oqOjtW3bNsXGxpr7mK/zt23bNvXp00dxcXHM2zksXLhQVVVVcjgccjgceu211yRJW7Zs0euvv868nae1a9fq9OnTGjduHHN2DuHh4fL395fxg58U/frrr7Vt2zbdeeedPTtv53+PNs6H0+k0YmNjjYcfftj4n//5H2PVqlVGcHCw8dxzz3m7NK9pb283du/ebezevdtISEgwfv3rXxu7d+82Dh48aBiGYTQ0NBjBwcHG/PnzjUOHDhkvvviiERAQYKxdu9Y8x2effWb4+/sbOTk5xsGDB42FCxcagYGBxtatW701rG6zYcMGIzg42HjkkUeMurq6sx6hZb4699RTTxnvvvuusX//fmPPnj3GkiVLjP79+xvz5883DIN5O1+vvPKKERwcbL6Kgnk725o1a4w333zT2Lt3r/HZZ58Zzz77rDFgwABjyZIlhmEwZz/l7rvvNkaNGmVUVlYaH3/8sXHDDTcY119/vdHe3t6j80b46QY7d+40Ro0aZfTv39+4+uqrjTfffNPbJXnVtm3bDElnbampqWafTZs2GSNGjDD69+9vjB492nj//ffPOs/KlSuNyy67zBgwYIBxyy23GP/93//dk8PoMcOHD+90vm677TazD/N1thkzZhiXXHKJ0a9fPyMyMtIYO3assWbNGpc+zNs/NnPmTGPUqFEubcybqxdeeMEYOnSoERQUZNhsNuOWW24xioqKXPowZ52rr683Jk2aZISHhxsxMTFGWlqacezYMXN/T82bn2H8YP0JAADgAsc9PwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFIIPwAAwFL+fzSXwRwHMMiFAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "items['popularity'].plot.hist(bins=30);" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "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": 11, + "metadata": {}, + "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": 12, + "metadata": {}, + "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()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "indexed_items = items.set_index('item_id')\n" + ] + }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "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": 50, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "all_ratings.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "**Quick Exercise**:\n", + "\n", + "As we have seen, the `groupby` method is a powerful tool to quickly compute statistics on the data. Use it to compute the average rating for each movie.\n", + "\n", + "**Hint**: you can use the `mean` method after the `groupby` method." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "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", + "
item_idpopularitytitlerelease_datevideo_release_dateimdb_urlrelease_yearrating
01452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.03.878319
12131GoldenEye (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?GoldenEye%20(...1995.03.206107
2390Four Rooms (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Four%20Rooms%...1995.03.033333
34209Get Shorty (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Get%20Shorty%...1995.03.550239
4586Copycat (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Copycat%20(1995)1995.03.302326
\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 2 131 GoldenEye (1995) 1995-01-01 NaN \n", + "2 3 90 Four Rooms (1995) 1995-01-01 NaN \n", + "3 4 209 Get Shorty (1995) 1995-01-01 NaN \n", + "4 5 86 Copycat (1995) 1995-01-01 NaN \n", + "\n", + " imdb_url release_year rating \n", + "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 3.878319 \n", + "1 http://us.imdb.com/M/title-exact?GoldenEye%20(... 1995.0 3.206107 \n", + "2 http://us.imdb.com/M/title-exact?Four%20Rooms%... 1995.0 3.033333 \n", + "3 http://us.imdb.com/M/title-exact?Get%20Shorty%... 1995.0 3.550239 \n", + "4 http://us.imdb.com/M/title-exact?Copycat%20(1995) 1995.0 3.302326 " + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "#raise NotImplementedError(\"Please calculate the average rating for each movie\")\n", + "\n", + "avg_ratings = all_ratings.groupby('item_id')['rating'].mean()\n", + "\n", + "\n", + "items_with_avg = pd.merge(items, avg_ratings, on='item_id')\n", + "\n", + "# Show the first few rows\n", + "items_with_avg.head()\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's split the enriched data in a train / test split to make it possible to do predictive modeling:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "ratings_train, ratings_test = train_test_split(\n", + " all_ratings, test_size=0.2, random_state=0)\n", + "\n", + "user_id_train = np.array(ratings_train['user_id'])\n", + "item_id_train = np.array(ratings_train['item_id'])\n", + "rating_train = np.array(ratings_train['rating'])\n", + "\n", + "user_id_test = np.array(ratings_test['user_id'])\n", + "item_id_test = np.array(ratings_test['item_id'])\n", + "rating_test = np.array(ratings_test['rating'])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Explicit feedback: supervised ratings prediction\n", + "\n", + "Now let's begin to do some recommendation! We will build a model that takes a user and a movie as input and outputs a predicted rating. We will be taking advantage of embeddings to represent users and movies. That means that each movie and user will have an abstract representation in a continuous vector space. The model will learn these representations based on the ratings." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Predictive ratings as a regression problem\n", + "\n", + "The following code implements the following architecture:\n", + "\n", + "" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.layers import Embedding, Flatten, Dense, Dropout\n", + "from tensorflow.keras.layers import Dot\n", + "from tensorflow.keras.models import Model" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "# For each sample we input the integer identifiers\n", + "# of a single user and a single item\n", + "class RegressionModel(Model):\n", + " def __init__(self, embedding_size, max_user_id, max_item_id):\n", + " super().__init__()\n", + " \n", + " self.user_embedding = Embedding(output_dim=embedding_size,\n", + " input_dim=max_user_id + 1,\n", + " name='user_embedding')\n", + " self.item_embedding = Embedding(output_dim=embedding_size,\n", + " input_dim=max_item_id + 1,\n", + " name='item_embedding')\n", + " \n", + " # The following two layers don't have parameters.\n", + " self.flatten = Flatten()\n", + " self.dot = Dot(axes=1)\n", + " \n", + " def call(self, inputs):\n", + " user_inputs = inputs[0]\n", + " item_inputs = inputs[1]\n", + " \n", + " user_vecs = self.flatten(self.user_embedding(user_inputs))\n", + " item_vecs = self.flatten(self.item_embedding(item_inputs))\n", + " \n", + " y = self.dot([user_vecs, item_vecs])\n", + " return y\n", + "\n", + "\n", + "model = RegressionModel(embedding_size=64, max_user_id=all_ratings['user_id'].max(), max_item_id=all_ratings['item_id'].max())\n", + "model.compile(optimizer=\"adam\", loss='mae')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Monitoring runs\n", + "\n", + "When training a model with Keras, we get a `history` object back that contains lots of information about the training run. We can use this to plot the training and validation loss to see how the model has improved during training." + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "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.2766 - val_loss: 1.0354\n", + "Epoch 2/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 998us/step - loss: 0.8981 - val_loss: 0.7970\n", + "Epoch 3/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 995us/step - loss: 0.7568 - val_loss: 0.7678\n", + "Epoch 4/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 993us/step - loss: 0.7217 - val_loss: 0.7579\n", + "Epoch 5/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 994us/step - loss: 0.6993 - val_loss: 0.7464\n", + "Epoch 6/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 997us/step - loss: 0.6801 - val_loss: 0.7420\n", + "Epoch 7/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.6577 - val_loss: 0.7390\n", + "Epoch 8/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.6387 - val_loss: 0.7363\n", + "Epoch 9/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 991us/step - loss: 0.6173 - val_loss: 0.7372\n", + "Epoch 10/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 994us/step - loss: 0.5920 - val_loss: 0.7377\n", + "CPU times: user 15 s, sys: 6.94 s, total: 21.9 s\n", + "Wall time: 11.7 s\n" + ] + } + ], + "source": [ + "%%time\n", + "\n", + "# Training the model\n", + "history = model.fit([user_id_train, item_id_train], rating_train,\n", + " batch_size=64, epochs=10, validation_split=0.1,\n", + " shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGxCAYAAABBZ+3pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQ3ElEQVR4nO3deXxU5aH/8c9Mlsk62dgSDFtApBBCoEIVLdWCuSKril4XWq0oUMXrQvVHa6tSAZcrWsClULcr1VoRA9KCWKwXuUpDxIQgUJRFULKSkMlCJpOZ+f0xySRDFpIQMpPJ9/16zSsz5zznnOcQdL482zE4nU4nIiIiIj7M6O0KiIiIiJyNAouIiIj4PAUWERER8XkKLCIiIuLzFFhERETE5ymwiIiIiM9TYBERERGfp8AiIiIiPk+BRURERHyeAouIdIqNGzdiMBh46623vF0VEemCFFhEpFPs3r0bgNTUVC/XRES6IgUWEekUu3fvJjw8nKFDh3q7KiLSBSmwiEin2L17NykpKRiNzf9vJzMzk5kzZ9KjRw/MZjMTJkxg586dHmXsdjsvv/wyP/zhD4mOjiYiIoJhw4bxxBNPuMt899133H333QwePJiQkBB69OjB5Zdfzv/93/+dt/sTkfMr0NsVEBH/V1hYyPfff8/MmTObLfOXv/yFW2+9lWuvvZY33ngDg8HA8uXLufLKK9m9ezcXXXQRAL/85S959913eeSRRxg1ahRWq5WcnBwcDgcAxcXFjB07lqSkJJ544gkSEhIoLCxk27ZtBAcHd8r9ikjHMzidTqe3KyEi/m3Lli1cffXVvPLKK/ziF79otP/AgQOkpKQwf/58nn/+eff2U6dO0atXL+677z6efvppbDYb4eHh/P73v+fhhx9u8lqvv/46t99+O3l5efTu3ft83ZKIdDJ1CYnIeVc34Hb06NFN7l++fDkhISE8/vjjHtujo6Pp2bMnx44dAyAgIICYmBhWrVrFmjVryM/Pb3SuHj16AHDHHXfw0UcfUV1d3ZG3IiJeosAiIufd7t27MZlMDB8+vMn9//jHP/jJT35CVFSUx/bq6mry8/O54IILADAajWzdupUf/vCH3H///cTHxzN+/Hi2bNniPmbKlCn88Y9/5MSJE6SlpdGzZ09uu+02Tpw4cf5uUETOOwUWETnvdu/ezYgRIwgKCmpyf0FBAfHx8Y22f/TRR9jtdq666ir3tpSUFN5//31KSkrYsmULFouFadOmUVpa6i5z1113sXv3bgoKCnj88cd5++23uf/++zv+xkSk0yiwiMh5derUKY4cOdJsdxDAgAED+Pe//+2xrbKykv/3//4fKSkpTJw4sdExQUFBXHXVVdxwww3Y7XaaGo7Xo0cP/uu//ovExERqamrO/WZExGs0S0hEzqu68St2u5309PRG+y+//HLmzp3Lvffey0MPPcR//Md/kJeXx9NPP83JkyfZvn07RqORb7/9lilTpnDzzTczYsQIwsPD+eyzz1i2bBl33XUX0dHRLFu2jIyMDKZMmcLAgQMpLy/n1Vdf5fjx47z22mudfOci0pEUWETkvPryyy8BePXVV3n11Vcb7T927Bh33303DoeDl156iRUrVtCrVy+mTp3KY489Rs+ePQFX4Bk5ciSvvfYa33//PcHBwQwdOpQXX3yRn/3sZwAMHDiQjz/+mN/+9recPHmSXr16cckll5CRkUFKSkrn3bSIdDhNaxYRERGfpzEsIiIi4vMUWERERMTnKbCIiIiIz2tTYHE4HCxevJgf/ehHxMTEEBsbyw033NDkapMNpaenM3r0aMLCwhg1ahTbt29vVGbNmjVcdNFFhIeHM378ePbu3du2OxERERG/1abAcvjwYbKzs3nooYfYuXMnGzduZNeuXdxxxx3NHrN27VpuvPFG7rzzTvbu3cuECRO49tprsVgs7jJLlixh4cKFLF68mOzsbPr27cusWbOw2+3tvzMRERHxG+c8S+iRRx7hpZde4uTJk432FRUVkZSUxJIlS7jnnnsAKC8vJzIyki1btpCWlsb+/ftJTk4mPT2dKVOmALB3716Sk5M5cOAAQ4cOPZfqiYiIiB8453VYPv3002bXN1izZg1hYWHMmzfPvS0iIoKgoCAKCgoAeP7550lNTXWHFYDY2FjAtVx3c4HFarVitVrdnx0OB8XFxcTFxWEwGM71tkRERKQTOJ1OysrKSEhIwGhsvuPnnALLQw89xO7du/n000+b3J+ens706dMJDKy/zKlTp7DZbMTExACwYcMG7rvvPo/j6sJMXZmmLFu2rNGTXUVERKRrOn78uPtBp01pV2CxWq3ceeedfPTRR2zbto1Ro0Y1WS47O7vR+JbMzEzA9QCz3Nxc8vPzGz1jJDMzk5CQkBa7gxYt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zMrKIjU1lb179zJ8+HAv17DrUQtLC5599llmzpzpDisAsbGxOJ1OCgsLvVcxAeDTTz8lJSXF29XotrZt28a2bdu4++67ycrKIioqiosuusjb1eq2Vq1axZAhQ9iwYQP9+vVjwIABPPjgg9hsNm9XrVsaPnw4ISEhrF+/HofDQX5+Po899hiXX365Qn07KbA0o7y8nG3btnHdddd5bC8oKADO75Oh5eweeughdu/ezfLly71dlW4pMzOTp556iueffx5w/cvx4osvxmAweLdi3dh7773HF198gcPhYP369Tz66KP84Q9/cP+OpHP169ePxx57jPnz52MymejTpw8DBw5ky5YtHo+mkdbTn1ozcnJysNvtjB492mN7ZmYmgwYNIjIy0ks1696sVis/+9nPePPNN9m2bZtH65d0joMHDzJnzhzeeOMN9/NRvvzyS41f8SKr1cq+ffu4/vrrWbFiBT/84Q+5/fbbueqqqzTI0wucTic33HAD6enpbNmyhV27dnHPPffw17/+VeNXzoECSzNKSkoAGg1WW79+PVOnTvVGlbq9/Px8rrjiCnJycsjIyGDs2LHerlK39Mwzz7Bnzx4SExMJDAwkMDCQQ4cOsWzZMn760596u3rdUnFxMQ6Hg+uvv95ju9FoJCwszEu16r7ef/99/v73v7N582auuuoqRo0axcqVKwHXw36lfRRYmlEXVIqLi93b1q1bx9dff80999zjrWp1W9nZ2YwdO5b4+Hh27Njh8URw6Vy/+c1v2LNnD1lZWWRlZfHKK68A8NFHH/HGG294uXbdU0xMDEajkYZzKIqKitixYwdpaWlerFn3tH//fnr37u0xdKCsrIxTp04RGBjovYp1cQoszUhJSSExMZHFixdz6NAh3nrrLW677TaWLl3K4MGDvV29bmXjxo2MHz+eSZMmsWrVKsrKysjLy6OoqMjbVeuWBgwYwIgRI9yv6upqwsPDueKKK7jgggu8Xb1uKSQkhLS0NJ588kn27NnDZ599xpQpU7jwwguZPXu2t6vX7Vx++eUcPXqUJUuWcPjwYT7//HOmT59OREQEN998s7er12VpWnMLdu3axfz589m3bx9JSUk8/PDD3Hrrrd6uVrczbNgwDhw40Gj7xIkT+eijj7xQI2no/vvv59NPPyUzM9PbVenW8vLyWLBgAdu2bSM0NJQZM2awdOlSoqKivF21bunNN9/kqaee4tChQ/Ts2ZOf/vSnPPbYY/Tv39/bVeuyFFhERETE56lLSERERHyeAouIiIj4PAUWERER8XkKLCIiIuLzFFhERETE5ymwiIiIiM9TYBERERGfp8AiIiIiPk+BRURERHyeAouIiIj4PAUWERER8Xn/HyVqP0jj95fwAAAAAElFTkSuQmCC", + "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", + "plt.ylim(0, 2)\n", + "plt.legend(loc='best')\n", + "plt.title('Loss');" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Questions**:\n", + "\n", + "- Does it look like our model has overfit? Why or why not? \n", + "Your Answer: ____________\n", + "- Suggest something we could do to prevent overfitting. \n", + "Your Answer: ____________\n", + "\n", + "Now that the model is trained, let's check out the quality of predictions:" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The model is overfitting. This is because the training loss continues to decrease, while the validation loss starts increasing after a certain point.\n", + "This indicates that the model is learning the training data too well (including its noise), and its ability to generalize to unseen data is deteriorating. We can employ dropout to prevent overfitting. " + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [], + "source": [ + "def plot_predictions(y_true, y_pred):\n", + " plt.figure(figsize=(4, 4))\n", + " plt.xlim(-1, 6)\n", + " plt.xlabel(\"True rating\")\n", + " plt.ylim(-1, 6)\n", + " plt.ylabel(\"Predicted rating\")\n", + " plt.scatter(y_true, y_pred, s=60, alpha=0.01)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 320us/step\n", + "Final test MSE: 0.909\n", + "Final test MAE: 0.736\n" + ] + }, + { + "data": { + "image/png": "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7+Gv//qvuf7665mdneW8885rWq1DMj09zUtf+lLOOeccJiYmOPHEE5tW6YDcfvvt7Nixg9e97nX827/9G1dddRU33HDD0L+/xx9/PB/5yEe45ZZb+MpXvsLOnTv5jd/4jabVekA+8IEPsG7dOowxPP7xj29anYNy/fXXc/7553P33Xf3H3fccQdKqaZVOyhf+tKXeOYzn8mTnvQkvv71r3PTTTfxhje8gcMPP3xxv8Cvcaqq8nme+w996ENNq9LnK1/5ildK+RtvvLF/7fOf/7wXQvhOp9OcYovkvPPO809+8pObVmMgLr74Yr9x48am1RiIN77xjf7EE09sWo1D8qlPfcq/973v9V/4whc84G+55ZamVTooRxxxhP/oRz/atBqL5mc/+5nfuHGj/9rXvrbk37FmTwA9Bmkv/WDxjne8g7PPPpstW7b0r23cuBHvPT/72c+aU2yRbNu2bajez8XwzW9+k82bNzetxqKw1vKNb3yDD3/4w7zpTW9qWp2DcvXVV3P11Vfzyle+ku3btzM5OcnJJ5/ctFoH5I477uCee+7h9a9/PZs2beKJT3wiX/7yl5tW65C8973v5cQTT+Rzn/scRx11FMcccwy///u/T1VVi/8ly2ePRpMPfOADvtVq+aqqmlbFe+/99PS0V0r5j3/843td/4d/+AcP+KmpqYY0WxzdbtcnSTJSO6kLL7zQj4+P73XiGkZuuOEGPzY25pVSfnJy0n/xi19sWqWDcsMNN/inP/3pvtvteu+9f+ELX+if9rSnNazVwfne977n3//+9/tt27b5b33rW/55z3ueT9PU33rrrU2rdlBOPfVUr7X2r371q/0NN9zgP/jBD3qllH/b29626N+xqgzAJZdc4oFDPm644Ya9/swrX/lK/4QnPKEhjffnW9/6lgf8D37wg72uX3zxxf64445rSKvFc8MNN3jAf//7329alQek2+36c845xx9xxBH+uuuua1qdB2RmZsbfdttt/tprr/Vnn322f/jDH+6np6ebVms/fvCDH/jNmzf7u+66q3/t+OOP9xdffHGDWg3G7Oys11r7d7/73U2rckC63a6XUvqXvOQle11/1rOe5Z/73Ocu+veMRC+gxbLS7aUfDHbt2gWwXxDnM5/5DM973vOaUGkgtm3bxvj4+NAGgHvs3LmTs88+m06nw/XXXz8SQ4LGxsY44YQTOOGEE7jssss45ZRTuOmmm4Yug+3tb387N910017vqbWWyy+/nGuvvZarr766Qe0WR5IkKKWGNgB8//3345zjhS984V7XpZS02+1F/55VZQBWQ3vp3sJ///33s2HDBgA+/elPc9ttt3HVVVc1qdqi2LZtG1u3bl1Sb/IHix07dnDWWWfx2Mc+lr/5m79hbGysaZUG5pprrkEpxbHHHtu0Kvtx8cUX85rXvKb/etu2bZx77rl89atf5aSTTmpQs8XzyU9+Emstz372s5tW5YBs2LABKeVeYyDvvfderrnmGt75zncu+vesKgOwWIa5vfTmzZs58sgjefOb38z//t//m+uuu46Xv/zl/Mmf/AknnHBCo7odjKqquPnmmwH4t3/7Nx796Eezfft2JiYmOO644xrWbm+uuuoqXvrSl/KSl7yEt7zlLUxPTzM9PY3WeqDNw4PJJZdcwtatWznllFMoioIvfvGLXHrppVx44YU87GEPa1q9/dj3lH3ttdcyNjbGU5/6VIQQzSh1CD7xiU9gjOGMM87AOdd/fy+77LKhNLAAeZ7zzGc+k7e+9a2cdNJJzMzMcMEFF3DSSSdxzjnnLP4XLbNraiQ4//zzDxgfuOaaa5pWzXvv/fXXX+/POOMM32q1/Kmnnur/9m//tmmVDsk111xzwPfz/PPPb1q1/Tj55JMPqOswByhf8YpX+KOOOsqnaeo3bdrkzzzzzP2SBIaZ1772tf6MM85oWo2D8q53vcufeOKJPs9zf/jhh/unPvWp/vOf/3zTaj0gd999t3/hC1/oN2zY4B/+8If7/+//+//87t27B/odsR10JBKJrFGG11EbiUQikRUlGoBIJBJZo0QDEIlEImuUaAAikUhkjRINQCQSiaxRogGIRCKRNUo0AJFIJLJGiQYgEolE1ijRAEQiQ87dd9891CM2I6NLNACRkefLX/7yfrNc93186UtfalrNRfHa176W//k//+de1w477DDuueeekWmkFhkd1mQzuMjq4slPfjJ33313//Wpp57KK17xCl796lf3r+3b6K2qKpIkeVD0c84BLKpD6g033MBznvOcva6lacpDH/rQFdEtsraJJ4DIyNNqtTjiiCM44ogjsNZy3333ceaZZ/avHXHEETztaU/j93//93nVq17FYYcdxtlnn833v/99hBD813/9V/93zc7OopRi27Zt/Wu33HILz33ucxkfH+chD3kIr3rVqyiK4qD6fPjDH+boo4/mYx/7GI961KNIkoT77ruPm266ibPOOosjjjiCVqvF6aefzje+8Q0gGKQ0TfnWt77FxRdfjBCiP0D93HPP5bd+67f6v//MM8/kjW98I7/3e7/HQx7yEDZs2MCll166lw7/+Z//yfOe9zza7TYnnXQSX/va19i0aROf+9znluU9j6wSVqRNXSTSEJ///Oc94Hfu3LnX9Q0bNviNGzf6d7zjHf62227zt99+u//4xz/uDzvssL3kvvWtb3mllO90Ov3X69ev93/+53/ub7vtNv+v//qv/oQTTvBvectbDqrDa17zGj82NubPOussv23bNv/d737Xe+/9F77wBf/Rj37U33LLLf773/++P++88/xDHvIQ77331lp/3XXXecBv377d33333X7Xrl3ee+83b97s3/Wud3nvvXfO+YmJCf+IRzzCX3HFFf62227z73nPezzgf/KTn3jvQ5fIhz3sYf68887z3/3ud/0///M/+xNPPNED/sc//vHP+xZHVhHRAERWFZdeeql/xCMesde1n/zkJx7wb3/72/e6/oY3vMH/9//+3/e69hd/8Rf+0Y9+tPfee2OMf+QjH+k/+MEP7iXzZ3/2Z/6pT33qQXV4ylOe4jdv3vyAc6Z/8IMfeMDff//93vsw93lfg1SWpU/T1P/Lv/yL9977f//3f/eAv/LKK/syMzMze407Pffcc/3jH/9475zry/ze7/2en5ycPKQ+kbVHjAFEVhXf+c539hvxuX37dtI05RWveMV+1zdv3nzQa9dccw0/+MEPeNWrXrVXPKGqKp785CcfVIcdO3bw1re+Fa33/np97GMf48orr+RHP/oRu3fvxlrL+Ph4fwjRjTfeuJ8+t9xyC2VZ9q/v2LGDPM956Utf2pe5/fbbATj++OPpdDp84hOf4NOf/vRew1eyLNvvd0ci0QBEVhXf+c53OO+88/a6tmPHDs444wzWrVu33/WFCymEIGxvrvSOHTs47bTT+Pu///v9/p59f1ePO+64g127dvGUpzxlr+tvectbeO9738ull17KYx/7WCYnJ3n3u9/NjTfe2F+oD2SQduzYwVFHHdUfD9rTaeHc1xtvvJGjjz6aDRs2sGPHDrrd7n5G8NZbb2XLli0H1DmydokGILJquO+++7jzzjsPeALYuvX/b+/+XZKLwjiAf93UGrTEwdGwaJJ3EARHJycRwen+AaKbW0Sz0u4QQQ5BUyCCP0AXQXAQRW9SERYEQQ5iUNwpwucdwou+VjS8oHi/n83j4fqc5XzVc+D5MzemaRqGwyH29vb0sdvbW/R6PaTTaQCfjcFfXl7gdrt/3eO41+thc3NzoX1nLpfD4eEh4vG4/vnlchmhUEif0+/3EYlEFp43Gwqqqi6spdvt6pv7tIm5pmn6+w8PDyiVSjg5OfnVGsg4eAuI1sb05s6/AfDVpmmxWGC1WtFqtQB8bv6KogCAvuEGg0GMRiMkEgnc3Nzg7u4OhUIBR0dH39agqiq8Xu9CYGxtbaFareL+/h6NRgORSARPT09zdU0mE1xdXeH5+Rmvr6/682a/uauq+mXATed4PB44nU4cHBxgMBigXq8jFovh4+ODvwBo0bIPIYj+l0wmo9+qmXp7exOTyaQfkM46OzsTp9MpLpdLwuGwHB8fi8PhmJtTqVTE5/PJxsaG2Gw28fv9P/ZojkajkkwmF8abzabs7++L2WwWv98vpVJp7uBWROT8/FxcLpcAkFQqJSIi29vbcnl5+eNabDab5PN5/XWtVpPd3V0xm80SDAYlm82K1WqV9/f3b+smY2JPYKI1pygKJpMJLi4ull0KrRieARCtkevra7TbbQQCAWiahtPTUxSLRbTb7WWXRiuIAUC0RsbjMTKZDB4fH2G32xEIBNDpdLCzs7Ps0mgF8S8gIiKD4i0gIiKDYgAQERkUA4CIyKAYAEREBsUAICIyKAYAEZFBMQCIiAyKAUBEZFB/AWJNeEWRxLSxAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from sklearn.metrics import mean_squared_error\n", + "from sklearn.metrics import mean_absolute_error\n", + "\n", + "test_preds = model.predict([user_id_test, item_id_test])\n", + "print(\"Final test MSE: %0.3f\" % mean_squared_error(test_preds, rating_test))\n", + "print(\"Final test MAE: %0.3f\" % mean_absolute_error(test_preds, rating_test))\n", + "plot_predictions(rating_test, test_preds)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "This graph shows us the range of predicted ratings our model gives, organized by the true rating. We can see that generally, the higher the true rating the higher the predicted rating, although there is quite a range of predictions for each instance. That's okay - our model is very simple, and human preferences are very complex!\n", + "\n", + "Taking a look at the Mean Absolute Error, hopefully you got something around 0.75. This means that, on average, our predicted ratings are about 0.75 stars off from the true ratings. This is a pretty good result for a first attempt. We could probably do better with a more complex model, but we'll leave that for another time." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Model Embeddings\n", + "\n", + "Our model was built with two embedding layers. These layers have learned a representation of both the users and the movies in our dataset. We can extract these representations and use them to find similar movies or users. We can also do interesting exploratory analysis, like finding the most popular movies among our users, or finding the users that are most interested in a given movie." + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(944, 64), (1683, 64)]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# weights and shape\n", + "weights = model.get_weights()\n", + "[w.shape for w in weights]" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": {}, + "outputs": [], + "source": [ + "user_embeddings = weights[0]\n", + "item_embeddings = weights[1]" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "metadata": {}, + "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]}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Embedding vector for item_id=181\n", + "[ 0.5049994 -0.24453689 -0.5053119 -0.14520554 -0.17662948 -0.4140876\n", + " 0.33397424 -0.43637303 0.2627958 0.19209456 -0.00306972 0.01615785\n", + " 0.36145076 0.06600716 0.5860347 -0.3238521 -0.19712465 -0.20112757\n", + " -0.35017866 -0.39645898 -0.10436684 -0.22903298 -0.24842347 -0.33779415\n", + " 0.54455906 0.5913569 0.10188422 -0.27270707 0.29540297 -0.32222798\n", + " 0.26548845 0.31300977 0.6348242 -0.3539588 0.27794433 -0.3257407\n", + " 0.5135676 -0.08596199 0.1292318 0.4055005 -0.39303997 0.20708163\n", + " -0.39546552 0.13766694 -0.28147334 0.13006787 0.37037337 -0.1605785\n", + " 0.3609969 -0.15301947 -0.37705556 -0.5487598 -0.59837615 0.2999434\n", + " -0.5337184 -0.3211866 0.3655793 0.23211122 -0.1254762 0.4025621\n", + " 0.23172197 -0.2985614 0.25593528 -0.29194993]\n", + "shape: (64,)\n" + ] + } + ], + "source": [ + "print(f\"Embedding vector for item_id={item_id}\")\n", + "print(item_embeddings[item_id])\n", + "print(\"shape:\", item_embeddings[item_id].shape)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "As we discussed in lecture, our embeddings are not directly interpretable - we can't look at, say, a value of 0.297 in the embedding vector and say \"this means that the movie is a drama\". As an aside, there is a field of research dedicated to making _interpretable_ embeddings, but it's not something we'll cover in this course. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Finding our most similar items\n", + "\n", + "Now we can have some fun, investigating the embeddings we've learned. We can start by finding the most similar items to a given item. We can do this by computing the cosine similarity between the item's embedding and the embedding of every other item. We can use the `cosine_similarity` function from `sklearn` to do this." + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from sklearn.metrics.pairwise import cosine_similarity\n", + "\n", + "def cosine(a, b):\n", + " # Reshape to the shape our function expects\n", + " a = a.reshape(1, -1)\n", + " b = b.reshape(1, -1)\n", + " return cosine_similarity(a, b)[0, 0]" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Star Wars (1977)\n", + "Return of the Jedi (1983)\n", + "Cosine similarity: 0.922\n" + ] + } + ], + "source": [ + "def print_similarity(item_a, item_b, item_embeddings, titles):\n", + " print(titles[item_a])\n", + " print(titles[item_b])\n", + " similarity = cosine(item_embeddings[item_a],\n", + " item_embeddings[item_b])\n", + " print(f\"Cosine similarity: {similarity:.3}\")\n", + " \n", + "print_similarity(50, 181, item_embeddings, indexed_items[\"title\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "It makes sense that the original Star Wars, and its later sequel Return of the Jedi have a high similarity. Let's try some other examples:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Scream (1996)\n", + "Cosine similarity: 0.613\n" + ] + } + ], + "source": [ + "print_similarity(181, 288, item_embeddings, indexed_items[\"title\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Toy Story (1995)\n", + "Cosine similarity: 0.827\n" + ] + } + ], + "source": [ + "print_similarity(181, 1, item_embeddings, indexed_items[\"title\"])" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": {}, + "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\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "*Quick Exercise*:Find some other films and compare their similarity. Do the results make sense to you? Can you find a pair of films that are very _dissimilar_?\n", + "\n", + "- " + ] + }, + { + "cell_type": "code", + "execution_count": 54, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Jedi movie IDs: [181]\n", + "Return of the Jedi (1983)\n", + "Toy Story (1995)\n", + "Cosine similarity: 0.827\n", + "Return of the Jedi (1983)\n", + "GoldenEye (1995)\n", + "Cosine similarity: 0.748\n", + "Return of the Jedi (1983)\n", + "Four Rooms (1995)\n", + "Cosine similarity: 0.529\n", + "Return of the Jedi (1983)\n", + "Get Shorty (1995)\n", + "Cosine similarity: 0.703\n", + "Return of the Jedi (1983)\n", + "Copycat (1995)\n", + "Cosine similarity: 0.607\n", + "Return of the Jedi (1983)\n", + "Shanghai Triad (Yao a yao yao dao waipo qiao) (1995)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Twelve Monkeys (1995)\n", + "Cosine similarity: 0.773\n", + "Return of the Jedi (1983)\n", + "Babe (1995)\n", + "Cosine similarity: 0.747\n", + "Return of the Jedi (1983)\n", + "Dead Man Walking (1995)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "Richard III (1995)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Seven (Se7en) (1995)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Usual Suspects, The (1995)\n", + "Cosine similarity: 0.773\n", + "Return of the Jedi (1983)\n", + "Mighty Aphrodite (1995)\n", + "Cosine similarity: 0.657\n", + "Return of the Jedi (1983)\n", + "Postino, Il (1994)\n", + "Cosine similarity: 0.541\n", + "Return of the Jedi (1983)\n", + "Mr. Holland's Opus (1995)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "French Twist (Gazon maudit) (1995)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "From Dusk Till Dawn (1996)\n", + "Cosine similarity: 0.719\n", + "Return of the Jedi (1983)\n", + "White Balloon, The (1995)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Antonia's Line (1995)\n", + "Cosine similarity: 0.515\n", + "Return of the Jedi (1983)\n", + "Angels and Insects (1995)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Muppet Treasure Island (1996)\n", + "Cosine similarity: 0.711\n", + "Return of the Jedi (1983)\n", + "Braveheart (1995)\n", + "Cosine similarity: 0.768\n", + "Return of the Jedi (1983)\n", + "Taxi Driver (1976)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Rumble in the Bronx (1995)\n", + "Cosine similarity: 0.646\n", + "Return of the Jedi (1983)\n", + "Birdcage, The (1996)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Brothers McMullen, The (1995)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Bad Boys (1995)\n", + "Cosine similarity: 0.69\n", + "Return of the Jedi (1983)\n", + "Apollo 13 (1995)\n", + "Cosine similarity: 0.762\n", + "Return of the Jedi (1983)\n", + "Batman Forever (1995)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Belle de jour (1967)\n", + "Cosine similarity: 0.738\n", + "Return of the Jedi (1983)\n", + "Crimson Tide (1995)\n", + "Cosine similarity: 0.782\n", + "Return of the Jedi (1983)\n", + "Crumb (1994)\n", + "Cosine similarity: 0.534\n", + "Return of the Jedi (1983)\n", + "Desperado (1995)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Doom Generation, The (1995)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Free Willy 2: The Adventure Home (1995)\n", + "Cosine similarity: 0.64\n", + "Return of the Jedi (1983)\n", + "Mad Love (1995)\n", + "Cosine similarity: 0.43\n", + "Return of the Jedi (1983)\n", + "Nadja (1994)\n", + "Cosine similarity: 0.501\n", + "Return of the Jedi (1983)\n", + "Net, The (1995)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Strange Days (1995)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "To Wong Foo, Thanks for Everything! Julie Newmar (1995)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Billy Madison (1995)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "Clerks (1994)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Disclosure (1994)\n", + "Cosine similarity: 0.601\n", + "Return of the Jedi (1983)\n", + "Dolores Claiborne (1994)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Eat Drink Man Woman (1994)\n", + "Cosine similarity: 0.569\n", + "Return of the Jedi (1983)\n", + "Exotica (1994)\n", + "Cosine similarity: 0.513\n", + "Return of the Jedi (1983)\n", + "Ed Wood (1994)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Hoop Dreams (1994)\n", + "Cosine similarity: 0.76\n", + "Return of the Jedi (1983)\n", + "I.Q. (1994)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Star Wars (1977)\n", + "Cosine similarity: 0.922\n", + "Return of the Jedi (1983)\n", + "Legends of the Fall (1994)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Madness of King George, The (1994)\n", + "Cosine similarity: 0.664\n", + "Return of the Jedi (1983)\n", + "Natural Born Killers (1994)\n", + "Cosine similarity: 0.5\n", + "Return of the Jedi (1983)\n", + "Outbreak (1995)\n", + "Cosine similarity: 0.668\n", + "Return of the Jedi (1983)\n", + "Professional, The (1994)\n", + "Cosine similarity: 0.649\n", + "Return of the Jedi (1983)\n", + "Pulp Fiction (1994)\n", + "Cosine similarity: 0.621\n", + "Return of the Jedi (1983)\n", + "Priest (1994)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "Quiz Show (1994)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Three Colors: Red (1994)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "Three Colors: Blue (1993)\n", + "Cosine similarity: 0.544\n", + "Return of the Jedi (1983)\n", + "Three Colors: White (1994)\n", + "Cosine similarity: 0.596\n", + "Return of the Jedi (1983)\n", + "Stargate (1994)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Santa Clause, The (1994)\n", + "Cosine similarity: 0.587\n", + "Return of the Jedi (1983)\n", + "Shawshank Redemption, The (1994)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "What's Eating Gilbert Grape (1993)\n", + "Cosine similarity: 0.581\n", + "Return of the Jedi (1983)\n", + "While You Were Sleeping (1995)\n", + "Cosine similarity: 0.733\n", + "Return of the Jedi (1983)\n", + "Ace Ventura: Pet Detective (1994)\n", + "Cosine similarity: 0.543\n", + "Return of the Jedi (1983)\n", + "Crow, The (1994)\n", + "Cosine similarity: 0.632\n", + "Return of the Jedi (1983)\n", + "Forrest Gump (1994)\n", + "Cosine similarity: 0.772\n", + "Return of the Jedi (1983)\n", + "Four Weddings and a Funeral (1994)\n", + "Cosine similarity: 0.705\n", + "Return of the Jedi (1983)\n", + "Lion King, The (1994)\n", + "Cosine similarity: 0.72\n", + "Return of the Jedi (1983)\n", + "Mask, The (1994)\n", + "Cosine similarity: 0.708\n", + "Return of the Jedi (1983)\n", + "Maverick (1994)\n", + "Cosine similarity: 0.748\n", + "Return of the Jedi (1983)\n", + "Faster Pussycat! Kill! Kill! (1965)\n", + "Cosine similarity: 0.503\n", + "Return of the Jedi (1983)\n", + "Brother Minister: The Assassination of Malcolm X (1994)\n", + "Cosine similarity: 0.673\n", + "Return of the Jedi (1983)\n", + "Carlito's Way (1993)\n", + "Cosine similarity: 0.777\n", + "Return of the Jedi (1983)\n", + "Firm, The (1993)\n", + "Cosine similarity: 0.779\n", + "Return of the Jedi (1983)\n", + "Free Willy (1993)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Fugitive, The (1993)\n", + "Cosine similarity: 0.747\n", + "Return of the Jedi (1983)\n", + "Hot Shots! Part Deux (1993)\n", + "Cosine similarity: 0.666\n", + "Return of the Jedi (1983)\n", + "Hudsucker Proxy, The (1994)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Jurassic Park (1993)\n", + "Cosine similarity: 0.753\n", + "Return of the Jedi (1983)\n", + "Much Ado About Nothing (1993)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "Robert A. Heinlein's The Puppet Masters (1994)\n", + "Cosine similarity: 0.638\n", + "Return of the Jedi (1983)\n", + "Ref, The (1994)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Remains of the Day, The (1993)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Searching for Bobby Fischer (1993)\n", + "Cosine similarity: 0.745\n", + "Return of the Jedi (1983)\n", + "Sleepless in Seattle (1993)\n", + "Cosine similarity: 0.731\n", + "Return of the Jedi (1983)\n", + "Blade Runner (1982)\n", + "Cosine similarity: 0.747\n", + "Return of the Jedi (1983)\n", + "So I Married an Axe Murderer (1993)\n", + "Cosine similarity: 0.766\n", + "Return of the Jedi (1983)\n", + "Nightmare Before Christmas, The (1993)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "True Romance (1993)\n", + "Cosine similarity: 0.637\n", + "Return of the Jedi (1983)\n", + "Welcome to the Dollhouse (1995)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Home Alone (1990)\n", + "Cosine similarity: 0.676\n", + "Return of the Jedi (1983)\n", + "Aladdin (1992)\n", + "Cosine similarity: 0.782\n", + "Return of the Jedi (1983)\n", + "Terminator 2: Judgment Day (1991)\n", + "Cosine similarity: 0.809\n", + "Return of the Jedi (1983)\n", + "Dances with Wolves (1990)\n", + "Cosine similarity: 0.646\n", + "Return of the Jedi (1983)\n", + "Silence of the Lambs, The (1991)\n", + "Cosine similarity: 0.756\n", + "Return of the Jedi (1983)\n", + "Snow White and the Seven Dwarfs (1937)\n", + "Cosine similarity: 0.732\n", + "Return of the Jedi (1983)\n", + "Fargo (1996)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Heavy Metal (1981)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "Aristocats, The (1970)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "All Dogs Go to Heaven 2 (1996)\n", + "Cosine similarity: 0.683\n", + "Return of the Jedi (1983)\n", + "Theodore Rex (1995)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Sgt. Bilko (1996)\n", + "Cosine similarity: 0.692\n", + "Return of the Jedi (1983)\n", + "Diabolique (1996)\n", + "Cosine similarity: 0.616\n", + "Return of the Jedi (1983)\n", + "Moll Flanders (1996)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Kids in the Hall: Brain Candy (1996)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Mystery Science Theater 3000: The Movie (1996)\n", + "Cosine similarity: 0.788\n", + "Return of the Jedi (1983)\n", + "Operation Dumbo Drop (1995)\n", + "Cosine similarity: 0.589\n", + "Return of the Jedi (1983)\n", + "Truth About Cats & Dogs, The (1996)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Flipper (1996)\n", + "Cosine similarity: 0.434\n", + "Return of the Jedi (1983)\n", + "Horseman on the Roof, The (Hussard sur le toit, Le) (1995)\n", + "Cosine similarity: 0.682\n", + "Return of the Jedi (1983)\n", + "Wallace & Gromit: The Best of Aardman Animation (1996)\n", + "Cosine similarity: 0.713\n", + "Return of the Jedi (1983)\n", + "Haunted World of Edward D. Wood Jr., The (1995)\n", + "Cosine similarity: 0.754\n", + "Return of the Jedi (1983)\n", + "Cold Comfort Farm (1995)\n", + "Cosine similarity: 0.596\n", + "Return of the Jedi (1983)\n", + "Rock, The (1996)\n", + "Cosine similarity: 0.733\n", + "Return of the Jedi (1983)\n", + "Twister (1996)\n", + "Cosine similarity: 0.688\n", + "Return of the Jedi (1983)\n", + "Maya Lin: A Strong Clear Vision (1994)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Striptease (1996)\n", + "Cosine similarity: 0.521\n", + "Return of the Jedi (1983)\n", + "Independence Day (ID4) (1996)\n", + "Cosine similarity: 0.744\n", + "Return of the Jedi (1983)\n", + "Cable Guy, The (1996)\n", + "Cosine similarity: 0.417\n", + "Return of the Jedi (1983)\n", + "Frighteners, The (1996)\n", + "Cosine similarity: 0.777\n", + "Return of the Jedi (1983)\n", + "Lone Star (1996)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Phenomenon (1996)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "Spitfire Grill, The (1996)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Godfather, The (1972)\n", + "Cosine similarity: 0.728\n", + "Return of the Jedi (1983)\n", + "Supercop (1992)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Bound (1996)\n", + "Cosine similarity: 0.799\n", + "Return of the Jedi (1983)\n", + "Kansas City (1996)\n", + "Cosine similarity: 0.702\n", + "Return of the Jedi (1983)\n", + "Breakfast at Tiffany's (1961)\n", + "Cosine similarity: 0.507\n", + "Return of the Jedi (1983)\n", + "Wizard of Oz, The (1939)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Gone with the Wind (1939)\n", + "Cosine similarity: 0.712\n", + "Return of the Jedi (1983)\n", + "Citizen Kane (1941)\n", + "Cosine similarity: 0.632\n", + "Return of the Jedi (1983)\n", + "2001: A Space Odyssey (1968)\n", + "Cosine similarity: 0.736\n", + "Return of the Jedi (1983)\n", + "Mr. Smith Goes to Washington (1939)\n", + "Cosine similarity: 0.765\n", + "Return of the Jedi (1983)\n", + "Big Night (1996)\n", + "Cosine similarity: 0.553\n", + "Return of the Jedi (1983)\n", + "D3: The Mighty Ducks (1996)\n", + "Cosine similarity: 0.472\n", + "Return of the Jedi (1983)\n", + "Love Bug, The (1969)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Homeward Bound: The Incredible Journey (1993)\n", + "Cosine similarity: 0.569\n", + "Return of the Jedi (1983)\n", + "20,000 Leagues Under the Sea (1954)\n", + "Cosine similarity: 0.785\n", + "Return of the Jedi (1983)\n", + "Bedknobs and Broomsticks (1971)\n", + "Cosine similarity: 0.534\n", + "Return of the Jedi (1983)\n", + "Sound of Music, The (1965)\n", + "Cosine similarity: 0.62\n", + "Return of the Jedi (1983)\n", + "Die Hard (1988)\n", + "Cosine similarity: 0.762\n", + "Return of the Jedi (1983)\n", + "Lawnmower Man, The (1992)\n", + "Cosine similarity: 0.663\n", + "Return of the Jedi (1983)\n", + "Unhook the Stars (1996)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Long Kiss Goodnight, The (1996)\n", + "Cosine similarity: 0.814\n", + "Return of the Jedi (1983)\n", + "Ghost and the Darkness, The (1996)\n", + "Cosine similarity: 0.55\n", + "Return of the Jedi (1983)\n", + "Jude (1996)\n", + "Cosine similarity: 0.494\n", + "Return of the Jedi (1983)\n", + "Swingers (1996)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Willy Wonka and the Chocolate Factory (1971)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Sleeper (1973)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Fish Called Wanda, A (1988)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Monty Python's Life of Brian (1979)\n", + "Cosine similarity: 0.559\n", + "Return of the Jedi (1983)\n", + "Dirty Dancing (1987)\n", + "Cosine similarity: 0.549\n", + "Return of the Jedi (1983)\n", + "Reservoir Dogs (1992)\n", + "Cosine similarity: 0.658\n", + "Return of the Jedi (1983)\n", + "Platoon (1986)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Weekend at Bernie's (1989)\n", + "Cosine similarity: 0.562\n", + "Return of the Jedi (1983)\n", + "Basic Instinct (1992)\n", + "Cosine similarity: 0.549\n", + "Return of the Jedi (1983)\n", + "Glengarry Glen Ross (1992)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Top Gun (1986)\n", + "Cosine similarity: 0.708\n", + "Return of the Jedi (1983)\n", + "On Golden Pond (1981)\n", + "Cosine similarity: 0.577\n", + "Return of the Jedi (1983)\n", + "Return of the Pink Panther, The (1974)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "Abyss, The (1989)\n", + "Cosine similarity: 0.791\n", + "Return of the Jedi (1983)\n", + "Jean de Florette (1986)\n", + "Cosine similarity: 0.73\n", + "Return of the Jedi (1983)\n", + "Manon of the Spring (Manon des sources) (1986)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Private Benjamin (1980)\n", + "Cosine similarity: 0.665\n", + "Return of the Jedi (1983)\n", + "Monty Python and the Holy Grail (1974)\n", + "Cosine similarity: 0.767\n", + "Return of the Jedi (1983)\n", + "Wrong Trousers, The (1993)\n", + "Cosine similarity: 0.75\n", + "Return of the Jedi (1983)\n", + "Cinema Paradiso (1988)\n", + "Cosine similarity: 0.657\n", + "Return of the Jedi (1983)\n", + "Delicatessen (1991)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Empire Strikes Back, The (1980)\n", + "Cosine similarity: 0.933\n", + "Return of the Jedi (1983)\n", + "Princess Bride, The (1987)\n", + "Cosine similarity: 0.807\n", + "Return of the Jedi (1983)\n", + "Raiders of the Lost Ark (1981)\n", + "Cosine similarity: 0.854\n", + "Return of the Jedi (1983)\n", + "Brazil (1985)\n", + "Cosine similarity: 0.557\n", + "Return of the Jedi (1983)\n", + "Aliens (1986)\n", + "Cosine similarity: 0.819\n", + "Return of the Jedi (1983)\n", + "Good, The Bad and The Ugly, The (1966)\n", + "Cosine similarity: 0.751\n", + "Return of the Jedi (1983)\n", + "12 Angry Men (1957)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "Clockwork Orange, A (1971)\n", + "Cosine similarity: 0.552\n", + "Return of the Jedi (1983)\n", + "Apocalypse Now (1979)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "GoodFellas (1990)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Alien (1979)\n", + "Cosine similarity: 0.798\n", + "Return of the Jedi (1983)\n", + "Army of Darkness (1993)\n", + "Cosine similarity: 0.727\n", + "Return of the Jedi (1983)\n", + "Psycho (1960)\n", + "Cosine similarity: 0.666\n", + "Return of the Jedi (1983)\n", + "Blues Brothers, The (1980)\n", + "Cosine similarity: 0.775\n", + "Return of the Jedi (1983)\n", + "Godfather: Part II, The (1974)\n", + "Cosine similarity: 0.749\n", + "Return of the Jedi (1983)\n", + "Full Metal Jacket (1987)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Grand Day Out, A (1992)\n", + "Cosine similarity: 0.701\n", + "Return of the Jedi (1983)\n", + "Henry V (1989)\n", + "Cosine similarity: 0.705\n", + "Return of the Jedi (1983)\n", + "Amadeus (1984)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "Raging Bull (1980)\n", + "Cosine similarity: 0.565\n", + "Return of the Jedi (1983)\n", + "Right Stuff, The (1983)\n", + "Cosine similarity: 0.763\n", + "Return of the Jedi (1983)\n", + "Sting, The (1973)\n", + "Cosine similarity: 0.786\n", + "Return of the Jedi (1983)\n", + "Terminator, The (1984)\n", + "Cosine similarity: 0.807\n", + "Return of the Jedi (1983)\n", + "Dead Poets Society (1989)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Graduate, The (1967)\n", + "Cosine similarity: 0.572\n", + "Return of the Jedi (1983)\n", + "Nikita (La Femme Nikita) (1990)\n", + "Cosine similarity: 0.697\n", + "Return of the Jedi (1983)\n", + "Bridge on the River Kwai, The (1957)\n", + "Cosine similarity: 0.75\n", + "Return of the Jedi (1983)\n", + "Shining, The (1980)\n", + "Cosine similarity: 0.59\n", + "Return of the Jedi (1983)\n", + "Evil Dead II (1987)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Groundhog Day (1993)\n", + "Cosine similarity: 0.818\n", + "Return of the Jedi (1983)\n", + "Unforgiven (1992)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Back to the Future (1985)\n", + "Cosine similarity: 0.801\n", + "Return of the Jedi (1983)\n", + "Patton (1970)\n", + "Cosine similarity: 0.824\n", + "Return of the Jedi (1983)\n", + "Akira (1988)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "Cyrano de Bergerac (1990)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Young Frankenstein (1974)\n", + "Cosine similarity: 0.688\n", + "Return of the Jedi (1983)\n", + "This Is Spinal Tap (1984)\n", + "Cosine similarity: 0.624\n", + "Return of the Jedi (1983)\n", + "Indiana Jones and the Last Crusade (1989)\n", + "Cosine similarity: 0.885\n", + "Return of the Jedi (1983)\n", + "M*A*S*H (1970)\n", + "Cosine similarity: 0.798\n", + "Return of the Jedi (1983)\n", + "Unbearable Lightness of Being, The (1988)\n", + "Cosine similarity: 0.52\n", + "Return of the Jedi (1983)\n", + "Room with a View, A (1986)\n", + "Cosine similarity: 0.692\n", + "Return of the Jedi (1983)\n", + "Pink Floyd - The Wall (1982)\n", + "Cosine similarity: 0.716\n", + "Return of the Jedi (1983)\n", + "Field of Dreams (1989)\n", + "Cosine similarity: 0.769\n", + "Return of the Jedi (1983)\n", + "When Harry Met Sally... (1989)\n", + "Cosine similarity: 0.691\n", + "Return of the Jedi (1983)\n", + "Bram Stoker's Dracula (1992)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Cape Fear (1991)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Nightmare on Elm Street, A (1984)\n", + "Cosine similarity: 0.665\n", + "Return of the Jedi (1983)\n", + "Mirror Has Two Faces, The (1996)\n", + "Cosine similarity: 0.541\n", + "Return of the Jedi (1983)\n", + "Breaking the Waves (1996)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Star Trek: First Contact (1996)\n", + "Cosine similarity: 0.812\n", + "Return of the Jedi (1983)\n", + "Sling Blade (1996)\n", + "Cosine similarity: 0.766\n", + "Return of the Jedi (1983)\n", + "Ridicule (1996)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "101 Dalmatians (1996)\n", + "Cosine similarity: 0.702\n", + "Return of the Jedi (1983)\n", + "Die Hard 2 (1990)\n", + "Cosine similarity: 0.763\n", + "Return of the Jedi (1983)\n", + "Star Trek VI: The Undiscovered Country (1991)\n", + "Cosine similarity: 0.789\n", + "Return of the Jedi (1983)\n", + "Star Trek: The Wrath of Khan (1982)\n", + "Cosine similarity: 0.82\n", + "Return of the Jedi (1983)\n", + "Star Trek III: The Search for Spock (1984)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "Star Trek IV: The Voyage Home (1986)\n", + "Cosine similarity: 0.787\n", + "Return of the Jedi (1983)\n", + "Batman Returns (1992)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Young Guns (1988)\n", + "Cosine similarity: 0.74\n", + "Return of the Jedi (1983)\n", + "Under Siege (1992)\n", + "Cosine similarity: 0.741\n", + "Return of the Jedi (1983)\n", + "Jaws (1975)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "Mars Attacks! (1996)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Citizen Ruth (1996)\n", + "Cosine similarity: 0.641\n", + "Return of the Jedi (1983)\n", + "Jerry Maguire (1996)\n", + "Cosine similarity: 0.726\n", + "Return of the Jedi (1983)\n", + "Raising Arizona (1987)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Sneakers (1992)\n", + "Cosine similarity: 0.794\n", + "Return of the Jedi (1983)\n", + "Beavis and Butt-head Do America (1996)\n", + "Cosine similarity: 0.522\n", + "Return of the Jedi (1983)\n", + "Last of the Mohicans, The (1992)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "Kolya (1996)\n", + "Cosine similarity: 0.558\n", + "Return of the Jedi (1983)\n", + "Jungle2Jungle (1997)\n", + "Cosine similarity: 0.517\n", + "Return of the Jedi (1983)\n", + "Smilla's Sense of Snow (1997)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "Devil's Own, The (1997)\n", + "Cosine similarity: 0.527\n", + "Return of the Jedi (1983)\n", + "Chasing Amy (1997)\n", + "Cosine similarity: 0.712\n", + "Return of the Jedi (1983)\n", + "Turbo: A Power Rangers Movie (1997)\n", + "Cosine similarity: 0.524\n", + "Return of the Jedi (1983)\n", + "Grosse Pointe Blank (1997)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "Austin Powers: International Man of Mystery (1997)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Fifth Element, The (1997)\n", + "Cosine similarity: 0.769\n", + "Return of the Jedi (1983)\n", + "Shall We Dance? (1996)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Lost World: Jurassic Park, The (1997)\n", + "Cosine similarity: 0.714\n", + "Return of the Jedi (1983)\n", + "Pillow Book, The (1995)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "Batman & Robin (1997)\n", + "Cosine similarity: 0.675\n", + "Return of the Jedi (1983)\n", + "My Best Friend's Wedding (1997)\n", + "Cosine similarity: 0.681\n", + "Return of the Jedi (1983)\n", + "When the Cats Away (Chacun cherche son chat) (1996)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Men in Black (1997)\n", + "Cosine similarity: 0.816\n", + "Return of the Jedi (1983)\n", + "Contact (1997)\n", + "Cosine similarity: 0.769\n", + "Return of the Jedi (1983)\n", + "George of the Jungle (1997)\n", + "Cosine similarity: 0.531\n", + "Return of the Jedi (1983)\n", + "Event Horizon (1997)\n", + "Cosine similarity: 0.297\n", + "Return of the Jedi (1983)\n", + "Air Bud (1997)\n", + "Cosine similarity: 0.437\n", + "Return of the Jedi (1983)\n", + "In the Company of Men (1997)\n", + "Cosine similarity: 0.469\n", + "Return of the Jedi (1983)\n", + "Steel (1997)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Mimic (1997)\n", + "Cosine similarity: 0.716\n", + "Return of the Jedi (1983)\n", + "Hunt for Red October, The (1990)\n", + "Cosine similarity: 0.825\n", + "Return of the Jedi (1983)\n", + "Kull the Conqueror (1997)\n", + "Cosine similarity: 0.566\n", + "Return of the Jedi (1983)\n", + "unknown\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Chasing Amy (1997)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Full Monty, The (1997)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "Gattaca (1997)\n", + "Cosine similarity: 0.698\n", + "Return of the Jedi (1983)\n", + "Starship Troopers (1997)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Good Will Hunting (1997)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Heat (1995)\n", + "Cosine similarity: 0.669\n", + "Return of the Jedi (1983)\n", + "Sabrina (1995)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Sense and Sensibility (1995)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Leaving Las Vegas (1995)\n", + "Cosine similarity: 0.531\n", + "Return of the Jedi (1983)\n", + "Restoration (1995)\n", + "Cosine similarity: 0.598\n", + "Return of the Jedi (1983)\n", + "Bed of Roses (1996)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Once Upon a Time... When We Were Colored (1995)\n", + "Cosine similarity: 0.736\n", + "Return of the Jedi (1983)\n", + "Up Close and Personal (1996)\n", + "Cosine similarity: 0.704\n", + "Return of the Jedi (1983)\n", + "River Wild, The (1994)\n", + "Cosine similarity: 0.663\n", + "Return of the Jedi (1983)\n", + "Time to Kill, A (1996)\n", + "Cosine similarity: 0.689\n", + "Return of the Jedi (1983)\n", + "Emma (1996)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Tin Cup (1996)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Secrets & Lies (1996)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "English Patient, The (1996)\n", + "Cosine similarity: 0.571\n", + "Return of the Jedi (1983)\n", + "Marvin's Room (1996)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Scream (1996)\n", + "Cosine similarity: 0.613\n", + "Return of the Jedi (1983)\n", + "Evita (1996)\n", + "Cosine similarity: 0.535\n", + "Return of the Jedi (1983)\n", + "Fierce Creatures (1997)\n", + "Cosine similarity: 0.704\n", + "Return of the Jedi (1983)\n", + "Absolute Power (1997)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "Rosewood (1997)\n", + "Cosine similarity: 0.508\n", + "Return of the Jedi (1983)\n", + "Donnie Brasco (1997)\n", + "Cosine similarity: 0.777\n", + "Return of the Jedi (1983)\n", + "Liar Liar (1997)\n", + "Cosine similarity: 0.747\n", + "Return of the Jedi (1983)\n", + "Breakdown (1997)\n", + "Cosine similarity: 0.661\n", + "Return of the Jedi (1983)\n", + "Promesse, La (1996)\n", + "Cosine similarity: 0.583\n", + "Return of the Jedi (1983)\n", + "Ulee's Gold (1997)\n", + "Cosine similarity: 0.702\n", + "Return of the Jedi (1983)\n", + "Face/Off (1997)\n", + "Cosine similarity: 0.734\n", + "Return of the Jedi (1983)\n", + "Hoodlum (1997)\n", + "Cosine similarity: 0.577\n", + "Return of the Jedi (1983)\n", + "Air Force One (1997)\n", + "Cosine similarity: 0.703\n", + "Return of the Jedi (1983)\n", + "In & Out (1997)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "L.A. Confidential (1997)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Ulee's Gold (1997)\n", + "Cosine similarity: 0.601\n", + "Return of the Jedi (1983)\n", + "Fly Away Home (1996)\n", + "Cosine similarity: 0.596\n", + "Return of the Jedi (1983)\n", + "Ice Storm, The (1997)\n", + "Cosine similarity: 0.529\n", + "Return of the Jedi (1983)\n", + "Mrs. Brown (Her Majesty, Mrs. Brown) (1997)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "Devil's Advocate, The (1997)\n", + "Cosine similarity: 0.625\n", + "Return of the Jedi (1983)\n", + "FairyTale: A True Story (1997)\n", + "Cosine similarity: 0.569\n", + "Return of the Jedi (1983)\n", + "Deceiver (1997)\n", + "Cosine similarity: 0.676\n", + "Return of the Jedi (1983)\n", + "Rainmaker, The (1997)\n", + "Cosine similarity: 0.716\n", + "Return of the Jedi (1983)\n", + "Wings of the Dove, The (1997)\n", + "Cosine similarity: 0.571\n", + "Return of the Jedi (1983)\n", + "Midnight in the Garden of Good and Evil (1997)\n", + "Cosine similarity: 0.551\n", + "Return of the Jedi (1983)\n", + "Titanic (1997)\n", + "Cosine similarity: 0.779\n", + "Return of the Jedi (1983)\n", + "3 Ninjas: High Noon At Mega Mountain (1998)\n", + "Cosine similarity: 0.361\n", + "Return of the Jedi (1983)\n", + "Apt Pupil (1998)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "As Good As It Gets (1997)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "In the Name of the Father (1993)\n", + "Cosine similarity: 0.762\n", + "Return of the Jedi (1983)\n", + "Schindler's List (1993)\n", + "Cosine similarity: 0.681\n", + "Return of the Jedi (1983)\n", + "Everyone Says I Love You (1996)\n", + "Cosine similarity: 0.556\n", + "Return of the Jedi (1983)\n", + "Paradise Lost: The Child Murders at Robin Hood Hills (1996)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "Mother (1996)\n", + "Cosine similarity: 0.553\n", + "Return of the Jedi (1983)\n", + "Murder at 1600 (1997)\n", + "Cosine similarity: 0.544\n", + "Return of the Jedi (1983)\n", + "Dante's Peak (1997)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Lost Highway (1997)\n", + "Cosine similarity: 0.429\n", + "Return of the Jedi (1983)\n", + "Crash (1996)\n", + "Cosine similarity: 0.545\n", + "Return of the Jedi (1983)\n", + "G.I. Jane (1997)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "Cop Land (1997)\n", + "Cosine similarity: 0.586\n", + "Return of the Jedi (1983)\n", + "Conspiracy Theory (1997)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "Desperate Measures (1998)\n", + "Cosine similarity: 0.543\n", + "Return of the Jedi (1983)\n", + "187 (1997)\n", + "Cosine similarity: 0.509\n", + "Return of the Jedi (1983)\n", + "Edge, The (1997)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "Kiss the Girls (1997)\n", + "Cosine similarity: 0.577\n", + "Return of the Jedi (1983)\n", + "Game, The (1997)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "U Turn (1997)\n", + "Cosine similarity: 0.485\n", + "Return of the Jedi (1983)\n", + "How to Be a Player (1997)\n", + "Cosine similarity: 0.562\n", + "Return of the Jedi (1983)\n", + "Playing God (1997)\n", + "Cosine similarity: 0.681\n", + "Return of the Jedi (1983)\n", + "House of Yes, The (1997)\n", + "Cosine similarity: 0.551\n", + "Return of the Jedi (1983)\n", + "Bean (1997)\n", + "Cosine similarity: 0.738\n", + "Return of the Jedi (1983)\n", + "Mad City (1997)\n", + "Cosine similarity: 0.493\n", + "Return of the Jedi (1983)\n", + "Boogie Nights (1997)\n", + "Cosine similarity: 0.542\n", + "Return of the Jedi (1983)\n", + "Critical Care (1997)\n", + "Cosine similarity: 0.325\n", + "Return of the Jedi (1983)\n", + "Man Who Knew Too Little, The (1997)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Alien: Resurrection (1997)\n", + "Cosine similarity: 0.675\n", + "Return of the Jedi (1983)\n", + "Apostle, The (1997)\n", + "Cosine similarity: 0.624\n", + "Return of the Jedi (1983)\n", + "Deconstructing Harry (1997)\n", + "Cosine similarity: 0.564\n", + "Return of the Jedi (1983)\n", + "Jackie Brown (1997)\n", + "Cosine similarity: 0.604\n", + "Return of the Jedi (1983)\n", + "Wag the Dog (1997)\n", + "Cosine similarity: 0.682\n", + "Return of the Jedi (1983)\n", + "Desperate Measures (1998)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Hard Rain (1998)\n", + "Cosine similarity: 0.645\n", + "Return of the Jedi (1983)\n", + "Fallen (1998)\n", + "Cosine similarity: 0.436\n", + "Return of the Jedi (1983)\n", + "Prophecy II, The (1998)\n", + "Cosine similarity: 0.498\n", + "Return of the Jedi (1983)\n", + "Spice World (1997)\n", + "Cosine similarity: 0.43\n", + "Return of the Jedi (1983)\n", + "Deep Rising (1998)\n", + "Cosine similarity: 0.745\n", + "Return of the Jedi (1983)\n", + "Wedding Singer, The (1998)\n", + "Cosine similarity: 0.743\n", + "Return of the Jedi (1983)\n", + "Sphere (1998)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Client, The (1994)\n", + "Cosine similarity: 0.664\n", + "Return of the Jedi (1983)\n", + "One Flew Over the Cuckoo's Nest (1975)\n", + "Cosine similarity: 0.663\n", + "Return of the Jedi (1983)\n", + "Spawn (1997)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Assignment, The (1997)\n", + "Cosine similarity: 0.527\n", + "Return of the Jedi (1983)\n", + "Wonderland (1997)\n", + "Cosine similarity: 0.571\n", + "Return of the Jedi (1983)\n", + "Incognito (1997)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Blues Brothers 2000 (1998)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "Sudden Death (1995)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Ace Ventura: When Nature Calls (1995)\n", + "Cosine similarity: 0.546\n", + "Return of the Jedi (1983)\n", + "Powder (1995)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Dangerous Minds (1995)\n", + "Cosine similarity: 0.649\n", + "Return of the Jedi (1983)\n", + "Clueless (1995)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Bio-Dome (1996)\n", + "Cosine similarity: 0.415\n", + "Return of the Jedi (1983)\n", + "Black Sheep (1996)\n", + "Cosine similarity: 0.48\n", + "Return of the Jedi (1983)\n", + "Mary Reilly (1996)\n", + "Cosine similarity: 0.559\n", + "Return of the Jedi (1983)\n", + "Bridges of Madison County, The (1995)\n", + "Cosine similarity: 0.46\n", + "Return of the Jedi (1983)\n", + "Jeffrey (1995)\n", + "Cosine similarity: 0.586\n", + "Return of the Jedi (1983)\n", + "Judge Dredd (1995)\n", + "Cosine similarity: 0.656\n", + "Return of the Jedi (1983)\n", + "Mighty Morphin Power Rangers: The Movie (1995)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Showgirls (1995)\n", + "Cosine similarity: 0.403\n", + "Return of the Jedi (1983)\n", + "Houseguest (1994)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Heavyweights (1994)\n", + "Cosine similarity: 0.371\n", + "Return of the Jedi (1983)\n", + "Miracle on 34th Street (1994)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "Tales From the Crypt Presents: Demon Knight (1995)\n", + "Cosine similarity: 0.506\n", + "Return of the Jedi (1983)\n", + "Star Trek: Generations (1994)\n", + "Cosine similarity: 0.729\n", + "Return of the Jedi (1983)\n", + "Muriel's Wedding (1994)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Adventures of Priscilla, Queen of the Desert, The (1994)\n", + "Cosine similarity: 0.561\n", + "Return of the Jedi (1983)\n", + "Flintstones, The (1994)\n", + "Cosine similarity: 0.512\n", + "Return of the Jedi (1983)\n", + "Naked Gun 33 1/3: The Final Insult (1994)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "True Lies (1994)\n", + "Cosine similarity: 0.775\n", + "Return of the Jedi (1983)\n", + "Addams Family Values (1993)\n", + "Cosine similarity: 0.49\n", + "Return of the Jedi (1983)\n", + "Age of Innocence, The (1993)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "Beverly Hills Cop III (1994)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Black Beauty (1994)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Fear of a Black Hat (1993)\n", + "Cosine similarity: 0.732\n", + "Return of the Jedi (1983)\n", + "Last Action Hero (1993)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Man Without a Face, The (1993)\n", + "Cosine similarity: 0.572\n", + "Return of the Jedi (1983)\n", + "Mrs. Doubtfire (1993)\n", + "Cosine similarity: 0.596\n", + "Return of the Jedi (1983)\n", + "Radioland Murders (1994)\n", + "Cosine similarity: 0.423\n", + "Return of the Jedi (1983)\n", + "Robin Hood: Men in Tights (1993)\n", + "Cosine similarity: 0.557\n", + "Return of the Jedi (1983)\n", + "Serial Mom (1994)\n", + "Cosine similarity: 0.473\n", + "Return of the Jedi (1983)\n", + "Striking Distance (1993)\n", + "Cosine similarity: 0.528\n", + "Return of the Jedi (1983)\n", + "Super Mario Bros. (1993)\n", + "Cosine similarity: 0.532\n", + "Return of the Jedi (1983)\n", + "Three Musketeers, The (1993)\n", + "Cosine similarity: 0.774\n", + "Return of the Jedi (1983)\n", + "Little Rascals, The (1994)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Brady Bunch Movie, The (1995)\n", + "Cosine similarity: 0.721\n", + "Return of the Jedi (1983)\n", + "Ghost (1990)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "Batman (1989)\n", + "Cosine similarity: 0.726\n", + "Return of the Jedi (1983)\n", + "Pinocchio (1940)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "Mission: Impossible (1996)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Thinner (1996)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Spy Hard (1996)\n", + "Cosine similarity: 0.565\n", + "Return of the Jedi (1983)\n", + "Close Shave, A (1995)\n", + "Cosine similarity: 0.741\n", + "Return of the Jedi (1983)\n", + "Jack (1996)\n", + "Cosine similarity: 0.62\n", + "Return of the Jedi (1983)\n", + "Kingpin (1996)\n", + "Cosine similarity: 0.649\n", + "Return of the Jedi (1983)\n", + "Nutty Professor, The (1996)\n", + "Cosine similarity: 0.668\n", + "Return of the Jedi (1983)\n", + "Very Brady Sequel, A (1996)\n", + "Cosine similarity: 0.516\n", + "Return of the Jedi (1983)\n", + "Tales from the Crypt Presents: Bordello of Blood (1996)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "My Favorite Year (1982)\n", + "Cosine similarity: 0.673\n", + "Return of the Jedi (1983)\n", + "Apple Dumpling Gang, The (1975)\n", + "Cosine similarity: 0.486\n", + "Return of the Jedi (1983)\n", + "Old Yeller (1957)\n", + "Cosine similarity: 0.632\n", + "Return of the Jedi (1983)\n", + "Parent Trap, The (1961)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Cinderella (1950)\n", + "Cosine similarity: 0.718\n", + "Return of the Jedi (1983)\n", + "Mary Poppins (1964)\n", + "Cosine similarity: 0.648\n", + "Return of the Jedi (1983)\n", + "Alice in Wonderland (1951)\n", + "Cosine similarity: 0.707\n", + "Return of the Jedi (1983)\n", + "William Shakespeare's Romeo and Juliet (1996)\n", + "Cosine similarity: 0.707\n", + "Return of the Jedi (1983)\n", + "Aladdin and the King of Thieves (1996)\n", + "Cosine similarity: 0.649\n", + "Return of the Jedi (1983)\n", + "E.T. the Extra-Terrestrial (1982)\n", + "Cosine similarity: 0.755\n", + "Return of the Jedi (1983)\n", + "Children of the Corn: The Gathering (1996)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Bob Roberts (1992)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Transformers: The Movie, The (1986)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "To Kill a Mockingbird (1962)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "Harold and Maude (1971)\n", + "Cosine similarity: 0.635\n", + "Return of the Jedi (1983)\n", + "Day the Earth Stood Still, The (1951)\n", + "Cosine similarity: 0.751\n", + "Return of the Jedi (1983)\n", + "Duck Soup (1933)\n", + "Cosine similarity: 0.742\n", + "Return of the Jedi (1983)\n", + "Highlander (1986)\n", + "Cosine similarity: 0.729\n", + "Return of the Jedi (1983)\n", + "Fantasia (1940)\n", + "Cosine similarity: 0.724\n", + "Return of the Jedi (1983)\n", + "Heathers (1989)\n", + "Cosine similarity: 0.621\n", + "Return of the Jedi (1983)\n", + "Forbidden Planet (1956)\n", + "Cosine similarity: 0.731\n", + "Return of the Jedi (1983)\n", + "Butch Cassidy and the Sundance Kid (1969)\n", + "Cosine similarity: 0.757\n", + "Return of the Jedi (1983)\n", + "American Werewolf in London, An (1981)\n", + "Cosine similarity: 0.75\n", + "Return of the Jedi (1983)\n", + "Amityville 1992: It's About Time (1992)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Amityville 3-D (1983)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Amityville: A New Generation (1993)\n", + "Cosine similarity: 0.757\n", + "Return of the Jedi (1983)\n", + "Amityville II: The Possession (1982)\n", + "Cosine similarity: 0.358\n", + "Return of the Jedi (1983)\n", + "Amityville Horror, The (1979)\n", + "Cosine similarity: 0.59\n", + "Return of the Jedi (1983)\n", + "Amityville Curse, The (1990)\n", + "Cosine similarity: 0.517\n", + "Return of the Jedi (1983)\n", + "Birds, The (1963)\n", + "Cosine similarity: 0.673\n", + "Return of the Jedi (1983)\n", + "Blob, The (1958)\n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "Body Snatcher, The (1945)\n", + "Cosine similarity: 0.728\n", + "Return of the Jedi (1983)\n", + "Burnt Offerings (1976)\n", + "Cosine similarity: 0.552\n", + "Return of the Jedi (1983)\n", + "Carrie (1976)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Omen, The (1976)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Star Trek: The Motion Picture (1979)\n", + "Cosine similarity: 0.758\n", + "Return of the Jedi (1983)\n", + "Star Trek V: The Final Frontier (1989)\n", + "Cosine similarity: 0.456\n", + "Return of the Jedi (1983)\n", + "Grease (1978)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Jaws 2 (1978)\n", + "Cosine similarity: 0.54\n", + "Return of the Jedi (1983)\n", + "Jaws 3-D (1983)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Bastard Out of Carolina (1996)\n", + "Cosine similarity: 0.562\n", + "Return of the Jedi (1983)\n", + "Jackie Chan's First Strike (1996)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "Beverly Hills Ninja (1997)\n", + "Cosine similarity: 0.461\n", + "Return of the Jedi (1983)\n", + "Free Willy 3: The Rescue (1997)\n", + "Cosine similarity: 0.505\n", + "Return of the Jedi (1983)\n", + "Nixon (1995)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Cry, the Beloved Country (1995)\n", + "Cosine similarity: 0.52\n", + "Return of the Jedi (1983)\n", + "Crossing Guard, The (1995)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Smoke (1995)\n", + "Cosine similarity: 0.635\n", + "Return of the Jedi (1983)\n", + "Like Water For Chocolate (Como agua para chocolate) (1992)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Secret of Roan Inish, The (1994)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "Vanya on 42nd Street (1994)\n", + "Cosine similarity: 0.559\n", + "Return of the Jedi (1983)\n", + "Jungle Book, The (1994)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "Red Rock West (1992)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Bronx Tale, A (1993)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Rudy (1993)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Short Cuts (1993)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Tombstone (1993)\n", + "Cosine similarity: 0.635\n", + "Return of the Jedi (1983)\n", + "Courage Under Fire (1996)\n", + "Cosine similarity: 0.788\n", + "Return of the Jedi (1983)\n", + "Dragonheart (1996)\n", + "Cosine similarity: 0.749\n", + "Return of the Jedi (1983)\n", + "James and the Giant Peach (1996)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb (1963)\n", + "Cosine similarity: 0.601\n", + "Return of the Jedi (1983)\n", + "Trainspotting (1996)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "First Wives Club, The (1996)\n", + "Cosine similarity: 0.504\n", + "Return of the Jedi (1983)\n", + "Matilda (1996)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "Philadelphia Story, The (1940)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Vertigo (1958)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "North by Northwest (1959)\n", + "Cosine similarity: 0.724\n", + "Return of the Jedi (1983)\n", + "Apartment, The (1960)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Some Like It Hot (1959)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Casablanca (1942)\n", + "Cosine similarity: 0.706\n", + "Return of the Jedi (1983)\n", + "Maltese Falcon, The (1941)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "My Fair Lady (1964)\n", + "Cosine similarity: 0.591\n", + "Return of the Jedi (1983)\n", + "Sabrina (1954)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "Roman Holiday (1953)\n", + "Cosine similarity: 0.723\n", + "Return of the Jedi (1983)\n", + "Sunset Blvd. (1950)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Notorious (1946)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "To Catch a Thief (1955)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Adventures of Robin Hood, The (1938)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "East of Eden (1955)\n", + "Cosine similarity: 0.686\n", + "Return of the Jedi (1983)\n", + "Thin Man, The (1934)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "His Girl Friday (1940)\n", + "Cosine similarity: 0.737\n", + "Return of the Jedi (1983)\n", + "Around the World in 80 Days (1956)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "It's a Wonderful Life (1946)\n", + "Cosine similarity: 0.731\n", + "Return of the Jedi (1983)\n", + "Bringing Up Baby (1938)\n", + "Cosine similarity: 0.775\n", + "Return of the Jedi (1983)\n", + "African Queen, The (1951)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Cat on a Hot Tin Roof (1958)\n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "Fly Away Home (1996)\n", + "Cosine similarity: 0.756\n", + "Return of the Jedi (1983)\n", + "Dumbo (1941)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Bananas (1971)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "Candidate, The (1972)\n", + "Cosine similarity: 0.685\n", + "Return of the Jedi (1983)\n", + "Bonnie and Clyde (1967)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Dial M for Murder (1954)\n", + "Cosine similarity: 0.692\n", + "Return of the Jedi (1983)\n", + "Rebel Without a Cause (1955)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "Streetcar Named Desire, A (1951)\n", + "Cosine similarity: 0.619\n", + "Return of the Jedi (1983)\n", + "People vs. Larry Flynt, The (1996)\n", + "Cosine similarity: 0.744\n", + "Return of the Jedi (1983)\n", + "My Left Foot (1989)\n", + "Cosine similarity: 0.619\n", + "Return of the Jedi (1983)\n", + "Magnificent Seven, The (1954)\n", + "Cosine similarity: 0.616\n", + "Return of the Jedi (1983)\n", + "Lawrence of Arabia (1962)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Wings of Desire (1987)\n", + "Cosine similarity: 0.645\n", + "Return of the Jedi (1983)\n", + "Third Man, The (1949)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Annie Hall (1977)\n", + "Cosine similarity: 0.553\n", + "Return of the Jedi (1983)\n", + "Boot, Das (1981)\n", + "Cosine similarity: 0.732\n", + "Return of the Jedi (1983)\n", + "Local Hero (1983)\n", + "Cosine similarity: 0.658\n", + "Return of the Jedi (1983)\n", + "Manhattan (1979)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Miller's Crossing (1990)\n", + "Cosine similarity: 0.548\n", + "Return of the Jedi (1983)\n", + "Treasure of the Sierra Madre, The (1948)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Great Escape, The (1963)\n", + "Cosine similarity: 0.739\n", + "Return of the Jedi (1983)\n", + "Deer Hunter, The (1978)\n", + "Cosine similarity: 0.71\n", + "Return of the Jedi (1983)\n", + "Down by Law (1986)\n", + "Cosine similarity: 0.589\n", + "Return of the Jedi (1983)\n", + "Cool Hand Luke (1967)\n", + "Cosine similarity: 0.648\n", + "Return of the Jedi (1983)\n", + "Great Dictator, The (1940)\n", + "Cosine similarity: 0.665\n", + "Return of the Jedi (1983)\n", + "Big Sleep, The (1946)\n", + "Cosine similarity: 0.604\n", + "Return of the Jedi (1983)\n", + "Ben-Hur (1959)\n", + "Cosine similarity: 0.747\n", + "Return of the Jedi (1983)\n", + "Gandhi (1982)\n", + "Cosine similarity: 0.773\n", + "Return of the Jedi (1983)\n", + "Killing Fields, The (1984)\n", + "Cosine similarity: 0.682\n", + "Return of the Jedi (1983)\n", + "My Life as a Dog (Mitt liv som hund) (1985)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "Man Who Would Be King, The (1975)\n", + "Cosine similarity: 0.77\n", + "Return of the Jedi (1983)\n", + "Shine (1996)\n", + "Cosine similarity: 0.771\n", + "Return of the Jedi (1983)\n", + "Kama Sutra: A Tale of Love (1996)\n", + "Cosine similarity: 0.651\n", + "Return of the Jedi (1983)\n", + "Daytrippers, The (1996)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Traveller (1997)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Addicted to Love (1997)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Ponette (1996)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "My Own Private Idaho (1991)\n", + "Cosine similarity: 0.604\n", + "Return of the Jedi (1983)\n", + "Anastasia (1997)\n", + "Cosine similarity: 0.529\n", + "Return of the Jedi (1983)\n", + "Mouse Hunt (1997)\n", + "Cosine similarity: 0.546\n", + "Return of the Jedi (1983)\n", + "Money Train (1995)\n", + "Cosine similarity: 0.529\n", + "Return of the Jedi (1983)\n", + "Mortal Kombat (1995)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Pocahontas (1995)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Misérables, Les (1995)\n", + "Cosine similarity: 0.515\n", + "Return of the Jedi (1983)\n", + "Things to Do in Denver when You're Dead (1995)\n", + "Cosine similarity: 0.507\n", + "Return of the Jedi (1983)\n", + "Vampire in Brooklyn (1995)\n", + "Cosine similarity: 0.775\n", + "Return of the Jedi (1983)\n", + "Broken Arrow (1996)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "Young Poisoner's Handbook, The (1995)\n", + "Cosine similarity: 0.506\n", + "Return of the Jedi (1983)\n", + "NeverEnding Story III, The (1994)\n", + "Cosine similarity: 0.472\n", + "Return of the Jedi (1983)\n", + "Rob Roy (1995)\n", + "Cosine similarity: 0.629\n", + "Return of the Jedi (1983)\n", + "Die Hard: With a Vengeance (1995)\n", + "Cosine similarity: 0.743\n", + "Return of the Jedi (1983)\n", + "Lord of Illusions (1995)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "Species (1995)\n", + "Cosine similarity: 0.689\n", + "Return of the Jedi (1983)\n", + "Walk in the Clouds, A (1995)\n", + "Cosine similarity: 0.537\n", + "Return of the Jedi (1983)\n", + "Waterworld (1995)\n", + "Cosine similarity: 0.496\n", + "Return of the Jedi (1983)\n", + "White Man's Burden (1995)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Wild Bill (1995)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Farinelli: il castrato (1994)\n", + "Cosine similarity: 0.638\n", + "Return of the Jedi (1983)\n", + "Heavenly Creatures (1994)\n", + "Cosine similarity: 0.515\n", + "Return of the Jedi (1983)\n", + "Interview with the Vampire (1994)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "Kid in King Arthur's Court, A (1995)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Mary Shelley's Frankenstein (1994)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Quick and the Dead, The (1995)\n", + "Cosine similarity: 0.54\n", + "Return of the Jedi (1983)\n", + "Stephen King's The Langoliers (1995)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Tales from the Hood (1995)\n", + "Cosine similarity: 0.564\n", + "Return of the Jedi (1983)\n", + "Village of the Damned (1995)\n", + "Cosine similarity: 0.645\n", + "Return of the Jedi (1983)\n", + "Clear and Present Danger (1994)\n", + "Cosine similarity: 0.748\n", + "Return of the Jedi (1983)\n", + "Wes Craven's New Nightmare (1994)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Speed (1994)\n", + "Cosine similarity: 0.711\n", + "Return of the Jedi (1983)\n", + "Wolf (1994)\n", + "Cosine similarity: 0.545\n", + "Return of the Jedi (1983)\n", + "Wyatt Earp (1994)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "Another Stakeout (1993)\n", + "Cosine similarity: 0.542\n", + "Return of the Jedi (1983)\n", + "Blown Away (1994)\n", + "Cosine similarity: 0.565\n", + "Return of the Jedi (1983)\n", + "Body Snatchers (1993)\n", + "Cosine similarity: 0.669\n", + "Return of the Jedi (1983)\n", + "Boxing Helena (1993)\n", + "Cosine similarity: 0.425\n", + "Return of the Jedi (1983)\n", + "City Slickers II: The Legend of Curly's Gold (1994)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Cliffhanger (1993)\n", + "Cosine similarity: 0.77\n", + "Return of the Jedi (1983)\n", + "Coneheads (1993)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Demolition Man (1993)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "Fatal Instinct (1993)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "Englishman Who Went Up a Hill, But Came Down a Mountain, The (1995)\n", + "Cosine similarity: 0.666\n", + "Return of the Jedi (1983)\n", + "Kalifornia (1993)\n", + "Cosine similarity: 0.54\n", + "Return of the Jedi (1983)\n", + "Piano, The (1993)\n", + "Cosine similarity: 0.47\n", + "Return of the Jedi (1983)\n", + "Romeo Is Bleeding (1993)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "Secret Garden, The (1993)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Son in Law (1993)\n", + "Cosine similarity: 0.594\n", + "Return of the Jedi (1983)\n", + "Terminal Velocity (1994)\n", + "Cosine similarity: 0.69\n", + "Return of the Jedi (1983)\n", + "Hour of the Pig, The (1993)\n", + "Cosine similarity: 0.721\n", + "Return of the Jedi (1983)\n", + "Beauty and the Beast (1991)\n", + "Cosine similarity: 0.702\n", + "Return of the Jedi (1983)\n", + "Wild Bunch, The (1969)\n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "Hellraiser: Bloodline (1996)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Primal Fear (1996)\n", + "Cosine similarity: 0.638\n", + "Return of the Jedi (1983)\n", + "True Crime (1995)\n", + "Cosine similarity: 0.517\n", + "Return of the Jedi (1983)\n", + "Stalingrad (1993)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Heavy (1995)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "Fan, The (1996)\n", + "Cosine similarity: 0.613\n", + "Return of the Jedi (1983)\n", + "Hunchback of Notre Dame, The (1996)\n", + "Cosine similarity: 0.762\n", + "Return of the Jedi (1983)\n", + "Eraser (1996)\n", + "Cosine similarity: 0.714\n", + "Return of the Jedi (1983)\n", + "Big Squeeze, The (1996)\n", + "Cosine similarity: 0.673\n", + "Return of the Jedi (1983)\n", + "Police Story 4: Project S (Chao ji ji hua) (1993)\n", + "Cosine similarity: 0.504\n", + "Return of the Jedi (1983)\n", + "Daniel Defoe's Robinson Crusoe (1996)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "For Whom the Bell Tolls (1943)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "American in Paris, An (1951)\n", + "Cosine similarity: 0.646\n", + "Return of the Jedi (1983)\n", + "Rear Window (1954)\n", + "Cosine similarity: 0.706\n", + "Return of the Jedi (1983)\n", + "It Happened One Night (1934)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Meet Me in St. Louis (1944)\n", + "Cosine similarity: 0.633\n", + "Return of the Jedi (1983)\n", + "All About Eve (1950)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Rebecca (1940)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Spellbound (1945)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Father of the Bride (1950)\n", + "Cosine similarity: 0.725\n", + "Return of the Jedi (1983)\n", + "Gigi (1958)\n", + "Cosine similarity: 0.488\n", + "Return of the Jedi (1983)\n", + "Laura (1944)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Lost Horizon (1937)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "My Man Godfrey (1936)\n", + "Cosine similarity: 0.75\n", + "Return of the Jedi (1983)\n", + "Giant (1956)\n", + "Cosine similarity: 0.769\n", + "Return of the Jedi (1983)\n", + "39 Steps, The (1935)\n", + "Cosine similarity: 0.666\n", + "Return of the Jedi (1983)\n", + "Night of the Living Dead (1968)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Blue Angel, The (Blaue Engel, Der) (1930)\n", + "Cosine similarity: 0.719\n", + "Return of the Jedi (1983)\n", + "Picnic (1955)\n", + "Cosine similarity: 0.726\n", + "Return of the Jedi (1983)\n", + "Extreme Measures (1996)\n", + "Cosine similarity: 0.726\n", + "Return of the Jedi (1983)\n", + "Chamber, The (1996)\n", + "Cosine similarity: 0.655\n", + "Return of the Jedi (1983)\n", + "Davy Crockett, King of the Wild Frontier (1955)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Swiss Family Robinson (1960)\n", + "Cosine similarity: 0.649\n", + "Return of the Jedi (1983)\n", + "Angels in the Outfield (1994)\n", + "Cosine similarity: 0.537\n", + "Return of the Jedi (1983)\n", + "Three Caballeros, The (1945)\n", + "Cosine similarity: 0.688\n", + "Return of the Jedi (1983)\n", + "Sword in the Stone, The (1963)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "So Dear to My Heart (1949)\n", + "Cosine similarity: 0.553\n", + "Return of the Jedi (1983)\n", + "Robin Hood: Prince of Thieves (1991)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Sleepers (1996)\n", + "Cosine similarity: 0.717\n", + "Return of the Jedi (1983)\n", + "Victor/Victoria (1982)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Great Race, The (1965)\n", + "Cosine similarity: 0.647\n", + "Return of the Jedi (1983)\n", + "Crying Game, The (1992)\n", + "Cosine similarity: 0.515\n", + "Return of the Jedi (1983)\n", + "Sophie's Choice (1982)\n", + "Cosine similarity: 0.621\n", + "Return of the Jedi (1983)\n", + "Christmas Carol, A (1938)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Microcosmos: Le peuple de l'herbe (1996)\n", + "Cosine similarity: 0.707\n", + "Return of the Jedi (1983)\n", + "Fog, The (1980)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Escape from New York (1981)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Howling, The (1981)\n", + "Cosine similarity: 0.576\n", + "Return of the Jedi (1983)\n", + "Return of Martin Guerre, The (Retour de Martin Guerre, Le) (1982)\n", + "Cosine similarity: 0.583\n", + "Return of the Jedi (1983)\n", + "Tin Drum, The (Blechtrommel, Die) (1979)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Cook the Thief His Wife & Her Lover, The (1989)\n", + "Cosine similarity: 0.435\n", + "Return of the Jedi (1983)\n", + "Paths of Glory (1957)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Grifters, The (1990)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "The Innocent (1994)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Thin Blue Line, The (1988)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Paris Is Burning (1990)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Once Upon a Time in the West (1969)\n", + "Cosine similarity: 0.711\n", + "Return of the Jedi (1983)\n", + "Ran (1985)\n", + "Cosine similarity: 0.641\n", + "Return of the Jedi (1983)\n", + "Quiet Man, The (1952)\n", + "Cosine similarity: 0.62\n", + "Return of the Jedi (1983)\n", + "Once Upon a Time in America (1984)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Seventh Seal, The (Sjunde inseglet, Det) (1957)\n", + "Cosine similarity: 0.478\n", + "Return of the Jedi (1983)\n", + "Glory (1989)\n", + "Cosine similarity: 0.749\n", + "Return of the Jedi (1983)\n", + "Rosencrantz and Guildenstern Are Dead (1990)\n", + "Cosine similarity: 0.549\n", + "Return of the Jedi (1983)\n", + "Touch of Evil (1958)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Chinatown (1974)\n", + "Cosine similarity: 0.559\n", + "Return of the Jedi (1983)\n", + "Stand by Me (1986)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "M (1931)\n", + "Cosine similarity: 0.58\n", + "Return of the Jedi (1983)\n", + "Manchurian Candidate, The (1962)\n", + "Cosine similarity: 0.628\n", + "Return of the Jedi (1983)\n", + "Pump Up the Volume (1990)\n", + "Cosine similarity: 0.685\n", + "Return of the Jedi (1983)\n", + "Arsenic and Old Lace (1944)\n", + "Cosine similarity: 0.739\n", + "Return of the Jedi (1983)\n", + "Fried Green Tomatoes (1991)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "High Noon (1952)\n", + "Cosine similarity: 0.692\n", + "Return of the Jedi (1983)\n", + "Somewhere in Time (1980)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Being There (1979)\n", + "Cosine similarity: 0.697\n", + "Return of the Jedi (1983)\n", + "Paris, Texas (1984)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Alien 3 (1992)\n", + "Cosine similarity: 0.573\n", + "Return of the Jedi (1983)\n", + "Blood For Dracula (Andy Warhol's Dracula) (1974)\n", + "Cosine similarity: 0.607\n", + "Return of the Jedi (1983)\n", + "Audrey Rose (1977)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Blood Beach (1981)\n", + "Cosine similarity: 0.625\n", + "Return of the Jedi (1983)\n", + "Body Parts (1991)\n", + "Cosine similarity: 0.569\n", + "Return of the Jedi (1983)\n", + "Body Snatchers (1993)\n", + "Cosine similarity: 0.77\n", + "Return of the Jedi (1983)\n", + "Bride of Frankenstein (1935)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Candyman (1992)\n", + "Cosine similarity: 0.628\n", + "Return of the Jedi (1983)\n", + "Cape Fear (1962)\n", + "Cosine similarity: 0.702\n", + "Return of the Jedi (1983)\n", + "Cat People (1982)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "Nosferatu (Nosferatu, eine Symphonie des Grauens) (1922)\n", + "Cosine similarity: 0.578\n", + "Return of the Jedi (1983)\n", + "Crucible, The (1996)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Fire on the Mountain (1996)\n", + "Cosine similarity: -0.217\n", + "Return of the Jedi (1983)\n", + "Volcano (1997)\n", + "Cosine similarity: 0.555\n", + "Return of the Jedi (1983)\n", + "Conan the Barbarian (1981)\n", + "Cosine similarity: 0.704\n", + "Return of the Jedi (1983)\n", + "Kull the Conqueror (1997)\n", + "Cosine similarity: 0.473\n", + "Return of the Jedi (1983)\n", + "Wishmaster (1997)\n", + "Cosine similarity: 0.461\n", + "Return of the Jedi (1983)\n", + "I Know What You Did Last Summer (1997)\n", + "Cosine similarity: 0.538\n", + "Return of the Jedi (1983)\n", + "Rocket Man (1997)\n", + "Cosine similarity: 0.486\n", + "Return of the Jedi (1983)\n", + "In the Line of Fire (1993)\n", + "Cosine similarity: 0.757\n", + "Return of the Jedi (1983)\n", + "Executive Decision (1996)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "Perfect World, A (1993)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "McHale's Navy (1997)\n", + "Cosine similarity: 0.463\n", + "Return of the Jedi (1983)\n", + "Leave It to Beaver (1997)\n", + "Cosine similarity: 0.279\n", + "Return of the Jedi (1983)\n", + "Jackal, The (1997)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Seven Years in Tibet (1997)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Dark City (1998)\n", + "Cosine similarity: 0.718\n", + "Return of the Jedi (1983)\n", + "American President, The (1995)\n", + "Cosine similarity: 0.698\n", + "Return of the Jedi (1983)\n", + "Casino (1995)\n", + "Cosine similarity: 0.681\n", + "Return of the Jedi (1983)\n", + "Persuasion (1995)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Kicking and Screaming (1995)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "City Hall (1996)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Basketball Diaries, The (1995)\n", + "Cosine similarity: 0.561\n", + "Return of the Jedi (1983)\n", + "Browning Version, The (1994)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Little Women (1994)\n", + "Cosine similarity: 0.572\n", + "Return of the Jedi (1983)\n", + "Miami Rhapsody (1995)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Wonderful, Horrible Life of Leni Riefenstahl, The (1993)\n", + "Cosine similarity: 0.756\n", + "Return of the Jedi (1983)\n", + "Barcelona (1994)\n", + "Cosine similarity: 0.708\n", + "Return of the Jedi (1983)\n", + "Widows' Peak (1994)\n", + "Cosine similarity: 0.685\n", + "Return of the Jedi (1983)\n", + "House of the Spirits, The (1993)\n", + "Cosine similarity: 0.788\n", + "Return of the Jedi (1983)\n", + "Singin' in the Rain (1952)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Bad Moon (1996)\n", + "Cosine similarity: 0.516\n", + "Return of the Jedi (1983)\n", + "Enchanted April (1991)\n", + "Cosine similarity: 0.543\n", + "Return of the Jedi (1983)\n", + "Sex, Lies, and Videotape (1989)\n", + "Cosine similarity: 0.523\n", + "Return of the Jedi (1983)\n", + "Strictly Ballroom (1992)\n", + "Cosine similarity: 0.673\n", + "Return of the Jedi (1983)\n", + "Better Off Dead... (1985)\n", + "Cosine similarity: 0.692\n", + "Return of the Jedi (1983)\n", + "Substance of Fire, The (1996)\n", + "Cosine similarity: -0.0256\n", + "Return of the Jedi (1983)\n", + "Tin Men (1987)\n", + "Cosine similarity: 0.716\n", + "Return of the Jedi (1983)\n", + "Othello (1995)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Carrington (1995)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "To Die For (1995)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "Home for the Holidays (1995)\n", + "Cosine similarity: 0.475\n", + "Return of the Jedi (1983)\n", + "Juror, The (1996)\n", + "Cosine similarity: 0.573\n", + "Return of the Jedi (1983)\n", + "In the Bleak Midwinter (1995)\n", + "Cosine similarity: 0.629\n", + "Return of the Jedi (1983)\n", + "Canadian Bacon (1994)\n", + "Cosine similarity: 0.633\n", + "Return of the Jedi (1983)\n", + "First Knight (1995)\n", + "Cosine similarity: 0.535\n", + "Return of the Jedi (1983)\n", + "Mallrats (1995)\n", + "Cosine similarity: 0.731\n", + "Return of the Jedi (1983)\n", + "Nine Months (1995)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Boys on the Side (1995)\n", + "Cosine similarity: 0.598\n", + "Return of the Jedi (1983)\n", + "Circle of Friends (1995)\n", + "Cosine similarity: 0.73\n", + "Return of the Jedi (1983)\n", + "Exit to Eden (1994)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "Fluke (1995)\n", + "Cosine similarity: 0.607\n", + "Return of the Jedi (1983)\n", + "Immortal Beloved (1994)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "Junior (1994)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Nell (1994)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Queen Margot (Reine Margot, La) (1994)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Corrina, Corrina (1994)\n", + "Cosine similarity: 0.713\n", + "Return of the Jedi (1983)\n", + "Dave (1993)\n", + "Cosine similarity: 0.773\n", + "Return of the Jedi (1983)\n", + "Go Fish (1994)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "Made in America (1993)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Philadelphia (1993)\n", + "Cosine similarity: 0.647\n", + "Return of the Jedi (1983)\n", + "Shadowlands (1993)\n", + "Cosine similarity: 0.726\n", + "Return of the Jedi (1983)\n", + "Sirens (1994)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Threesome (1994)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "Pretty Woman (1990)\n", + "Cosine similarity: 0.692\n", + "Return of the Jedi (1983)\n", + "Jane Eyre (1996)\n", + "Cosine similarity: 0.483\n", + "Return of the Jedi (1983)\n", + "Last Supper, The (1995)\n", + "Cosine similarity: 0.537\n", + "Return of the Jedi (1983)\n", + "Ransom (1996)\n", + "Cosine similarity: 0.625\n", + "Return of the Jedi (1983)\n", + "Crow: City of Angels, The (1996)\n", + "Cosine similarity: 0.561\n", + "Return of the Jedi (1983)\n", + "Michael Collins (1996)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Ruling Class, The (1972)\n", + "Cosine similarity: 0.562\n", + "Return of the Jedi (1983)\n", + "Real Genius (1985)\n", + "Cosine similarity: 0.706\n", + "Return of the Jedi (1983)\n", + "Benny & Joon (1993)\n", + "Cosine similarity: 0.661\n", + "Return of the Jedi (1983)\n", + "Saint, The (1997)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "MatchMaker, The (1997)\n", + "Cosine similarity: 0.589\n", + "Return of the Jedi (1983)\n", + "Amistad (1997)\n", + "Cosine similarity: 0.705\n", + "Return of the Jedi (1983)\n", + "Tomorrow Never Dies (1997)\n", + "Cosine similarity: 0.756\n", + "Return of the Jedi (1983)\n", + "Replacement Killers, The (1998)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "Burnt By the Sun (1994)\n", + "Cosine similarity: 0.541\n", + "Return of the Jedi (1983)\n", + "Red Corner (1997)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Jumanji (1995)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Father of the Bride Part II (1995)\n", + "Cosine similarity: 0.552\n", + "Return of the Jedi (1983)\n", + "Across the Sea of Time (1995)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Lawnmower Man 2: Beyond Cyberspace (1996)\n", + "Cosine similarity: 0.739\n", + "Return of the Jedi (1983)\n", + "Fair Game (1995)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Screamers (1995)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "Nick of Time (1995)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "Beautiful Girls (1996)\n", + "Cosine similarity: 0.71\n", + "Return of the Jedi (1983)\n", + "Happy Gilmore (1996)\n", + "Cosine similarity: 0.656\n", + "Return of the Jedi (1983)\n", + "If Lucy Fell (1996)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Boomerang (1992)\n", + "Cosine similarity: 0.49\n", + "Return of the Jedi (1983)\n", + "Man of the Year (1995)\n", + "Cosine similarity: 0.727\n", + "Return of the Jedi (1983)\n", + "Addiction, The (1995)\n", + "Cosine similarity: 0.46\n", + "Return of the Jedi (1983)\n", + "Casper (1995)\n", + "Cosine similarity: 0.633\n", + "Return of the Jedi (1983)\n", + "Congo (1995)\n", + "Cosine similarity: 0.406\n", + "Return of the Jedi (1983)\n", + "Devil in a Blue Dress (1995)\n", + "Cosine similarity: 0.594\n", + "Return of the Jedi (1983)\n", + "Johnny Mnemonic (1995)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Kids (1995)\n", + "Cosine similarity: 0.601\n", + "Return of the Jedi (1983)\n", + "Mute Witness (1994)\n", + "Cosine similarity: 0.482\n", + "Return of the Jedi (1983)\n", + "Prophecy, The (1995)\n", + "Cosine similarity: 0.689\n", + "Return of the Jedi (1983)\n", + "Something to Talk About (1995)\n", + "Cosine similarity: 0.545\n", + "Return of the Jedi (1983)\n", + "Three Wishes (1995)\n", + "Cosine similarity: 0.567\n", + "Return of the Jedi (1983)\n", + "Castle Freak (1995)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Don Juan DeMarco (1995)\n", + "Cosine similarity: 0.685\n", + "Return of the Jedi (1983)\n", + "Drop Zone (1994)\n", + "Cosine similarity: 0.423\n", + "Return of the Jedi (1983)\n", + "Dumb & Dumber (1994)\n", + "Cosine similarity: 0.465\n", + "Return of the Jedi (1983)\n", + "French Kiss (1995)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Little Odessa (1994)\n", + "Cosine similarity: 0.558\n", + "Return of the Jedi (1983)\n", + "Milk Money (1994)\n", + "Cosine similarity: 0.625\n", + "Return of the Jedi (1983)\n", + "Beyond Bedlam (1993)\n", + "Cosine similarity: 0.123\n", + "Return of the Jedi (1983)\n", + "Only You (1994)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Perez Family, The (1995)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Roommates (1995)\n", + "Cosine similarity: 0.748\n", + "Return of the Jedi (1983)\n", + "Relative Fear (1994)\n", + "Cosine similarity: -0.0833\n", + "Return of the Jedi (1983)\n", + "Swimming with Sharks (1995)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "Tommy Boy (1995)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Baby-Sitters Club, The (1995)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "Bullets Over Broadway (1994)\n", + "Cosine similarity: 0.698\n", + "Return of the Jedi (1983)\n", + "Crooklyn (1994)\n", + "Cosine similarity: 0.686\n", + "Return of the Jedi (1983)\n", + "It Could Happen to You (1994)\n", + "Cosine similarity: 0.649\n", + "Return of the Jedi (1983)\n", + "Richie Rich (1994)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Speechless (1994)\n", + "Cosine similarity: 0.64\n", + "Return of the Jedi (1983)\n", + "Timecop (1994)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "Bad Company (1995)\n", + "Cosine similarity: 0.68\n", + "Return of the Jedi (1983)\n", + "Boys Life (1995)\n", + "Cosine similarity: 0.725\n", + "Return of the Jedi (1983)\n", + "In the Mouth of Madness (1995)\n", + "Cosine similarity: 0.69\n", + "Return of the Jedi (1983)\n", + "Air Up There, The (1994)\n", + "Cosine similarity: 0.661\n", + "Return of the Jedi (1983)\n", + "Hard Target (1993)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Heaven & Earth (1993)\n", + "Cosine similarity: 0.552\n", + "Return of the Jedi (1983)\n", + "Jimmy Hollywood (1994)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Manhattan Murder Mystery (1993)\n", + "Cosine similarity: 0.698\n", + "Return of the Jedi (1983)\n", + "Menace II Society (1993)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Poetic Justice (1993)\n", + "Cosine similarity: 0.383\n", + "Return of the Jedi (1983)\n", + "Program, The (1993)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "Rising Sun (1993)\n", + "Cosine similarity: 0.673\n", + "Return of the Jedi (1983)\n", + "Shadow, The (1994)\n", + "Cosine similarity: 0.557\n", + "Return of the Jedi (1983)\n", + "Thirty-Two Short Films About Glenn Gould (1993)\n", + "Cosine similarity: 0.58\n", + "Return of the Jedi (1983)\n", + "Andre (1994)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "Celluloid Closet, The (1995)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Great Day in Harlem, A (1994)\n", + "Cosine similarity: 0.0557\n", + "Return of the Jedi (1983)\n", + "One Fine Day (1996)\n", + "Cosine similarity: 0.74\n", + "Return of the Jedi (1983)\n", + "Candyman: Farewell to the Flesh (1995)\n", + "Cosine similarity: 0.676\n", + "Return of the Jedi (1983)\n", + "Frisk (1995)\n", + "Cosine similarity: 0.422\n", + "Return of the Jedi (1983)\n", + "Girl 6 (1996)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Eddie (1996)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "Space Jam (1996)\n", + "Cosine similarity: 0.546\n", + "Return of the Jedi (1983)\n", + "Mrs. Winterbourne (1996)\n", + "Cosine similarity: 0.71\n", + "Return of the Jedi (1983)\n", + "Faces (1968)\n", + "Cosine similarity: 0.628\n", + "Return of the Jedi (1983)\n", + "Mulholland Falls (1996)\n", + "Cosine similarity: 0.785\n", + "Return of the Jedi (1983)\n", + "Great White Hype, The (1996)\n", + "Cosine similarity: 0.636\n", + "Return of the Jedi (1983)\n", + "Arrival, The (1996)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Phantom, The (1996)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Daylight (1996)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Alaska (1996)\n", + "Cosine similarity: 0.474\n", + "Return of the Jedi (1983)\n", + "Fled (1996)\n", + "Cosine similarity: 0.518\n", + "Return of the Jedi (1983)\n", + "Power 98 (1995)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Escape from L.A. (1996)\n", + "Cosine similarity: 0.665\n", + "Return of the Jedi (1983)\n", + "Bogus (1996)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Bulletproof (1996)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Halloween: The Curse of Michael Myers (1995)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "Gay Divorcee, The (1934)\n", + "Cosine similarity: 0.577\n", + "Return of the Jedi (1983)\n", + "Ninotchka (1939)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Meet John Doe (1941)\n", + "Cosine similarity: 0.742\n", + "Return of the Jedi (1983)\n", + "In the Line of Duty 2 (1987)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Loch Ness (1995)\n", + "Cosine similarity: 0.646\n", + "Return of the Jedi (1983)\n", + "Last Man Standing (1996)\n", + "Cosine similarity: 0.62\n", + "Return of the Jedi (1983)\n", + "Glimmer Man, The (1996)\n", + "Cosine similarity: 0.452\n", + "Return of the Jedi (1983)\n", + "Pollyanna (1960)\n", + "Cosine similarity: 0.52\n", + "Return of the Jedi (1983)\n", + "Shaggy Dog, The (1959)\n", + "Cosine similarity: 0.543\n", + "Return of the Jedi (1983)\n", + "Freeway (1996)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "That Thing You Do! (1996)\n", + "Cosine similarity: 0.647\n", + "Return of the Jedi (1983)\n", + "To Gillian on Her 37th Birthday (1996)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "Looking for Richard (1996)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "Murder, My Sweet (1944)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Days of Thunder (1990)\n", + "Cosine similarity: 0.569\n", + "Return of the Jedi (1983)\n", + "Perfect Candidate, A (1996)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "Two or Three Things I Know About Her (1966)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Bloody Child, The (1996)\n", + "Cosine similarity: 0.489\n", + "Return of the Jedi (1983)\n", + "Braindead (1992)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "Bad Taste (1987)\n", + "Cosine similarity: 0.558\n", + "Return of the Jedi (1983)\n", + "Diva (1981)\n", + "Cosine similarity: 0.586\n", + "Return of the Jedi (1983)\n", + "Night on Earth (1991)\n", + "Cosine similarity: 0.657\n", + "Return of the Jedi (1983)\n", + "Paris Was a Woman (1995)\n", + "Cosine similarity: 0.728\n", + "Return of the Jedi (1983)\n", + "Amityville: Dollhouse (1996)\n", + "Cosine similarity: 0.748\n", + "Return of the Jedi (1983)\n", + "April Fool's Day (1986)\n", + "Cosine similarity: 0.482\n", + "Return of the Jedi (1983)\n", + "Believers, The (1987)\n", + "Cosine similarity: 0.482\n", + "Return of the Jedi (1983)\n", + "Nosferatu a Venezia (1986)\n", + "Cosine similarity: 0.648\n", + "Return of the Jedi (1983)\n", + "Jingle All the Way (1996)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "Garden of Finzi-Contini, The (Giardino dei Finzi-Contini, Il) (1970)\n", + "Cosine similarity: 0.596\n", + "Return of the Jedi (1983)\n", + "My Fellow Americans (1996)\n", + "Cosine similarity: 0.717\n", + "Return of the Jedi (1983)\n", + "Ice Storm, The (1997)\n", + "Cosine similarity: 0.433\n", + "Return of the Jedi (1983)\n", + "Michael (1996)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Whole Wide World, The (1996)\n", + "Cosine similarity: 0.637\n", + "Return of the Jedi (1983)\n", + "Hearts and Minds (1996)\n", + "Cosine similarity: 0.685\n", + "Return of the Jedi (1983)\n", + "Fools Rush In (1997)\n", + "Cosine similarity: 0.721\n", + "Return of the Jedi (1983)\n", + "Touch (1997)\n", + "Cosine similarity: 0.742\n", + "Return of the Jedi (1983)\n", + "Vegas Vacation (1997)\n", + "Cosine similarity: 0.562\n", + "Return of the Jedi (1983)\n", + "Love Jones (1997)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "Picture Perfect (1997)\n", + "Cosine similarity: 0.635\n", + "Return of the Jedi (1983)\n", + "Career Girls (1997)\n", + "Cosine similarity: 0.545\n", + "Return of the Jedi (1983)\n", + "She's So Lovely (1997)\n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "Money Talks (1997)\n", + "Cosine similarity: 0.581\n", + "Return of the Jedi (1983)\n", + "Excess Baggage (1997)\n", + "Cosine similarity: 0.517\n", + "Return of the Jedi (1983)\n", + "That Darn Cat! (1997)\n", + "Cosine similarity: 0.374\n", + "Return of the Jedi (1983)\n", + "Peacemaker, The (1997)\n", + "Cosine similarity: 0.705\n", + "Return of the Jedi (1983)\n", + "Soul Food (1997)\n", + "Cosine similarity: 0.632\n", + "Return of the Jedi (1983)\n", + "Money Talks (1997)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Washington Square (1997)\n", + "Cosine similarity: 0.544\n", + "Return of the Jedi (1983)\n", + "Telling Lies in America (1997)\n", + "Cosine similarity: 0.571\n", + "Return of the Jedi (1983)\n", + "Year of the Horse (1997)\n", + "Cosine similarity: 0.551\n", + "Return of the Jedi (1983)\n", + "Phantoms (1998)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Life Less Ordinary, A (1997)\n", + "Cosine similarity: 0.638\n", + "Return of the Jedi (1983)\n", + "Eve's Bayou (1997)\n", + "Cosine similarity: 0.591\n", + "Return of the Jedi (1983)\n", + "One Night Stand (1997)\n", + "Cosine similarity: 0.543\n", + "Return of the Jedi (1983)\n", + "Tango Lesson, The (1997)\n", + "Cosine similarity: 0.558\n", + "Return of the Jedi (1983)\n", + "Mortal Kombat: Annihilation (1997)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Bent (1997)\n", + "Cosine similarity: 0.487\n", + "Return of the Jedi (1983)\n", + "Flubber (1997)\n", + "Cosine similarity: 0.739\n", + "Return of the Jedi (1983)\n", + "For Richer or Poorer (1997)\n", + "Cosine similarity: 0.71\n", + "Return of the Jedi (1983)\n", + "Home Alone 3 (1997)\n", + "Cosine similarity: 0.472\n", + "Return of the Jedi (1983)\n", + "Scream 2 (1997)\n", + "Cosine similarity: 0.541\n", + "Return of the Jedi (1983)\n", + "Sweet Hereafter, The (1997)\n", + "Cosine similarity: 0.44\n", + "Return of the Jedi (1983)\n", + "Time Tracers (1995)\n", + "Cosine similarity: 0.524\n", + "Return of the Jedi (1983)\n", + "Postman, The (1997)\n", + "Cosine similarity: 0.457\n", + "Return of the Jedi (1983)\n", + "Winter Guest, The (1997)\n", + "Cosine similarity: 0.498\n", + "Return of the Jedi (1983)\n", + "Kundun (1997)\n", + "Cosine similarity: 0.586\n", + "Return of the Jedi (1983)\n", + "Mr. Magoo (1997)\n", + "Cosine similarity: 0.433\n", + "Return of the Jedi (1983)\n", + "Big Lebowski, The (1998)\n", + "Cosine similarity: 0.576\n", + "Return of the Jedi (1983)\n", + "Afterglow (1997)\n", + "Cosine similarity: 0.675\n", + "Return of the Jedi (1983)\n", + "Ma vie en rose (My Life in Pink) (1997)\n", + "Cosine similarity: 0.441\n", + "Return of the Jedi (1983)\n", + "Great Expectations (1998)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Oscar & Lucinda (1997)\n", + "Cosine similarity: 0.59\n", + "Return of the Jedi (1983)\n", + "Vermin (1998)\n", + "Cosine similarity: 0.637\n", + "Return of the Jedi (1983)\n", + "Half Baked (1998)\n", + "Cosine similarity: 0.531\n", + "Return of the Jedi (1983)\n", + "Dangerous Beauty (1998)\n", + "Cosine similarity: 0.688\n", + "Return of the Jedi (1983)\n", + "Nil By Mouth (1997)\n", + "Cosine similarity: 0.613\n", + "Return of the Jedi (1983)\n", + "Twilight (1998)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "U.S. Marshalls (1998)\n", + "Cosine similarity: 0.491\n", + "Return of the Jedi (1983)\n", + "Love and Death on Long Island (1997)\n", + "Cosine similarity: 0.534\n", + "Return of the Jedi (1983)\n", + "Wild Things (1998)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "Primary Colors (1998)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Lost in Space (1998)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Mercury Rising (1998)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "City of Angels (1998)\n", + "Cosine similarity: 0.768\n", + "Return of the Jedi (1983)\n", + "City of Lost Children, The (1995)\n", + "Cosine similarity: 0.602\n", + "Return of the Jedi (1983)\n", + "Two Bits (1995)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Farewell My Concubine (1993)\n", + "Cosine similarity: 0.613\n", + "Return of the Jedi (1983)\n", + "Dead Man (1995)\n", + "Cosine similarity: 0.478\n", + "Return of the Jedi (1983)\n", + "Raise the Red Lantern (1991)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "White Squall (1996)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Unforgettable (1996)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Down Periscope (1996)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Flower of My Secret, The (Flor de mi secreto, La) (1995)\n", + "Cosine similarity: 0.771\n", + "Return of the Jedi (1983)\n", + "Craft, The (1996)\n", + "Cosine similarity: 0.718\n", + "Return of the Jedi (1983)\n", + "Harriet the Spy (1996)\n", + "Cosine similarity: 0.554\n", + "Return of the Jedi (1983)\n", + "Chain Reaction (1996)\n", + "Cosine similarity: 0.719\n", + "Return of the Jedi (1983)\n", + "Island of Dr. Moreau, The (1996)\n", + "Cosine similarity: 0.456\n", + "Return of the Jedi (1983)\n", + "First Kid (1996)\n", + "Cosine similarity: 0.64\n", + "Return of the Jedi (1983)\n", + "Funeral, The (1996)\n", + "Cosine similarity: 0.646\n", + "Return of the Jedi (1983)\n", + "Preacher's Wife, The (1996)\n", + "Cosine similarity: 0.619\n", + "Return of the Jedi (1983)\n", + "Paradise Road (1997)\n", + "Cosine similarity: 0.696\n", + "Return of the Jedi (1983)\n", + "Brassed Off (1996)\n", + "Cosine similarity: 0.683\n", + "Return of the Jedi (1983)\n", + "Thousand Acres, A (1997)\n", + "Cosine similarity: 0.637\n", + "Return of the Jedi (1983)\n", + "Smile Like Yours, A (1997)\n", + "Cosine similarity: 0.656\n", + "Return of the Jedi (1983)\n", + "Murder in the First (1995)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Airheads (1994)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "With Honors (1994)\n", + "Cosine similarity: 0.475\n", + "Return of the Jedi (1983)\n", + "What's Love Got to Do with It (1993)\n", + "Cosine similarity: 0.806\n", + "Return of the Jedi (1983)\n", + "Killing Zoe (1994)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Renaissance Man (1994)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Charade (1963)\n", + "Cosine similarity: 0.661\n", + "Return of the Jedi (1983)\n", + "Fox and the Hound, The (1981)\n", + "Cosine similarity: 0.728\n", + "Return of the Jedi (1983)\n", + "Big Blue, The (Grand bleu, Le) (1988)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Booty Call (1997)\n", + "Cosine similarity: 0.367\n", + "Return of the Jedi (1983)\n", + "How to Make an American Quilt (1995)\n", + "Cosine similarity: 0.645\n", + "Return of the Jedi (1983)\n", + "Georgia (1995)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "Indian in the Cupboard, The (1995)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Blue in the Face (1995)\n", + "Cosine similarity: 0.616\n", + "Return of the Jedi (1983)\n", + "Unstrung Heroes (1995)\n", + "Cosine similarity: 0.552\n", + "Return of the Jedi (1983)\n", + "Unzipped (1995)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "Before Sunrise (1995)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Nobody's Fool (1994)\n", + "Cosine similarity: 0.657\n", + "Return of the Jedi (1983)\n", + "Pushing Hands (1992)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "To Live (Huozhe) (1994)\n", + "Cosine similarity: 0.633\n", + "Return of the Jedi (1983)\n", + "Dazed and Confused (1993)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Naked (1993)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Orlando (1993)\n", + "Cosine similarity: 0.437\n", + "Return of the Jedi (1983)\n", + "Ruby in Paradise (1993)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "Some Folks Call It a Sling Blade (1993)\n", + "Cosine similarity: 0.733\n", + "Return of the Jedi (1983)\n", + "Month by the Lake, A (1995)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Funny Face (1957)\n", + "Cosine similarity: 0.5\n", + "Return of the Jedi (1983)\n", + "Affair to Remember, An (1957)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Little Lord Fauntleroy (1936)\n", + "Cosine similarity: 0.651\n", + "Return of the Jedi (1983)\n", + "Inspector General, The (1949)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Winnie the Pooh and the Blustery Day (1968)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "Hear My Song (1991)\n", + "Cosine similarity: 0.554\n", + "Return of the Jedi (1983)\n", + "Mediterraneo (1991)\n", + "Cosine similarity: 0.635\n", + "Return of the Jedi (1983)\n", + "Passion Fish (1992)\n", + "Cosine similarity: 0.522\n", + "Return of the Jedi (1983)\n", + "Grateful Dead (1995)\n", + "Cosine similarity: 0.68\n", + "Return of the Jedi (1983)\n", + "Eye for an Eye (1996)\n", + "Cosine similarity: 0.682\n", + "Return of the Jedi (1983)\n", + "Fear (1996)\n", + "Cosine similarity: 0.64\n", + "Return of the Jedi (1983)\n", + "Solo (1996)\n", + "Cosine similarity: 0.554\n", + "Return of the Jedi (1983)\n", + "Substitute, The (1996)\n", + "Cosine similarity: 0.437\n", + "Return of the Jedi (1983)\n", + "Heaven's Prisoners (1996)\n", + "Cosine similarity: 0.519\n", + "Return of the Jedi (1983)\n", + "Trigger Effect, The (1996)\n", + "Cosine similarity: 0.728\n", + "Return of the Jedi (1983)\n", + "Mother Night (1996)\n", + "Cosine similarity: 0.552\n", + "Return of the Jedi (1983)\n", + "Dangerous Ground (1997)\n", + "Cosine similarity: 0.636\n", + "Return of the Jedi (1983)\n", + "Maximum Risk (1996)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Rich Man's Wife, The (1996)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Shadow Conspiracy (1997)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Blood & Wine (1997)\n", + "Cosine similarity: 0.564\n", + "Return of the Jedi (1983)\n", + "Turbulence (1997)\n", + "Cosine similarity: 0.493\n", + "Return of the Jedi (1983)\n", + "Underworld (1997)\n", + "Cosine similarity: 0.467\n", + "Return of the Jedi (1983)\n", + "Beautician and the Beast, The (1997)\n", + "Cosine similarity: 0.393\n", + "Return of the Jedi (1983)\n", + "Cats Don't Dance (1997)\n", + "Cosine similarity: 0.493\n", + "Return of the Jedi (1983)\n", + "Anna Karenina (1997)\n", + "Cosine similarity: 0.505\n", + "Return of the Jedi (1983)\n", + "Keys to Tulsa (1997)\n", + "Cosine similarity: 0.379\n", + "Return of the Jedi (1983)\n", + "Head Above Water (1996)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Hercules (1997)\n", + "Cosine similarity: 0.753\n", + "Return of the Jedi (1983)\n", + "Last Time I Committed Suicide, The (1997)\n", + "Cosine similarity: 0.567\n", + "Return of the Jedi (1983)\n", + "Kiss Me, Guido (1997)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Big Green, The (1995)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Stuart Saves His Family (1995)\n", + "Cosine similarity: 0.56\n", + "Return of the Jedi (1983)\n", + "Cabin Boy (1994)\n", + "Cosine similarity: 0.527\n", + "Return of the Jedi (1983)\n", + "Clean Slate (1994)\n", + "Cosine similarity: 0.586\n", + "Return of the Jedi (1983)\n", + "Lightning Jack (1994)\n", + "Cosine similarity: 0.633\n", + "Return of the Jedi (1983)\n", + "Stupids, The (1996)\n", + "Cosine similarity: 0.535\n", + "Return of the Jedi (1983)\n", + "Pest, The (1997)\n", + "Cosine similarity: 0.506\n", + "Return of the Jedi (1983)\n", + "That Darn Cat! (1997)\n", + "Cosine similarity: 0.426\n", + "Return of the Jedi (1983)\n", + "Geronimo: An American Legend (1993)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Double vie de Véronique, La (Double Life of Veronique, The) (1991)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Until the End of the World (Bis ans Ende der Welt) (1991)\n", + "Cosine similarity: 0.581\n", + "Return of the Jedi (1983)\n", + "Waiting for Guffman (1996)\n", + "Cosine similarity: 0.651\n", + "Return of the Jedi (1983)\n", + "I Shot Andy Warhol (1996)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "Stealing Beauty (1996)\n", + "Cosine similarity: 0.521\n", + "Return of the Jedi (1983)\n", + "Basquiat (1996)\n", + "Cosine similarity: 0.567\n", + "Return of the Jedi (1983)\n", + "2 Days in the Valley (1996)\n", + "Cosine similarity: 0.572\n", + "Return of the Jedi (1983)\n", + "Private Parts (1997)\n", + "Cosine similarity: 0.795\n", + "Return of the Jedi (1983)\n", + "Anaconda (1997)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "Romy and Michele's High School Reunion (1997)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Shiloh (1997)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "Con Air (1997)\n", + "Cosine similarity: 0.697\n", + "Return of the Jedi (1983)\n", + "Trees Lounge (1996)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Tie Me Up! Tie Me Down! (1990)\n", + "Cosine similarity: 0.746\n", + "Return of the Jedi (1983)\n", + "Die xue shuang xiong (Killer, The) (1989)\n", + "Cosine similarity: 0.663\n", + "Return of the Jedi (1983)\n", + "Gaslight (1944)\n", + "Cosine similarity: 0.588\n", + "Return of the Jedi (1983)\n", + "8 1/2 (1963)\n", + "Cosine similarity: 0.521\n", + "Return of the Jedi (1983)\n", + "Fast, Cheap & Out of Control (1997)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Fathers' Day (1997)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Mrs. Dalloway (1997)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Fire Down Below (1997)\n", + "Cosine similarity: 0.529\n", + "Return of the Jedi (1983)\n", + "Lay of the Land, The (1997)\n", + "Cosine similarity: 0.563\n", + "Return of the Jedi (1983)\n", + "Shooter, The (1995)\n", + "Cosine similarity: 0.719\n", + "Return of the Jedi (1983)\n", + "Grumpier Old Men (1995)\n", + "Cosine similarity: 0.522\n", + "Return of the Jedi (1983)\n", + "Jury Duty (1995)\n", + "Cosine similarity: 0.555\n", + "Return of the Jedi (1983)\n", + "Beverly Hillbillies, The (1993)\n", + "Cosine similarity: 0.598\n", + "Return of the Jedi (1983)\n", + "Lassie (1994)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Little Big League (1994)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Homeward Bound II: Lost in San Francisco (1996)\n", + "Cosine similarity: 0.368\n", + "Return of the Jedi (1983)\n", + "Quest, The (1996)\n", + "Cosine similarity: 0.545\n", + "Return of the Jedi (1983)\n", + "Cool Runnings (1993)\n", + "Cosine similarity: 0.676\n", + "Return of the Jedi (1983)\n", + "Drop Dead Fred (1991)\n", + "Cosine similarity: 0.344\n", + "Return of the Jedi (1983)\n", + "Grease 2 (1982)\n", + "Cosine similarity: 0.607\n", + "Return of the Jedi (1983)\n", + "Switchback (1997)\n", + "Cosine similarity: 0.498\n", + "Return of the Jedi (1983)\n", + "Hamlet (1996)\n", + "Cosine similarity: 0.745\n", + "Return of the Jedi (1983)\n", + "Two if by Sea (1996)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "Forget Paris (1995)\n", + "Cosine similarity: 0.647\n", + "Return of the Jedi (1983)\n", + "Just Cause (1995)\n", + "Cosine similarity: 0.542\n", + "Return of the Jedi (1983)\n", + "Rent-a-Kid (1995)\n", + "Cosine similarity: 0.543\n", + "Return of the Jedi (1983)\n", + "Paper, The (1994)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Fearless (1993)\n", + "Cosine similarity: 0.518\n", + "Return of the Jedi (1983)\n", + "Malice (1993)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Multiplicity (1996)\n", + "Cosine similarity: 0.731\n", + "Return of the Jedi (1983)\n", + "She's the One (1996)\n", + "Cosine similarity: 0.583\n", + "Return of the Jedi (1983)\n", + "House Arrest (1996)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Ghost and Mrs. Muir, The (1947)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Associate, The (1996)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Dracula: Dead and Loving It (1995)\n", + "Cosine similarity: 0.494\n", + "Return of the Jedi (1983)\n", + "Now and Then (1995)\n", + "Cosine similarity: 0.655\n", + "Return of the Jedi (1983)\n", + "Mr. Wrong (1996)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Simple Twist of Fate, A (1994)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Cronos (1992)\n", + "Cosine similarity: 0.734\n", + "Return of the Jedi (1983)\n", + "Pallbearer, The (1996)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "War, The (1994)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "Don't Be a Menace to South Central While Drinking Your Juice in the Hood (1996)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Adventures of Pinocchio, The (1996)\n", + "Cosine similarity: 0.527\n", + "Return of the Jedi (1983)\n", + "Evening Star, The (1996)\n", + "Cosine similarity: 0.714\n", + "Return of the Jedi (1983)\n", + "Four Days in September (1997)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Little Princess, A (1995)\n", + "Cosine similarity: 0.738\n", + "Return of the Jedi (1983)\n", + "Crossfire (1947)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Koyaanisqatsi (1983)\n", + "Cosine similarity: 0.51\n", + "Return of the Jedi (1983)\n", + "Balto (1995)\n", + "Cosine similarity: 0.563\n", + "Return of the Jedi (1983)\n", + "Bottle Rocket (1996)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Star Maker, The (Uomo delle stelle, L') (1995)\n", + "Cosine similarity: 0.59\n", + "Return of the Jedi (1983)\n", + "Amateur (1994)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Living in Oblivion (1995)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Party Girl (1995)\n", + "Cosine similarity: 0.389\n", + "Return of the Jedi (1983)\n", + "Pyromaniac's Love Story, A (1995)\n", + "Cosine similarity: 0.691\n", + "Return of the Jedi (1983)\n", + "Shallow Grave (1994)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Reality Bites (1994)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Man of No Importance, A (1994)\n", + "Cosine similarity: 0.635\n", + "Return of the Jedi (1983)\n", + "Pagemaster, The (1994)\n", + "Cosine similarity: 0.571\n", + "Return of the Jedi (1983)\n", + "Love and a .45 (1994)\n", + "Cosine similarity: 0.511\n", + "Return of the Jedi (1983)\n", + "Oliver & Company (1988)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Joe's Apartment (1996)\n", + "Cosine similarity: 0.676\n", + "Return of the Jedi (1983)\n", + "Celestial Clockwork (1994)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "Curdled (1996)\n", + "Cosine similarity: 0.538\n", + "Return of the Jedi (1983)\n", + "Female Perversions (1996)\n", + "Cosine similarity: 0.551\n", + "Return of the Jedi (1983)\n", + "Albino Alligator (1996)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Anne Frank Remembered (1995)\n", + "Cosine similarity: 0.562\n", + "Return of the Jedi (1983)\n", + "Carried Away (1996)\n", + "Cosine similarity: 0.497\n", + "Return of the Jedi (1983)\n", + "It's My Party (1995)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Bloodsport 2 (1995)\n", + "Cosine similarity: 0.501\n", + "Return of the Jedi (1983)\n", + "Double Team (1997)\n", + "Cosine similarity: 0.537\n", + "Return of the Jedi (1983)\n", + "Speed 2: Cruise Control (1997)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Sliver (1993)\n", + "Cosine similarity: 0.55\n", + "Return of the Jedi (1983)\n", + "Pete's Dragon (1977)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Dear God (1996)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Live Nude Girls (1995)\n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "Thin Line Between Love and Hate, A (1996)\n", + "Cosine similarity: 0.571\n", + "Return of the Jedi (1983)\n", + "High School High (1996)\n", + "Cosine similarity: 0.607\n", + "Return of the Jedi (1983)\n", + "Commandments (1997)\n", + "Cosine similarity: 0.688\n", + "Return of the Jedi (1983)\n", + "Hate (Haine, La) (1995)\n", + "Cosine similarity: 0.46\n", + "Return of the Jedi (1983)\n", + "Flirting With Disaster (1996)\n", + "Cosine similarity: 0.701\n", + "Return of the Jedi (1983)\n", + "Red Firecracker, Green Firecracker (1994)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "What Happened Was... (1994)\n", + "Cosine similarity: 0.581\n", + "Return of the Jedi (1983)\n", + "Six Degrees of Separation (1993)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Two Much (1996)\n", + "Cosine similarity: 0.581\n", + "Return of the Jedi (1983)\n", + "Trust (1990)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "C'est arrivé près de chez vous (1992)\n", + "Cosine similarity: 0.555\n", + "Return of the Jedi (1983)\n", + "Firestorm (1998)\n", + "Cosine similarity: 0.564\n", + "Return of the Jedi (1983)\n", + "Newton Boys, The (1998)\n", + "Cosine similarity: 0.544\n", + "Return of the Jedi (1983)\n", + "Beyond Rangoon (1995)\n", + "Cosine similarity: 0.775\n", + "Return of the Jedi (1983)\n", + "Feast of July (1995)\n", + "Cosine similarity: 0.576\n", + "Return of the Jedi (1983)\n", + "Death and the Maiden (1994)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "Tank Girl (1995)\n", + "Cosine similarity: 0.546\n", + "Return of the Jedi (1983)\n", + "Double Happiness (1994)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Cobb (1994)\n", + "Cosine similarity: 0.614\n", + "Return of the Jedi (1983)\n", + "Mrs. Parker and the Vicious Circle (1994)\n", + "Cosine similarity: 0.718\n", + "Return of the Jedi (1983)\n", + "Faithful (1996)\n", + "Cosine similarity: 0.556\n", + "Return of the Jedi (1983)\n", + "Twelfth Night (1996)\n", + "Cosine similarity: 0.55\n", + "Return of the Jedi (1983)\n", + "Mark of Zorro, The (1940)\n", + "Cosine similarity: 0.695\n", + "Return of the Jedi (1983)\n", + "Surviving Picasso (1996)\n", + "Cosine similarity: 0.655\n", + "Return of the Jedi (1983)\n", + "Up in Smoke (1978)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Some Kind of Wonderful (1987)\n", + "Cosine similarity: 0.723\n", + "Return of the Jedi (1983)\n", + "I'm Not Rappaport (1996)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "Umbrellas of Cherbourg, The (Parapluies de Cherbourg, Les) (1964)\n", + "Cosine similarity: 0.54\n", + "Return of the Jedi (1983)\n", + "They Made Me a Criminal (1939)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Last Time I Saw Paris, The (1954)\n", + "Cosine similarity: 0.715\n", + "Return of the Jedi (1983)\n", + "Farewell to Arms, A (1932)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Innocents, The (1961)\n", + "Cosine similarity: 0.656\n", + "Return of the Jedi (1983)\n", + "Old Man and the Sea, The (1958)\n", + "Cosine similarity: 0.548\n", + "Return of the Jedi (1983)\n", + "Truman Show, The (1998)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Heidi Fleiss: Hollywood Madam (1995) \n", + "Cosine similarity: 0.497\n", + "Return of the Jedi (1983)\n", + "Chungking Express (1994)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "Jupiter's Wife (1994)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Safe (1995)\n", + "Cosine similarity: 0.59\n", + "Return of the Jedi (1983)\n", + "Feeling Minnesota (1996)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Escape to Witch Mountain (1975)\n", + "Cosine similarity: 0.682\n", + "Return of the Jedi (1983)\n", + "Get on the Bus (1996)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "Doors, The (1991)\n", + "Cosine similarity: 0.591\n", + "Return of the Jedi (1983)\n", + "Ghosts of Mississippi (1996)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Beautiful Thing (1996)\n", + "Cosine similarity: 0.5\n", + "Return of the Jedi (1983)\n", + "Best Men (1997)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Hackers (1995)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Road to Wellville, The (1994)\n", + "Cosine similarity: 0.481\n", + "Return of the Jedi (1983)\n", + "War Room, The (1993)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "When We Were Kings (1996)\n", + "Cosine similarity: 0.712\n", + "Return of the Jedi (1983)\n", + "Hard Eight (1996)\n", + "Cosine similarity: 0.61\n", + "Return of the Jedi (1983)\n", + "Quiet Room, The (1996)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Blue Chips (1994)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Calendar Girl (1993)\n", + "Cosine similarity: 0.648\n", + "Return of the Jedi (1983)\n", + "My Family (1995)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Tom & Viv (1994)\n", + "Cosine similarity: 0.492\n", + "Return of the Jedi (1983)\n", + "Walkabout (1971)\n", + "Cosine similarity: 0.721\n", + "Return of the Jedi (1983)\n", + "Last Dance (1996)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Original Gangstas (1996)\n", + "Cosine similarity: 0.538\n", + "Return of the Jedi (1983)\n", + "In Love and War (1996)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Backbeat (1993)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "Alphaville (1965)\n", + "Cosine similarity: 0.56\n", + "Return of the Jedi (1983)\n", + "Rendezvous in Paris (Rendez-vous de Paris, Les) (1995)\n", + "Cosine similarity: -0.13\n", + "Return of the Jedi (1983)\n", + "Cyclo (1995)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Relic, The (1997)\n", + "Cosine similarity: 0.409\n", + "Return of the Jedi (1983)\n", + "Fille seule, La (A Single Girl) (1995)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "Stalker (1979)\n", + "Cosine similarity: 0.655\n", + "Return of the Jedi (1983)\n", + "Love! Valour! Compassion! (1997)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "Palookaville (1996)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Phat Beach (1996)\n", + "Cosine similarity: 0.463\n", + "Return of the Jedi (1983)\n", + "Portrait of a Lady, The (1996)\n", + "Cosine similarity: 0.692\n", + "Return of the Jedi (1983)\n", + "Zeus and Roxanne (1997)\n", + "Cosine similarity: 0.661\n", + "Return of the Jedi (1983)\n", + "Big Bully (1996)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Love & Human Remains (1993)\n", + "Cosine similarity: 0.625\n", + "Return of the Jedi (1983)\n", + "Sum of Us, The (1994)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "Little Buddha (1993)\n", + "Cosine similarity: 0.594\n", + "Return of the Jedi (1983)\n", + "Fresh (1994)\n", + "Cosine similarity: 0.602\n", + "Return of the Jedi (1983)\n", + "Spanking the Monkey (1994)\n", + "Cosine similarity: 0.449\n", + "Return of the Jedi (1983)\n", + "Wild Reeds (1994)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Women, The (1939)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Bliss (1997)\n", + "Cosine similarity: 0.703\n", + "Return of the Jedi (1983)\n", + "Caught (1996)\n", + "Cosine similarity: 0.638\n", + "Return of the Jedi (1983)\n", + "Hugo Pool (1997)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "Welcome To Sarajevo (1997)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Dunston Checks In (1996)\n", + "Cosine similarity: 0.424\n", + "Return of the Jedi (1983)\n", + "Major Payne (1994)\n", + "Cosine similarity: 0.486\n", + "Return of the Jedi (1983)\n", + "Man of the House (1995)\n", + "Cosine similarity: 0.504\n", + "Return of the Jedi (1983)\n", + "I Love Trouble (1994)\n", + "Cosine similarity: 0.625\n", + "Return of the Jedi (1983)\n", + "Low Down Dirty Shame, A (1994)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Cops and Robbersons (1994)\n", + "Cosine similarity: 0.499\n", + "Return of the Jedi (1983)\n", + "Cowboy Way, The (1994)\n", + "Cosine similarity: 0.456\n", + "Return of the Jedi (1983)\n", + "Endless Summer 2, The (1994)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "In the Army Now (1994)\n", + "Cosine similarity: 0.594\n", + "Return of the Jedi (1983)\n", + "Inkwell, The (1994)\n", + "Cosine similarity: 0.638\n", + "Return of the Jedi (1983)\n", + "Switchblade Sisters (1975)\n", + "Cosine similarity: 0.535\n", + "Return of the Jedi (1983)\n", + "Young Guns II (1990)\n", + "Cosine similarity: 0.47\n", + "Return of the Jedi (1983)\n", + "Prefontaine (1997)\n", + "Cosine similarity: 0.685\n", + "Return of the Jedi (1983)\n", + "That Old Feeling (1997)\n", + "Cosine similarity: 0.751\n", + "Return of the Jedi (1983)\n", + "Letter From Death Row, A (1998)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Boys of St. Vincent, The (1993)\n", + "Cosine similarity: 0.716\n", + "Return of the Jedi (1983)\n", + "Before the Rain (Pred dozhdot) (1994)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "Once Were Warriors (1994)\n", + "Cosine similarity: 0.651\n", + "Return of the Jedi (1983)\n", + "Strawberry and Chocolate (Fresa y chocolate) (1993)\n", + "Cosine similarity: 0.542\n", + "Return of the Jedi (1983)\n", + "Savage Nights (Nuits fauves, Les) (1992)\n", + "Cosine similarity: 0.641\n", + "Return of the Jedi (1983)\n", + "Family Thing, A (1996)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Purple Noon (1960)\n", + "Cosine similarity: 0.604\n", + "Return of the Jedi (1983)\n", + "Cemetery Man (Dellamorte Dellamore) (1994)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Kim (1950)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Marlene Dietrich: Shadow and Light (1996) \n", + "Cosine similarity: -0.0686\n", + "Return of the Jedi (1983)\n", + "Maybe, Maybe Not (Bewegte Mann, Der) (1994)\n", + "Cosine similarity: 0.557\n", + "Return of the Jedi (1983)\n", + "Top Hat (1935)\n", + "Cosine similarity: 0.613\n", + "Return of the Jedi (1983)\n", + "To Be or Not to Be (1942)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "Secret Agent, The (1996)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Amos & Andrew (1993)\n", + "Cosine similarity: 0.598\n", + "Return of the Jedi (1983)\n", + "Jade (1995)\n", + "Cosine similarity: 0.504\n", + "Return of the Jedi (1983)\n", + "Kiss of Death (1995)\n", + "Cosine similarity: 0.624\n", + "Return of the Jedi (1983)\n", + "Mixed Nuts (1994)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Virtuosity (1995)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Blue Sky (1994)\n", + "Cosine similarity: 0.557\n", + "Return of the Jedi (1983)\n", + "Flesh and Bone (1993)\n", + "Cosine similarity: 0.53\n", + "Return of the Jedi (1983)\n", + "Guilty as Sin (1993)\n", + "Cosine similarity: 0.378\n", + "Return of the Jedi (1983)\n", + "In the Realm of the Senses (Ai no corrida) (1976)\n", + "Cosine similarity: 0.621\n", + "Return of the Jedi (1983)\n", + "Barb Wire (1996)\n", + "Cosine similarity: 0.672\n", + "Return of the Jedi (1983)\n", + "Kissed (1996)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "Assassins (1995)\n", + "Cosine similarity: 0.617\n", + "Return of the Jedi (1983)\n", + "Friday (1995)\n", + "Cosine similarity: 0.728\n", + "Return of the Jedi (1983)\n", + "Goofy Movie, A (1995)\n", + "Cosine similarity: 0.555\n", + "Return of the Jedi (1983)\n", + "Higher Learning (1995)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "When a Man Loves a Woman (1994)\n", + "Cosine similarity: 0.555\n", + "Return of the Jedi (1983)\n", + "Judgment Night (1993)\n", + "Cosine similarity: 0.632\n", + "Return of the Jedi (1983)\n", + "King of the Hill (1993)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Scout, The (1994)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Angus (1995)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Night Falls on Manhattan (1997)\n", + "Cosine similarity: 0.638\n", + "Return of the Jedi (1983)\n", + "Awfully Big Adventure, An (1995)\n", + "Cosine similarity: 0.476\n", + "Return of the Jedi (1983)\n", + "Under Siege 2: Dark Territory (1995)\n", + "Cosine similarity: 0.594\n", + "Return of the Jedi (1983)\n", + "Poison Ivy II (1995)\n", + "Cosine similarity: 0.477\n", + "Return of the Jedi (1983)\n", + "Ready to Wear (Pret-A-Porter) (1994)\n", + "Cosine similarity: 0.556\n", + "Return of the Jedi (1983)\n", + "Marked for Death (1990)\n", + "Cosine similarity: 0.52\n", + "Return of the Jedi (1983)\n", + "Madonna: Truth or Dare (1991)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "Nénette et Boni (1996)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "Chairman of the Board (1998)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "Big Bang Theory, The (1994)\n", + "Cosine similarity: 0.616\n", + "Return of the Jedi (1983)\n", + "Other Voices, Other Rooms (1997)\n", + "Cosine similarity: -0.135\n", + "Return of the Jedi (1983)\n", + "Twisted (1996)\n", + "Cosine similarity: 0.664\n", + "Return of the Jedi (1983)\n", + "Full Speed (1996)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Cutthroat Island (1995)\n", + "Cosine similarity: 0.534\n", + "Return of the Jedi (1983)\n", + "Ghost in the Shell (Kokaku kidotai) (1995)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Van, The (1996)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Old Lady Who Walked in the Sea, The (Vieille qui marchait dans la mer, La) (1991)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "Night Flier (1997)\n", + "Cosine similarity: 0.587\n", + "Return of the Jedi (1983)\n", + "Metro (1997)\n", + "Cosine similarity: 0.48\n", + "Return of the Jedi (1983)\n", + "Gridlock'd (1997)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "Bushwhacked (1995)\n", + "Cosine similarity: 0.515\n", + "Return of the Jedi (1983)\n", + "Bad Girls (1994)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Blink (1994)\n", + "Cosine similarity: 0.603\n", + "Return of the Jedi (1983)\n", + "For Love or Money (1993)\n", + "Cosine similarity: 0.58\n", + "Return of the Jedi (1983)\n", + "Best of the Best 3: No Turning Back (1995)\n", + "Cosine similarity: 0.611\n", + "Return of the Jedi (1983)\n", + "A Chef in Love (1996)\n", + "Cosine similarity: 0.666\n", + "Return of the Jedi (1983)\n", + "Contempt (Mépris, Le) (1963)\n", + "Cosine similarity: 0.566\n", + "Return of the Jedi (1983)\n", + "Tie That Binds, The (1995)\n", + "Cosine similarity: 0.576\n", + "Return of the Jedi (1983)\n", + "Gone Fishin' (1997)\n", + "Cosine similarity: 0.493\n", + "Return of the Jedi (1983)\n", + "Broken English (1996)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Designated Mourner, The (1997)\n", + "Cosine similarity: 0.406\n", + "Return of the Jedi (1983)\n", + "Designated Mourner, The (1997)\n", + "Cosine similarity: 0.547\n", + "Return of the Jedi (1983)\n", + "Trial and Error (1997)\n", + "Cosine similarity: 0.49\n", + "Return of the Jedi (1983)\n", + "Pie in the Sky (1995)\n", + "Cosine similarity: 0.683\n", + "Return of the Jedi (1983)\n", + "Total Eclipse (1995)\n", + "Cosine similarity: 0.598\n", + "Return of the Jedi (1983)\n", + "Run of the Country, The (1995)\n", + "Cosine similarity: 0.635\n", + "Return of the Jedi (1983)\n", + "Walking and Talking (1996)\n", + "Cosine similarity: 0.729\n", + "Return of the Jedi (1983)\n", + "Foxfire (1996)\n", + "Cosine similarity: 0.488\n", + "Return of the Jedi (1983)\n", + "Nothing to Lose (1994)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Star Maps (1997)\n", + "Cosine similarity: 0.528\n", + "Return of the Jedi (1983)\n", + "Bread and Chocolate (Pane e cioccolata) (1973)\n", + "Cosine similarity: 0.566\n", + "Return of the Jedi (1983)\n", + "Clockers (1995)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Bitter Moon (1992)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "Love in the Afternoon (1957)\n", + "Cosine similarity: 0.765\n", + "Return of the Jedi (1983)\n", + "Life with Mikey (1993)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "North (1994)\n", + "Cosine similarity: 0.473\n", + "Return of the Jedi (1983)\n", + "Talking About Sex (1994)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Color of Night (1994)\n", + "Cosine similarity: 0.726\n", + "Return of the Jedi (1983)\n", + "Robocop 3 (1993)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Killer (Bulletproof Heart) (1994)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Sunset Park (1996)\n", + "Cosine similarity: 0.535\n", + "Return of the Jedi (1983)\n", + "Set It Off (1996)\n", + "Cosine similarity: 0.741\n", + "Return of the Jedi (1983)\n", + "Selena (1997)\n", + "Cosine similarity: 0.655\n", + "Return of the Jedi (1983)\n", + "Wild America (1997)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Gang Related (1997)\n", + "Cosine similarity: 0.461\n", + "Return of the Jedi (1983)\n", + "Manny & Lo (1996)\n", + "Cosine similarity: 0.571\n", + "Return of the Jedi (1983)\n", + "Grass Harp, The (1995)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Out to Sea (1997)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Before and After (1996)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Princess Caraboo (1994)\n", + "Cosine similarity: 0.685\n", + "Return of the Jedi (1983)\n", + "Shall We Dance? (1937)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Ed (1996)\n", + "Cosine similarity: 0.753\n", + "Return of the Jedi (1983)\n", + "Denise Calls Up (1995)\n", + "Cosine similarity: 0.693\n", + "Return of the Jedi (1983)\n", + "Jack and Sarah (1995)\n", + "Cosine similarity: 0.54\n", + "Return of the Jedi (1983)\n", + "Country Life (1994)\n", + "Cosine similarity: 0.383\n", + "Return of the Jedi (1983)\n", + "Celtic Pride (1996)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Simple Wish, A (1997)\n", + "Cosine similarity: 0.425\n", + "Return of the Jedi (1983)\n", + "Star Kid (1997)\n", + "Cosine similarity: 0.658\n", + "Return of the Jedi (1983)\n", + "Ayn Rand: A Sense of Life (1997)\n", + "Cosine similarity: 0.646\n", + "Return of the Jedi (1983)\n", + "Kicked in the Head (1997)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Indian Summer (1996)\n", + "Cosine similarity: 0.616\n", + "Return of the Jedi (1983)\n", + "Love Affair (1994)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "Band Wagon, The (1953)\n", + "Cosine similarity: 0.601\n", + "Return of the Jedi (1983)\n", + "Penny Serenade (1941)\n", + "Cosine similarity: 0.424\n", + "Return of the Jedi (1983)\n", + "'Til There Was You (1997)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Stripes (1981)\n", + "Cosine similarity: 0.742\n", + "Return of the Jedi (1983)\n", + "Late Bloomers (1996)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Getaway, The (1994)\n", + "Cosine similarity: 0.555\n", + "Return of the Jedi (1983)\n", + "New York Cop (1996)\n", + "Cosine similarity: -0.104\n", + "Return of the Jedi (1983)\n", + "National Lampoon's Senior Trip (1995)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "Delta of Venus (1994)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Carmen Miranda: Bananas Is My Business (1994)\n", + "Cosine similarity: 0.683\n", + "Return of the Jedi (1983)\n", + "Babyfever (1994)\n", + "Cosine similarity: 0.767\n", + "Return of the Jedi (1983)\n", + "Very Natural Thing, A (1974)\n", + "Cosine similarity: -0.302\n", + "Return of the Jedi (1983)\n", + "Walk in the Sun, A (1945)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Waiting to Exhale (1995)\n", + "Cosine similarity: 0.586\n", + "Return of the Jedi (1983)\n", + "Pompatus of Love, The (1996)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Palmetto (1998)\n", + "Cosine similarity: 0.562\n", + "Return of the Jedi (1983)\n", + "Surviving the Game (1994)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "Inventing the Abbotts (1997)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Horse Whisperer, The (1998)\n", + "Cosine similarity: 0.591\n", + "Return of the Jedi (1983)\n", + "Journey of August King, The (1995)\n", + "Cosine similarity: 0.754\n", + "Return of the Jedi (1983)\n", + "Catwalk (1995)\n", + "Cosine similarity: 0.725\n", + "Return of the Jedi (1983)\n", + "Neon Bible, The (1995)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "Homage (1995)\n", + "Cosine similarity: 0.664\n", + "Return of the Jedi (1983)\n", + "Open Season (1996)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Metisse (Café au Lait) (1993)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Wooden Man's Bride, The (Wu Kui) (1994)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Loaded (1994)\n", + "Cosine similarity: 0.587\n", + "Return of the Jedi (1983)\n", + "August (1996)\n", + "Cosine similarity: 0.752\n", + "Return of the Jedi (1983)\n", + "Boys (1996)\n", + "Cosine similarity: 0.644\n", + "Return of the Jedi (1983)\n", + "Captives (1994)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Of Love and Shadows (1994)\n", + "Cosine similarity: 0.541\n", + "Return of the Jedi (1983)\n", + "Low Life, The (1994)\n", + "Cosine similarity: -0.0513\n", + "Return of the Jedi (1983)\n", + "An Unforgettable Summer (1994)\n", + "Cosine similarity: 0.616\n", + "Return of the Jedi (1983)\n", + "Last Klezmer: Leopold Kozlowski, His Life and Music, The (1995)\n", + "Cosine similarity: 0.665\n", + "Return of the Jedi (1983)\n", + "My Life and Times With Antonin Artaud (En compagnie d'Antonin Artaud) (1993)\n", + "Cosine similarity: 0.651\n", + "Return of the Jedi (1983)\n", + "Midnight Dancers (Sibak) (1994)\n", + "Cosine similarity: 0.595\n", + "Return of the Jedi (1983)\n", + "Somebody to Love (1994)\n", + "Cosine similarity: 0.78\n", + "Return of the Jedi (1983)\n", + "American Buffalo (1996)\n", + "Cosine similarity: 0.741\n", + "Return of the Jedi (1983)\n", + "Kazaam (1996)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Larger Than Life (1996)\n", + "Cosine similarity: 0.468\n", + "Return of the Jedi (1983)\n", + "Two Deaths (1995)\n", + "Cosine similarity: 0.61\n", + "Return of the Jedi (1983)\n", + "Stefano Quantestorie (1993)\n", + "Cosine similarity: 0.738\n", + "Return of the Jedi (1983)\n", + "Crude Oasis, The (1995)\n", + "Cosine similarity: 0.737\n", + "Return of the Jedi (1983)\n", + "Hedd Wyn (1992)\n", + "Cosine similarity: 0.669\n", + "Return of the Jedi (1983)\n", + "Convent, The (Convento, O) (1995)\n", + "Cosine similarity: 0.636\n", + "Return of the Jedi (1983)\n", + "Lotto Land (1995)\n", + "Cosine similarity: 0.783\n", + "Return of the Jedi (1983)\n", + "Story of Xinghua, The (1993)\n", + "Cosine similarity: 0.678\n", + "Return of the Jedi (1983)\n", + "Day the Sun Turned Cold, The (Tianguo niezi) (1994)\n", + "Cosine similarity: 0.74\n", + "Return of the Jedi (1983)\n", + "Dingo (1992)\n", + "Cosine similarity: 0.539\n", + "Return of the Jedi (1983)\n", + "Ballad of Narayama, The (Narayama Bushiko) (1958)\n", + "Cosine similarity: 0.686\n", + "Return of the Jedi (1983)\n", + "Every Other Weekend (1990)\n", + "Cosine similarity: 0.79\n", + "Return of the Jedi (1983)\n", + "Mille bolle blu (1993)\n", + "Cosine similarity: -0.119\n", + "Return of the Jedi (1983)\n", + "Crows and Sparrows (1949)\n", + "Cosine similarity: 0.743\n", + "Return of the Jedi (1983)\n", + "Lover's Knot (1996)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Shadow of Angels (Schatten der Engel) (1976)\n", + "Cosine similarity: 0.757\n", + "Return of the Jedi (1983)\n", + "1-900 (1994)\n", + "Cosine similarity: 0.557\n", + "Return of the Jedi (1983)\n", + "Venice/Venice (1992)\n", + "Cosine similarity: 0.755\n", + "Return of the Jedi (1983)\n", + "Infinity (1996)\n", + "Cosine similarity: 0.735\n", + "Return of the Jedi (1983)\n", + "Ed's Next Move (1996)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "For the Moment (1994)\n", + "Cosine similarity: 0.751\n", + "Return of the Jedi (1983)\n", + "The Deadly Cure (1996)\n", + "Cosine similarity: 0.665\n", + "Return of the Jedi (1983)\n", + "Boys in Venice (1996)\n", + "Cosine similarity: 0.759\n", + "Return of the Jedi (1983)\n", + "Sexual Life of the Belgians, The (1994)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "Search for One-eye Jimmy, The (1996)\n", + "Cosine similarity: 0.583\n", + "Return of the Jedi (1983)\n", + "American Strays (1996)\n", + "Cosine similarity: 0.741\n", + "Return of the Jedi (1983)\n", + "Leopard Son, The (1996)\n", + "Cosine similarity: 0.731\n", + "Return of the Jedi (1983)\n", + "Bird of Prey (1996)\n", + "Cosine similarity: 0.119\n", + "Return of the Jedi (1983)\n", + "Johnny 100 Pesos (1993)\n", + "Cosine similarity: 0.727\n", + "Return of the Jedi (1983)\n", + "JLG/JLG - autoportrait de décembre (1994)\n", + "Cosine similarity: 0.767\n", + "Return of the Jedi (1983)\n", + "Faust (1994)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Mina Tannenbaum (1994)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Forbidden Christ, The (Cristo proibito, Il) (1950)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "I Can't Sleep (J'ai pas sommeil) (1994)\n", + "Cosine similarity: 0.656\n", + "Return of the Jedi (1983)\n", + "Machine, The (1994)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Stranger, The (1994)\n", + "Cosine similarity: 0.67\n", + "Return of the Jedi (1983)\n", + "Good Morning (1971)\n", + "Cosine similarity: 0.779\n", + "Return of the Jedi (1983)\n", + "Falling in Love Again (1980)\n", + "Cosine similarity: 0.744\n", + "Return of the Jedi (1983)\n", + "Cement Garden, The (1993)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Meet Wally Sparks (1997)\n", + "Cosine similarity: 0.658\n", + "Return of the Jedi (1983)\n", + "Hotel de Love (1996)\n", + "Cosine similarity: 0.597\n", + "Return of the Jedi (1983)\n", + "Rhyme & Reason (1997)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Love and Other Catastrophes (1996)\n", + "Cosine similarity: 0.634\n", + "Return of the Jedi (1983)\n", + "Hollow Reed (1996)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Losing Chase (1996)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Bonheur, Le (1965)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Second Jungle Book: Mowgli & Baloo, The (1997)\n", + "Cosine similarity: 0.401\n", + "Return of the Jedi (1983)\n", + "Squeeze (1996)\n", + "Cosine similarity: 0.532\n", + "Return of the Jedi (1983)\n", + "Roseanna's Grave (For Roseanna) (1997)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Tetsuo II: Body Hammer (1992)\n", + "Cosine similarity: 0.649\n", + "Return of the Jedi (1983)\n", + "Fall (1997)\n", + "Cosine similarity: 0.648\n", + "Return of the Jedi (1983)\n", + "Gabbeh (1996)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Mondo (1996)\n", + "Cosine similarity: 0.554\n", + "Return of the Jedi (1983)\n", + "Innocent Sleep, The (1995)\n", + "Cosine similarity: 0.633\n", + "Return of the Jedi (1983)\n", + "For Ever Mozart (1996)\n", + "Cosine similarity: 0.567\n", + "Return of the Jedi (1983)\n", + "Locusts, The (1997)\n", + "Cosine similarity: 0.589\n", + "Return of the Jedi (1983)\n", + "Stag (1997)\n", + "Cosine similarity: 0.664\n", + "Return of the Jedi (1983)\n", + "Swept from the Sea (1997)\n", + "Cosine similarity: 0.506\n", + "Return of the Jedi (1983)\n", + "Hurricane Streets (1998)\n", + "Cosine similarity: 0.532\n", + "Return of the Jedi (1983)\n", + "Stonewall (1995)\n", + "Cosine similarity: 0.666\n", + "Return of the Jedi (1983)\n", + "Of Human Bondage (1934)\n", + "Cosine similarity: 0.547\n", + "Return of the Jedi (1983)\n", + "Anna (1996)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Stranger in the House (1997)\n", + "Cosine similarity: 0.587\n", + "Return of the Jedi (1983)\n", + "Picture Bride (1995)\n", + "Cosine similarity: 0.664\n", + "Return of the Jedi (1983)\n", + "M. Butterfly (1993)\n", + "Cosine similarity: 0.698\n", + "Return of the Jedi (1983)\n", + "Ciao, Professore! (1993)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "Caro Diario (Dear Diary) (1994)\n", + "Cosine similarity: 0.52\n", + "Return of the Jedi (1983)\n", + "Withnail and I (1987)\n", + "Cosine similarity: 0.589\n", + "Return of the Jedi (1983)\n", + "Boy's Life 2 (1997)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "When Night Is Falling (1995)\n", + "Cosine similarity: 0.716\n", + "Return of the Jedi (1983)\n", + "Specialist, The (1994)\n", + "Cosine similarity: 0.478\n", + "Return of the Jedi (1983)\n", + "Gordy (1995)\n", + "Cosine similarity: 0.543\n", + "Return of the Jedi (1983)\n", + "Swan Princess, The (1994)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Harlem (1993)\n", + "Cosine similarity: 0.658\n", + "Return of the Jedi (1983)\n", + "Barbarella (1968)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "Land Before Time III: The Time of the Great Giving (1995) (V)\n", + "Cosine similarity: 0.602\n", + "Return of the Jedi (1983)\n", + "Street Fighter (1994)\n", + "Cosine similarity: 0.379\n", + "Return of the Jedi (1983)\n", + "Coldblooded (1995)\n", + "Cosine similarity: 0.667\n", + "Return of the Jedi (1983)\n", + "Next Karate Kid, The (1994)\n", + "Cosine similarity: 0.624\n", + "Return of the Jedi (1983)\n", + "No Escape (1994)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Turning, The (1992)\n", + "Cosine similarity: 0.655\n", + "Return of the Jedi (1983)\n", + "Joy Luck Club, The (1993)\n", + "Cosine similarity: 0.591\n", + "Return of the Jedi (1983)\n", + "Highlander III: The Sorcerer (1994)\n", + "Cosine similarity: 0.563\n", + "Return of the Jedi (1983)\n", + "Gilligan's Island: The Movie (1998)\n", + "Cosine similarity: 0.472\n", + "Return of the Jedi (1983)\n", + "My Crazy Life (Mi vida loca) (1993)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "Suture (1993)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Walking Dead, The (1995)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "I Like It Like That (1994)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "I'll Do Anything (1994)\n", + "Cosine similarity: 0.502\n", + "Return of the Jedi (1983)\n", + "Grace of My Heart (1996)\n", + "Cosine similarity: 0.496\n", + "Return of the Jedi (1983)\n", + "Drunks (1995)\n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "SubUrbia (1997)\n", + "Cosine similarity: 0.526\n", + "Return of the Jedi (1983)\n", + "Sliding Doors (1998)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Ill Gotten Gains (1997)\n", + "Cosine similarity: 0.669\n", + "Return of the Jedi (1983)\n", + "Legal Deceit (1997)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Mighty, The (1998)\n", + "Cosine similarity: 0.722\n", + "Return of the Jedi (1983)\n", + "Men of Means (1998)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "Shooting Fish (1997)\n", + "Cosine similarity: 0.588\n", + "Return of the Jedi (1983)\n", + "Steal Big, Steal Little (1995)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Mr. Jones (1993)\n", + "Cosine similarity: 0.619\n", + "Return of the Jedi (1983)\n", + "House Party 3 (1994)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Panther (1995)\n", + "Cosine similarity: 0.573\n", + "Return of the Jedi (1983)\n", + "Jason's Lyric (1994)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Above the Rim (1994)\n", + "Cosine similarity: 0.718\n", + "Return of the Jedi (1983)\n", + "Moonlight and Valentino (1995)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Scarlet Letter, The (1995)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "8 Seconds (1994)\n", + "Cosine similarity: 0.73\n", + "Return of the Jedi (1983)\n", + "That Darn Cat! (1965)\n", + "Cosine similarity: 0.675\n", + "Return of the Jedi (1983)\n", + "Ladybird Ladybird (1994)\n", + "Cosine similarity: 0.553\n", + "Return of the Jedi (1983)\n", + "Bye Bye, Love (1995)\n", + "Cosine similarity: 0.567\n", + "Return of the Jedi (1983)\n", + "Century (1993)\n", + "Cosine similarity: 0.64\n", + "Return of the Jedi (1983)\n", + "My Favorite Season (1993)\n", + "Cosine similarity: 0.295\n", + "Return of the Jedi (1983)\n", + "Pather Panchali (1955)\n", + "Cosine similarity: 0.669\n", + "Return of the Jedi (1983)\n", + "Golden Earrings (1947)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Foreign Correspondent (1940)\n", + "Cosine similarity: 0.718\n", + "Return of the Jedi (1983)\n", + "Lady of Burlesque (1943)\n", + "Cosine similarity: 0.64\n", + "Return of the Jedi (1983)\n", + "Angel on My Shoulder (1946)\n", + "Cosine similarity: 0.0121\n", + "Return of the Jedi (1983)\n", + "Angel and the Badman (1947)\n", + "Cosine similarity: 0.711\n", + "Return of the Jedi (1983)\n", + "Outlaw, The (1943)\n", + "Cosine similarity: 0.75\n", + "Return of the Jedi (1983)\n", + "Beat the Devil (1954)\n", + "Cosine similarity: 0.616\n", + "Return of the Jedi (1983)\n", + "Love Is All There Is (1996)\n", + "Cosine similarity: 0.641\n", + "Return of the Jedi (1983)\n", + "Damsel in Distress, A (1937)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "Madame Butterfly (1995)\n", + "Cosine similarity: 0.65\n", + "Return of the Jedi (1983)\n", + "Sleepover (1995)\n", + "Cosine similarity: 0.0511\n", + "Return of the Jedi (1983)\n", + "Here Comes Cookie (1935)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Thieves (Voleurs, Les) (1996)\n", + "Cosine similarity: 0.565\n", + "Return of the Jedi (1983)\n", + "Boys, Les (1997)\n", + "Cosine similarity: 0.485\n", + "Return of the Jedi (1983)\n", + "Stars Fell on Henrietta, The (1995)\n", + "Cosine similarity: 0.581\n", + "Return of the Jedi (1983)\n", + "Last Summer in the Hamptons (1995)\n", + "Cosine similarity: 0.639\n", + "Return of the Jedi (1983)\n", + "Margaret's Museum (1995)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Saint of Fort Washington, The (1993)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Cure, The (1995)\n", + "Cosine similarity: 0.598\n", + "Return of the Jedi (1983)\n", + "Tom and Huck (1995)\n", + "Cosine similarity: 0.619\n", + "Return of the Jedi (1983)\n", + "Gumby: The Movie (1995)\n", + "Cosine similarity: 0.594\n", + "Return of the Jedi (1983)\n", + "Hideaway (1995)\n", + "Cosine similarity: 0.54\n", + "Return of the Jedi (1983)\n", + "Visitors, The (Visiteurs, Les) (1993)\n", + "Cosine similarity: -0.119\n", + "Return of the Jedi (1983)\n", + "Little Princess, The (1939)\n", + "Cosine similarity: 0.761\n", + "Return of the Jedi (1983)\n", + "Nina Takes a Lover (1994)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Bhaji on the Beach (1993)\n", + "Cosine similarity: 0.584\n", + "Return of the Jedi (1983)\n", + "Raw Deal (1948)\n", + "Cosine similarity: -0.0467\n", + "Return of the Jedi (1983)\n", + "Nightwatch (1997)\n", + "Cosine similarity: 0.542\n", + "Return of the Jedi (1983)\n", + "Dead Presidents (1995)\n", + "Cosine similarity: 0.559\n", + "Return of the Jedi (1983)\n", + "Reckless (1995)\n", + "Cosine similarity: 0.689\n", + "Return of the Jedi (1983)\n", + "Herbie Rides Again (1974)\n", + "Cosine similarity: 0.57\n", + "Return of the Jedi (1983)\n", + "S.F.W. (1994)\n", + "Cosine similarity: 0.522\n", + "Return of the Jedi (1983)\n", + "Gate of Heavenly Peace, The (1995)\n", + "Cosine similarity: 0.731\n", + "Return of the Jedi (1983)\n", + "Man in the Iron Mask, The (1998)\n", + "Cosine similarity: 0.768\n", + "Return of the Jedi (1983)\n", + "Jerky Boys, The (1994)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Colonel Chabert, Le (1994)\n", + "Cosine similarity: 0.698\n", + "Return of the Jedi (1983)\n", + "Girl in the Cadillac (1995)\n", + "Cosine similarity: 0.561\n", + "Return of the Jedi (1983)\n", + "Even Cowgirls Get the Blues (1993)\n", + "Cosine similarity: 0.63\n", + "Return of the Jedi (1983)\n", + "Germinal (1993)\n", + "Cosine similarity: 0.559\n", + "Return of the Jedi (1983)\n", + "Chasers (1994)\n", + "Cosine similarity: 0.612\n", + "Return of the Jedi (1983)\n", + "Fausto (1993)\n", + "Cosine similarity: 0.621\n", + "Return of the Jedi (1983)\n", + "Tough and Deadly (1995)\n", + "Cosine similarity: 0.00593\n", + "Return of the Jedi (1983)\n", + "Window to Paris (1994)\n", + "Cosine similarity: 0.647\n", + "Return of the Jedi (1983)\n", + "Modern Affair, A (1995)\n", + "Cosine similarity: 0.0398\n", + "Return of the Jedi (1983)\n", + "Mostro, Il (1994)\n", + "Cosine similarity: 0.61\n", + "Return of the Jedi (1983)\n", + "Flirt (1995)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "Carpool (1996)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "Line King: Al Hirschfeld, The (1996)\n", + "Cosine similarity: 0.654\n", + "Return of the Jedi (1983)\n", + "Farmer & Chase (1995)\n", + "Cosine similarity: 0.656\n", + "Return of the Jedi (1983)\n", + "Grosse Fatigue (1994)\n", + "Cosine similarity: 0.555\n", + "Return of the Jedi (1983)\n", + "Santa with Muscles (1996)\n", + "Cosine similarity: 0.691\n", + "Return of the Jedi (1983)\n", + "Prisoner of the Mountains (Kavkazsky Plennik) (1996)\n", + "Cosine similarity: 0.522\n", + "Return of the Jedi (1983)\n", + "Naked in New York (1994)\n", + "Cosine similarity: 0.561\n", + "Return of the Jedi (1983)\n", + "Gold Diggers: The Secret of Bear Mountain (1995)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Bewegte Mann, Der (1994)\n", + "Cosine similarity: 0.625\n", + "Return of the Jedi (1983)\n", + "Killer: A Journal of Murder (1995)\n", + "Cosine similarity: 0.0751\n", + "Return of the Jedi (1983)\n", + "Nelly & Monsieur Arnaud (1995)\n", + "Cosine similarity: 0.64\n", + "Return of the Jedi (1983)\n", + "Three Lives and Only One Death (1996)\n", + "Cosine similarity: 0.662\n", + "Return of the Jedi (1983)\n", + "Babysitter, The (1995)\n", + "Cosine similarity: 0.473\n", + "Return of the Jedi (1983)\n", + "Getting Even with Dad (1994)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Mad Dog Time (1996)\n", + "Cosine similarity: 0.7\n", + "Return of the Jedi (1983)\n", + "Children of the Revolution (1996)\n", + "Cosine similarity: 0.676\n", + "Return of the Jedi (1983)\n", + "World of Apu, The (Apur Sansar) (1959)\n", + "Cosine similarity: 0.632\n", + "Return of the Jedi (1983)\n", + "Sprung (1997)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Dream With the Fishes (1997)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Wings of Courage (1995)\n", + "Cosine similarity: 0.681\n", + "Return of the Jedi (1983)\n", + "Wedding Gift, The (1994)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "Race the Sun (1996)\n", + "Cosine similarity: 0.663\n", + "Return of the Jedi (1983)\n", + "Losing Isaiah (1995)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "New Jersey Drive (1995)\n", + "Cosine similarity: 0.651\n", + "Return of the Jedi (1983)\n", + "Fear, The (1995)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Mr. Wonderful (1993)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "Trial by Jury (1994)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "Good Man in Africa, A (1994)\n", + "Cosine similarity: 0.624\n", + "Return of the Jedi (1983)\n", + "Kaspar Hauser (1993)\n", + "Cosine similarity: 0.567\n", + "Return of the Jedi (1983)\n", + "Object of My Affection, The (1998)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Witness (1985)\n", + "Cosine similarity: -0.0642\n", + "Return of the Jedi (1983)\n", + "Senseless (1998)\n", + "Cosine similarity: 0.601\n", + "Return of the Jedi (1983)\n", + "Nowhere (1997)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Underground (1995)\n", + "Cosine similarity: 0.655\n", + "Return of the Jedi (1983)\n", + "Jefferson in Paris (1995)\n", + "Cosine similarity: 0.504\n", + "Return of the Jedi (1983)\n", + "Far From Home: The Adventures of Yellow Dog (1995)\n", + "Cosine similarity: 0.521\n", + "Return of the Jedi (1983)\n", + "Foreign Student (1994)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "I Don't Want to Talk About It (De eso no se habla) (1993)\n", + "Cosine similarity: 0.633\n", + "Return of the Jedi (1983)\n", + "Twin Town (1997)\n", + "Cosine similarity: 0.241\n", + "Return of the Jedi (1983)\n", + "Enfer, L' (1994)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "Aiqing wansui (1994)\n", + "Cosine similarity: 0.575\n", + "Return of the Jedi (1983)\n", + "Cosi (1996)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "All Over Me (1997)\n", + "Cosine similarity: 0.624\n", + "Return of the Jedi (1983)\n", + "Being Human (1993)\n", + "Cosine similarity: 0.627\n", + "Return of the Jedi (1983)\n", + "Amazing Panda Adventure, The (1995)\n", + "Cosine similarity: 0.646\n", + "Return of the Jedi (1983)\n", + "Beans of Egypt, Maine, The (1994)\n", + "Cosine similarity: 0.656\n", + "Return of the Jedi (1983)\n", + "Scarlet Letter, The (1926)\n", + "Cosine similarity: 0.713\n", + "Return of the Jedi (1983)\n", + "Johns (1996)\n", + "Cosine similarity: 0.048\n", + "Return of the Jedi (1983)\n", + "It Takes Two (1995)\n", + "Cosine similarity: 0.553\n", + "Return of the Jedi (1983)\n", + "Frankie Starlight (1995)\n", + "Cosine similarity: 0.529\n", + "Return of the Jedi (1983)\n", + "Shadows (Cienie) (1988)\n", + "Cosine similarity: 0.636\n", + "Return of the Jedi (1983)\n", + "Show, The (1995)\n", + "Cosine similarity: 0.229\n", + "Return of the Jedi (1983)\n", + "The Courtyard (1995)\n", + "Cosine similarity: 0.591\n", + "Return of the Jedi (1983)\n", + "Dream Man (1995)\n", + "Cosine similarity: 0.643\n", + "Return of the Jedi (1983)\n", + "Destiny Turns on the Radio (1995)\n", + "Cosine similarity: 0.755\n", + "Return of the Jedi (1983)\n", + "Glass Shield, The (1994)\n", + "Cosine similarity: 0.09\n", + "Return of the Jedi (1983)\n", + "Hunted, The (1995)\n", + "Cosine similarity: 0.714\n", + "Return of the Jedi (1983)\n", + "Underneath, The (1995)\n", + "Cosine similarity: 0.674\n", + "Return of the Jedi (1983)\n", + "Safe Passage (1994)\n", + "Cosine similarity: 0.736\n", + "Return of the Jedi (1983)\n", + "Secret Adventures of Tom Thumb, The (1993)\n", + "Cosine similarity: 0.54\n", + "Return of the Jedi (1983)\n", + "Condition Red (1995)\n", + "Cosine similarity: 0.645\n", + "Return of the Jedi (1983)\n", + "Yankee Zulu (1994)\n", + "Cosine similarity: 0.673\n", + "Return of the Jedi (1983)\n", + "Aparajito (1956)\n", + "Cosine similarity: 0.566\n", + "Return of the Jedi (1983)\n", + "Hostile Intentions (1994)\n", + "Cosine similarity: 0.58\n", + "Return of the Jedi (1983)\n", + "Clean Slate (Coup de Torchon) (1981)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "Tigrero: A Film That Was Never Made (1994)\n", + "Cosine similarity: 0.542\n", + "Return of the Jedi (1983)\n", + "Eye of Vichy, The (Oeil de Vichy, L') (1993)\n", + "Cosine similarity: 0.58\n", + "Return of the Jedi (1983)\n", + "Promise, The (Versprechen, Das) (1994)\n", + "Cosine similarity: 0.683\n", + "Return of the Jedi (1983)\n", + "To Cross the Rubicon (1991)\n", + "Cosine similarity: -0.0549\n", + "Return of the Jedi (1983)\n", + "Daens (1992)\n", + "Cosine similarity: 0.602\n", + "Return of the Jedi (1983)\n", + "Man from Down Under, The (1943)\n", + "Cosine similarity: -0.161\n", + "Return of the Jedi (1983)\n", + "Careful (1992)\n", + "Cosine similarity: -0.0412\n", + "Return of the Jedi (1983)\n", + "Vermont Is For Lovers (1992)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Vie est belle, La (Life is Rosey) (1987)\n", + "Cosine similarity: 0.443\n", + "Return of the Jedi (1983)\n", + "Quartier Mozart (1992)\n", + "Cosine similarity: 0.1\n", + "Return of the Jedi (1983)\n", + "Touki Bouki (Journey of the Hyena) (1973)\n", + "Cosine similarity: 0.626\n", + "Return of the Jedi (1983)\n", + "Wend Kuuni (God's Gift) (1982)\n", + "Cosine similarity: 0.581\n", + "Return of the Jedi (1983)\n", + "Spirits of the Dead (Tre passi nel delirio) (1968)\n", + "Cosine similarity: 0.659\n", + "Return of the Jedi (1983)\n", + "Pharaoh's Army (1995)\n", + "Cosine similarity: 0.671\n", + "Return of the Jedi (1983)\n", + "I, Worst of All (Yo, la peor de todas) (1990)\n", + "Cosine similarity: 0.591\n", + "Return of the Jedi (1983)\n", + "Hungarian Fairy Tale, A (1987)\n", + "Cosine similarity: 0.704\n", + "Return of the Jedi (1983)\n", + "Death in the Garden (Mort en ce jardin, La) (1956)\n", + "Cosine similarity: 0.624\n", + "Return of the Jedi (1983)\n", + "Collectionneuse, La (1967)\n", + "Cosine similarity: 0.537\n", + "Return of the Jedi (1983)\n", + "Baton Rouge (1988)\n", + "Cosine similarity: 0.537\n", + "Return of the Jedi (1983)\n", + "Liebelei (1933)\n", + "Cosine similarity: 0.666\n", + "Return of the Jedi (1983)\n", + "Woman in Question, The (1950)\n", + "Cosine similarity: 0.0976\n", + "Return of the Jedi (1983)\n", + "T-Men (1947)\n", + "Cosine similarity: 0.687\n", + "Return of the Jedi (1983)\n", + "Invitation, The (Zaproszenie) (1986)\n", + "Cosine similarity: -0.0725\n", + "Return of the Jedi (1983)\n", + "Symphonie pastorale, La (1946)\n", + "Cosine similarity: 0.113\n", + "Return of the Jedi (1983)\n", + "American Dream (1990)\n", + "Cosine similarity: 0.533\n", + "Return of the Jedi (1983)\n", + "Lashou shentan (1992)\n", + "Cosine similarity: 0.568\n", + "Return of the Jedi (1983)\n", + "Terror in a Texas Town (1958)\n", + "Cosine similarity: 0.629\n", + "Return of the Jedi (1983)\n", + "Salut cousin! (1996)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Schizopolis (1996)\n", + "Cosine similarity: 0.59\n", + "Return of the Jedi (1983)\n", + "To Have, or Not (1995)\n", + "Cosine similarity: 0.516\n", + "Return of the Jedi (1983)\n", + "Duoluo tianshi (1995)\n", + "Cosine similarity: 0.602\n", + "Return of the Jedi (1983)\n", + "Magic Hour, The (1998)\n", + "Cosine similarity: 0.601\n", + "Return of the Jedi (1983)\n", + "Death in Brunswick (1991)\n", + "Cosine similarity: -0.00614\n", + "Return of the Jedi (1983)\n", + "Everest (1998)\n", + "Cosine similarity: 0.699\n", + "Return of the Jedi (1983)\n", + "Shopping (1994)\n", + "Cosine similarity: -0.00611\n", + "Return of the Jedi (1983)\n", + "Nemesis 2: Nebula (1995)\n", + "Cosine similarity: 0.651\n", + "Return of the Jedi (1983)\n", + "Romper Stomper (1992)\n", + "Cosine similarity: 0.395\n", + "Return of the Jedi (1983)\n", + "City of Industry (1997)\n", + "Cosine similarity: 0.576\n", + "Return of the Jedi (1983)\n", + "Someone Else's America (1995)\n", + "Cosine similarity: 0.615\n", + "Return of the Jedi (1983)\n", + "Guantanamera (1994)\n", + "Cosine similarity: 0.694\n", + "Return of the Jedi (1983)\n", + "Office Killer (1997)\n", + "Cosine similarity: 0.606\n", + "Return of the Jedi (1983)\n", + "Price Above Rubies, A (1998)\n", + "Cosine similarity: 0.563\n", + "Return of the Jedi (1983)\n", + "Angela (1995)\n", + "Cosine similarity: -0.138\n", + "Return of the Jedi (1983)\n", + "He Walked by Night (1948)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "Love Serenade (1996)\n", + "Cosine similarity: 0.647\n", + "Return of the Jedi (1983)\n", + "Deceiver (1997)\n", + "Cosine similarity: 0.677\n", + "Return of the Jedi (1983)\n", + "Hurricane Streets (1998)\n", + "Cosine similarity: 0.631\n", + "Return of the Jedi (1983)\n", + "Buddy (1997)\n", + "Cosine similarity: 0.582\n", + "Return of the Jedi (1983)\n", + "B*A*P*S (1997)\n", + "Cosine similarity: 0.495\n", + "Return of the Jedi (1983)\n", + "Truth or Consequences, N.M. (1997)\n", + "Cosine similarity: 0.579\n", + "Return of the Jedi (1983)\n", + "Intimate Relations (1996)\n", + "Cosine similarity: 0.683\n", + "Return of the Jedi (1983)\n", + "Leading Man, The (1996)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Tokyo Fist (1995)\n", + "Cosine similarity: 0.723\n", + "Return of the Jedi (1983)\n", + "Reluctant Debutante, The (1958)\n", + "Cosine similarity: 0.176\n", + "Return of the Jedi (1983)\n", + "Warriors of Virtue (1997)\n", + "Cosine similarity: 0.745\n", + "Return of the Jedi (1983)\n", + "Desert Winds (1995)\n", + "Cosine similarity: 0.00677\n", + "Return of the Jedi (1983)\n", + "Hugo Pool (1997)\n", + "Cosine similarity: 0.679\n", + "Return of the Jedi (1983)\n", + "King of New York (1990)\n", + "Cosine similarity: -0.124\n", + "Return of the Jedi (1983)\n", + "All Things Fair (1996)\n", + "Cosine similarity: 0.693\n", + "Return of the Jedi (1983)\n", + "Sixth Man, The (1997)\n", + "Cosine similarity: 0.585\n", + "Return of the Jedi (1983)\n", + "Butterfly Kiss (1995)\n", + "Cosine similarity: 0.497\n", + "Return of the Jedi (1983)\n", + "Paris, France (1993)\n", + "Cosine similarity: 0.652\n", + "Return of the Jedi (1983)\n", + "Cérémonie, La (1995)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Hush (1998)\n", + "Cosine similarity: 0.547\n", + "Return of the Jedi (1983)\n", + "Nightwatch (1997)\n", + "Cosine similarity: 0.642\n", + "Return of the Jedi (1983)\n", + "Nobody Loves Me (Keiner liebt mich) (1994)\n", + "Cosine similarity: 0.505\n", + "Return of the Jedi (1983)\n", + "Wife, The (1995)\n", + "Cosine similarity: 0.733\n", + "Return of the Jedi (1983)\n", + "Lamerica (1994)\n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "Nico Icon (1995)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Silence of the Palace, The (Saimt el Qusur) (1994)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Slingshot, The (1993)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "Land and Freedom (Tierra y libertad) (1995)\n", + "Cosine similarity: 0.609\n", + "Return of the Jedi (1983)\n", + "Á köldum klaka (Cold Fever) (1994)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Etz Hadomim Tafus (Under the Domin Tree) (1994)\n", + "Cosine similarity: 0.613\n", + "Return of the Jedi (1983)\n", + "Two Friends (1986) \n", + "Cosine similarity: 0.605\n", + "Return of the Jedi (1983)\n", + "Brothers in Trouble (1995)\n", + "Cosine similarity: 0.041\n", + "Return of the Jedi (1983)\n", + "Girls Town (1996)\n", + "Cosine similarity: 0.618\n", + "Return of the Jedi (1983)\n", + "Normal Life (1996)\n", + "Cosine similarity: 0.0572\n", + "Return of the Jedi (1983)\n", + "Bitter Sugar (Azucar Amargo) (1996)\n", + "Cosine similarity: 0.628\n", + "Return of the Jedi (1983)\n", + "Eighth Day, The (1996)\n", + "Cosine similarity: 0.6\n", + "Return of the Jedi (1983)\n", + "Dadetown (1995)\n", + "Cosine similarity: 0.04\n", + "Return of the Jedi (1983)\n", + "Some Mother's Son (1996)\n", + "Cosine similarity: 0.653\n", + "Return of the Jedi (1983)\n", + "Angel Baby (1995)\n", + "Cosine similarity: 0.647\n", + "Return of the Jedi (1983)\n", + "Sudden Manhattan (1996)\n", + "Cosine similarity: 0.0528\n", + "Return of the Jedi (1983)\n", + "Butcher Boy, The (1998)\n", + "Cosine similarity: 0.00363\n", + "Return of the Jedi (1983)\n", + "Men With Guns (1997)\n", + "Cosine similarity: 0.637\n", + "Return of the Jedi (1983)\n", + "Hana-bi (1997)\n", + "Cosine similarity: 0.596\n", + "Return of the Jedi (1983)\n", + "Niagara, Niagara (1997)\n", + "Cosine similarity: -0.0429\n", + "Return of the Jedi (1983)\n", + "Big One, The (1997)\n", + "Cosine similarity: 0.632\n", + "Return of the Jedi (1983)\n", + "Butcher Boy, The (1998)\n", + "Cosine similarity: -0.0528\n", + "Return of the Jedi (1983)\n", + "Spanish Prisoner, The (1997)\n", + "Cosine similarity: -0.132\n", + "Return of the Jedi (1983)\n", + "Temptress Moon (Feng Yue) (1996)\n", + "Cosine similarity: 0.548\n", + "Return of the Jedi (1983)\n", + "Entertaining Angels: The Dorothy Day Story (1996)\n", + "Cosine similarity: -0.153\n", + "Return of the Jedi (1983)\n", + "Chairman of the Board (1998)\n", + "Cosine similarity: 0.185\n", + "Return of the Jedi (1983)\n", + "Favor, The (1994)\n", + "Cosine similarity: 0.155\n", + "Return of the Jedi (1983)\n", + "Little City (1998)\n", + "Cosine similarity: 0.641\n", + "Return of the Jedi (1983)\n", + "Target (1995)\n", + "Cosine similarity: 0.796\n", + "Return of the Jedi (1983)\n", + "Substance of Fire, The (1996)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "Getting Away With Murder (1996)\n", + "Cosine similarity: 0.561\n", + "Return of the Jedi (1983)\n", + "Small Faces (1995)\n", + "Cosine similarity: 0.684\n", + "Return of the Jedi (1983)\n", + "New Age, The (1994)\n", + "Cosine similarity: 0.708\n", + "Return of the Jedi (1983)\n", + "Rough Magic (1995)\n", + "Cosine similarity: 0.432\n", + "Return of the Jedi (1983)\n", + "Nothing Personal (1995)\n", + "Cosine similarity: 0.621\n", + "Return of the Jedi (1983)\n", + "8 Heads in a Duffel Bag (1997)\n", + "Cosine similarity: 0.574\n", + "Return of the Jedi (1983)\n", + "Brother's Kiss, A (1997)\n", + "Cosine similarity: -0.226\n", + "Return of the Jedi (1983)\n", + "Ripe (1996)\n", + "Cosine similarity: 0.592\n", + "Return of the Jedi (1983)\n", + "Next Step, The (1995)\n", + "Cosine similarity: 0.593\n", + "Return of the Jedi (1983)\n", + "Wedding Bell Blues (1996)\n", + "Cosine similarity: 0.623\n", + "Return of the Jedi (1983)\n", + "MURDER and murder (1996)\n", + "Cosine similarity: 0.599\n", + "Return of the Jedi (1983)\n", + "Tainted (1998)\n", + "Cosine similarity: 0.622\n", + "Return of the Jedi (1983)\n", + "Further Gesture, A (1996)\n", + "Cosine similarity: 0.55\n", + "Return of the Jedi (1983)\n", + "Kika (1993)\n", + "Cosine similarity: 0.728\n", + "Return of the Jedi (1983)\n", + "Mirage (1995)\n", + "Cosine similarity: 0.619\n", + "Return of the Jedi (1983)\n", + "Mamma Roma (1962)\n", + "Cosine similarity: 0.675\n", + "Return of the Jedi (1983)\n", + "Sunchaser, The (1996)\n", + "Cosine similarity: -0.199\n", + "Return of the Jedi (1983)\n", + "War at Home, The (1996)\n", + "Cosine similarity: 0.66\n", + "Return of the Jedi (1983)\n", + "Sweet Nothing (1995)\n", + "Cosine similarity: 0.608\n", + "Return of the Jedi (1983)\n", + "Mat' i syn (1997)\n", + "Cosine similarity: 0.686\n", + "Return of the Jedi (1983)\n", + "B. Monkey (1998)\n", + "Cosine similarity: 0.688\n", + "Return of the Jedi (1983)\n", + "Sliding Doors (1998)\n", + "Cosine similarity: 0.709\n", + "Return of the Jedi (1983)\n", + "You So Crazy (1994)\n", + "Cosine similarity: 0.761\n", + "Return of the Jedi (1983)\n", + "Scream of Stone (Schrei aus Stein) (1991)\n", + "Cosine similarity: 0.651\n", + "\n", + "Movie most dissimilar to Jedi: Very Natural Thing, A (1974) → Cosine similarity: -0.302\n" + ] + } + ], + "source": [ + "# Code to help you search for a movie title\n", + "similarities = []\n", + "\n", + "# Find Jedi movie\n", + "partial_title = \"Jedi\"\n", + "subset = indexed_items[indexed_items['title'].str.contains(partial_title, case=False, na=False)]\n", + "item_Jedi = subset.index.tolist()\n", + "print(\"Jedi movie IDs:\", item_Jedi)\n", + "\n", + "# Use all movie indices except Jedi\n", + "item_ids = [i for i in indexed_items.index if i != 181]\n", + "\n", + "# Check we have movies to compare\n", + "if len(item_ids) < 1:\n", + " print(\"Not enough movies found to compare.\")\n", + "else:\n", + " for i in item_ids:\n", + " sim = cosine(item_embeddings[181], item_embeddings[i])\n", + " similarities.append((i, sim))\n", + " print_similarity(181, i, item_embeddings, indexed_items[\"title\"])\n", + "\n", + "# Find the most dissimilar movie\n", + "min_movie_id, min_sim = min(similarities, key=lambda x: x[1])\n", + "print(f\"\\nMovie most dissimilar to Jedi: {indexed_items['title'][min_movie_id]} → Cosine similarity: {min_sim:.3f}\")\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Sometimes, even without knowing anything about a user, we can recommend films by asking them about a film that they do like. The code below compares the similarity of a given film to all others, and returns the most similar films." + ] + }, + { + "cell_type": "code", + "execution_count": 55, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(50, 'Star Wars (1977)', 1.0),\n", + " (172, 'Empire Strikes Back, The (1980)', 0.94112813),\n", + " (181, 'Return of the Jedi (1983)', 0.9215989),\n", + " (174, 'Raiders of the Lost Ark (1981)', 0.87037265),\n", + " (210, 'Indiana Jones and the Last Crusade (1989)', 0.85296273),\n", + " (176, 'Aliens (1986)', 0.84478575),\n", + " (1, 'Toy Story (1995)', 0.84354055),\n", + " (942, \"What's Love Got to Do with It (1993)\", 0.8428294),\n", + " (211, 'M*A*S*H (1970)', 0.8302945),\n", + " (205, 'Patton (1970)', 0.82877964)]" + ] + }, + "execution_count": 55, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def most_similar(item_id, item_embeddings, titles,\n", + " top_n=30):\n", + " # Compute the cosine similarity between the item and all other items\n", + " sims = cosine_similarity(item_embeddings[item_id].reshape(1, -1),\n", + " item_embeddings).ravel()\n", + " \n", + " # [::-1] makes it possible to reverse the order of a numpy\n", + " # array, this is required because most similar items have\n", + " # a larger cosine similarity value\n", + " sorted_indexes = np.argsort(sims)[::-1]\n", + " idxs = sorted_indexes[0:top_n]\n", + " return list(zip(idxs, titles[idxs], sims[idxs]))\n", + "\n", + "# Find the most similar films to \"Star Wars\"\n", + "most_similar(50, item_embeddings, indexed_items[\"title\"], top_n=10)" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[(227, 'Star Trek VI: The Undiscovered Country (1991)', 1.0000001),\n", + " (230, 'Star Trek IV: The Voyage Home (1986)', 0.8853007),\n", + " (778, 'Don Juan DeMarco (1995)', 0.8847591),\n", + " (1594, 'Everest (1998)', 0.87397236),\n", + " (228, 'Star Trek: The Wrath of Khan (1982)', 0.8726455),\n", + " (634, \"Microcosmos: Le peuple de l'herbe (1996)\", 0.8719895),\n", + " (746, 'Real Genius (1985)', 0.8703337),\n", + " (973, 'Grateful Dead (1995)', 0.86922544),\n", + " (115, 'Haunted World of Edward D. Wood Jr., The (1995)', 0.86700207),\n", + " (219, 'Nightmare on Elm Street, A (1984)', 0.86616725)]" + ] + }, + "execution_count": 56, + "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)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The similarities do not always make sense: the number of ratings is low and the embedding does not automatically capture semantic relationships in that context. Better representations arise with higher number of ratings, and less overfitting in models or maybe better loss function, such as those based on implicit feedback." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Visualizing embeddings using TSNE\n", + "\n", + "The [t-SNE](https://en.wikipedia.org/wiki/T-distributed_stochastic_neighbor_embedding) algorithm enables us to visualize high dimensional vectors in a 2D space by preserving local neighborhoods. We can use it to get a 2D visualization of the item embeddings and see if similar items are close in the embedding space." + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.manifold import TSNE\n", + "\n", + "item_tsne = TSNE(learning_rate=\"auto\", init=\"pca\", perplexity=30).fit_transform(item_embeddings)" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxoAAAMWCAYAAAB2gvApAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOz9fXxV5Z3vjX/2hjxLnsjojo5CFKjEiIi3FCZobzNhSqGFo3N+54Da86ttaR3ldyu306JOOUNv7CDTOS/0fmFriw9zTy0w7VQHLDQzpHCqpEF6g1FimAPEBDuY2MkDCSYQQvb+/RFW2HtlrXV9r2td62HvfN+v18yrhrXXuta1rrWu7/M3kkgkEmAYhmEYhmEYhtFINOgBMAzDMAzDMAyTebCiwTAMwzAMwzCMdljRYBiGYRiGYRhGO6xoMAzDMAzDMAyjHVY0GIZhGIZhGIbRDisaDMMwDMMwDMNohxUNhmEYhmEYhmG0w4oGwzAMwzAMwzDamUw5KB6P4+OPP8aUKVMQiUS8HhPDMAzDMAzDMCElkUjg3LlzuPbaaxGN2vstSIrGxx9/jOuvv17b4BiGYRiGYRiGSW9+//vf44//+I9t/52kaEyZMmXsZIWFhXpGxjAMwzAMwzBM2tHf34/rr79+TEewg6RoGOFShYWFrGgwDMMwDMMwDCNMqeBkcIZhGIZhGIZhtMOKBsMwDMMwDMMw2mFFg2EYhmEYhmEY7bCiwTAMwzAMwzCMdljRYBiGYRiGYRhGO6xoMAzDMAzDMAyjHVY0GIZhGIZhGIbRDisaDMMwDMMwDMNohxUNhmEYhmEYhmG0w4oGwzAMwzAMwzDaYUWDYRiGYRiGYRjtsKLBMAzDMAzDMIx2WNFgGIZhGIZhGEY7rGgwDMMwDMMwDKMdVjQYhmEYhmEYhtEOKxoMwzAMwzAMw2iHFQ2GYRiGYRiGYbTDigbDMAzDMAzDMNphRYNhGIZhGIZhGO2wosEwDMMwDMMwjHZY0WAYhmEYhmEYRjusaDAMwzAMwzAMox1WNBiGYRiGYRiG0Q4rGgzDMAzDMAzDaIcVDYZhGIZhGIZhtMOKBsMwDMMwDMMw2mFFg2EYhmEYhmEY7UwOegAMwzBURuIJHG7rwR/OXcDVU3Ixv6IUk6KRoIfFMAzDMIwFrGgwDJMW1DV34LtvtqCj78LY38qLcvHXX6rEkqryAEfGMAzDMIwVHDrFMEzoqWvuwF+8djRFyQCAzr4L+IvXjqKuuSOgkTEMwzAMYwcrGgzDhJqReALffbMFCYt/M/723TdbMBK3OoJhGIZhmKBgRYNhmFBzuK1nnCcjmQSAjr4LONzW49+gGIZhGIYRwooGwzCh5g/n7JUMleMYhmEYhvEHVjQYhgk1V0/J1XocwzAMwzD+wIoGwzChZn5FKcqLcmFXxDaC0epT8ytK/RwWwzAMwzACWNFgGCbUTIpG8NdfqgSAccqG8d9//aVK7qfBMAzDMCGDFQ2GYULPkqpy/PDBeYgVpYZHFeVn4fHaWVhcGQtoZAzDMAzD2BFJJBLCmpD9/f0oKipCX18fCgsL/RgXwzDMOEbiCWzdfxKvHGxD34VLY3+PFeZgw/JbuHEfwzAMw/gAVTdgjwbDMGnDvpZObKk/maJkAEBn/xAe5sZ9DMMwDBMqWNFgGCYtGIkn8OTrxxyPefL1Y9y4j2EYhmFCAisaDMOkBYdau3F2cNjxmLODwzjU2u3TiBiGYRiGcYIVDYZh0oLGD7u0HscwDMMwjLewosEwTJpALV/LZW4ZhmEYJgywosEwTFqw8KapWo9jGIZhGMZbWNFgGCYtWHDjVBTnZzkeU5KfhQU3sqLBMAzDMGGAFQ2GCTEj8QQaW7uxq+kMGlu7J3RFpUnRCJ6971bHYzbddyt3CGcYhmGYkDA56AEwDGNNXXMHvvtmCzr6Loz9rbwoF3/9pcoJ25huSVU5XnxwHjbsbkFnP88LwzAMw4QZ7gzOMCGkrrkDf/HaUZhfTsNW/8MH501ooXoknsDhth784dwFXD0lF/MrStmTwTAMwzA+QdUN2KPBMCFjJJ7Ad99sGadkAEACo8rGd99sweLK2IQVridFI5z0zTAMwzAhh3M0GCZkHG7rSQmXMpMA0NF3AYfbevwbFMMwDMMwjCSsaDBMyPjDOXslQ+U4hmEYhmGYIGBFg2FCxtVTcrUexzAMwzAMEwSco8EwIWN+RSnKi3LR2XfBMk8jAiBWNJoA7TWcdD0KzwPDMAzDyMOKBsOEjEnRCP76S5X4i9eOIgKkKBuGaPvXX6r0XNDl8rqj8DwwDMMwjBocOsUwIWRJVTl++OA8xIpSw6NiRbm+lLY1yuuak9I7+y7gL147irrmDk+vHxZ4HhiGYRhGHe6jwTAhJoiQnZF4Aos273esfFVelIuD62oyOnxINA9GCFumzwPDMAzDmOE+GgyTAQTRL0JUXhe4Ul43k3tZyJQZzuR5YBiGYRhVOHSKYZgUOvtpZXOpx6UrXGaYYRiGYdzBHg2GYVLo+XRI63Hpwkg8gUOt3Wj8sAtABEV5WaTfcZlhhmEYhrGGFQ2GYVIoLcjWelw6UNfcgSdfP4azg8Mpf49EALssNj/LDDMMwzBMOsKKBsMwKcSK8rQeF3bqmjvw8GtHLf/NSckA/CkzzDAMwzDpCudoMAyTgtEw0InyDLHkj8QT2LD7A+FxZl3CrzLDDMMwDJPOsEeDYZgUkhsG2nUmzxRL/uG2HnT2i3NN4glg/bLZKJuSw53BGYZhGIYIezQYJs0YiSfQ2NqNXU1n0NjajZG4sBWONEbDQLNnozzDLPkyFaPKpuRgxdzrsPCmqaxkMAzDMAwB9mgwTBpR19yB777ZktLfobwoF3/9pUrtwv+SqnIsroz53jDQT2QqRnF1KYZhGIaRgxUNhkkT6po7LMOZOvsu4C9eO+qJpyGIhoF+Mr+iFLHCHGH4VKbkpDAMwzCMn3DoFMOkASPxBL77ZotlzoTxt+++2eJJGFUmMykawYbltwiPy5ScFIZhGIbxE1Y0GCYNONzWkxIuZSYBoKPvAg639fg3qAxhSVU5XnxwHorzxzfoK8nPwosZlJPCMAzDMH7CoVMMkwZQk5ZlkpvDhrkz98KbpmLBjf4kXhv5KEFdn2EYhmEyEVY0GCYNoCYip2vCslVn7q0HTqE4PwvP3nerLx6FSdEIqmeWoXpmmefXYhiGYZiJAIdOMUwaYDTRs7OtR5C+CctGZ+5kJcPg7OAwHn7tKOqaOwIYGcMwDMMwbmBFg2HSAKOJHoBxyobx3+mYsEztzM2J7uHEj54uDMMwTPrCoVMMkyYYTfTMfTRiHvXRAEYFSS/7aFA7cxuJ7plcajfd8LOnC8MwDJOesKLBMGmEn030/BAkZZLX0znRPdMIoqcLwzAMk36wosEwaYYfTfT8EiS5M7c8XnuZKNd36ukSwWio2+LKWNqF8jEMwzB6YUWDYS4TtAAXFvwUJLkztxxhCFeS6enCoW4MwzATG1Y0GAbhEODCgp+CpNGZ++HXjjoel46J7roJS7jSROjpwjAMw+iBq04xEx5DgDML14YAN9FKq/otSHJnbjEiLxMgX5lLtWJUpvd0YRiGYfTBHg1mQsPx5uMJQpDMxM7cOkPxdHuZ3HjwjJ4unX0XLN+bCEYroXGoG8MwDMOKBjOOiZSrwPHm4wlKkMykzty6Q/F0epnchmAZPV3+4rWjiAAp50nnni4MwzCMfjh0ikmhrrkDizbvx6pth/DYzias2nYIizbvz9jwIY43H0+mNgf0Cy9C8XR5mXSFYBk9XWJFqdeLFeVyaVuGYRhmDPZoMGOEJdnUTzje3JogmgOmC04eP69C8XR5mXR68Pzs6cIwDMOkJ6xoMAAmbq4Cx5vbw4LkeEQhUV6F4ukKV9LtwfOjpwvDMAyTvnDoFANAztKZSXCYkDOGILli7nVYeFP6JmbrgBIS5WUono5wJfbgMQzDMH7CHg0GwMTOVUi3MKGJlKwfFqgev7/7/9xGOp+qIE/xMjmtD/bgMQzDMH7CigYDgC2d6RImxI0Fg4Hq8UMCngvyTuFKovXBFaMYhmEYP+HQKQbAFUunnXgRwajAksmWTtUwIdXGZ7JwY0E9qDwvqieva2AosFA86vrgilEMwzCMX7BHgwHAtfFV8cvDMFGT9XWj+rxkPH4Lb5rqeyie7PpIFw8ewzAMk95EEomE0JzX39+PoqIi9PX1obCw0I9xMQHBoTl07MoBG6KaTutwY2s3Vm07JDxux+oFE6YKkGyuipvnNRJPYNHm/cKQqIPralJK3folyPP6YBiGYfyEqhuwR4NJgS2dNPz2MHiVrJ+uieWyCrHb56Xi8fOz9Cv1uXf2nUdjazf+cO4Cyq7KARKj4V6ySeUMwzAMQ4EVDWYcXBtfjFf9EuzwIlk/Xb1XosaSL9x/O0oKclIEZJXnZRa0F1fGQludjPrcN+45jp6Bi5b/lvzs03VtMAzDMOGCFQ2GUcDvcsC6y5Kmaxd4kWcCANbseBfJ+d3lRbn4QlWMdH7jeTkJ2gfX1YTO0i9aHwZ2SgZw5dl/4+4K/PittrRbGwzDMEz44KpTDKOA3+WAnRoLAqNC9so7ryediyKsf/fNFs+qZ7lB5JkAAPOwO/su4JWGdtL5r56SK6zetK+lM3RNDEXrg4IxbdveHq9kJP97WNcGwzAMEz5Y0WAYBYIoB2xXltRgS/1JLNq8X1jmNp27wKt4iCgisfG87phWkrZKmN36KC3IIp8jgfGKmvnfw7o2GIZhmPDBigbDKOBkQfayHPCSqnIcXFeDtbWzLP+d0lMjnbvAe9UwMoHR53XkdG/aKmHAlfWxY/UCPL9yLnasXoD1X7xF+3XCuDYYhmGY8MGKBsMoEmTjs52/+8jy7xSrezp3gRd5klRZWzsTS6rKpZUwq+Z/fjVwtMPceDJWqP85hnFtMAzDMOGDk8EZxgVBlAN2W/FKd2K5G0biCRxq7Ubjh10ARgXkBTfa5z04lZl1w/SyAgBySphVwnhx/miY0tnB4bG/BV2t6Y5pJYhGnEOikolEALvuSn6uDYZhGCb9YUWDYVyiWg5YtU+B29CnsHSBr2vuwJOvH0sRyrceOIXi/Cw8e9+ttoK54UkyC/kywrQZQ8GgVG8qL8pF78BFPLp9fNWu5HsxCLpa05HTvVLz4qRkAHrXBvfqYBiGyWxY0WCYAHDTp0BH6JOdsO5XT4i65g48/NpRy387OziMh187ihcdBHMrT5Ih/AN0T4fZQp+shNnxxTnl2LjHOmHcCt0NHJ2Ec6t/05VPoXttcK8OhmGYzCeSSNjZr65AbTPOMIwYux4WhvgpsnyPxBNYtHm/MPTp4LoaoVAbhEV5JJ5A9bO/Rmf/kONx5cR7SMYunOns4LCt98ZqvjftbcGP3mojX5fKjtULXDVwdBLOAVj+28o7r8eW+pNK1ystyML6L96CWKHeteH2HWAYhmGChaobsEeDYXxE1MOCYvnWGfoURBf4w209QiUDUOusbpczs6+lk+y9GYknsPs95xLBqrjxLjg1WbTzDnX2XcCW+pNjypYsPQPD6Pl0CMtvu9ZyPakoqjreAYZhGCY9YEWDYRzQbfF3m8htEHTokxtkhG0VwdxKeZJJ2qc0BVRFtVoTpcmiFca/DY/Ela4LABv3HMdLB9vGrSvV0Cdd7wDDMAwTfljRYBgbrASp0oIs3Dv3OtRWxpSUDp09LIKoeKUDGWFbZxlVqvfmXz/Q781wW63JrfIzMDSC3KwoLgyrKRzmhHYn74oo8T2d+7gwDMMwcrCiwTAW2AlSPQPDeLmhHS83tCslrlIF5/auQdJxQYQ+uWV+RSlihTmkHA2dZVQp3qmReAL/dPTfyeeklNjVUa1Jh9CtqmQAqSFNNTdf4yr0KZ37uDAMwzBycMM+hjHhFKaSDKULtxlqw7nn6k9InTedmBSNYMNycbdqnWVU65o7sGjzfqzadgiP7WzCqm2HsGjz/nFzfLitB+cujJDO+dCfTBvXrLEkP2usl4aBjgaOYRC6jZCmnzS2u+qeLnoHItCvZDIMwzDBwB4NhjFBDVNRSVw1ErntkneTyeSE2CVV5XjxwXnj+mgAo8L6Joc+GrLIhPnIeA7+7JZyfOeLt4zzkgDQHs5G6e/hF6d7aN62sPdxYRiGYbyHFQ3GNboTpoNu4iUjbKokri6pKsfa2pmOJUe9TIgNen4NjBwTmc7gsshWOKJ6DqYWZI/Nm9Xz0f3MvOqIrsK00nzScWHu48IwDMP4AysaaUZYhEQD3U23wtDESyVMRTaGfnpZgSfnFRGG+U1mUjSC6pllqJ5ZRjpedv3LVjgyPAcij9bGFVW+v3dedESXwUho//LC6XjpYJuwj4so9CldixkwDMMwdFjRSCPCJiS6qTzj9fncKGQqYSqyykkQCbG6n5ffqKx/2QpHyZ4Du2f/zbsrsHROMPOULJzva+nEKw3tvikZwGhIU/bkaFr3cWEYhmH8g5PB0wRDSDRbWlUSknVAqev/3TdbMEKUgnSej5r4a4chbFJQTVz1OyFW9/PyG9X1r6LQGZ6DclOid2lBFn5w/+14ailtbXjFpGgE8ytK8avmTt+uaU5oN+bInAyvI/GdYRiGyRzYo5EGhLGTru6mW7rOp8tqbxemkoybxFW/E2LTuUmam/Uv8k7Zhfkkew46+y+g59MhlBZko6QgByPxRODhPV42FUxmzT03oXrGH1l6BDn0iWEYhhHBikYaEEYhUXfTLepx9S2dtveoWyEzh6n8c9PH6Bm4OPbvbhNX/UyITecmaW7WvxuFblI0gr7zF/G3df8WmnBFA6+fk6GArV38Gcd3hUOfGIZhGCdY0QgxRp7Br4ghP34KibpzDKjHvf7uGdTMvgZdnw6Ns6B6oZAZgtTCm6bir5ZVarfe+mUVLrsqh3RcGPo1mHGrJKkqdGHOafHyOXGJWYZhGEYXrGiEFKvEVxF+ComqISlO5ystyE7xGFjROziMB156Z+y/k63LXlvtvbLeem0VrmvuwIbdHzgeI/u8/ITaJV1UTlVGoaN6x2puvgZHTvf6HjpEef/ysidh8CKt+WAyXGKWYRiG0QUrGiFjJJ7A1v2nsKX+BPk3QQiJunMMJkUj+E9zr8UrDe1S40i2LgdRySns2Fnlk3F6XkGXUx6JJ7Dj8EfC42KFOcL1L6PQUb1jCzb9OkU59iusivL+ffPuGx17tdjxd//5NnK5YYZhGIZxgqtOhYi65g5UP/traSUDSBUSR+IJNLZ2Y1fTGTS2dntWSUh35ZnFlTHpMRh3tmH3B7g0EkdxXpbtsborOQWN6Dk7WeWTsXtebqt36cBIxhaxav4NWhUgqtfL7IHzswqc6P1bUzNzXOUsCl0DQ7qGyDAMw0xw2KMREiiWZyvMYQ5+99rQmWNAbZZmJgGgs38IX37lsO0xmRZ3TnnO1MpEVhbssOQnUAV+agNEKqpeL7+rwIneP1FPECsmksePYRiG8Rb2aIQAquU5mf+2cBp2rF6Ag+tqUpSMIHptGCEpK+Zeh4U3TVUWroxwkAhg219ClUyq7099zlQh3WzBDlPPjaDC4UR9TpxILjrgB07v35jXo5BWDMAIQfPLK8owDMNkNqxohACVmvhfqCpPESrCJBy6wS4cRJXi/Cz89GufTVHI0hmZ56wqpMtU7/IavxsbGiQ3bVRVesNSKnhJVTkanvxTrK2dJTx2w/JbsK+lM/CQOYZhGCYzYEUjBMgIJHaCVZiEQ7csqSrHwXU12LF6AZ5fORc//dpnEStUsy6fHRxGNBoJdbiUjPVY5jlTrPLFeVmIJxIp1wxTzw0ngd/rcDg7pbe0wD4PKJkwhSBNikbwWO1MvPjgPBTnjx9/cX4WXnxwHgAE4hVlGIZhMhPO0QgBsgKJlWAVJuFQB+YKQRuWW1fYoZB8z0FXUTIjm1Mj85ydKhMZnD0/Wi44+Zphq97lZ2NDq2ubcyDumFaCz33/gLbSzn5i3M+hD7vR2NoNIIGFN5ZhweV3bdHm/doaXjIMwzAMKxohQFQT38BJAA2bcKgbO2GTgnHPfifKOzFaxvikZflRp4Rr2edMnbfkay6ujGntkaIDvxobWmFVFldnaWcnvFCMJ0UjqJ5RhuoZqQUAGlu7tTe8ZBiGYSY2rGiEAMPy/PBrRx2PW79stq1ArLuBXhgxC5tlBTl44ufv4ZN+8T17VUVJRRAcbaDXYlu21cl6rPKcx6zYrd14dPtRnD0/LLymkyCdALDyzuvxy/c/DlzgDwo/vCx+K8aZ5hVlGIZhgocVjZCwuDKG4vwsnB0cLwQCowLexj3H8fmqckuhTncDvbBCDalKvmcApC7PsiEhKoIgtYyxnfVY9TlPikYQjUYslQyra9oJ0kWX4/uTPTFBeYWCxksvSxDlhTPdK8owDMP4DyeDh4TDbT22SgZAS+bW3UAvHaDcsxeJ8iqlhFXKGFtZj5dUleOF+29HiSkpWfScZS3W5qT8tbWz0Dc4PG6dyiYKB1E61atr6irtnExQFeSCqvDFMAzDZC7s0QgJusIWgoxlDwrRPesOCREJgnYeEpUyxlbW47rmDmzccxw9A1cE/tKCbKxf5uxVULFYG4L0SDyhJVE4iDyZMOXmUJBRjHWGkunyioat4ALDMAwTHKxohASdYQthimX3C6d71h0SoioIypYxtsqpsQup6R24iEe3H8UPo9YejZF4AvFEAsV5WbbhU055PDqE3yDCgcLS4VyGIHMl3OaepJtSxzAMw3gLKxohId2SudPJaql7blUFQbdljFU9KVbCnxmRxdqt8Ks6djcEcU0dBJ0roeoVTUeljmEYhvEWztEICUE2JpOlrrkjrToH655bVUGQ0kAPAGKFOZZCmUquiV0uybhrCvI73Aq/QTSUTNcmlmHIlZDNPQkqr4RhGIYJN6xohAhKYnMQibTJqCRBhwGdifKqgqCTwmOwtnYWGp78U9fN+gBa8nlxfhZ++rXP4uC6Gsc5cCv8BhEOlK7lWtPJ6GCQrkodwzAM4y0cOhUynMIWdMQ/uwl5StdQFANdifJukmbtYuCtnqP5WZUV5JDGZ3gVKMnnZweHEY1GhHPgNlE4iHCgoEOQ3BBkN3QV0lWpYxiGYbyFFY0QYpXYrCP+2a2iElQ1HJ3oSpR3IwhSFB6rZxUrzEVxfhb6Bodtc02uKcxBPJHArqYzOPnJOdK9UIU/N/ccRA5SuuU9mUmnCnLprNQxDMMw3sGKRhqgw5OgQ1Fhq2UqbgRBJ4XH7lkld0C369h94VIcD7z0jtR9dJ0bwq6mM6Txq95zEA0lM6GJZbpUkEt3pY5hGIbxBs7RSAPcxj/rStRkq+V4dDdsoyiVJflZuKYwNYzK6Njt1PTRimhktOO8TFK/6j0H0VByIjaxDIJ0zCthGIZhvIc9GmmAW0+CrpAntlp6D+VZ9Q4O46df/yyikQj+cO4Cygpy8MTP3wMgp2QAgFm39LoUqeEROfRhNxpbuwEksPDGMizw0GqfTiFI6Uy65ZUwDMMw3sOKRhrg1pOgK+QpE0JRwg71WXV9OoQVc68DADS2dqOzXy5cLRoZr2QAakn9sgUG9rV0pgijWw+0et7ULV1CkNIdVuoYhmGYZFjRSAPcehJ0hjzZWS1LCrJw79zrUJSXjZF4ggULRVSeFVU5WXPPDMy85ip0nRvCxj3HbY+TSeqXLTDATd0yH1bqGIZhGAPO0ZAgqB4WhifB7moJOHsSdDcAW1JVjoPrarBj9QJ8tXo6Sguy0TMwjJcb2pWb9wXdH4SKyjhlfqPyrKjKSfWMMqyYex3KptDK5IoUGNmeKtzUjWEYhmEmFuzRIBJ0Dws3eBHyNCkaQd/5i3i1od21dVrH3PqByjhlf6PyrAzlxCm3I1k50eHhUqmElgnlkRmGYRiGocMeDQI6umHXNXdg0eb9WLXtkFSFH+CKUGeHIdQ5WYJ1V9/RZZ22m9uOvgt4+LWj2Pv+x1LjSh6fTg+JyhpQXTcqz+qOaSWO419+W/mYwK/Dw6VSCc2v8shh845dvBTHy29/iP++qxkvv/0hLl6KBzoehmEYhvEL9mgICEMPC12WYJ2JmjrG5DS3Bmt2vIutiGDpHLoipNtDorIG3K4b6rOqa+7Aht0twmTw3e914NtLZmPS5S7gbj1cKkqDH+WRdT57HR7ITXtbsO3ttpTE++/tPY7Vd1XgqaWVUudiGIZhmHSDPRoCwtDDQqclWFffBx1jEs0tMFoZ6ZHtNK8RoMf7JDtOqzXgdt0A4mdl3Cul4pT5Wm49XCpKwx3TSiBabtGI2Dtjh8g7JvPs3XggDTbtbcGP3mobV90rngB+9FYbNu2191IyDMMwTCbAioYAP3tY2BHGRnk6xiQTIkMJw/Iq2VhlDaj8Ribkh+INcroWkJrU//zKudixegEOrqshWf5F4VcAUFqQhc7+C2P3cuR0r2VJ3WTiCeDI6V7C3aRCmY8nXz9GevZOCgtVWb14KY5tb7c5HrPt7TYOowopYQu/YxiGSVc4dEpAGHpYhLFRno4xyShGdmFYyeEtXeeGPEk2VlkDsr+RDfmheIPMnPzkHBpbu1NCgFRLkTqFXxn0DAxj7T82ARi9ly9UxUjnVsnRoMzH2cFhbN1/Co/VzrQ9RqSwJAA89foxYY+RnzS2k5SqnzS242t33eh8IOMr6VKcgmEYJh1gj4YAt4mzOiz/hlBnXM98fcD/RnlOYwJGBbL1y5zHZMwtFbMAag5vceoN4XQeEb0DQ44hP1ZrQGbdqIR7qQjjWw+0KpcftsIu/MqKzr4LeKWhnXTe5HeBalmmzserv21ztE5TFJbewWFs3X/S8ZjTPYOk8VCPY/zBi9BLhmGYiQwrGgLcCvm6eljorhqlA5GguXFPi+PGnDy3FJIF0L3vf4yHLQQC2fOIqGvuwKPb3xVap81rgLpuACiFe7kJk9MpNCWHX235L7ehtCDb8jgjAV5GYZPJk6DOx9nBYccwRbLC0tDuqLBMK80nnYd6HOM93OeFYRhGP6xoEHAj5Ltttmceh2pMvVcsqSrH+mWzLf+NItAuqSrHD+6/XUoA3ft+B9bseFd6rLKNCUfiCWzY/YFj3H80Arxwv/UaoKwb1RyeO6aVoLQgi3QfVucE9AlNRvhVrCgPPQMXHa9rXM5K+UoAWHnn9fjl+x/j+foTloqk3ZqaX1GK4jzafDgpE2SF5byzwvLlhdNJie9fXjiddD3Ge3Tk0zEMwzCpcI4GEZ2lYd2gGlPvFSPxhG3IErX879I512IrInhk+9Fx/2b2GtU1d1geJ0IlxGzr/lPo7B9yPCaeAEpsrPiAeN2o5PAYMeQ9A8Ok31rhRXM8SvUrAPha9XTsbe5MEeqK8keVhC31ziFJdmtqUjSCh6qnC38PAGVX5aCxtdvyeRgKy9nz4rl1enbZk6P409lXY1/LH2yP+dPZVyN7Mtt6woJffV4YhmEmEqxoSKAi5FOb7YmSS53OL6v86OxQrqvHx9I55XgxOm9cEmYsKQlTNJdOxCSTOeuaO7Cl/gTpWJHg4bRuVJLGrXqyJGMkXlNyInQJTXXNHdj4yw9Ix9ZWxvD0ssqxNdjeNYjn6k+QK2jZrak1NTPx6m/bcXbQWkmIACjOz8ITP2tKUSCTE31HFZYK0rMXdU5vPtPv+PvmM/0YiSd8N1Yw1oSxuh/DMEy6w4qGx+gSxK1QqY6iu6KKTiugyPovW2lp/bLZKJuSI61MySo0bgQPmepdlBKuUwuy8Ztv3YMjp3tJioYOoYmi/ACp92IoXyPxBBZt3i9VptfAvKYmRSN49r5bLcdihGb1Wigh5saZa2pm4NXfttkqLMDoPDv1+6CsVd0eJcYdYazuxzAMk+6w395jvHLHq1RH8aKiim4roFOTOpk5Ki/KxVeqK5QaE8ooNHY5H9RqSTLFBijj6h64iCOne7UVIRBB7edhF7qmUqbXwGpNGXkx5mpmsaJcFOdb53CYc1YMhcWJ7oGL+Nz3D9i+M2ENw+H+EPaEsbofwzBMusMeDY+hCtjtXQPkc4qqo1iFY6n8hoKfVkCZOXIjEMgIf1bXkfUaGcKxU9iYzLj+cO6CY58LJ6FJNqyOqiiUFmTje/dWjbt/VUG7tCDLdk1Zecbi8QQeePkd2/OZPYtLqsrxosUzScbsCUkmjGE43B9CDPVdZBiGYWiwouEx8ytKESvMFSbK7jj8EdbUzCQJxyrhWF6FcKkKtLKMxBPYcfgj4XHRCLB11e2uBAKq8Le2dua469iFETkJpYB92BiAscTlrnPOienm8csKTSqCKFVR+M6y2ZbnUBW07517neOaMufF7Go6Qzpv8v0sqSpHzc3XYMGmesvEeycFPWxhOKrrciISlsIfDMMwmQArGh4zKRrBqvk3CJNLO/uHyEI+VbhrOPUfYxukl6EcflgBD7f1CCtAAcD/UTMTS+dc6+paIiERGBXA19Skdph26zUyC8dWgn80AseeHtHIaINBA6rQpCqIUhWFWFGe5d8pc21FbSWty7iBqofhyOlex+pedgq6Xwq4FWav1B3TSjzxZmYyYavuxzAMk66wouED08toTbmoQj5VaNp6oBW/OHoGf/2lSs9DOby2AlLnpuKPClxfS1VI1Ok1shP8RSH18QTw6PZ38cNoZEwxEAlNbhQkt5Z7p7m2wu58opAv1XG6UdCDCMOxUk5LC7KF/U04MZ1hGIbxAlY0fEC3kC9jBTYs0i/cP5og6yQIu00O9tIK6HfMu4qQqMtrRE2wdkLGQu1GQdJhubebazN256OEfE2KRrD8tnL86K022/NbjdPtuvMzDMdOOXVSMpLh/hAMwzCMbljR8AG3Vl8ray3VCmxYpDfuacEX55Rj29v2gtby28pDGzrhVcy7kyVcVkjUpQy5qcQEyFuoVRUkY+6GLsXxeO1M7Dj8UUp4m4zl3jzX7V0DpPNRQ77qmjvwYwcl4xt3V1iOU8e68yMMR4dyyv0hGIZhGN2wouEDbqy+TtZaihUYuCJ4/uKoc0Ls7vc68O0ls0OpbHgR8061hFOFRF3KkC7Lsu5QvOTjrOYuVpiLtbWzML0sX8lyb57rNTUzHZU8ashXzc3XCIVwu7UfZK6FDG6UU+4PwTAMw3gF99HwCSM8JGZR398u0VbU9wIADq6rwZp7ZpDGIAqhMKzgFIKox68yh3Z40VNEVx1+XZblk5+cIz0b2Z4bdnP3Sf8FPFd/AjmTo9K9S6xw6qkC0EO+ftLYTm6eZ4XOdecVqsppmJQlhmEYJvNgj4aPyITiyCToVs8ow9YDp7SMkSKwBFmPX0fMu1c9RYzxuU0ApuTgRCNAIuEcNrf1QCu2HmgVPhsZq72XcycLVbg+3TPo+nxhL3lKVU5LC7JSqmhxfwiGYRjGS1jR8BlqKI5Mgi4lZKfEJGDYIRJYwlCP323Mu1c9RQyoQqldfghF8F99VwV+/FYbqVIT5dlQFSSv504GqnA9rZRW9U10vjCWPDXWUGffeZQWZKN34KJj2N5vvnUPjpzuDaWyxDAMw2QerGiEFNleGSLB9JkVVdi457ir/AGvrNmy3ajd4mVPEQORUCryClEE/9tvKCHn6FCeDUVB8mPuqFBzYr68cDpeOtgWmuZ5urBaQ1Yke6WyL4e1MQzDMIwfsKIRUlR6ZYgE02g04iqp1QtrdhBhWH6XyjVD9QqJBP/kf2841eUYPkd9NiIFKei5S4Ya8pU9OZoWCd0y2K0hKzg8imEYhgkKVjSI+G11V+mV8cMH5+HguhpHwdRN/oBua3ZQYVhelcqlIOsVEgn+xr/75WmQmTuv35mReAJFedl4qHo6/rnp45RiB+Y1HUTzPK+glLItzJ2MDV+6BeXFeRwexTAMwwQGKxoEgrC6y3RMNguoToKpm6RWWWu2k6AZZFJxkCVLvcpxoD6bsoIcNLZ2Kwv/1Lnb19Lp6Ttj3QE7C/fOvQ61lTHL+wp7QrcI431qOPUfwnCp/guX8MzeFvzNvbemzf0xDMMwmQcrGgLsrO4dPiQ/UzsmA3ICqmpSa+/AkPAYowyqSDnzI6lY1IxPt4WbYsH3yvNA8TQU5WfhiZ+/h85+d8K/aO4AeOqpsnsneweG8UpDO+50UB7CmNBNgZqPkUzPwLBvBRoYhmEYxgpWNBwQhSgkADz1+jFPS3kaVtgt+06QSth6lYQ7Ek9g457jwuPWLxu1ZosEzaFLcdJ1Ve+H4oXSaeGmer28ynEQeRoSAM4ODgNIrTymKvzbzR0ALNq83zNPlcgTBgBPv3EM54fjiBWml8fCDpl8DCv8KjfMMAzDMGa4YZ8DlG67vYPD2Lr/pKfjmBSNoHpGGelYr5JwqZ2Hi/KyhILgd99sQdlVOaTrqtyPTDM+UVM43deTbY4ng11juWsKc1Ccn2X5m+RnItt00WruZDxVKlDWYc/AMNb+YxNWbTuERZv3KzVfDAuUfAwn3M53OhBE81CGYRiGBns0HKBa019taMeampm+JIeLhKz9//aJJ6Eh1Llo/LCLJGgiAWGye2lBFu6YViI1Tt25H6JwKJXkbi/zQ6w8DfFEAg+89I7tb3T2vvA6KV32d372d/ECqoIvor6lMy1DxgDndzDI5qEMwzCMGPZoOEC1pp89P+y5xXBSNIL1yyqFx217uw1739dvwaV7FmgCctfA0Fg8v90vegaG8bnvH5CySOu0qNc1d2DR5v1Yte0QHttpbSFXuZ6d5yFWlCstEFtZc82ehq5Pxbk1gJ6wO6/L38r+zo3HJgzoCoV8uaE9LT07Tu+gjCeRYRiGCQb2aDgwv6IUxXlZOHte3FHbjwZlJQXZpOPW72rG56v0xmRTy5ouvGkqKZfk6imjx4qS3Tv6LuDh145ibe0srKmZIbwnXRZ1auld1evpyA8JOi/ECq9LB8uUfTaw8tj4Xa5aFZ2hkOmWq+H0Dj782lEU52cFUrWOYRiGocMeDQcmRSN4qLqCdKwfDco6+86TjuseuKjdw2KE/ADjPRDJIT8LbpwqlYOwpKocv/nWPSgVKFFb6k+g+tlfC62U7V0DzjdymbIC+xwRSsKxYSF3I8S7yQ/xMy9kJJ5Aw6ku/N2//C/83b/8GxpOdtl6B6jrxI3wt/LO65VyFgxlb+/7H+PO7+1z9FSFBcqzs8u/MZNOuRqUd3C0uIE1EyE3hWEYJh1gRUPAmpoZjhu5m+RdGeqaO0hVnwy88LBQQn5UBM0jp3tTmq3Z0dk/5BgSMRJPYMfhj0j38sTP37M9j0w4lBfJ3aLkVooQtmH3B2g41YVdTWdwuK0H65fNHhuPeXyAvfBf19yBO57ZhwdeegdbD5zC1gOteODld3DHM/ts509naJh5LIs278eWerXiC1dPycWmvS14ZPu76BlIFVI7QhJuY372AITv07P33YqvVk8nnd8Pz6sOdOWmpMv9MgzDZCocOiVgUjSCZ++7FQ+/dnTcv3nd3M1ApbwlxdKuEj5CCfmR7VEhKwzYhUQcbutBZz8tH+GTfvskYZlwKN3J3ZRwKIoi1Nk/lJIAXl6Ui2/cXYHd73WQ+4bUNXdYrntg1Jr88GtH8aKN4qC7OZ7oHbgqZzIGhi45hmt1fTqEH73VZnuNBIINt3F69qL3qSgvG680tAuv4YfnVQe6FIR0uV+GYZhMhRUNAkuqyvGipuZussK9SnlLigXdTbUWStMzGUFTRhhwqpAkI5w4xXHLhkNRFSvRs9edF2I+x4/fasML989DSUG28JmMxBPYsLtFeN4Nuz+wFcx1NccTvQMRAFmTImPP1ErZW79sNr6z6wPhtVSrb7nN+aA8+4Pramyv4XVujN+4VRDS7X4ZhmEyFVY0iHiVvFtakIVnVlRh6ZxrLX8jG0IQgdiCThVo3UIVNFUSfK2EbZWKRFaCpYrQJlofIsVOpkyuihBmnGPjnhYcXFcjXLej3iHxuuvsH9JSFlc0FpEHp3dwGGtrZ2Ln735vqewV5WWTwvMAeWu62xKrMs/ebp69LpvsN9Ry3oC9cplO98swDJOpcI6GBF4k7/YMDOOR7e9i015r67GM0FNOiIGXSXT2i+S8DipWwrYoX8IO8xyrJjTbrQ9K4rbOvBDKOQDnXBCZded1HDz1/NPLCnBwXQ12rF6A51fOxY7VC3BwXY20F0hGkdNRYlVXSWavcmOCYLSc92zhcSX5WbimMLWwQzreL8MwTKbCHg0foIQ//eitNtz2xyVYOid1c6QKPeuXzcZXqivGCb/mkI54PEEWavxs8GUISRt2tzha0p1CIpysuk5YzbFsnokdVGv1t5fcTDpfw6ku/OHcBay88wY8V39C6j4N/nDugtAKLyNs64iDdwo9kglls/OiUc9RWpBFDrfR1RxSZ5ND3bkxQVLiUBnOoHdwGD/9+mcRjUTS/n4ZhmEyEVY0NCCKz6aGP1n1v6CG8VgpGVbCZHEerRRmENVaDCFp6/6TlpWFKCERdgqCFaI4bh1CG9Va3UNsqpfco8SohuZU5tOK9q4BPFd/0jF0bnFlDLHCXGH4VKwwx3UcvEjp0ZF/QA3FeWZFFfn5ynginJR23X1OdOXG+IXd95P6Ddp//BOs/9ItUudmGIZh/IEVDZdQ4rOpG6bR/yJZSFCNvbbLw6A0HwSCq9YyKRrBY7Wz8JnYFGVvQrKCsK+lE680tCvHcbsV2qjPvjg/WzpPpW9wGAkAa2tnYnpZAcoKcvDEz9/DJ/3OAvmOwx+RrPAbllfaVp0y2LD8FleCGzVfyG3+QfJ7ZDe/37y7wjZXygpdnohMS+SWwen7Sf0GvdF0Bk8vs/4GusmdYRiGYdzDORoE7GLZqfHZMkK7lVAiG3utUqnKwK++ICKWVJXbxttTMBSE//6lW/BigHHr1Gf/vb0tWH7b6FioYruhGOz83e/xxTnXonpmGTYsd84tWXnnDY4lgJOt8Ea1Nas+MsX5WbalbanI5AvpyD8wzlFuOsfUgmz84P55eGqp+zwhleP8aHIYRkTfz96BIWEjT2A0z82cv6Ijd4ZhGIZxD3s0BNhZxdYvm42Ne46TLMPzK0pRWpA1rkmYFXZCiUwYj2qzKz+EGkoog/mYL8651tV4goxbp1bU6hkYxo/farPsdeGEOTxHlFsydClOOq+h8Bpzd+jD7ssN5BJYeGMZFkgWQ7BCNvRIx3PUuRZ0eiJ05QSlC5T8lo17jmPFbeV49benhedLNtDoyp0RYXynOvvOo2fgIkqvykGskMOzGIZhkmFFwwGnsI5Htr/r+FuzkPTMiirhb0SeBGoYDzlcJy8rJZRKRqhRiX2mhDJ4Fe4QVNy6bIL67vc68Jtv3YMjp3vxh3MXcPKTc9h6oFV4HeOZj8QTKMrLxrc//xlL4cfoNi0iWeGdFI2gekYZqmeUkX5LRSX0SMdz1LUWdJeUzaREbhFUJfOPS/JJ50ter7pyZ5yw+k4ZcHgWwzDMFVjRsIES1kHBEJKWzrkW3/z3s7adiSn9L6hQQzpeeGCeUrUWSk8Is7C0r6VTGIsPwJf+HrqgKluGtfrpN5odezkYAtCR071jAlBjazdJ0bh6Sq6D961ybJxlBaOKhyiPw4/QOd1J0EGg2xORboncqlCVzNKrchyT+K3Wq84qXlaIutR3hPR7xTAMEwSsaNigGn5kJllIemppJW774xJ8Z1eqwKnbAkYN6Vhwo3z4iyh51yr0J1aYiwuXRoShDIlEwvNwB13Iel6WVJXj/MURrP3Ze8Jz/+HchSthGf0XhGF3pQVZ6D43hP/fznfHzV9H3wU8sj01obs4P8uxi7ZbhZeqgGVKEvRE8kTogqo8xgpzx7xGAG29eqnAyuS/hel7xTAMExSsaNjgtryrnZC0dE45Pl9FF0pUQpS86hJM8fJYeWxEJVINSz7lGL/7e1ih2lk9VpRHOn971yAWbd5PVnR7Bobxf/zjeCXDjr7L5XCL8rNSSuPqyAdwUsCshHGnsLIEgPUW1YTCyETxROhCRsmcFI1IeY28VGCpBqgwfa8YhmGChBUNG9yEa4iEeapQQrWaWykjXiSX6vLyuMFOAfSrXj61UpKVJZMiABXlZ+G5+hPSFcNkGrkb3ozcyVH89OufRdenQ1rmzEkBe/i1oyg2KTbGWnbqe7JxTwuiUXAISoYhawyR8Rp5ZWgB5A1QQfQjYhiGCROsaNhAbfBlRWlBNr53b5VryzDFai5SRpI357KrcoAE0DUwhMbWbmnBMgybppUC6DaBXEZJoShbdpZMkQBk/LedzhC5/P8SKnWLTSQAdPYPIRqJYMXc61L+TUVpoyhg5saCyWt5/bLZlsUSZPJzuDlbeiFrDKEYaIw1MHQpjsdrZ2HH4Y9SPKpuvXayBqgw5xcxDMP4ASsaNkyKRrD8tnLb5G0nvrNstqf9BYx8hXgceHS7WBlZeNNU1DV34C9//p6rak5ebZpGKEMikcAn/UNS4Q6qYUzJv5fxGu09Rqu/bxcu5iRcrbzzesuO6AaJsf+nD7PyqKq0qXi7jLW8YfcHsOseQs3PsRp3cV4WHqqejjU1My1/x4pJ8OjMb7FaA7HCnLGGljqeMdUAlS75RQzDMF7DioYNI/EEdr+n1tSJGotvB7U843d2NZOSpykVnyjKBrUnhCwJACvvvB4zr74Kj25/lxzu4LZevhuvkYieT+2b4tkJV798/2Py+XVRVpCDxtZu/OHcBbR3DVqGbVHWiaq3y/CsiI5xine3e45nzw9jS/1JvPrbdjx7360pY+eu0eFBR36L3Rr4pH8Iz9WfxA8fnKe9pLHoGygKz2JFl2GYiQArGjaoWGh1WbGoQhulVOqh1m5tzatke0IkE8FotaOcyVFLwXJL/UmUF+VaV62yEQDd1Mt36zUSIepobCVc+RlmYeSDPPHz90jJ+qJ14sfYk6txGcLZHdNKhFWAzg4Oj1Mc06mMMuOMXw36DOy8kgYUhZUVXYZhJgqsaNgga6HV2VVbp9DW+GGX1uZVdptseVEult9Wjh9fDjWz8khsuu9WLK6MYev+U9hSf2LcuTv6LuBHb7XhB/fPQ0lBttDSJ1Mv3yygxhMJV14jESpeLUqyeCQil/hthaEkjuZMiLvVA+J14pW3KxmralylBdmOCrdBAsDTbxzD52Zd7atQyniPHw36zCR7JWU7g7OiyzDMRIIVDRtkhX0dpUENKAJniaC3QurRYqyEdjvXvlNc9e03lDgmd47EE9j5u48cx/L0Px/D4adrx7pjH27rsdy8qc/ow/8YGCegFudlkX5LEWLNiDq8G1jNr6hazuq7KiyVOTtKLLxI1xTm4MKl+LjkbAp2yp2qtytyeTxAxLGJoF01Lpnn0zMwjPl/U49zFy7ZHsNlSdMPrxv02aES8uW394VhGCZoWNGwgSLslxZk4zvLZiNWlKc1vpZSnvGZFVXYuOe4sFb8wpumYuuBU8JrmoV2kWvfbpMVJXdSQtLODg5j3sZ/xadDI5bXNqBa0Z//9fgE67Pn5YVsCtQO707zK6rEc/sNJXjy9WNCRSGCK16k5M7gLR39+N7e40r356Tc2Xm7jLK2dmt5w/JbAMCxnwYs/q6Ck5KRTBgqrDE00qnDfBDeF4ZhmCBhRcMGirDvtoStE5TSj9FoRFgrfsGNU4XCuNkC79a172TpowpwyUqG3bXd5Ix4ATXGmjK/B9fV2Cpriytjlys12RONAP/fhdNQlDeaKzJWeeyf3pPOPQLo+Ud2iua+lk5hGVOnuHcV74sbwiCUMjTSqcN8UN4XhmGYoIgkEuKq/P39/SgqKkJfXx8KCwv9GFdoCDppT1SZhDI+Q7AFrIXx4vyssao8I/GEY1dqY9M+uK5GyYPT2NqNVdsOSf/OuPY1hTn4H/9lbkqTuX0tndiw+wNh9SIVivOy0Hd+WJtXS8f8ys5hcV4W7po5FW++30n+jXlMAFzHjlOq7Ox9/2PLfhp+4XZ9U0j3akNhHL/dN07X2tUF9d3dsXoBezQYhgk1VN2AFY3LOG2eYdxYk8dFSUasa+6wDbdJ3oyL8rI93QhH4gncsXGfttAlQ6makpuFB156R8s5k1lbOxPPXe5toUOA0SFo7Go6g8d2NpGv6Zbi/Cw89CcVWFMzw9N1L1LCRBTkTMKAyRMmgx9CadCGC7eEefwqvVT8xljjIu+Ll4ouwzCMDqi6QdTHMYWWuuYOLNq8H6u2HcJjO5uwatshLNq8H3XNo300jFCgFXOvw8KbpoZiA0ge89qfvYeNe47jb+v+DX3nL1qOb3FlDLmTrR+3seF9980WdPadJ10/2bU/Ek+gsbUbu5rOoLG1GyMOZZEmRSP4yp9MI12DghFu9Ovjn2g7JzC64ZcX5WJNzUz88MF5iBWlhtLEinKVBFIdoRNehvUYK+dLc2JjCfNnB4expf5EyjvhBSolpYErz+rd9X+GtbWzUJA9ify7ZFSfKRXD6m6+R2MNezm3Ogj7+JdUlePguhqsrZ11Ze1e7qXi9dqlYoR7AuPXn87KhQzDMGFhwudopGOpQZUxH27rcQwtMpIQqVV8DGFXxcJ55/SpAMQJ6hSMSi27mtSb3YkaBKp0L7bzglGVhK5zQxiJJyyv4WUp2VhSmWK/3wmVuPTkZ5U9OYrHamfiL/73m7Bg06+Fa9m4v69VT0dtZcxTT2W6VxtKl/Hva+lUbjrpF5T8O4ZhmExhQns0RJsnMLp5Olno/UZ1zFQhrvSqHJQX5doWxTWsx/MrSpUtnF0DenMpEgC6By6itCCLWMx3lAiAb95dQfJWyHi1nDxkd0wrAUUO27jnuK0V1skq6ob1y2bjN9+6B7vf6wjknVDx1MSKcvF47SwMXYqPedOyJ0fxN/dWjfYdEfw+AmBvc6fn4ZAy1YbCSDqMP52+54b3ZcfqBXh+5VzsWL0AB9fVsJLBMEzGMaE9Gn6UGtSd36E6ZqoQFyvMFVbbMoRcVQunV6E/9869Dq80tJOOjUaAratux9I51+LbS2Zre0Yib9PjtTPJDfc6+i7g4deOYm3trHH5EaLuxDIYceFfqa4gr6+/b2hD2ZQcrTlLlOpBycUA2rsGsOPwRynNH5O9aT98cB6efqPZ0bPhVznRdK82lA7jT7fSsSp9OBiGYdKNCa1oeL15epE4qTpmmRKQk6IRoWu/sbVbeVOnhP5EFTpg11bGcGdFKZ5+45iwmWE8AZQU5ADQt+FTwkteJSpCyWypP4Edh09jw/JbUtaNEdK1df9JvNLQhr7ztB4RyZjDxKjra+OeK304YoU5WDX/BkwvK3CleFBKSm9YfguqZ5ShrrkDz9WfFIbInL84grU/e094ba8FZKpy3d414Ok4VGnvGiQdF2RZ4HRQhhiGYSYaE1rR8LLRk1e5H6pjpghxyUmIorwEN5s6ZSxbV81DSUH2WJO5J37+nmPn6GQl6fxwHGv/sUlpbG6gWFRVq2119g9ZrpvRmPTxAjcVc1y4ylrv7B/ClvorTRHdKNOU+HWZfIFYUR7pulb3rdMbSc2r2VJ/Ep+JTQlVCM2oUnfC8Ri7XhV+VuxLp8Z9DMMwE4UJrWh41ejJy8RJN2OWTUJ0svS73dQXV8bweO0svNrQliJ8241lw3K6khQrDEbgoCouTr05RCSvG6d1ZoUxV4/XzsL0snxLwU9HorlbZdptd/lkb5rq+6LbG5msXDsRlqRqA+oaS2B8tSS/S+G6/Z6HtYw5wzBMOjOhFQ1ZKz8VL2OF3Y5ZpYKSFfMrShErzEVnv3PjOatNXaXevYySFFSnYKri8lB1BZ6rPyHdzdy8bmTLwVKq2ujotq6jCpGO7vJ/OHdB6X0R59nYK2pOLKkqx+O1s1JySsyELY+AusbW1s5MWVdBVPNz820Mc38QhmGYdGZCV50CrgiwuvokAFDqRSGD2zHr6Auyr6UTFy7ZN0dLAFi/bPymblepqu/8MJ6rP4l9Lfbdq6mVWoKqVW8oOKKKXWtqZlg+PyrGuqGun/+2cJpUVRu79SWDl1WIZL1pMu+LyBuZwGjOjFW/HQrTy/JJx4Ulj4A6jullBWP/O8jqTyrfxrD3B2EYhklnJrRHw0CXlR8Y3bSSE2WdcBO6o3PMsthZK81s3NOCaBRjm7uOkDJq4raTB2T9skoU5WVjV9MZ6XlzCq+QsagmP799LZ3kalnAlXVDXT9fqCpPmTNKiIh5fXWdGyKv62S8EJhlPVYj8QSK8rLx7SU3o+fTIZQWZCNWlGd537JeIlkLfbrlEVDHcfKTc2hs7cb8itLAqz/JfBvTpT8IwzBMusKKxmV0VB6iCuC6QneCKI8okxdgFsL8FkCsBI7egSFs3KMWIkEJr5AJ8TKe38KbpmJ+RSk27G6xDUUzmFqQjTumlQBQCxGTCRFJXl8j8QReOtgmnbvhhcAsCu8a9abNxqRoxPF+rQRHWcVIVhgNKqzPQDYPgZqzs/VAK7YeaEV5US6+UBUjjcVLrw312xi0UsQwDJPpTPjQKVVG4gk0tnZjV9MZNLZ24+KluFRirkzojvlaQTackrH4msMkqIJFZ/8FbfebHCbWd/4iHt3+rlKIhEx4hUozriVV5Wh4sgZra2c63k/3wEV87vsHUNfcIR0i5iZERLZJYHJjRy8QhXdt3HMcm/a2SN+vimIkEyYWVFgf4NxIUmW8VnT2XSB758LgteGSuAzDMN4SSSQSQimuv78fRUVF6OvrQ2FhoR/jCjVWVtLSgixh7wbjuL+591Zy7odfSYpUS+eupjN4bGeT9Pl3rF4AAFi17ZDwWPNc6rjfkXgCizbvt1WSDEvywXU14+7bzW9VsHrm5usBGPMUUdYI9R5+8617cOR0r+06EI3Nanxesvf9DjyyfXwlJ1Eiu90zM+ZJperW8yvnYsXc60jH+p18bOdtpT4rynNPPmfEoQ+O7vfFDY2t3aRv0vpls7U3qGQYhklnqLoBKxqSUMOj7NjyX+fi3tvpwogb4YCKjNBD3ZjNPL9yLr4451olIU7H/VLHvWP1gnEhEm5+q8rFS3Es2FTvqLyWJwlryYpiWUEOEAG6Ph0aE4wOt/VoU/KSr9XeNYgdhz9KCflK/o2XJUNFyhMFq2dmvHeAXNUt2efvVzlVXYqyMd6GU13YeuAU6dp2uUp+KKEUKIqluXkoV6NiGIah6wacoyGBbN8CK6g9HqiVW9wmKcqWoVTts3D1lFxhsrTd+XQkZboJkQgivOLI6V6hhyw5dtwIEatr7sBf/tN745TGpcS4efM1rdaBOf59Tc0MS4HZa6u9bOK2FVbPzC7Pxg7VvAq/cqx05SEY46Wu8/99VhneP9OXsqYoJZb9hFLO2eyZ8bJEL8MwTKbBORoSuBFsZGPWKddyWz5UpQyl21h9u9j60oJsx/OI4uBFeSxlV+UQRguUFeSMO08QlYKowlxyOWCnHIyXJapaJUMpR2pVLtmPkqE6FDu7Z2bOszFyZ/zOq9CBbkWZus7/54ku9AwMo7QgG1+tni5VYtlP7L5Jdo/T6xK9DMMwmQR7NCRQFWxUhBFR9SHZ46xQtXRSLb52921VDaqz7zzW/uw94ZitnoHIcl7X3IENuz9wPG8EQFF+Fp74+XvjwoDWL6tUqhTkJjSGKsztavoYf7VsVPETKY3RCJBIyDfhk628QykZ+ldvNOP8xRHbMrMU3Ch2FC+E2ePwmdgUUjWxsKFbUZb1avYOXMSrDe2hzm2QLefM1agYhmFosKJBZCSeQNe5IdKxpQXZ6Bm4OPbfKsJIz6e0a1GPs8KNpdO8Mbd3DVyO1b8yntKCbKyYey2K8rIxEk+kCBlmIa6xtZs0FrMwJAr9+sbdFfjxW23CxOAEgLODwwDGhw49uv0ols0pxy/fH2+Fd+ou7SZsaH5FKanAQPfAxTEvj8gDZhhfVTt+U9cLRYHtHrg4pliqhlOphvGpeiGC7F3jBt0ldWW7x3vRj8JOiVdV7s2/ozoquBoVwzCMM6xoEKBWXKFW7qEgCiWSPc4Kt5bO8bH6M3G4rQf1LZ14o+kMugcu4pWGdrzS0C4UJlWEIYrlfNvbzkoGAFxTmIMLl+KXFY3x5wFgqWQA1kqkXSUkQ/l5vHYWppflO66NSdEI7p17HSnkSUbY+Wr1dPyquTNlLU8tyEZ3kmJsB3W9yApfqjHvlAaJ37i7Arvf69DmhQiid41bZBpJUpHNY9HpAbBT4pffVj7uWVOUWLsqghTCUKKXYRgmzLCiIUCmCR8wumFnT4663kxjRXlaj7PCC0tn3/lR5YKaXJ78W1lhiGI5F9dUA7626EZ8b6981+u1tTOxpmZmypj2vv8x1ux413Y8ALCl/sTY35wEodrKGEnRkBF2FlfG8FfLKlOst3dMK8Hnvn9A2zqQFb7cWLwpDRK/vWS2o5Xbr+pPQSLTSFLmnIaH51fNHfiHxtPC3xg9clTn2u573NF3AT96q2389QTfHbvziTyJXjRWnAjrkGGYiQcrGg7IVJnSHattKAFOgrTbhmi6LZ0UD4OTMCkrDOkKW/h976D0byIAdv7u91hTc6XBXl1zBx7Zbq1k2OEkCMkqgtRjrazyOteBSkiTG4u3KKTJyQvhdz+LIPEi9Ct5bimKxsZffqDcI0el6p/Td4d6Pl1eICcm0jpkGGZiwVWnHKBWmVq/bLb2aiqGEmC3jUWgZ6Ozq7gSK8p1DGWxqvIkk1zuNB5qV21dYQvTSvOlf2O+F0NoUTkPYF3BRqaLtNuO05R1QO1QL1uZLBlV5dGq8pUIPypjhQ2VeaJgKJeis9mVT6bMtWrVP7vvDvV8JabwVNG3UZaJuA4Zhpk4sEfDAarQUzYlxxMXt52FX7elS9bSaWd9+wKxV4NoXqlx8BSLP6VD8ZcXTsdLB9uUukEb9+Km9LGTNV/Gy+M2PMZpHchaXGVj+A38inl3632byNiF+HjdI8etB9P8e+r51i+bjVhRnmdNJ3kdMgyTybCi4UAQ/RPM+FXphircO1V5eoXYq0HnfK2884aUnAcDY3ZW3zVadQqwD3/InhyVqqKTjHEvOsK47M4hswbcrherdSDb1NFqLJ39F8aFzZgpLcgai+H3Oj7dbRO7sMTT+z0OkcJppVyWCooNUMPm3H43zL+nni9WlOdZAQBdzRQZhmHCCisaDuhOllYlLJVuKNY3igchHk9gV9MZV4KRqBJYshX/9htKhFZ+t92gdShPTueQWQM614tbi2vyWPKyoviL146O/dZMz8Aw1v5jEwCx186tgO2mtHNY4un9HgdF4VxcGcOU3KzL5aoTWHhjGf5w7oJyj5xk3JQztvpOh+H7rruZIsMwTNhgRcMBL8pCpjMyVZ7swifOD4/ggZffGfu7imBU19yBh18bXz7WwFwNimrlt+oNsqX+JOnZqwpBxvkoAo0b4Vr1tzotrjLKnJO3RIeAreqtVPXu6MbvcVy8FMfTbzQ7KpxPvn4MG3a3pDS8/MXRM1h55w2ka4ieiWz/DsD5Ox2G73sYvOYMwzBewsngAlSTpTMRqlXta9XTx81Xcf5oXXpzrwrZhMeReAJPvn7M9t+NalBmqEmwycetqZmJtbWzUJSXWlPf6tlTE6BVErWBUcFy0eb9WLXtEB7b2YRV2w5h0eb9pHlz81vdFtfkZP8t/+U22z4wdknyuhJnRcnLEYyv6iby7liN1wv8HkddcwcWbKpPaUJqdd2zg8MpSgYw+lyeqz+B4vwsqbm2w+57XF6Ui2/eXYFy09+L8rPweO0sLK60zh8L+vuusg4ZhmHSCfZoEEjXjsC6oVrVaitjeDqpV0PZVTl44mdNlsfKJjxu3X/KsrFe8vl0xDRbWc2L87LwUPX0cb0zDOws9sbvZl59FTbuOS6dqO3Geu3W8u2FxdVQ5hpbu4XCa/Kz1Jk461XfFj/i6f0cB7WPkNNYIrji0dThOXD6Hn97yWxs3X8Srza04+z5YZwdHMaW+hPY+buPHAsXBPV9D4NXhWEYxktY0SASljyJIJGJaU6er8bWbnT2D9melyoYjcQTeOXgh6SxuolpthOu+s4P47n6k/hMbIqtcG4ILVv3n8KrDW2jws75YWypP4nyolysX1aJkoLsFIEGgG0TMzfCtQ7B3Ms4dllviW4B26u+LV7H0/s1DpW+FVYkAPQODmNt7Uzs/N3vtTQMtPse72vpxHP1J5Uahgb1ffeimSLDMExYYEWDIaNqfdMlGG3dfwp9Fy6RzuVkYXfKV9AhnI8KOycshZ1Ht48KOyvmXgdAnG/gRrjWIZh7aXGV9ZbIrCNqToqMNTss8fR+jcNNyWYrppcV4OC6Gs88B+lcKpa95gzDZCqsaEwAdJbAVLG+6RCM6po7LMvYWlGcl2VrYfdSsAfkhJ19LZ3CsKahS3Hh/QLWQrguBU/mmcusNVlvCXUdtXcNYNHm/eRkcZ19W/yoQufXOHR7Zq6ekuup5yAsoW0Gst9d9pozDJOJsKKR4XhRAlPW+uZWMJLtuv1Q9XTLsVDyFdwI9gBd2Dn0YTdJIfm7/3wbaTxWQrhOyzflmcuuNVlvCWUdFednYUv9yXH/pqMaU1ji6f0aB3X9lOZnIQ6gb3A4UAUsLKFtALD3/Y/xnV3NKX1jgiiBzDAMEzRcdSqDEVXoeb7+JHY1nUFja7d0hRpqFSfjWLuKTBTBSCaEoyQ/C2tqZo77O7VST1lBDuk6dkIYVYhpbO0mKSSIQLkqje6KNk7PXLUalEzVH8o6cupADbivxhR0lSI/xyFaPwBwVc4kHHq6Fs/edysA9apqOnCjWI/EE2hs7U75Hlr9jcKmvS14ZPu745pTdkhWRmMYhskE2KORoVAE6+RQJK+tbW4SHmUskJvuu9VSoKF6GgzBXtX7Qo+LpwktXZ8OKVuv/bJ8u42NT+kg3ncePQMXUXpVDorysjEST6T8xmkd2XWJTx6LjtCZsMTTez0OY/049az5dGgE+//tk1AkNKt6Ti0rzFmU46Z8I/e+34EfvdVm++8JhDdPhGEYxgtY0chQZBM5/Wg4pioYUYX3tbUzbcdOVVb+5YNOrLzzenKjPjNUYWfhjWXYeqBVOJ6rp+Ri4U1TlYU4PwRAXUnnfecv4m//5X+NC70yV+paXBmzXEe/fP9j0nh1hM6EJZ7e63EsroyhOD/LtqR0shIZtAKmoljbhVNa3W+H4Bs5Ek/gO7uaheP0M0+EYRgmaFjRyFBkhSm/qrKoCEaUrtvlRbmWIVMGVGXlHxpPA7C2aFKEc6qws+CmqVLWVysh7o5pJThyuhe7ms6QKyt19l9Az6dDKC3ItvQYqEBda/UtnbbP3k7g6+i7gEe2p1rU7SzL1GdcdhUtPI4ZVSJl+tYErYBRFeuReAKHPuzGk784JlW+NwHgqdePWX4jD7f1OPaFScaPPBGGYZgwwIpGhqJS2tLvqixUdIQAUZSVZPouC1dra2dhelm+lHWWKuzI3lOyEFfX3IHPff+AVOJ13/mL+Nu6f9NaGACgr7WXG9pxZ0XpuGvJ9muw875Rn/ETP2vChuW3cFIugTAlWFMReVasQqVk6B0cxtb9J/FY7ayUv8vMgdclkBmGYcICJ4NnEMnJi/F4ArFC50ROO4ISGpySL90mvzolElthXHnn7z7CF+dcK0x4N4+/KC8bv/nWPdixegGeXzkXO1YvwMF1NSnjVL0nlcRr1WRtyr3KrDWrZGzZMD+7xG7qM/6kf8jXpFzVpOIwEJbeIbLYFS6wew9kebWhfdxzJFfpKrAvv80wDJNpsEcjQ7BLaDRComREmyCEBkppVLcx4HaeBjtkPDxO4zea89mNSeaeVBKvKYUBnvzFMUzJzcKCG8UKldNaE2HM5/yK0rF7PvnJp4Rfjh+31bMxnvGG3S3o7Ld+xn42b/OivLSfeN2zQ2ePH8q1dHQ6B4Cz54fHrT1jrkTflmdWVHEiOMMwEwZWNDIAu/h2I/ynyCGZMxm/6t2bofS3WFJVrkUoSRbsf9XcMZaT4YTIw0Mdvx0yce0qidcUj8HZ88N44KV3hEKwaK1RqG/pxP/5syYtXaetns2SqnJMycnCAy+/Y/s7P8IE3a6LMOBl5TK/lTDdnc7Nay95ruyUmW/eXYGlc67VNgaGYZiww4qGz1y8FMdPGttxumcQ00rz8eWF05E9WT6CzRC6O/vOY+Oe444W7tzJUfz0659F16dDaO8aUK6o5AVUC308Dmzc404oMSsqn78lRlI0nDw8bku7yqISMy8TCuckBFM8IxRebmiXONqZrnNDlgntXQNDpN97FSbo97rwEi8qlwWhhHnR6dyM3VxNLcjGxhVVWDon3IolwzCMbljR8JFNe1uw7e02JIf2fm/vcay+qwJPLa0kn0cmmTEBoLN/CNFIZCyE5zOxKYHWu0+GaqE3Vx4C5IQSqzmLFeagOD/LVUdjHaVdzTh5blRi5mVC4ZyEYLcW4QiASATQmaKwcc9xvHSwbdzaDTq3wIt1ESQ6S9dSFNan3ziGmpuvUTLC2KHrWYu+C0GX+WUYhgkTrGj4xKa9LZaNnOIJjP2domzUNXc4NtCyI9ma5+dGKAp3cmNlpFqG7aynn/QPjf1N1cOjsyrPSDyBrftP4dWGNpw9b90oTCVmXrbilp0QLPOsrOYzASDhQR60lcLpdW6BiHSs1iRCV+laisLaMzCMBZt+jb+5t0ra+GH3zZlfUerYE4QC9bsQdJlfhmGYsMCKhg9cvBTHtrftu8UCwLa32/DEn93saMEbiSfw5OvHlMZgtub5sRFSYrDdWhlFlmFKCEtRfhZyJ09KSR6menh0Wc7rmjvw5OvHLIUgsyAtEzNvCF1fqIrhFcmQJbMQLNM4cefvfj/OY0Ydw5p7bsLMa6bg6im56B0YwsY9x4XeAbPC6VdXdDvKCmi9OqjHZRJU5apn4CIefu0o1tbOxPSyghSlwU6ZcPrmLK6MuR57EJ5fPxPmGYZhdMOKhg/8pLFdGC4ST4we97W7brQ9Zuv+U9LWOL8TvI1Nsb6l0zIW3yw0y1rb7bATXighLGcHh/HTr81DNBqR3szvmFaCqCAcKBoZPc4OkZfKLEhTY+athC6ZCmRmxYLqJVhTMxNramaOE44Ot/WQFI3qGX+UojR+vqocf9/Qho17jtv+xkrh9KMrui1UOXACyouyxoUt9SfH/nd5US6W31aO3e91jFMmlt9Wjh+/1Wab9/F47UxX3ozSgiz85lv3aA3nEpHuVcsYhmFY0fCB0z2Dro8biSfwaoOzV8SM3wnelNwRK+uzk+VZVSg2oFpPuwaGHMvQ2nHkdC9JiTxyutfR4yLCEKT/vqENX6muIDUlswoXo85ncf74Wv+yXgLz/aqGM02KRlA2hWb5Nz/voOLluz6lJaNTj8skKMq5HR19FyxDUO3+Dlz55rzqsghBz8Cw7XvsBZlQtYxhGIYb9vnAtNJ818cdbutJidunQG1mpwOZRljJ1mfAuXHdD+6/HeVF9s3gIhi18Nl5bLxOCnYTiz8ST+DvG9qkEqw37jmORZv3o665w7YpmY5+AQ/9SYWlMO6mcaJTQz2RUuzmOdrNk5cEnYweZijKuW4SgPT30wq/cmooCfNWzS8ZhmHCBns0fODLC6fje3uPC8Nrvrxwuu2/Uze4gpxJeOY/3YpYoX+xvKqCLTVBPRqNKMfae5UUbISInfzkHOl4s0ApUznMjMii6bY6VHF+FtbUzLD9dzdeAtVwpqCTu2UJ83hFMf9e5wQEmQBfnJeFvvPWVeYo+KUYZlrVMoZhJi6saPhA9uQoVt9VYevaB4DVd1U4xv5SN7hv3HUj7r1dPgTIDaqCLTVB3U2svRdJwTJKgpVAaRcSQUVUbcutIPfsfbcK58NNMQGqomIWeNcvm41Ht78bmh4wTgSdjG6HKObfj5yAIL04D1VX4Ln6E1JhmQaiXCudZGLVMoZhJiasaPiEUbrW3EcjGgGpjwYlabokPwtramZqGjEd2c1OxZobhBXdChklwRBmvlA1Om7jft2GNQHOFk2qIFdakI2egYtj/+1nkqlIUbETeL9xd8W4ROCgesCICDQZ3QJRzP837q5wTKbWFYapqwCEDFcKFczAZ2JXKXkTnXKtdMOhdwzDZAqRREJc2b6/vx9FRUXo6+tDYWGhH+PKWNx0BjcEBWC8NS4CBJYc2NjajVXbDpGONdSCIMbqNiRkJJ7Aos37yQKKOeG1vCgXK++8PqWKjlueXzl3XBK7MU5R2M5vvnUPjpzuDV3ZTDuB2BjZC/fPQ0lBtvS4gyoTGobypKK1K2qmaKyZg+tqtIzd6VvmFjsPUvI3x3gmnX3nsXHP8RSF2wmr980LqO+wrufBMAwjC1U3YI+Gz2RPjjqWsHXCzkIadLlDGQtlkNZnariPnWBIDRH7QlUMv2ruHCe0dfZd0KpkAPbJz5SwnezJ0dDFd5O6Rv/zMbywah6+OOdaspAVZJnQMDRvo8T8O5mcdOcE2H3LphZkY8Xca1GUl43n6k+MXVuEsQqoHq/kZ5KXPYncBNWp74lOhTKsoXcMwzCysEcjDQmDhdSMyEKZnz0J37z7RqypmRn4WJ1wEkiHLsXx2M4m4TmK87JcV7j5q6Wz8fLBD1O6lydDsWimYw1+Ge8Y9V5EHhIr71oY3zE37Go6Q1q7InRb9J3m2W792vXRMNaCyrN7bt8JPPdrsRHgp1//LKpnlI37u1fvmtV5Swuy8MyKKiydc63yeRmGYdzCHo0MxisLqRvhyrBQ2nW3Pn9xBM/Vn8RnYlNCK+SKYtgfr51FOo8bJcNQIL66qALXl+a5smgG1UNChNM6k8n3oeQOUDrDm5Pqw66gqbynumL5decEOH3LnNbvt5fMtp0Dle9jxR8VkI6z6nviZb+LJVXliMeB7+xqHgvv6hkYxsY9xxGNRkKxHhmGYZxgRYMBoEe4WlwZw4bdH1j+m6hSUtBQBNKdv/sIscIcRy9DkYQ3Q6RA6Egm1qGU6rTui9aZjCBLWVPUMqFb9v0vVM/4I/QOXMSj28PbJE31PaWU26XkaPhdjtdu/eo2tqgmX6sosjLUNXeEej0yDMOI4IZ9jG2zPWMzq2vuIJ3ncFsPOvvtOx2bG/WFCapAumr+DQDsG849VD2ddL21tbNITe+WVJXj4Loa7Fi9AM+vnIsdqxfg4Loa34SLuuYOLNq8H6u2HcJjO5uwatuhsYaBKucSrTNDIKaKZKI1RfWQbD3QilXbDmHNDuuKYmFokmY3fx2E95TSLHH1XRWjCofNv6dbTsBIPIHG1m7sajqDxtZux+cmWnd2jUFl+l2ojJ+b9jEMk+6wojHB0bmZpXPtd+qYppcVOHbGXlMzkySwrKmZEagCQUGXAgrQ1xkAW4HYCbvn1941IHEWe4s+EKyiLGqKmYD4PRV1dX9qaSW+cXcFIqaJj0RGk6zDtDZFyCrIql3rvfzmeanEMAzD+AWHTk1wdHagTefa7zJjX3jT1JTY8bKCHCAyGr99uK1HqrGcaE6DyhfQHRIis87sQsacsHp+I/EEdhz+iPR7GayERq+TxykVzyjvqVPeQ11zh2UfjXgC+NFbbcjPnozpZQXa7s9NqW8nVHMmVEIVvfzmpbPhhmEYxoAVDY2kY6UanZsZJQ48iDhvCrJjN2LE65o78Jf/9J4njeW8TDIVoVMBBeTXmSEQH/qwG4/+9Kht3ovTmhKF8qliFhr9UAY7+85rO84qv0HkMQGQUprZ7f1t2tsyrnnp9/YeJzUvdcKtgixbQMGLb56xj5z85Bzp+DAabhiGYQxY0dBE2CvV2KHTIhdE7Xddyp3K2J0UgR+/1abcWM64Ly+TTEXotqaqrLNJ0QiqZ5Th2T+/1bJ0smhN6bb0WgmNfimD1IZy1OPMUHvEGLi5v017W/Cjt9rG/d3wnABQVjZ0KMgyiea6v3lW+4gdYTbcMAzDGHCOhgZ0xbLLJC/qgpJ8G40AvUQBRhQHrlPp0pmoDMiNnZJzsHFPC+ZXlGLF3Ouw8KapUgpB0PHZukNCVJNtAfU1pdPSayU0+pmsW3qVfaM4lePMyCplqvd38VIc294er2Qks+3tNly8FJcaj0EQ4Ua6vnl2+4gV6ZqgzzDMxIM9Gi7RZXkOyiOSbJGzI54AHt1+FD+M0jZNP/o3eGVJpo5dd2iRmaDjsykhIdcU5iCeSGBX0xnhM3Zr+VVZUzId681ETaVercLevF4DycQKaUoT9TgzKkqZyv39pLHdMeEeGJ33nzS242t33Sg9JqfO3cmc/ORTNLZ2S3+X7Dyobr95lNC1ZGTDMBmGYYKCFQ2X6BA2vBCaZUKKllSV44X7b8eaHe86CgEyoTpeNRUEvA8roozda0Ug6MT6SdEI1i+rxCPbxyughqJw4VIcD7z0ztjfRYqxal8Q81r+4pxryWvQTrmxwzjr1lW3o6Qgx/H98WIN2L23htLk9K2x8whRmF9RqtzRXub+TvcMko57p60HZVNypAT2uuYObNjdQjr/1gOnsPXAqbE1S1ESRMYgN988aujamntmoHpGWVrk/zEMwwCsaLjGrbDhhdCs4h0pKcghl/b0SoGg4qcl2Q6vFYGgE+vrmjuwcY+10FaUn4Wzg8PjOsBTFGNZy69bT5+dclNelIvlt5W7StjXvQZE95rsedSd/zQpGsFD1dNTEr6pyKzxaaX5pOP+teUT/GvLJwBoz9vOWCOis+8CHn7tKIovr2kD8zW9zsWh7iMzr7kq8O8vwzCMDKxouMStsKFbaFbdEIMO1ZHBr7E6eYVUFAEZL1MQifUGqkIbVTGmWn51CXdOys23l8xWDnfRqQxS79Vtp3gn1tTMxKu/bR+nQNqhoux+eeF0fG/vcWH4VDKi533xUhxPv9EsvV6BK++Vk9K8uDLmeWGGoD2YDMMwXsGKhkvcChs6hWY33hHqBlZ2VQ4aW7sDLeHrx6ZMCZOQUQRULPNeC5ZWUGLFnQRRWcXYTvnS7emzU27chLvoUgZl7tXL/KdJ0Qieve9WkpKpquxmT45i9V0VllWn7HB63nXNHXj6jWPoGZAP+aJec0puljZjkCg0Lh1LgzMMwzjBioZL3AobOoVmN94RykZXnJ+FJ37WlNKbQFfCuoy13+tNmWpdpioCbizzfiTWJyNb5tQOimLspHwV5WUHHh5HQYcyKPveepn/ZHc/lOR4KkbpWnMfDSesnreq542Kcc3G1m7S8aI1Tw2N0+nBTMfeTgzDZBasaGjAjbChU2h24x0RKUwJAL0WlmwdMcqy1n5V5Y6y6cpa0kWKgA7LvE7BUjQHukLjRIqxSPl6qHo66TphCOVzqwyGLWzR6n7umFaCI6d7tQmsTy2txBN/dvNYZ/Bz54fxRtPHwt8ZcyBbpckdtKs4rfkgQuPStbcTwzCZBSsamlAVNnTG4rv1jjhtdOeHRyxDZtzGKKta+2U3Zeqmq+IVclIEgkxcNysVvQND2LjnuOMcuI0BpyjGFOVrF0HoBMITs+5GGQxjfL7V/ehen9mTo2MlbBtbu0mKhjEHsp63aARIJKgqQyoLbyzDL46eUTYGBREa51cjSYZhGBGsaGhEVdiQFZq9jPO12uji8QQeePkd29+oCsturf3UTVlm09VtXQ7KWk3tMGyeA8oaKsrPQt9lpVNFMaYoX90DF1FakIXegeGMj1nn+Hz5OZB5XyIAVt9VgR+/1UYuc5x8zQU3TXVlDPI7NM7r8t8MwzAysKIREmSEZq/jfM0b3a6mM6R7kBWWdVj7RZuy7Kar27ochLVaJnbdag5Ea+jZ+24FLv9GJcSDuk7unXsdXmlo973qlt8EWWEsLMjOAfV9mVqQje/dW4UlVeW4/YaScWu2JD8LvYPDwmu6CWvy29gQhvLfDMMwBqxohAiR0BxUCUyvhGU/NmDZTVe3ddlva7VK7Lp5DqhrSDXEg7pOaitjuLOi1NeqW0Gh871N1wRgmTmgdH0vLchC41N/iuzJ0bHzW63ZfS2dpGuqhjX5bWwIW84PwzATG1Y00oQgS2B6JSz7sQHLbrq6rct+W6vdVI1KnivKGlIN8ZBZT5OiEV+rbgWJjvc23ROAqXNAea/+5t5bx5SM5N+Z16zMvKuseb+NDWHM+WEYZuISFR/ChAEZyzxwZUNcMfe6sbhfVYxNHbiyiRu4EZaNDdjuVxGMCkluNmDZTXcknkBRXjYeqp6OkoLslGNiRblKSZSGpTZWlDoW1fM54cZKaZ4rnWvIfF6Z9eTVOMKIm3s1PJ7m74Th8axr7tA9XE+gzoHO98rLNebV99MOP76rDMMwVNijkSYE7Q73IiTLD2u/jDXRyhpcWpCFe+deh9rKmCtLul/9MFSslEEkG3vVjDBdw4bcMlETgCnlpcOwHvxsvsk5PwzDhIlIIpEQhnP39/ejqKgIfX19KCws9GNcjInG1m6s2nZIeNyO1QuEydFuNl4vNm6vwz0MSy9gven+8MF5AGCZ/5J8jJ+hJ6rzPBJPYNHm/Y6x61a8GFC5S53rKd3Dhtyg6/uQSYRxPSSv97KCHCACdH065IkSFMb7Zxgmc6DqBqxopAkiAdKwSh9cV2O7WTltPEHHwXtteRTd+6LN+21D0yhzq5O65g5s2N2Czv4ky2dhLjYspwkIdoqVE0EpGrqwK5QQlKLoN7uazuCxnU3C455fORcr5l7n/YACJuzrwS8lICweHYZhMg9WNDIQimXebpNy2ngTAIrzs1Ia8mWi5ctu0w2TNbiuuQMPX37GVlAVAmofDcB/RUo3hhIeFkWRgm4BMExrOGjCvh7CrgQxDMNQoOoGnAyumZF4Ao2t3djVdAaNrd0Yiav0orVGNflRFL8NYFzX73RLIBXhJNgFnf9iMBJP4MnXjzke89Trx3DxUly4xpZUlePguhrsWL0Aa+65yfGc5kIC6YZsoYSgqWvuwKLN+7Fq2yE8trMJq7YdwqLN+129a5wAfIUwrwfKt/i7b7Zo3TcYhmGChJPBNeKHO1wlqVil5GkYE0hVrcCi56JaDtIYT2ffefQMXETpVTmIFapbpw992D1O4TPTOziMz/5NPXoJ3iejkk6QipQfoRthURQpyHSpl4ETgK8Q5vXAzfQYhplosKKhCa8ECCtka7mrbqhh2vRUlTjKc1lcGZOuc+8UmqSqXDa2dpOO67XxPtmtsaDq6vsVh54OfQNG4gkc+rAbT/7imGeVofysbBRmwrwewqwEMQzDeAGHTmkg7O5wtxsqddPzKmxMtT8A9bkAkKpzbzcegw7lsDO1+RKtsSDCavzs6SC6PwAoyJ6EeDwRyDtohEo98NI7OHve3mOlI6QnOWTu+ZVzsWP1AhxcV+OLkuFl2KgMsuvdz3HrUoLCMtcMwzAi2KOhgbC5w83hKndMK3G02IugbI5eWa/d9AeQeS5Ua7DTeMzIWqcX3liGrQdaSceacVpjusJqqGFQfvd0MO7PKYl+4OIIHnj5Hd+LHNh51Jxwa81W7djuhjCVUpVZ736PW6VLuPm96x0YwsY9x4Vj5opTDMOEAVY0NBAmd7jdxrn8tnL8+K22cRsvhd6Bi8JrWglTHRrCxtwocbLPhZL/Qs13UVEuF9w0dVz1L1ns7tltWI2MQKb6zNwIRosrY6S507EmqcgopckEGeKlgp9ho1Qo6z2Iccsq/dTqceYx2zUffWZFFZbOuRYAKyIMw/gDKxoa8DommLohOG2cP36rDd+4uwK73+tI2XyK8ybj7PlLjtffuKcFn6+ytj6LhKkE3Fmv3ShxKs9FZA2WVRZljp8UjeDZ+251tMyLcLpn1e7ksgKZyjNza1k+3NYjpaD5UeRAtghDEB3a3RLmjuRO6z2IcRvf8aFLcTxeOws7Dn+U2ivHtN5lvGHJY47HgUe3j/9dz8AwHtn+Lr7572dx+w0lofFAMQyT2bCioQGROxwYtSZ19l9AY2u3lOWIKoBRNs7d73XgN9+6B0dO945tvPFEAg+89I7jGJws8xRhyk3YmBslTiVMQdd4VI8Hxvc0AUYVQkQi6BscdnUvsmE1KgKZ7DPTYVmWUehUvE0XL8Xxk8Z2nO4ZxLTSfHx54XRkT3ZOcZMZU7pWhgp72Oj8ilKl75Zur5vVdzxWmIO1tTMxvaxg3LlUvGHGmL+zq9nxdz96qw1A27i/B+mBYhgmc2FFQwNO7nCDnoFhrP3HJgB0y5GMAEbdOI+c7k3ZOHc1nRHfIOyFps6+86TfOx3ntHm7URa8KPlpjEekXKkoMU4WzLPnL+Gbd1dYhr95KaSqCGQyz0yXZVlFoaMqApv2tmDb221Izrf93t7jWH1XBZ5aWqllTOlWGWoknsCh1m78P43tpOODDBu1mlc/vW527/Un/UN4rv4kfvjgvHHKzN83tEmXJDfoEYS62hG0B4phmMyEq05pwq6ZnhWUyjuylaxUQ4zchn1RNzW740TNywxlAaBVhDKj2uTQDmM8lC1YRvAXWTANj9QL99+u7V4oqKwrmWemq7kapfKUGcra37S3BT96K1XJAIB4YtQyvGlvi6sxFedn4adf+6xvlaF0UNfcgTue2YcHXn4H/9ryCek3Vj1odFZNkq1ypup186rynXH/xvdw457jpPHpJmzNLRmGSX/Yo6GR5Jjgzr7z2LjnuKWATbEcyVqSVRUGt+FFpVflkK5rdRzVY+M2kVk1N8HpfFbjMVCJdaY+75KCHBxcV+NbEqfquqI+M6oiU9/S6Rh6Q/EqGlC9TRcvxbHt7fEhJslse7sNT/zZzZZhVBSP2rP33YrqmWWO1wgTdc0dUjlE1B40bvIDVLxifnndZL7jfecvSlcoM4+5IGcSPh0aUTzDFbiPB8MwumBFQzNGDHxja7ejtV8UuyxrSVZVGNyGF8UKaYKo+TjZzdutsqC75KdZqXTbGVzmeftZvtSNIkp5ZlRF5uWGdtxZUeooiIoUQGO8AM3b9JPG9nGeDDPxxOhxX7vrRqkxpVuoFDD6zm7Y/QH5eKceNDorPR1q7ZYO75P57jUqnN+A+l539p3H3/7L/3KlZCQATJ4UBeBe0Ui3ymcMw4QXVjQ8wm3JW1lLshuFwY0wRMlZsGoGpxL774eALZPsqXM8Ye1m7FYRFc0RpZCCASV2PFm5qW/pxBtNZ9AzcCWxXkbAP90zKDyGcpxuj1pQHG7rQWf/EPl4mR40qvkBdc0dePIXx0jHmr+1ur1ubirf9QxcVM7JAEbHvPLO67Gl/qTyOYD0rHzGMEy4YUXDI9wKjiqWZDcKg6owlCyIAnRBNEy9RwyCbDrmRYUsM6oVc7y0ylOa7RlQqxcZys3Cm6bi6WWVygL+tNJ8bccF0URPFbt1IvMurrlnBtYuniXVg0a2QpVsM0Srb61Or5ubynfUEFRg9Ju0flklSgqyU8b8y/c/Jp/DuLZfRSUYhpm4sKLhEW4FR1VLshvrqaowpCKIhs2CH3TTMS8qZCXjVony0iq/pKocX62ejlca2oXHyiqebgT8Ly+cju/tPe4YPhWNjB6XKVitk+K8LDxUXYH/bXoJ+TzVM8o8NS7IlH+lfGvdeN10VL4ryssm3AmwftlsfKW6wvK9o34r19bOwmdiV2VEOB/DMOGHFQ2P0CE4qlqSg7CeygqiXlrwZS331JCOmpuvSelBojv8xSvPgS4lyst1tbgyRlI0/Awdy54cxeq7Ki73HbBm9V0Vwn4a6YLdOjl7fhhb6k+gKG8yivImo0/Q4NMqVBLQa1yQbYboRkl3+y2nvNcj8QTpe2inZAC0MMRYYQ7W1MzApGgkI8L5GIYJP5FEIiE0CvX396OoqAh9fX0oLCz0Y1wZg45wHNWQl7BjCDaA9eat4kVQme/G1m6s2nZIeO7SgqyUeH+vwqp0Pu+ReAKLNu93TI6OFeXi4LqaQNeUMU6RoBXEOK36aEQjEPbRSCdE60SGF23eW53PeFfTGTy2s0k4luK8LDz757dqeUfdfstF77WO76EX31SGYRgrqLoBKxo+kKmKgg505kXYWWRFmyxVaDETts3bap0dbushKVE7Vi9Q9lboWt92QpLBD+6fh6Vzgplnlc7gYYD6bKjKNjDa+wOJUU9HMiX5Wdh0n7NQr0sQpo73p1//LKpn6Csf7PW3XMf3MMhcM4ZhJg6saDBpg47N243lXkbIkjmvn9gJF0urYniZEJL0/Mq5WDH3Om3XVRVqrM6n47wTEZlnI6ts//RrnwUANH7YBWA0pG7BjVNJ74AuL29YPWBu0fE9TFfFmGGY9IEVDWZCQVUWrCz3IqGFghuPgFucPDnU+1EZv6oHScTe9z/GI9vfHff3sHmQ/EZGAJV9NrLKtqpiaqBDmOYwIWvYo8EwjB9QdQM2cTAZgZuKNkayJ3BFSPHq+roRJbIDo/kEdvcVgX3yrtvrfvfNFoyIOt5ZnHfjnuOW/+bmvOlOXXMHFm3ej1XbDuGxnU1Yte0QFm3ej7rmjnHHip5NAsCTvziGhlNdY/NoJBJTcZuUbxQWWDH3Oiy8ieYJMWMkWcdM444V5U5oJeMvXjs6ziNoFH6wWi8MwzBewlWnTHA+RXritqKNXWWYqQXZ6Hbo8C57fd1Qqu8YMrnOsrm6eyJ4fd50pq65w7LPiF3VMMqaOHt+GA+89E6KpduorOSkwomqwfn9/UyXZoh+zIsXDREZhmHcwopGEuxyTl90lMu1ElrumFaCz33/gKeN9NxA9aR8tXo6ftXcqa1srlcNF8PYyDFIRuIJPPm6dedrO+FRZm7MysoPH5yHJ18/hrODw+OOFSmmQX0//SznraIw6JoX0bVZSWcYJoywonGZoBu2Me7Q1fDOSmjxspGeW6ielMWVMfyViy7ZqteV9fSErZFj0Gzdf8pS6DewEh5l5sasrBjK9tb9J/FqQ3tKZSknxXQifD9VFAZd80K5NivpDMOEEc7RgHfx5pnOSDyBxtZu7Go6g8bW7sDnx6uY7TDHghueHEoOhmxcvNPzlbmuV/eT6YzEE3i1wb5ZYDLJwqNoDs0kKyvAqLL9WO0sHFm/GDtWL8DzK+dix+oFOLiuxrY/RqZ/P1VyH9zOi/H+bXzzAzxMuDYr6QzDhBH2aIBdziqENczMq5jtsMaC6/LkmBE9X6+u69V505HDbT3jelXYkSw8Os2hE2ZLNzUkKdO/n6q5D27mxanMs921dYSPMgzD6IY9GmCXsyxBVDaR8Z7oqGjj53ndotvjQn2+E9GD5CfU701xXtY44dFuDp1QtXRn+vdTRmFIRnVe7N4/0bWdqudNNCWdYZjwwB4NAO1dA6Tj2OUcTGWTsHpPwoQuj4vs851oHiQ/oX5vHqqebjkvxhweau3Go9uP2npH3Fq6Mz1kR1VhoN5v17kh7Go6M1Z8wu79o1zbrnqem8IPDMMwbpjwikZdcwe21J90PIZdzlfwO0xiIiSZ6kJH9R2V5+tV1R+35033UtWiUBgAKMnPwpqambbnmBSNoHpmGZ7981sdm9u5sXRnesiOqiJFeX7RCFL6xpQWZKFngBYuZ3dtVtIZhgkTE1rRMKy3FNLB5eyHYOVnmIRX3hO/BNB0FHQzJQwmSC+YrucuyrWIANh0362kcxuW7g27W9DZr9fSnel5NaqKFCVXxhwBKqtkOF07HfNhGIbJPCa0okFpbAUAj9fOCr3V3C/BSneYhJVQBow+m4ZT/6Hde+LXPFldp7QgC8+sqMLSOddqu44sIiE4E8JggvSC6V5fdqEw6udMnZVEQk8lqEwO2XGjSNnNSzQyXsmQJROUOIZhMp9IgrDT9Pf3o6ioCH19fSgsLPRjXL6wq+kMHtvZJDzu+ZVzsWLudZ6MQYf1006wMs6iU7AaiSewaPN+oXXv4LoapUZWxflZAODYO8AM9fnsfb8Dj2wf32FZ9zzZPQ+Db95dgaeWVjqew2ldqK6ZuuaO8RbtwlxsWH5FENT5fHVDuW9j/HYKqpfj9/I9dPud8OsbkY5ePCpulMjkeek6N5QSLqUK56kxDBMkVN1gQns0grbe6rB++p2crStMwk7wkVEwDCjJ/Hvf/xhrdrxr+W8658npeRj86K023PbHJVg6x77Jl926wOVxyq6ZuuYOPPzaeCWrs/8CHn7tKF68LGiGNQyG+q4EVWrV6/fQTSiMn9+ITA7ZcZP7kDwvu5rOKF3feB+/Wj19rJytlaKdqYoewzDpyYQub+tHczC7sqy6SsSqll50g9vyoxRhXIYt9Scd56uuuQOPbH/XMVRB1zxRw/HW72q2LNHrtC4efu0oqXGXmZF4Ak++fsxxPE+9fmxsPGErLyvzrqjmmLhtPhnEe0glzGNLN3SUuC4ryCEdV1qQnfLfsaJcvPjgPPz3L91iee265g4s2rwfq7YdwmM7m7Bq2yEs2rzfk3LjDMMwVCa0R8Nr662dFXb9stnYuOe4FgtjUMm7bqx7VGGcitN8yST8A+7nifr77oGL46zqlE7CVojWzKEPu4Weot7BYRz6sBvVM8oAhKdyjaw1XsVLqcOzSH3u9S2dvlv8MyXBXxeBW/2Jl3r+v87F5ElRdPZfQM+nQygtyEZRXjZG4glLJYOr8zEME0YmtKIBeJfE6PThf2S7dQiPgUx4R5DhX6phEroFGqf5klVqZOfJLLRQrZXA+Hlwo4A5zUFjazfpHI2tVxQNIBxhMLKhULIVgnQJaNR180bTGTy9zN/Qs6BDRIPE/H72DlzExj3B9uTp+nSIdFzP4EXkTI7ib+v+zXG8QfQ2YhiGoTLhFQ1Av/VW1TJthiKQp2MNe68EGqv5klFqZMPkrCzhscJcFORMwsDQiPD35nnQoYBZn4O66nQFs+lD1hov46XUKaDNryhFaUE2egYuOh7XMzCsPT9ERDp+I3Rg9X5a4bfVn/r9a+8axHP1J8Y9s47LYZRra2dhTc2MwPKSGIZhKEzoHI1kdMTeGugKDaJsSIZgBYz3yIe1/KEoN0YVq/mSUWpk5skub+CT/gskJcNKqdGhgFklxi+8scziyPFQj/MTFWs8NcdEZ+7CpGgE/2kurWyx3yFK6fiNcIvd+2mFIch/980W6dwcFSi5gbHCHOw4/JGj6r+l/gSqn/019rV0kq4bVGic2/wnhmHSG/ZoeICOD/rUgmyyhTGdatgboQxLq2J4uaGd9Bu7ZlfJ/25nkaV25926im7NpFjC87MnYeCitcIRgbVgRxmriC31J/GZ2JSUe1lw01QU52c55mkU52dhQQi7cKta4yleSt25C4srY3iFsKaDCFFaUlWOF+6fh+/sak7xunj1jQgyD0Kl2ISfVn+K123V/Buwpf6k8Fyd/UOkNQcEs+72vv/x5TV35dvDZXkZZmLBioYH6Pigr5h7rdTGHHTyLkWwsAplMDeusuqjESvKxfLbyvHjt9oAyCXtU7rzbl11u22pWSsolvCBiyN4/E9n4h8OnU4R7Jw2WZEAQhGcrMJ9JkUjePa+Wy3L2xo8S+wwbYVsMrWMEOqmYIMox0R37oKhFIl6eAQRolTX3IGNe1pS1mJpQRbWL5utXeALsis74M6j7JfVX2QcGroUJ58rAiDi0AAwqHW3aW8LfnT5m51MByeoM8yEghUND9BhmV5cGZP+TVDJuxTBwi7p1mgXmVwbHoClIHr7DSVKXhvd3ZWpwkjFHxXgd39VK6X8iQSQ/9X5KbbUn7D9vZ1ldklVOV58cB427P4Anf1XklFjhTnYsPwWT4oeWAkTKkKoVx47kWJg0CvIuzBIVoqAcPUgsXpGvQPDeHT7u/hhNKJN4AtD9SM3ykLZVTlobO12ZayhKtJOxiFqAQdgdJ3Ztd0Nat3tfb/DUskwSIAT1BlmojChO4N7ibHhAvIptuUBdV5WgdJxeHFlDNXP/jpFwDUfS+3W7CYkg9pZWnRMY2s3Vm07JLzejtULXDVZsxqH2272OkNaZLtwu+1O7UU4zt73PxZWgZN9H4O26Ccj+4zcvl9BdWVPhvp+JhPBqDc1Z3I05Tsl+9x0PXtjLmWMVfnZkzBoCtcszs/Cs/fd6uu6G4kncOf36oWFEQB330iGYYKFO4MHjJMVXTUMKGxQq/b8W8c5WyXDOJYaH+3GayP6LVVI8KOKj91Y3Yb76PR6ySRTz68odV3hyQuPXQmhHLFs7H7QYYzJyDyjvvMXXQnJYal+JOtRNkLyei1ymGQ8Mbq9OSvvvJ6Up2FgVjIAoE/QP8cLDrf1kJQMYOL0bmGYiQxXnfKQJVXlOLiuBjtWL8DzK+dix+oFOLiuBk8trQxV52VVqILFc7+mbZZBbjoy3aeDrOLjRzd7KjLJ1GHtTu1VMzudVezcQB33vpZO8vp3ey2v33On99OKWFHuWG6YGWpFKkpJc2pVK6PDt4yS4YRf1bQMZJ5vJvZuYRgmFfZoeIydFTZMVk9V6ollFakEtemo9FMIqtIXJWF85Z3X45fvf+z5mpLxroRFCDWT6c3sqOP+56aPXfcTCdNcOnmU1y+bjZKCnLHvbjyewAMvv2N7LoonRpc3Z+/7HXhku33RBlmo19UZlkh9vqUFWRnXu4VhmPGwohEgQXZeHokncKi1G40fdgEYHceCG+mW17rmDnJ5Wgp+WeGtUBUSglIW7YSoostW2WRLqGpuAEXwkAkho3oq/Bbo75hWMq7ymZloZPS4dITyjEoKshxDXajCatgaA1Lfz11NZ0jnc1KCqQryry57hqzGsff9j7Fmh3O+kFWVPqey1ZTx6c4pohZZeGZFVVoZ1hiGUYMVjQlIXXMHnnz9WMoGtfXAKXLioOEB0EmQeSlurO1BKYtmIcqui7BKfDhV8JApPRs2IdTgyOleRyUDGBXsjpzuTcukVcozunfudSSjgeg9cVOK2Cso76cOTwz1HP/QeBr/0HjasiqfqCgBMLoW1y+bjbIpOSRvjGh8XlQJS14Hdq/WN++uwNI5tAaXDMOkN5yjMcGoa+7Aw68dtbSCnR0cxsOEeGxdnc8N1tbO9DQvRdSZNkwhHzIYQtQX51yLnb+z7iKsEh8uE6tvNIIrKchO+XtJQRZeuP/2sefqVV6L267DYQ3p0omoU3otsZQ2Zf1Tu7KHCR15T6JzmEl+n2QNN2VTcsZyfxbcNFV57DrzSswY66DctA6mFmTjB/fPw1NLK6XPyTBMesIejQnESDyBDbs/EB4nisemCl1f+ZNp+JcPPnGs/lJelIs1NTNJ5wOuhPR09l9Az6dDKC3IRqwozzZkiWKdD6u1nYqu+HCVXBWrRnAA0DMwjI17jiOa1KNBd16LjpCPMCqZTmFrqrH0TmFEI/GE1vWvK6TQr+7iOjwxlMagySS/T1Nys6QMN8lr0c3Yva4Slgl5iAzDuIcVDQF+bXZ+MCqg25eZNRBtLlSh6/O3lGPBjVO1hVJYCZYGVgImNSzA65APr9eQLqu8rOBhN78GVh2AdQkfukI+wqZkOilPAFwpVnZhRF6sf7chhX73ItGhBNudww7jfZJpzmflnVAdux/evCDzEBmGCQesaDgQpsZbOpDZMJyOlRHOJkUjWqzYskItJSzg6TeO4fxwHLHCXCyujHlSRcqPNdTeNUg6TqQgyggeTvNrxuwFcSt8qHhe7AhTXoGT8vTwa9aViHR13A6qipoVQXUX16EEJ5/jV80d+IfG04Rf0UOT7NaiytjD6M1jGCbzYEXDhqA2Oy+R2TCcjpUVztxu4FShNoErAiYlj6RnYBhr/7EJwBXh/+C6Gm3eBz/W0Eg8gR2HPxIeFyvMwfyKUkfviozgQc3T8aJJm+6QjzAI2RTF2ApZxcqJMIS66FQiVdBhgU8+B0XRWHhjGX5x9IxjiGk0Amxd5fy9kB172Lx5DMNkJqxoWBD0ZucV8ytKESvMEYZPUUrNygpnbjZwmeRzQ8CUdffrViD9WkNGvoqIVfNvwL6WTkfviozg8cv3P5YaZ31LpzZFw4uQj6CFbDcFFnQqc0GHuoSlu7gOqO/TgpumCvM7tq66HUvn6FV4w+TNYxgmc5kQVadkK9OEtYuxWyZFI9iw/BbhcdTNxa7zuW4LsKzSYAiKMritsmLGrzVEnZu+88PCalKijsoJAOuXja4N2fl9uaGd1F2aglchH0F289ZR1SqdK2MZZFIVMJlKa3bVusqLcvHig/M8KwWbjlXCGIZJLzLeo6ESI59Jm52ZJVXlePHBeeP6aABASX4WNhH6aCTjhwVUVmA0rNFO1kQrdFpL/VpDujs/ixJaN+5pQTQKLK6MkZpyJaPLC5iJIR864uAzIZY+0/IGZDy/QTYADTpkjmGYzCWjFQ3VGPlM2+zMGBuLm87gfiKjNJQnJaHLlJtMRocC6dca8qLz85KqcsTjCcsGYsnvjqgplxmd4T2ZFvKhohgbpKNiZUe6KJEyleTMgnzZVTlAAugaGEJja3fKb4MKXQs6ZI5hmMwlY0On3DQj0tHAKexMikZQPbMMf/n5m/GXn/8MqmeUhVYwSw5BcCKC8UnoVmEBIk5+ck6p+Vsy8ytKUZyf5XhMcX6W6zVECc+4d+51pHMZCtZIPIGNe45bHpP87hiVusxNuSjXcEumhXxQnqPTv6WbYmWHV40ddVLX3IFFm/dj1bZDeGxnE1ZtO4RFm/c7hgYagnzO5Cj+8ufv4YGX3xn3W7fNJxmGYcJIJJFICL9m/f39KCoqQl9fHwoLC/0Yl2saW7uxatsh4XE7Vi+wtOQY3hDA2mKqU5jJpF4dXiLbR8NgrMlf33ls3HMcvQMXSVZj8zllntNIPIE7ntln2YHdoCQ/C//vdxaPO4fKenAKESzKy5Z6F2TfnZF4An/f0GarnFj9RheZ9u7o6KORCXMS1tLie9/vwCPbx5capuwLdh52wytXnJ+V8r0Iw/0yDMPYQdUNMjZ0ym2MvF8lL8O6oYaR5BAEamdwIDUsIC97EjmcKjlMCJBrlna4rcdRyQCA3sHhcaFEqutBZ+dn2XdnUjSCr1RX4KWDbdpCXqjCcqaFfIji5UWx9JnyPQlj3sDe9z/Gmh3jwwkBcSU5iofd/L3ouNw/5Qf33+5ZMjjDMIzXTHiPxk+//llEIxHbzcxL66CThQvQ6zVhruDkGTETwailsddCaXB6TruazuCxnU3C8z+/ci5WXA5t8nI9yHjoVL2BuryAmSIs+w1/T7yjrrnDtmmiGSuvHfWdssLooaG7vC3DMIwbJrxHg5JUWJyfhSd+1pTSV8Is0OiymJoVljumlWRkrw4KQYd2JFtLG051YeuBU7bHJgBLJcP4N7vnJJsM7nXfDRkPnWpCrugaiytjaGztdnzuYW+UqbJ2/VjvQff+GYknQlFcwou5NuaWipVH0E1uUjwBPLL9KF6M+rP2g/4+MwyTWWSsoiGqOmQnQCYLNLpc91YW2tKCLPQM2IfWpFNjKhnCYq02FEi3yclWz2kknkA8nkBxXhbOnrd+xmZh3Y9GZdRwFDdVneyusa+lE4s273d87kELyyJU1q5f693L9SMSPOuaO8aVy9564BSK87PwrGS5bDd4NdeyzRStjAw6KhRS174bRcF6r8rGf5p7LRZXxljpYBhGmoxVNAB7C2s0MmolssIQaJ58/Rg27G5J6bqssmnZWWidlIxk0rFXhx1htFbrKlFsPCdKWJaVsO5X3w2qh05njtK/NHfg0e3vCp97mLtCq6xdP9c7dV00nPoPbUUGllSVO4YUnR0cxsOvHcWLPrzXXs61zDtnV43QTfliA8rad6Ns2e9VF/FKQzteaWjnEEaGYaTJaEUDSLWw7mvpxCsN7bZKhkECRmJeqjIgu2k5WWippGuvDjNhtVbrEACA0edkt1GbsRLWw9i7RSUh10rQiUasE+/Nzz2sjTJV1q7f6526LrYeaB373xRvjJPw/sL98/B//fID4TW9fq+9nmuZd87O0+emr08yTmvfjbJF3as6XChuHJLFMBOTjO2jkcykaATzK0rxq+ZOV+cR9d8wI+tyTyYTenUkI2Ot9hNR3X4jl8dpOywvcs65MSjOy8JPv/5ZHFxXM26T9rp3i2qNfsMDsmLudVh4k3PMvSHomJ+z06WSn3sYlS1Abe36vd7vmFYCWZnNEECt+j9QqiSt39Wckt9mh9fvtddzLXo3gVFl+gf3Owvfdr1fRP12krFb+276RgHyexV1DzRQ6T3CMExmMCEUDcCd0J+MzKalankNS2MqnYTVWg2Im789e9+tjr9ffls5jpzuFa6vs+eHEY1EHC2egP5GZX5s8m69d384dyG0jTJV1q7f6/3I6V6hp9aMkwBKEd67HbrNm/HyvfZ6rp3eTYOtq24nVYVaUlWOg+tqsGP1Ajy/ci52rF6AI99ZjB/cf7ujohgBMLUgG5195y0NBW6VLZm5kVXc7AwQToouwzCZQ8aHThno3ugo56NaXksLstGTtGnr7tURBsJqrTYQhQl94+4K/OitNsvf/vitNgyP0KQ8p3XjRe8W1XAK2TAHt4r81VNyXSWhq0C9R5W16/d6V/2+2eW96P5eevle+zHXdu+mSs6CVZ7U0jnXYisils0AgSuK3dqfvZdyXeOb9SuisG73XFXmhrJGwhoyyzCMf0wYRUP3Rkc53/yK0nHdXs0U52fh0FN/iiOne9MidlU1ztawVouE0V4JK6kqdvdglyg9Ek9g93vOG/mupo9J13ZaNyPxBIrysvHtJTeTmxE6obrJqySUuvHeJVffCmOjTJVyv6olglVx+30zPz/q+Upseswk47UXyq+59rqJ4NI55XgxOn7tW2E08xPtL2bsnqtKrhpljYS5wAPDMP4wYRQN6of0minZGBpJoG9w2Pa4kvwsbRtnBP52N04WsssKcoAI0PXpkHKiL9WiNykawfpls/HIduvOugYb97Tg81Xy1i2qAqRyD9QwktKCLPQOWK8bkbDjNC5VQUZlk1f1gKgIunZeCopA57aEp8w9qnha/PbOuC1qYH5+VOGd8k57HQLq51x7/a1OXvv/2tKJVxvaHY+XUTKcFD6ZZHUZxS3MIbMMw/jDhMnRoMTZrq2dhd8+VYtn77vV8UPbOziMfS3ixPLDbT3CjaB3cNi3BGhzrP4DL7+DB156Z1zcvlXisI4425KCHOExKkmb1BwE1XugboL3Xu7wLZtj4VUMs+wm7yahlJowm4yRA2OluDglobvJOVG9R1Eej9U9qPxGFcr3zQq7vBdqztDSOdfixQfnWSY0l+Rn+VLaFvB3rr3GKF5C9ZJSWX5buaOyZTeHycgqbmEPmWUYxnsmjEcDoMfZLq6MObqkqXGlYbLmUEqvdtq442OFubhwacR1nK0X80G1TruJFaZugrWVMdxZUSoV9uNlDLPsJu8mzIFiVd66ah5KCrJdhZ247Zfg5h5VQme8DrcxX8vq+2aEN6k0X6SEsRn3GHRncD/n2msOt/Wk5O3p4MdvteH2G0qElbGMOaxv6cQbTWdSej7JhjD6HULIMEz4mFCKBkDbjESeCGpcaVisOdSKQMa/m+89uWmh3e+CmA8ZId2NgCmzWU6KRqSEHS9jmGU3ebeKoNf5FTqUMrf3qBI642dopFNndpXnItNNvnpmGapnlnl2bxT8nGvAu94QXhmfKEYLYw4X3jQVTy+rdHV/focQMgwTPiacogGINyNdlvewWHN0lfYV4fd8yAjpbp6p7GYpI+x46fWSHbcORdBLq7IOpSwsyr+XWK0/N8/Fb+E9XXCTsybCi/WnYrTQ8ez9KvDAMEw4mZCKhghdwkhYrDl+Jdr5PR8yQrrsMzVbKhdXxlxtlnaWT68FX5lNXpci6JVgqkMpC4vyHwRhVRjSsWO0XQifUQ3qB/ffjqVzrlU+P7VKnwpB9SrKlLA2hmHkYEXDAp3CSBisOX5YZ6cWZOOOaSXC42TmQySAlBGSy43jZJ5pXXMHNuxuSQkZixXmYsPyShxcVyO9WTpZPhdXxrSsNae5kgl/kVEE/RYQdShlYVH+/SAdBHgvvQJeQQlFXbPjXWxFhNTEz4rkdaraBNOOoLx1YVV0GYbxlkgikRB+x/r7+1FUVIS+vj4UFhb6Ma7AMSxWgLUwIlvJJMhNfySewKLN+5VLX1KRERBE80ERQBpOdeGBl94RXuunX/8sqmeUkZ4pADz8mnXTLADSVXTsLJ/ma7pZa7qFNcr5ghAQRevYUMoOrqtxpfyFVcCVIR3uj/JuhGWsyTS2dmPVtkOkY91W3apr7sCTrx8jl7GNRuDYIb44PwsvrJqHBTf5m6jPMEzmQdUNWNFwIB02ayp2QjaVCEY3qZzJUXT2D9keA7gXEKgCyK6mM3hsZ5PwfM+vnIsVl0vPirwLdzyzz3FTL8nPwv/7ncWkTdoQjO3CH5IFY6tkXfNas1LO9rV0ahXWjGt0nD2Pd3/fiwSAiqkF+PLC6ciePFoNO0gBUacBIB0s/iqkgwAv826E7ZlQvzvA6Dt8cF0NACivtZF4Alv3n8SrDe04e/7Kt6n8ch+TkoKcsfP2Dgzh0ct9TZy+8+m6jzEMEx5Y0dBEJgkjVkJ2MkZZW7uQkh8+OA81N1+DBZvqU0oewnSsGwFBRgA53NZDsizuWL0gxWVv90ypHpK/WjobVxfmCNcD1fJpjM9prVk9u1hhDi5cijuWYZZ5Fk7rI1kZC1pAzCQDgAjZ70+6CPCy74ZO3H7TZTwawGh/pp2/+8j1erUbt/nvvQMXsXGPc3fxMCmdDMOkJ1TdgHM0BGRSXKk5Vt+qM7ioDGZja7etkgG4K8cKyFUWUs2lsXumja3dpDF+b+/xsf/tJDDIJi/bjcu2d4SNZ8lA5lmI+qx0XO5T8XjtTM/K8VIR5ZxkinHAqy72Xj8fCkH1GNKhpMomam+pPzHub9S+L8lYfR/s7mf9stkoys/Goz89muIFMXDbo4dhGIYKKxoZip2wJVKcREKc1wKCzPn1J/bKB5V1jgngszC9LF9bRSnj+XX2ncfGPcdd5daI5lSmz8qrDe1arukWJ6UsE7wdqo0Jw9Qk1Ikgygy7bfZoYHx3nHK5ROgQ9J3u59Ht7+Lx2lmWSkbyGMKgdDIMk9lktKKRKZZNO8z3d8e0Ehw53Yt9LZ3456aPUzrLyghbTsqI1wKC7Pl1VvVaeGMZth5olRqvscknWy3dVpQShbjJIppTmT4rToKLzDW9QJcgGTR+dLF3+3zcflv9LjOso9ljMkuqyvGD+2/Hmh3vOiZfO+FG0Kfcz6u/bSOdK2ilk2GYzCZjFY2gLJt+KTdW9+dUcUSXsOW1gKByfl012hfcNHUsT8UNyXMt63ERhTDJQH0WsoJGcV4W+s4Ph6oPhW5BMkj86mKvio5vq99lhr0IKVs651psRQSPbB/v2TDfkxMqgj7lfqjfsXRuTskwTPiJBj0ALzCENfOH2BAA65o7PLvuos37sWrbITy2swmrth3Cos37tV/P7v6cLGvGP333zRaMqJrgcEVAAK4IBAY6BATV8xtemBVzr8NCxdKNk6IRPHvfrQqjTiV5ro1Gf7Gi1M08VpQ7TumjhjDJQHkWsoLGQ9UVANw//5F4Ao2t3djVdAaNrd2u1qWMIBl2dHSxB7x5P3V+Ww1vJOXdcItXIWVL55TjxQfnodziHtbWziSdQ0XQp46zOC9r3DowiGBUQczE5pQMw4SHjPNoBGXZ9Ctsw40wqism1+smhEE2OVxSNSo4bNj9gTDZ2onkuaZ6XGRCmEREI8DWVbeT5kpkBU+mvCgXa2pm4DOxq1w9H90ex3TJTaDgNvzJ7v25pjAHq+bfgKFLcTS2dkt7/bz4turyRoo8yV6GlNndAwDs/N3vpbxLVI84dZwPVU/Hc/UnM745JcMw4SXjFI0gqq74qdzoEEZ1CFu6BISgzp+MeXNfXBkbV53riZ+/h0/65RseiipKJV/75CfnNNzNKPEEUELsnD4pGsH6ZZWWISDJRHBFMHHzfLxQyoNILvYKHeFP5ufT3jWIHYc/wpb6k2PHyCp2Xn1b3Vb2oyitXoeU2d2DTHiYjPJNvZ81NTPxmdgUZaNApuc5MgzjPRmnaARh2fRTudExbl3ClnlzNUJhdG1KfpQWpm7uG5ZbCwwinOZad9K3Gbu1Yld33wmrOVF5Pl4p5X4nF3uJrvwF4/nUNXfgufoTrhU7r76tboRZqtLqd06IAdU7K6t8y9yPqlEgUyq4MQwTLBmnaARh2fRTuXEzbi+FLad67iUFOejsv4CeT4dQWpCNWFFeKCxjMpu7ncBgh2iuVZO+SwuysGr+DXiBUB2rzMKjIavcfOVPpuHzt5Rre15eWsX9EiT9sPLqCh9UUezs7s+Lb6sbYVb23oIKyaT0fVFRvmXuR9YokCkV3BiGCZ6MUzSCsGz6qdzIxNMn46XVzm5T6ui7gEe2v2v5m6AtYyqb+/hwlAFsUYh/dpNn88yKKny+qhyvHz0jXANP/Pw9bFgutpraEQHwLx98gvVfvEXbmvFSKfdDkPTTyqsjfFBWsXO6P9VyzXa4FWZVlFY/QzINRIqpG+Xbi/vJpApuDMMET8YpGkG4yFWUG1WrqNP9OeGV1U5VaO5IEib83vgB9c3dbBlUiX92k2dTUpBDzqn4pD91jmWfkxf5TF4r5V4KkkFYed2GD8oodpT70/Vt1SHMqiqtqiF/qvlIIsXUrfKtO8Q0XbrLMwyTHmScogGILZuLK2Pacwm8SvqTuT9zH43SgizcO/c61FbGPBPe3QjNCQBPvn4MG3a3oLPf3zhgXZZ1FcHWTQidIRCKciqAVIFtSk6W8nPSmc/kxuNIFfa8yO1RFYyDTqalKmxlV+XgL3/+nvD+Dq6r0eI10iHM+uVJVv1eUxXTsBUyyKQKbgzDBE9GKhqAtQB4x7QS/PB/tuLJX+xL6XCsQ7D1KulP9v6OnO71Vahxu9mMNpVKbSxFmQu3ApzOzV1WsHUjMLR3DeC5+pNkz4QhsDV+2KV8TavxeuGRc7KKB52YqiIYBz1mgK7YIQHy/enwGukQZv1qTqjyvZZRTMNWyCBsig/DMOlNxioaQKoAWNfcgfl/U2/ZLZUq5IuEK6+S/ij3Z6DTkksRJr3YbERzoUOA83tzT57LsoIcxApzpcrlGuPZcfgjxYZ+8gqn3Rx45ZGzs4qHITFVVjAOw5gBumLXNUDrGSMq10xFhzDrdZism++1rGIaREUsO8Km+DAMk95ktKJhUNfcgYdfs49npwj5VOHKaQNOp9hX6v2qJqeLsJsLXQKcn7k8VnNZnJ81tu5E82aMYOWdN2BL/QmlMSy8aSp+cfTfyc/Jbg689MhZKbJhSUyVEYyDHLOVcYCi2DW2dpPOr8uwoEuY9bIAgJvvtaxiGmSTUjNBlQJmGCYzyXhFw9j0RThtGrqEKy9jX3XGgtspZlb3q5qcTiV5LnQLcHabe0lBFp5ZUaWtSpHV2um77Fkrys9K8bIV52cBQMrfDGFj6FJc+vqGwLbgRnurqRVWAo4fHjkzYVDOR+IJxOMJFOdlpYRcJpMsGAc1ZpFxwEmx023FFn2PdAqzXhUAcPO9VvHYUDzifuX7hEnxYRgmvcl4RUM2Wdm8aegUrryKfdUZCz4ST+DJ149Z/ptT2VeZHhMyJM+FFwLckqpyxOPAd3Y1o2fgIgCgZ2AYG/ccR/Ry7X0D2Y2esnZyJ0fx069/Fl2fDqHsqhwgMboGewYuovSq0RAr4zpUq7OBWWCze07J/U6c7o06/7892YUTfziH0z2DmFaajy8vnI7syVGpsRsEnZhK6TtinucgDApUY4jde6FT8K9r7hhX4CFWmJtSahlwVvTvnXsdivKyMRJPaFNaZXHzvVZV3OzuI4h8nyBKATMMk3lkpKKRvBmf/ORTqd+aNw2dwq0Xsa+6Y8G37j9lmcdiYHe/VpuS0XHaav5ihTm4cCmOvsFh4VwYz/NXzR2ke5AR4OqaO/DodvH8qWz0lLXT2T+EaCSCnMlR/OXP37M8P9XqbMbK+uhGeKDO63979XDK+L639zhW31WBp5ZWkn6fTJCJqdS+I+Z59tugsH7ZbGzcc9y1MUSHFdvWG9p/AQ+/dhQvmr5HyetxX0sn/rnpY/QMXMTLDe14uaE90H47br7XuhW3oPJ9vFDgGIaZWGScoiHb+TiZcotNgypcdfZfEJbM1R37qjuUZSSewKsNbaRrW82L1ab0+apRIcKqM/i+lk7hXOxr6ZR+nlQBjjp/8XgCj25/V3qjp66d+pZOvNLQLjy/aP0kAKytnYnpZQWelH+lzqv5PuIJ4Edvja4rWWUjqMRUSn+Y4rwsvPDAPCy4cWrKPPttULBrimkgYwxxo4g6eUMNnnr92Ljv0aRoBH3nL+JVwjvgJ26/1zoUt7DkKDEMw6iSUYqGbOfjZCKw3jSowtXGX36AngFxyVydsa+6Q4kOt/XYxqCboc6Lk1ArmgsA0p2sZQQ46vx9Z1ez0kZPnaM3ms6Qz+9H7LRdeI7bxP9tb7fhiT+7WSqMKqjEVErI5dnzw4hGIoEbFKhQFV9VRfTQh92O3lAA6B0cxqEPu1E9o2zsb2EWpt2+b27Dj3R/44Pu68IwzMQjYxQN1Q7VAFCSn4VN991quWlQhatkJQNwtsTpin3VHQtOPa44L8tWmJfdyOzmAgAWbd4vpWQAYgFOJazO/GyTcdroKZbt0oJsdF/ODaGe3+vu104hYm4S/+MJ4P/5bTuqriuSGrcuy7AXTRXtjvPToEDF674H1Byi357qQjQSGXsW8Xgi8IR/J9y+b27Cj3R+u8PQ14VhmIlHxigaKptxcV4WHqqejjU1M203DUq4ihUiS5xhITY2r8NtPYE2nZM57qHq6colgO0EPvNG3NjaLfU8KQKcm7A6EXahZCLL9oq51+KVhnbp83sRO02NBbcSoPOzJmFweER4jS37TqQcRxV03Ah7KgKWjnfGb4OCHf71PaCpnn//23a88D9bx/47P3sS6XdBdqIOKldB17c7LH1dGIaZeGSMokHdhNbccxNmXjNFatO3E65UrNEGuprOFZvKo5opybf3PlidT+S9KcnPwpqameP+TtnIAJDvmZx4vHAavlBVLnyWKmF1FI+Dgd1GL7JsF+VlkxQNr63RMuErVgJ085k+fG/vceF1zMqIjKCjIuypCli68ix0CKgyzz7IvgcLbyzD1gOtwuMGLqaugcGLYgUVmJidqHWswzCHpjEMk/lkjKJB3YSqZ/yR0sZvJVx19p3H2p+9J/ytWWj207okI1iLemJEAGy671alpmpPvX4MvRJd2anP8wsOJTsp47PDuMONK6qwcU+Lq43eybI9Ek/4kuwsCh069KGzB8msNJsF6DumlWDTr44jLhlPpUPQsbs3NwJWmJqWUYXN9csqx1V587PvwYKbpgoNHyr455EJHzrWYRh60TAMM3HJGEXDj+o0ZuGq4WQX6XdlBTlj/1undelwW49wUz87OCzdV8Ku14KdwELZyKyUDOPfrO5Z5/NUCatLFtCiUbgWOO0s234ItCLvWV1zB578hXO1IAM7T1P25ChW31UxVl1KBjeCjtO9FeVluxKwwtK0jLpGllSVj1V505m7Q81vmRSN4Nn7brUsb6uK30pdGHG7DoPuRcMwzMQmYxSNQCyQ1FMlHafTuuTVBiIbW+52g7K6Z53P021YndcCp5fnF3nPvnF3BX78VhvZ2+PkaTJK1257uy3FsxGJAAnCBajPyRB8910uC2ymo2+0Z8NX/mQa6XxO19WZeO+m4g91jejOJZAN8VxSVY4XH5yHDbs/QGf/0Njfi3Ino+/CJenrcyfqUdysQ6970XAlK4ZhnMgYRQPw3wLZ9emQ+CDTcTqVA682ENmNQ1fstHHPxvWHLsXxeO1M7Dj8UYrQIvs8dYTViTZ6t5utrCBBuR6lLOq2t2lKBtWD9NTSSjzxZzfjJ43tY53BZ109BV9+9bDwGpTnJJPQ/w+Np4XHUK6rQ3jf+35HSvd5QD4nS4fSI7NOVUM8rcYZTyTwwEvvkMdJzb2aSKiuQy+9/VzJimEYERmlaADelv40oyLo61QOvGoMJrtxuO2vYHD1lFzL68cKc7G2dhaml+UrPU+vE3t1bbZUQYJ6PUrImExOBdWDlD05iq/ddePYf+vKQ5FN6Bfdm1+x/5v2tliGlHUo5GS5UXpk1qnbEE/zOI01QA1h/PwtMdfKHVvaR/HK28+VrBiGoUDvnJVGGJvcirnXjSWueoEhwNqdPYLx3cZVfmOHsYEYvzOfB5DbQIyNwywMGBtHXXOH0jgiAIrzs4T33Dtw0fL6n/RfwHP1J5AzOar0PHXPUzKqc6aKzPV0xlw/XjtLWWjQMf9u+uRY4Vfs/973P3bMW0lgVGAfkc2il0R2ncqEeFIw1gB1pp/4WZOrd6euuQOLNu/Hqm2H8NjOJqzadgiLNu/X/j6GnZF4Ao2t3WPe4WsKc1L+PVaUq6QQULylfqxrhmHCT0YqGhSMD/CupjNobO1W+iCqCFC6hV4jXCxWlOoBkd1AZDYOq7kTjePZ+25NuUcD47/XL5uNjXu827hU5km0RvzebGWvp7Mc6PSyfFe/d7tO3TatKy3IUrquG0biCXxnV7PwOBmB3eladmtVZZ16kf9lrIHi/CzhsZ/0Dykr6nZKlZG7s/f9j6XP6YSOvcQLzMrWlvqTACJYWzsLz6+cix2rF+Dguhqld0C3IsowTOaScaFTFHTGlarkhejOJdERLkbdOLbuP4Wdv/vIdu6cxiHqJ+F1CUaZedr7/seXY+qvVMsyrxG/y0bKXo8S0kZN1NahtLhZp269M+u/eAtihbm+htEcbutx7CqfjJv7E33PVNZpcqU8J0Trwhy+tLgyhsWVMWzdfxKvNLSj77xcNToRFM/Xmh3vYisiWDrHvZIZ1hwFu7Amwzv8wwfnufomcSUrhmGoTDhFw4u4UhUBSncuiduEVeqGsKX+xLi/medOJaF6V9MZreO0gzJP1Jh6vzdb2etRYrO/Wj0dLx9sdzwfNZSPguo6davoxApzfe8RIPPcVe+P8j0buhQnncsYb11zBzbsbnE8lpLf4iSEP1Y7C//btFI88LJ9griKok7NS3pk+1G8GHXn0QprjoIfDfq8rmTFMEzmMKEUDS8/wCoClO5SlG5wsyHIzJ3dPYdl49r7fgcppn5xZczVmFUSVVWu5+Q9W35bOXa/5xyaEkE4ehioFhwIstkb9XlNLchWGh/1e/Z3//k20vmMYgyihHu7EM/kNd3eNYjn6k9oVYB0H/vk68cwJScLCxTyvkbiCWzYHc5u2354Wv3oW8UwTGYwoRQNtx/gTK5i4rZylNPcUeaNcv3i/CzEL+eIeDHvsjH1qputariF6vWsPEm9Axfx6HZngVIlBMSrd0TUtd6KoJu9Gc9LZGHfuKJKaXzU7xkiIK2bO6aV4HPfPyCc22sKc7Bh+S0p64JadlhVAaIic+zZwWE88PI7Sut86/6T6OwPZ7dtPzytgfStYhgmLZlQioabD7DuWNywKS2ijYOqfJjnjjpvFEHSjWBAYTSm/qL4QIzep8xmazzv+pZOvGzRZI4SbuFmc0/2JI3EE1i0eb/jM51akI3ffOseZE+m14vwOl7dqWu94Z0JsoO3meTnZTfX37y7QjlXgPo96/p0iLRujpzuJSXc/4//MhfVM8rG/lu27LCsAiRjFacqd8nIhjrVNXdcTqwWIyPMJ+8JZQU5QGT02cnuD355h/3uW8UwTHoyoRQN1Q+w7ljcsCYQOm0cK++8nrS5Js+d7LzZXd+MVzHQKjH1lM2WYu2lhlssrozh8dqZeLWhHWeTEmlFm3uyENN1bkgoiHUPXMSR071ka6xf8epOeT7fXjI7VMq7MV6r9VFakIVnVlRh6Zxrlc8t8z1beNNU4Tql5kklNyB1U3aYqgDJPENDuXv4taPk38iEOhn3S8XuGZkNTb0DQ9i457jteymzP/gZ1uRn3yqGYdKTCaVoqHyAded1hDWB0MBu4wCAnb/7vWNoU2lBFu6YVgJAfd6M6x/6sBuP/vRoijBN+b0bqIJbaUFWyhpx2mxlrL2icAsrhaU4LwsPVVdgTc0Mxw7P1G7ayVAVLz+ST5Oxy/MJU85TMl4JY7LfM9E4yq6iVZpKPs5N2eGyq3JQPaNMu1V8SVU5fnD/7Viz411yQ0pqqJPM/doVUVB5H2X2B7/DmsL43oUtYoBhJjITStFQ+QDrTKzzWyBTxW7jEIU29QwM43PfP+C6XO2kaATRSMRSyaD8XpX5FaUozs/C2UHnkqTPWMTUW82ZqrXXLnTPSmHpOz+M5+pP4DOxqywFENmwlmSoipffZX7TES+EMZXvmeM4ZGKfLuMmzv+JnzWN5XroVsSWzrkWWxHBI9vpng1AfD8y92slzKu+j7L7w0QOawprxADDTFQmXMM+2cZhKnkddg2cdDQ5CrI5lN3cJWNY3va1dJLOaTe/XiY0upnD/OxJ+Dxxs1K19poFfNVmig0nu2wr4zgRwWiORmffedL8cE394NDVsBMAugaGxAeZjnMT55/clM9QgFbMvQ4LFapAWbF0TjlefHAeyh2+V2ZE90O937W1s8bNvdvu9rJN8JZUlePguhrsWL3AdYO+dMGuWaOxL020zvAMEwYmlEfDQMaCJpvX4WRNcVvO0Q9LjcjlvKSqHDU3X4MFm35tmThtWN52NdG679rNr1cJjU5zWJSXLfRmDF4cIVvmZQVru9hpejPFk9j5u9+76qBtnK974CLW/uw9AOI1FpbSxBMVXR4BlefoplqdH15cSigmQM9boNxvrDAHa2pmjPu72+72BjLflTCGNXlFukQMMMxEY8J5NAyoFjRjY7H7LEVwJRa3rrkDDztYU9q7Bkhjs9rw/bDU1DV3YNHm/Vi17RAe29mEVdsOYdHm/ePOfeR0r2N1JkNQLS3IIs2bFXdMK4FoL4hGMJYTQkE0h/UuvTBmZARrp9hpejPFk1oEGTOiNSbzjjDeoMMjoPIcjfAt49/Nx4uQtdKrMCkaQfWMMjz757ciYjEumbwF0f1GAGxYfovleXR59Fhht0ZHxADDMPqZsIoGFcpGavz7k68fszyHYWHZcfgjxArlBTKZ0BlV7ITwjr4LeNgkZFI3zHvnXgdAbWM/crpXmMgZT4weR4Eyh28Qq+44VZJJDsm6Y1qJo+CWjFOoi9eCxfpls7Hlv85FaUGW5b+L1hj1HWErYrhRfY5O4Vtfq55OurYfYXW6wsxUz+P2PWaF3RkO4WSYcDIhQ6dkoSTWPV9/0jHsJgGgs38Ia2tn4bn6E1LVQLxOtqXEDj/5+rExlzN1w7y2OA8PVU/HPzd9nOIBoSQk6t40KHPYM+AcNgXIVZIx+jv8+K02294kX62ejsWVMcdQF7fNFO0wwkW+Ul1xuYeIevJ9OiefpvQvuCoHSIzmIaRrtRo3FXdUn6Nd+Nbhth7LvjFm/LLS6wozUzmPm/eYFXYxHMLJMOGEFQ0iThvLSDyBVxvaSOeZXpZvu5GvXzaaJ7Cr6UzK+b221FBih88ODmPr/lN4rHYmacOMRoCNe46P/feU3En4z/P+GH92SzlpY9e9aeiyYq1fltqA7w/nLqC9axDP1Z+wLFn847fa8I27K1w1k9PVTDEZs+CiY42lY019UanRdKtWoyOPS/U5WuUD+NnTgYquvAXZ86h0tzfwW2FPx/KwYVxrDMOwoiGF3cZyuK3HsRRrMkbzLPNGPtqwyVpAoArTZQW0OvhmqELmq79tG+vXINowzRE25y6M4NXfnkb25Chpc9a9aeiyYpUUZJPr4BsJiLvf68BvvnUPjpzuVd64nZsp3oAt9Sek7sMQXBZXxtDY2o2Tn5wj/U40j6pCXBCCDaXUaFj621Cwux8j/PEH999ObhCoUxj3s6dD2HHqbr9+WSVKCrJddwZ3S7qWh+W1xjDhJJJIJISGlf7+fhQVFaGvrw+FhYV+jMs3dAg4u5rO4LGdTcLjivOycGT9YnJtdeOoF+6/HRv3HBe63GOFudiwXH4zaGztxqpth0jH7li9YEwAsdqQopHxSoaZH9w/D5+vEltMjXkBrDcNGeFvJJ7Aos37XYcffa16Ol5paJc+R/K8ucFqvQJwvLcIgGsKc/A//svcFMFlX0snuXGYodgdXFejfaMOQrAx1kPQ964Lyv1EIsBX/mQ6/kwQqucF6Sq8ekVYPQaivShdFG5eawzjPVTdYEIrGro+SFRBfW3tTDxWOyvlbyIBwRBy1i+rxKPbxwvd5mMB+c1gJJ7AHRv3kbwyz6+cixWXk7yN3xobZte5oZRwKTtyJkeRnz0JvUk5LXbzrnPTcFJcqIpDaUEWKZfDjHnedCOrlMk0DvNSyAhKsJFRrg10KYtWuBU8Ze8nCMHLK+E6rEJ7ukHdi8KscBvwmmAY76HqBhM2dMpOwFEJlaDkLJTkZ2FNzcxxf6cmepcUZOOHD87Dht0foLPfurFWcq3wguzJeKetB0ACC28swwKHkpeTohE8VD0dW+pPOt4nMD50JjnEYhexatPQpfi4niJ2864z7t8p/Gj9skps3NPi6BUoLchGt0NZXyeunpLr6eYnk8Qr2zjMLj7c7f0EWfdeJWfHq2o1OpRp2bF1BBASZheO5WYdsfVaH14XHfGTidQ/hGHCzoRUNHQLOKKchQiATffd6qq2+h/OXcCKuddhSm4WHnjpHdvjjM3gy68cHvvb1gOtKM7PwrP33Wq7+a6pmYlXf9vuWDmrOD8L8cvdp900N7Qbt92869w0nBSXaBSO8b0r5l6LVwgVdJIxrIC9A0PjrIW6BSKre7tjWgmOnO5NKTBAbRy25p4ZqJ5RZhvW5lbAC1KwUVmrXlSr0WXwUB2bW0XOrbLpZh2J5u6F+29HSUEOW7WJcHlYhmG8YEIqGl4IOE5Jfjq7Knd9au3NEHF2cBgPv3YUL9oILpOiETx7362O4TRnB4fxwMvv2N7T/IpS5dAiwD+LmZ3iIvIKFOVlSykahkiz/LZyPLr9XS3eMxHJ91bX3IHPff/AuPX4haoY6Vwzr7nKcp50CcdBCjYypUa9qlaj0+Bh3I9Mw0a375tbZdPNOqL0xVmz492UfDH2dDjD5WEZhvGCCdmwzysBZ0lVOX7zrXuwftls/LeF07B+2Wz85lv3OG5sst143X7kN+z+wLaxnyFolxc5X8OuU/SkaATPrKhyNT5gdN7Nze/cNCOUYUlVOQ6uq8GO1Qvw/Mq52LF6AQ6uq8GSqnLhszITiQBfv2u0tK1qs0XVeXDqgk5VlqzWms7mkUEKNk7N6ZLxslqNzk7Gyfcji913zmntOa0vpy7yyed2s44oXjnzT6ljSxd0fyNVOsMz/hDUfsgwOpiQHg2vBBwrC99LB9scrWiyJfncNm/r7B9ytGAa4TeHPuzGoz89apkg7mRtXTrnWnzz38/iR2/R+opY0d414HmYkRN2Hg/ZOvjxBLDtbed5cLIqq1qMKZbyiEN1MCcLvk5vYNB17+08WMl42b9At8FjSVU5fnD/7eMs+SKsvnNOa29xZcy1J8btOlLxcnmd9+MXI/EEtu4/hVcb2lK+z26/kVweNpxwHhKT7kxIj4YXlhs3Fj5D4ImZPAmxotxx4QNUS6wTok16UjSCaCTiWIXKydr61NJK/OD+eSgtyJYaVwSjSfNb6k8qW0pVoVqM7J6VW8zPxM16oghxxu2Z15CVQJE8Nw2nuii3QxIEndYyRbDRYeUze7B++vXP4qdf++w4b5YdbsbghcFj6ZxrsXXVPNKxdt850drbuv+Ua0+MWyVL1ctFGVuYrcd1zR2445l92FJ/Ytz3WeYbaXePMnsR4z1uPYcMEwYmpEdDt+VGR6y1THWlxZUxPF47a5xFiwplk3YrCCydU47PV8VwqLUbj2639oxYYbele2mNlLUYJT+rhlP/ga0HWl2PIfmZuF1P1Gf3terp2Nvc6Vilitqc0AxVEJSplpWMTiufarEBt2PwyqOzdE45Xow6e2rsvnOUtffqb2neSqd16FbJcuvZtRubX9ZjlST6uuYOPHy5hLUV1G+k6B51Vvpj1AmyKh/D6GRCKhqAuoBjha5wEorAY7VJFOdl4St/Mh07Dn+ET845J4vHCnNIgousIGC3cVbPLMOzf36rZY+HZMoJHa69SBZXTUg1npXbRGUrYdLteqI+u9rKGJ5eVmkrUMj02nC6HxGygo1TB2y/SrbqSIj3MlQleU7rWzrxRtOZlCINdt85ytpzqkyXjNM6dKtkyYYxUsams+S5EyrKjCF0ihB9G6j3yOVhg4e6Dxxq7Ub1zDL/BsYwkkxYRQPQ16PBr+o5dptE3/lhPP/rk/jG3RXC3IgNy28h3Z+MIECxkFkpdVMLsrFi7rVYfLlT8S/f/1g4LkBfFSIdFiOZEA6qMOl2Pck8O6feBjK9NozzAmrCMVWwEY0rAe+tfDotjToNHmaMOV1401RHhTIZ6torzstC3/lhZU+MDiXLbu6iCvlHflmPVZUZaklqA6vnyBby9IL6Lj66/Sie/XP70vUMEzQTWtEA9PRo8KN6DmWT2P1eB35w/+14+p+bx1kdRX00zFAFgX0tnaSNk6LU+V2FSMVzYPbc3DGthCTUGw0BKcKk23nQIcTJCjaAt4nTBpRxeV0iWXd5bD9CVajfOerae6h6Op6rP+nKE6NDybKau96Bi3h0+3gPqtPY/Ojp4kbQlzWuWD3HTGrIZyYTO4FT38Wz54d9b77JMDJMeEVDB35Uz6F3EM/Bke8sxqEPu9HY2g1KZ3A7RILA4soYFm3eT944RcKO6jyqbjKyngM7z83y28rx47faHIWuJVWjOSuUceqahxfun0dWbsx09p13/HeDNffchJnXTPFtc6eOi3qcCl54MMMSqkJde2tqZuIzsSmuPTE6lCyrufuhRY6K09jqWzpJ13LjTXUj6MsYV+wKmWRqQ75MqMpktYfdMa3E0Ttnhr1RTFhhRUMDfpQFlNkkJkUjqJ5RhuoZ7uM2nQSBxtZu8sZpdKR2EiZU5tHNJiPjOXAKefjxW234xt2j/TKcBBuqMKlzHv7qCzfjk3NDON0ziGml+fjywunInuxcbK6uuQMb9xwXjhMAqmf8ka8Ccs/ARa3HqZDJjc1k1p4uT4wXSpbM2Pa+/zFedtFbhoobQZ+a/B6B/V6TieuWEoq2uHK0KEnjh10ARtfaghvlDW9eYfftXnnnDWQlI529UUzmw4qGJryMtQaCb27mppZ9fUsn/s+fNZGUAZl5dJu8SbXe3jGtBJ/7/gFh2NpvvnUPjpzu1eK+1zEPHX0XsGZnU8rfRH1dqAngXve4sKP0qhytx6kQdP8Pr5FZe2HxxFhBGdve9zuwZse7wnPpeKZuvuGU5PeS/CxscgiPpSgr0QjQO+BcUCQsUELRnnz9GJ78xbGUqodbD5ySDiX2Cqc9zKkwih3p5o1iJgZppWhcvBTHTxrbpayzfrKkqhw1N1/jyRjDKNxQN04ra6GTMkCxRupIbKRab4+c7iV5bo6c7nUtdJld6CLlRTZp22neZc8VRPOuWCFtzVGPU2EiNDazegfvmFaCI6d7savpTEbEwdc1d+CR7fblYpNJgP5M7fYpt99wOwWwOC8LD1VPx5qamY7jS163dsQTwKPb38UPL3uswoybCmlnB4fx8GtH8WKAeQ2iPUyFdPJGMROHtFE0Nu1twba321Jcid/bexyr76rAU0srgxtYEiqdwamEUbihbJx2HahFyoDIGqkrsZFivd3VdMb298noqCpmFwa2Yu51lr+RTdp2mnfquUoLsvA39wZjDTTWnNM4ZZttquC1BzMMJL+Ddc0d+Nz3D4QyDl4lR4taLtbgq9XTSfcp2qd0VNpyE662pKocL9w/D2t2HHUMy0mHeH8d1vsg71Ol4IYTfnz3GEaFtFA0Nu1tsSzbGk9g7O9BKxt+1GAPm3AjUn4SABIOm5mbuFKdiY2izduPsDXV9aOy2drNO/Vc6794S2DCpdkq65XCTRFeJ0pjM7/6S6iOTSVHS1bIW1wZEx5D3afcfsPdhquVFGQ7KhnpEu+vw3of5H3qDnNaflt5xn170pVMrILmhtArGhcvxbHtbefeENvebsMTf3ZzYGFUftYnD5tw46T8fKEqhlcISZYqH9yyAloMPvU4p83b67C1kXgCG3arrR8dyanGR/HkJ5+SfudlWBIFrxVuGeE16BwFrzc0SnjHk68fw5ScLCy4PA9+fZvcKEAy3xyKpVhmnwr6G54p1afcdoc3COo+qXsTld3vdeDbS2ZPaIE2DGRCFTTdhF7R+Elju7DyQjwxetzX7rrRn0GZ8Ls+edDCjRm7jfNwWw9J0Tj5yadobO2W22yp31IN31yvw9a27j+Jzn619eNmszWqaZk/inZ4kQekKih7JayF2Xpvxo8NjWL5Pzs4jAdefgfF+Vlj/+3VeAzcGndkFHTKuy27TwX5Dc+U6lNuu8MbBHafmvWBdPBCZTrptH/4SXgyqW043TOo9Tgv8MpCNBJPoLG1G7uazqCxtRsj1Fp3AWBsnCvmXoeFl3t2GEKw6Hu69cAprNp2CIs270ddcwfpel2f0iqjUI8TYVjRY0Wpm1KsKNfVx6OuuQNb6k+SjrVaP8ZmC8jpXuVFo43N/uK1o2QlA9CbB1TX3IFFm/dj1bZDeGxnk/QasFpzbqBY77/7Zkso3kNjQzM/O2NDs5tD2W+KzDfr7ODwuORb0XhUkTHuWEH5NkUjwA/uv530bqfDPmUgunfj+5AO8f623+XCHBTlie2oQd6nrr0pmbB7oTKN5O9pw8kux8gEIDz7h9+E3qMxrTRf63EyUK2tXliIMsH9JmtxktH6g7DK6baiyyak2t2LXSiRFcZI1y+bjY176BWm7MKSVD0SYbT8pEvnZFVrvso3pb1rwNVYdYeOGrg17lC+TVtXzcPSObQ1GOQ+JUsYC4u4we67vK+lEw87VNgCgr1PLzwpZR6W9WZSkYkGAMKzfwRB6BWNLy+cju/tPe7olo5GRo/TicymrDuGP4xCmCoyQrCMUBJUuV+dIQ8yCakiy5vVZts7cNG2M3hRXjbp2mvuuQnVM/7IUoFQVYb9zGmSIajYdVllTUUhUvmmjMQT2HH4I9XbchyPW3QYGuy+TSoGnaD2KVXCVljELVbf5SVV5XjxwXl48vVj4zxtop4jfjC/ohSxwlzHsFlpJp6xPBCo/aas0Pq804TQKxrZk6NYfVeFZTUPg9V3VWhNBJfdlHVaiMIqhLkhWQhuOPUf2Hqg1fZYqlCSCVY5GYGVci9Wm+3nq6w9MNSSvTOvmWL5HETvyOO1szC9LN9ScA6r5yAIL5mKsiarEFG+KX/1RjPOXxxBrChv7HkdbutBZ7++8A6dCpouQ4MuL2UQ+5Rbgk5K9wPjHsPaGXzRjKn4p6O0bzGFrjRptpjOyPabMrPxlx8gLyuadsq8G0KvaABXStea65NHI9DeR0NV0NdlIQqrECZCZJU1hGDdZWkpc65aZ/9wWw86+86jZ+AiSq/KQaxQbiMWXZcqsK6tnaX9o+RGqKbkMiR3tTULzmGteuO3l0zVcyn77CjflO6Bi1j7s/cAXHleQ5fipOtQ0amg6TQ06PJS+rlP6SJshUW8YFI0guqZZaieWRb0UMaQDbuhEvYE/kzAbf+TnoHhtItMcUtaKBrA6Ef8iT+72fPO4G4EfRULkVkYpbrVwpT0JWOV1W01Fs25isXYaROghlVQrkupGBUrzMGamhmO11IZw+LKmLJQLfuhNQvOfnoOZJRMP71kbjyXsgqR7LfiildqptTv7BApaKpKfRjDf/zap5j0xU3YjROxwpy0SOBPd3TJXukWmeKGtFE0gFH3tNclbHUkGVItRFaCYGlBFum3qkKY7rr7slZZL6zGdnOuYjEWbQIdhDwZ6nUpgu2G5bcoPR/KGJySYRMAVt55g+W5ZT+0ZsHZL8+BipLpl/DqxqAhqxDJfiuM57Xj8EeIFebik371PgUiBc2tUh/G8B8/9qmJSro3QnMbduPEqvk3pNVcpCs6DGDG9/3vG9pQNiUnLdeyDGmlaPgBdRF1nRvCrqYzygvEThDsGRi2PN7AjRCmu5KVilXWL6uxythkNgE7a4Tsdb0QbKljOLiuxjFRf0v9Cez83UfjxqHyoTULzl6vATcFFfwQXt0aNGTWjUqvlQSAzv4hrK2dhefqT5Cqxln10XBaxzqUesDf8B8/GiSmsyDtJZlQidFt2I0T08sKPDkvkwrFUFaYOxl9Fy4Jz7Vxz/Gx/12cl4WHqqdjTc3MjHvnWdEwQdmUI5HUBSL7saMKtDqFMC8qWalaZRdXxvB47Uy82tCOs+dpQoksKmOjbgJO1maV6+oWbGXGYFx76/6Tlv08kteHMcbOvvMoLchG78BFacucITh76TnQUVDBa+FVV9Ukyrpx09hselm+bWWm9csqUVKQnXJtgNYZXIdS7zdeC7qZIEh7RaZUYvQy5JnzM/xB9D1NAFhceY10kv/Z88PYUn8Sr/62Hc8GXBFNN6xomDAWkVP97YRpZcl+7KgCbUlBNnoGLo79t6oQ5lUlKxWrrNVmOqrJV2BNzYxA6+zLbgJWx6taqlUEWzvrp8oYdv7u95bHGOvjydePYcPuFtel+ZI3Q688B+lQUEFX+Bh13ciUmU7m6im5WHjTVKnnRBmPDqXeT7wWdFXLD08E70cmVWJs79LfsNGrUu6MPaLv6T8dPYNoBI7lru04O5h5yeKsaFiwuDKG4vyscbW37ZD92FEFwfXLZiNWlEfaSJw2Ha8EL1mrrN1m2nd+GM/Vn8BnYldpe7FULMayFiGr4/1KdHayfnpRlWj0XaC9D1bYbYZeeA7CWtUqmSDKMycrdv/a0olXG9odj0/u3aL7OelQ6v3Ca0FX5fwTyfuRDoYDCnXNHXguqRoflb9aejM6+y7gZYv3NV1KuWciV6IBTqVUWTRw0wA8gfRRnilwKQwLDrf1kJUMg+SPnQiqIBgrysPCm6ZixdzrsPAm+7rfdc0dWLR5P1ZtO4THdjZh1bZDWLR5P+qaOwB4J3gZVlm71yCCK8IKpSTqd99swYibt1NxbObfiLD6rZvrymIobObN17B+9g4MSY3BrRBXWpCFLf91LtZerlJkvq7fm2EQ/TBUMKxiMdOaixXlembNmhSNYH5FKeqaO4XHrl8227PnpUOp9wsZQdfL8/99Qxt2NZ3B8/UnHd9/47ufKaSD4UCEmyTwqwtzsf5Lt+DFB+eN25+8/FYwzozEEzj0YTdebbDvneMGN9+UsMEeDQvcfLAaTv2H0IWts+oOxeXuleAlY5VtbO321SqlYjFO/o1oQ7ATmr22VFOsnxv3HMf6ZZV4dLs3VYnM9AwMI1aYi3tvvw6fiU3RlnehGhoSVNd4FYKomkQP3czxbAzGMxKNQ+ZZeRVK5LWgS/1dcl6gFekWRkQlXQwHTrhJAjfuK4wV1iYiI/EEtu4/iVca2tF3Xt3LTyHMyrMMrGhY4OaDtfVAK35x9IyjYKVLGKW63H/zrXs8E7yoSb1BWKVUEo5FsZfUkpteJTpTrZ8lBdmeViUyk5zkrWMzdBMakm5d4/1umhYGC7EOpT4ZL0OJvBZ0dQrIyQab+RWlrt/DMOSBpJPhwA7VdykaAe6YVjL23xOhwWKYqWvuwJOvH5OOeFElzMqzDKxoWOBW8KKW0HQrjFKFziOnez0VvCjCZVBWKRXBN/k3qp3BvbI+yQiJK+Ze53lVIoPk5+Z2M9SReBvGZm5hISwWYh1KPeB9orbXgq4ORd9MfUsn/s+fNblSvMKSB5JuhgMrVN+leAI4crqXlQufcFKsvWq0aEU6KM8yRBIJcw2l8fT396OoqAh9fX0oLCz0Y1yBYywqQE3wMhbKwXU1Up3BZYTRXU1n8NjOJuFxz6+cixVzrwt04xiJJ7Bo837hZi2ar4lOY2s3Vm07JDxux+oF0puTU/M0J8o1PjdjndiNQXadJL9fZQU5QATo+nRoQocdUN7Fawpz8D/+y1xf5kq1M3jyvTit2akF2Wh86k9ddee22w+M0bmtCuV2v6HgNFa78ZjHInMO3YRF8VFB9M45YezfjLc4ra/FlTHhd0YnEQTzjslC1Q1Y0XDAshSrRVMqJ1QEPioqQmeQrnDRZrq2dpbWEreZiNcKm7E+Gk79B7YeaCX95kWNH0Tqml5zzwxUzygjr18vhBS/3iUvriOyzhVkT8LAxZGx/w6rQEddL6UFWfibe61r01PnV2YNqaw3VUU/mQhG+zzZ1dSgfB90K/s6CUMolyqqFnEvZQhmFJFi/XjtLMvKUl4QjQBbV83D0jnh+tZaMSEVDS8+QlbnBIAt+05g64FTwt97aY1IRy+BaDMNq0ATJlSsq7JQLHCjH8TbsXTOta6ulQzVS2dAWS9eWGf9sq56eZ1Ne1vwo7doFVOCtGQ7IbNerKyEsvNL2WPcrLfk83edGxImgJvPTxVinYRXL72mE5265g48/UZzSn8sJ3R6ixlrKIp1kUS7Ax2ky7tF1Q0yprytqMSrKka8eXKJ2UnRCKpnlJF+72WcsxG7CvhXUnQknkBjazd2NZ1BY2u3dDnaJVXlOLiuBo//6QzLf8/UEo068aMsqtPaMhi1uuhTMgD590W0XrwoqywqL6xr7eq+TvK723CyC7ua6L/3ogS1DmTXS/L4VebXaj9Ixu16Sz7/V6orHMtUm4kV5eKr1dNJxzrleoWhWECmsqSqHIee+lOUFmQJj40g/LknmQC9j5R/GO+WW3krLGREMrjXyYBW6EgQ1OGB8TPpVZd19V+aO/F/77f2BqV7iUa7Z6rb2+ZHqUO7teWl10k2MVa0XnQ3+/KrS7Hu6+gIywljYzSZ9WKuyOTFc6Sut0Ot3YhGI8pFGoz/Xls7E9PLCsbOcbitB68IGjECzgpaWIoFZCrZk6P4m3tvdQwjLsnPwqb7roT6+RWtkW77rQ6oCrM5nNRLrp6Sm9Y5SWbSXtHwa+M347YShs5F5KXQaXyM6ls6LTuTyipzdc0deGT7UcdjwijQULB7pstvK8fu9zqUnrXTZuBHqUO/a7erVMByWi+6rbN+dSnWeR3d1VLCZMlOXi9U/nDugmfPkTo3j24/irNJNfjtvgeyhiQdBrBMKCcbduyea3FeFh6qno41NTM97QKfSUKsW6gKsx9KhvFu9Q5cxKPbx3+zOzw0nntJ2isafm38Vqh6E7zwwHghdFKsoE7KnFlIvmNaCb77Zgv5+roFGi8tOHbPtKPvgmUcPOVZh2Uz8Lt2u6jsqR1W60W3ddaLsBKrdanrOm46EtsRNku2sV6ose9XT8n1LDyIOjdnTY2+nL4HMsq+GwNY8jpceef12FJ/Mm3LyYYFpz2H8ly9kBWCiAAJM16Ul3bD+mWzsXGP/Tc7AeCp14+lVcRH2isaQceTylp8g/LAyCJjBbVS5qyE5NKCLPQM0GMddQo0XgrtKsKc6FlP9M0g+b2iVsCyWi+6rbO6FRe7dbnyzuu1XMdNR2IzYbZkL6kqR83N12DBpnrHb8zUgmzcMa0ER073ks4r+w1SFVpE3wMZZX9xZQyP187Cqw1tKQqNkwGMWmGR+9DQEZVLTZYZvjjnWul8HxVZIV3kDz9x00eqMHcy7r39Orz5fgc5wd8OozLelJws4Te7d3AYW/efxGO1s1xd0y/SXtEIQzypzCYQpAeGiqoV1FDm7IRkGSWjXKNA47XQrirM2T1r3gxGMd6r+RWl+MXRM0rKgu5mXzoVF6d1uaX+JIrzs9A3OOzqOroMLLot2V54Fymx790DF/G57x/A+mWzPQkPciO0iL791IpXlHAc82+s1mHfZQVjbe0sTC/Ln9Bx/BSSn0971yCeqz9h+W4//NpRFJuqGFkZvbyQFdJB/ggCVS96/4VLWFJVjv/+pVsuG8W6SNVIrVh15w2Ix0fDKim82tBu+06HjbRXNNItnjRoDwwFVcH56im52kI1KAINZeP1Q2h3+6zMv+fNIBW3yoLOggm6FBfKukw+r1Ui8Mo7r8cv3//YUQBUMbAU5ExCIgEMJsUk67Jkj8QT2Lr/1Dhruy7vIkVg6Oy7gEe3v4tv3F2BH7/Vpj08yCn+3hwyZYXV94TikbVVGM4P47n6k/hMbIplU0HROtz5u4+4xKoAarEFY57NVYysjF5eyArpIH8EhTk65eQnn5KUhj+cuzBmFOvsO698/Rf+J61vlcHZ88NpIwOkvaKh22LpNWHwwIiQ/cgkK3NuQzWM3gyUzrWUUCg/hHa3z8r8e94MxuNWWdCZ1K5DcaGWVFxbOws7f/dRyrFFl0NattSfHPubnaBOMcQYXcB/ffwT/HPTxykhAKPW8AotjTTrmjvw5OvHLEtF6gwJFIVRGQL07vc68ML987Bxj/6KfVbrLZ5I4IGX3hH+1vw9oHhkF1fGlAwqOr+PE7WKkY5iC1bPSJesYO7NouOcE4GSfHEJYuDKXNU1d0j1vdFBusgAaa9oAP6WeHVL78AQohFx59YgPTAyHxmzMud24VM6YjolXvthFTKjGpdt96zTQRkNArfKgs6kdrdjoa636WX5OLiuhhSSYSWoUwwxG5bfgnMXhvFqQ7uNNfwEPhO7ytV3tK65Aw87VIayErTcCK5HTvc6hmoaAnRJQXbK/OoUkM3rbSSeEH4nSvKzUr4HVI+sKK7bTmHQ9X0MS+EKv9FZbMH8jHREa1g9Fyf5w/j3Xpf5BumI7Fwlz7/uyn5U0kUGyAhFA/C/DKcKdc0deHT7u8LFGLQHRkZwNitz1IVfWpCdYjmVKffq9GFPwBurkBMqcdlO3rZ0Cwf0E78rYFlhCMCdfefRM3ARpVflSJ9DZl0a92x0sJW1WosMMYsrY0rnpWK8syKSBa2+8xddCa4yArRfa8r4TjgpXL2Dw9jX0jl2j1SPQ+OHXaQxmOdFx/dxIheu0FlswcB4RjpK6Fs9F1HPt3hiNE/gh9HMfW5mZOcqef4BaK/sJyLdZICMUTSAcAghdlAsH6NhQ8G/3JRGUV+tno7FlbFxyhxVSP7Nt+7BkdO90koh5cOu2ypEwam5nVUfDSdvm85wwIkazuAVTrHYMoKwyrp0E+biZIhpbO32NLxQVhirb+nEKxbeFZka8mH1Ci6ujI1LBE7GrNTRPa20d9p8v26/jxO9cIUXoSvJz0g1WkOHpyWTn1syVNksWelInn/R99MgZ3IUQ5firscbxpQAERmlaIQZymYbTwAlBdk+jcgZ1Q8cVUjOnhxVElqoyVbGcX7m8DgJc99eMnvc3wGgsbXbtsa623DAdAhnSCdFSOQelxGEVdal2zAXO0OM1+GFsr97o+mM6xryYfUKHm7rsVUygPFKXdt/DJDOu/CmqfjF0X+Xvl+338eJXrhCp6Jq94xUojXceloy/bklQ5XNnv7Czei/cAlAAgtvLMOCy17mhlM0b6IOJQMIZ0qACFY0fCIdE3xVw9G8zJmh1qpOPs7PHB47Yc78d4oS4CYckBrOEKSgnw6KkIGMhZBqCZRdl15Z6anHd50bwq6mM9LrRGY8Uwuy0S14xyk15MNaJERmH9i0t8Wy2WcyhnC64MapjuGbCQBLq0a/JeZn5+b7mI77mk5k8/NK8rPQOzgsvSZlozV0zXemPrdkqPe46Vf/NvbMth5otewz4wWiKJJ0YEIrGn4KWWF15YtQDUfzKmeGGg9vPk7neNyuGycl4OHXjo77oMjOvyicAQCefuMY3vmwB7veO5OSNOuXoJ9ucd1UC6GsJTB5XSbnfBTlZWMknpAKSwTUEjmp502uqKIzTMwgAmDF3GvxSkO78JyUGvJeGRjcvP/U7/uH//GpUMkARtfbFy4rEIsrY5b3a4R9vNzQjpcb2i2fner3MV33NV1QwozX1s7E9LKCsTnd19Jp0cw2GyvmXmv53quga74z9bklQ71H87fLawXDIB09GGYiiURCqIj39/ejqKgIfX19KCws9GNcnuO3NdVI5BS5trleuT0j8QT+vqGNVEJux+oFnrh8977fge/salZKZAeurAOK0Kq6Hhtbu7Fq2yGp3xgYK89LQV80B2F8F3Y1ncFjO5vIxz+/ci5WzL2OfDz1e7T3/Y/xyPZ3Hc8VAfC4ZJM1Q/ED5IoZUNeJ6Pwl+VnYdN+tKMrLJq9d6juu06Aks29YXRcAaR+4MDyCXklBJlaYiw3Lr3Sd3nc518XqGoCed5z3tVFk5QljbdS3dOKNJv3GHtFzoVA+AZ4boGeuvKA4Lwtf+ZNpuHP6VHQNDIUytJiqG0xIRcPOmuq1kGW32foh3KU71IZIgHcfSKdQhghoz09GCVBdF7JCsdV1vRQOqHPglbKogqzytrZ2Fh6rnUk6lvo9knkHkqEKLqrlHanrhNK1eiSewB0b95Ea28kqc26R2TecBE8AjvvA47WzsKX+hPI4X7zcV6P62V+js9+6b4LOd5z3tVFkFVqv5RBZ44GZFyfIcwP09EJR4csLpuH8xRH809F/Jx0fttBiqm4Q9XFMoYASVvLdN1swIqoBp4Dhyo8VpbrqYkW5E+ZjrILxERAJWJHL/+dF7PXe9z92DGUwyuqK1o1MzKvqenTr7k4O/3HLSDyBxtZu7Go6g8bWbozEE2kZ122E/1B5rv4E6po7hMdRv0fP7TuBhwnvgBVGOJpoPEuqynFwXQ12rF6A51fOxfplsx1LYcquE/P5d6xegCPrF+Ox2llj7+ukaAQPVVeQzudnWIfMvmH3vTKeAwDHfWB6Wb6rsT71+jH8378+aatkGGPW9Y673desvhHpiBHmumLudVh401THPcgPOcR4LkXExnMGxflZE0rJAK7MVXGe3Fy5vu4tMTS00pLJAfq3PGxMuByNoKtkpEO/jzAhk4RLjWWUtTyNxBP4zq5m4fUp60ZWOFJZj6oNBM24FfTtrLor77ye9PswxQcnx2JT55SSFE79Hj3365O2x4iQKTOanBO0q+kM6fwy64SSc7SmZgZe/W2bYwlYvytGUZ/TodZuUrnXg+tqHMsNu6F3cBjPE9eLLmVedV9Lp4IQOvFTDpHJJfjireV4ftXtE1IeWVJVjik5WXjg5Xd8uV5xXhZaOvqljEfGd+XJXxzDlNwsLLjRWaENCxNO0QiDNVVHv4+ReAKHWrsvN2oaPV+6LDoZDhFrVK9fNvv/3977R1dV3vn+73NCEkgkCSHVE7xVIsRKDIp4pTBBe6UwRejA6J2ZJWpn9ce1ZZT7tdz+UNtyS2/aqtOZRV0Lq5WqXVMGuL2tDig295LirZUGcUSUGO+IEbSDiTYJJBh+JOac7x9hh5OT/ePzPPvZ++xz8n6t1bUq2WfvZ+/97Of5/P7g8w01gWxs+w73uHYZTqezz32sukqAqjCn2kDQDj+Cvluy94bmQ6goKUTvycFIlR71wim52A6poBCW18ZpPG5Kd7YSfQviMdx/02zbxnbZqhglfU8tb3cpCZB2c8NaI0w3grPD5LtT3ddUC0LkUilsL8KQQ6SNMtNpedufkpvrzJ8x1YiRTsLxU4P4wbPe+aZOv731Zy/mjFI+7kKn8qFKRlNrB67+/i7c+tiL2PhcOzY+9xZu/dmLuPr7u3LOpebGcCd15y666VRNLhYnvDqFNDg9O5XFvvGZ113fgaUEANIWW8OozkencAYJMQwrX7qCvqSJV/q1Mq8NRLcZkRX+s+b6maLjveZO2OtM+niaWjuw8IHdWLVpL+7adgCrNu3Fwgd2j8xfS+B1egt+54kbS+ur8chtc8eEq2UrzFT+nmRz1m1eWGtE0LM/qHcnQTV0yGuu5hphyCE6vTS6+weMhNPlKrr7c7bIlVCqcadoZHPzNEFTawdWb95v6w49fnIQq3Ng0kmwlAJJUijgvSD7iYlVWex7+gc9P3wVJcDPfEyPid/wN1eisrRIvHjqCvpWZTAvq+7xk4P46uJLQ8lXksSAq8SJF8RjaJhZJbq219zxWo9MY41HonS7bbqqCqFOHL5dTscLdy/KivVOum9ILfrp88Lu2VhrRKaidV6xuS07m8q8SuiQroEoyoQhh3h5152IUm5cNtDNbckGQecVm2LchU4F0cgpLJfuUDKF9Tte9zxO2jDM7vxRcE2r5GVIw2x0YmKt59HZewqVpUXiZoGA9ztIj2lubuvEYy5lKP0IBOnhDJOKCjzDqfy4YlWrIk2vKsELdy8KdM5JQuV0wulMdZ42FebmRfp4pEr3krpE1jvUmwgzNYF035h/iXvoRea88Ho2mXkPV188BfN+2Oy7hv/axbVZDbeQCrOdvafw9//73zxzXnT2u2wSRkPJng+diwG4EeVojjDpDalPhl9yoYv7uFM0ALONnMJMZtt3uMe1koiF6qQbSqawcfdbeGLP4VEehGzF/6m6fCULsnRj29XWiQUzpmqXEgXkH74lRC2YMRXX1FQG3rncad5PPdssyk/XUZ3ygOdPnmhUkMxUlI/1D+DOLe4x4AC0GgeaFBRUcj+c+GLDdJRPKsSG5kOe42kR5D2lz98wOtTnAtJ9QzovpM8mM6fmC382HRuanZO93fKfgOF1fc0iWenloJAKsz39A1kt3hKk8S2ohpIWlaVFyr+JcjRHWKgYOqNElD1R41LRAMxUfwp7E1WZSNJjm1o7cM+TB20tZNkSBqRjr5hUiPv/82zR2KQb2+N7jqCwIIZHnz/se6FReV9hVSML4jqqC3MQyd5OPSC8LKGpVErbWmpSUMh8L1XnFeNrvzyA9/vOuD7XTGPAJxKTPccjDalIPy6IDvW5aI2WfD+SeSF9NosuuwAvv3MMH5w4jSNdJ7F137uO7y9RVoz1Ky4HgEAt5SaQegQrzysWnS8IISsMI2KQ636ifJLS8UGVhs81dHJbokCUPVF5q2hILBF+rKnZ2ERVJpLkWCvfw4lsCQPS+3zo1rniWHlpJZcYgE2/d1cyJk8swInTQ57XVP3wwwoTMX0dlYU5CGHHSeGX9IBwQ2ItVRUU3NalzPeyfsXlriFVaxfXjjS6UxmPNKRCN/TCItulxINC8v14vQfps5l/329FIZtrF1+KNYtmjpxfVwHOnJ9XXzxlRNExKQRLPYLlk2RWedNCVphGxKDWfZXqZblSvSgMouwZsCOqVRrTyUtFw8sSYcIdmo1NdF5NJRJlxZ7hUxL3p7T0XTaEAam1a/4l8vFYG5ubYgUM32/KwzR/4vQQKkuLcKx/IKfKswaFysJsOhwsDDe31/1JBQVVC6mTZdxLKPAajzSkQif0Ip0olBLPJm7vobP3lOgcEiUjBmDbS+9izaJzldB0LOWSzvAmBVKp58dELpQK+eKJk/T++WLDdF8hs/mIVGldVn8Bnm19P+DRuBMlL6UbeadoeFkivnxdDXa82uHbHZqNTbQgHsP6FZd7CsuSSafqHlS9Dz/KXFCJckvrq/Glhum2ideq/OWcaXhizxEj44tKEr4u0oVZ2utEhTDc3CaspboWUpMeEwtpSIVq6EUm+VBKPAiaWjvQuFOvfr4dTsYgFUu51CuYPl9NhPw4Jby//M4xbD9wFOdPnoh1y2fhzi2vhBYKlk+eOF1jxXhGaui89ZPTs65oVJYW4Qc31kf+PeaVoiGppvLT5w+P+ZuOOzRbm6hVX94ur2JKSSHuu0mWs6CqOKjch4nY1iV1CXx18aVjEtT9WsQX1yWMKBqWFchvfL7KswqzupnKdaQLs2klA9BX5K0xpVIpxzwIU9ZSvxZS0x4TSUiFiaRQU5W58gmdoglSdL8FFa+gNV/vefIg1u9oG5Uvoiu8ps/vptYOfOpHz42Zw3YGwsy11tT6mG+euLDy//IFSSXA7/5F3UhzP6d1NAag/GxhBjicxy/fWT4r8koGkGeKhq51U8cdms1N1Fo4/HQGV1EcVIQOE7GtdgJTxaRCfKFh+piYdFUk7y0Wc47vT3+vBfGYrwVc5VmFVd1M5zphlGp0QkeRTx8TEHzibBgWUpW55BVSYSopNJvzAoiepzDoMD9do5bqvmn1wQFGG7r85i+4zeFHnz+Mh26ZiymlRbbv0+T6GJQRMZvzMSplonMFyxNkZ9C1+msUxGNYcWW1rfHa4v6bZgOAr4qCbvj1OodFXikafiwMqpt9tjfRgngMDbVVaKiVJUNn4iVwW6gIHSZiW599rQN32HQD7z01iB83H8InEpN9CfeS93b7tTV49Ozi4fVedRdwlWe1q60zlMREHSXR2jzPfJTEVxfXnq2Kcy6HyGROht1GLZnHmXHmmWOyCy04f3IRrq39GP7Q3o2jx07hcwumo2iCXrM0kxZSu2cAQPm7CyukIugSnk40tXaMsbgnyiZi/YrshYtIBXppsQkLv0YtU5Z5rzXeTdCWrIeNO9vwwt2LxpxXsm6p7BlBGBHDLINPzGFXjbP35OBIGP6jLkrGl6+rGXm36fPv7T99iAd/+5avceWaNziWSnmlvgJ9fX0oLy9Hb28vysrKwhiXFi3t3Vi1aa+vczx48xysnHOh+PhcXkCsBRqwd+uphGIB8ue/9fb5tsL5s6+9hzVbX3H1JlSUFKJ4QnyUMKvzvL3eW9DvVfqs/vlLn8TXf/Wqq3s2UT7RdgNWYSiZwsIHditdx+4ZJcomYtW8izC9qsSo1c7tfQCwncfWVR+65SpMKS12FTLShaBdbe/j2YMdo+ZhPDasgN67rE557H6/CwunZ3DzNRdhQ/ObWuePajien995VdN7xEMxD+qZbD9wFHdtO+B53D/+9ZX4h//zb55GIODcHPdjbDCxb2aSOde81lPdb0SybpWXFGLihAKlMC+nvVHneTspQrrvTnV+Rs2zlwt4zStgrAErHbd9WTrXb6hP4DetnbbnBvx986aQ6gZ55dGQWundUHWH5nL8o5O1UTdMyY/ltqm1A3dsecX1dykAxwz1+/B6b0G/V+mzanm7K5TERNXwHqfN8/2+0/hx85t4+La5xlz1EoulX6u55Zm679k2PPNax5i/J1Pn8rtUlQ0TFlK3ZyBRMgD7ORflkso6yv5QMoV7njzoet57nzzo6FUN0sAg3VumVUwSd4s34RkysW9msuetrpH1UvL9nvkoKTpv5hyWrFs6YV6mPHGmK1ipzs9cNoRmE4n3UVI+3W5flu79S+sTWDlnWuje4CDIK0VDksTjhB9XVC7HP5oUqKtKZc2VMo+Tltp1QrfkoNd7C/K9yhVa2b34DX9QURLDLP8ovdYLdy/yPY8HPkpi0++dXeHAcI+Vr/35ZUphVH7DLCVFLiTkUnUn3VyvvW9324Y7pHPs5CD2vt09pgdP0L0TVBTOgnjMXtAtKz7rMSw1Zvzws286sfG5t/Dr/f+Odcvr0LjT+/v9h7++UnTezDksLRPsdm23hpx+1xST+Vmq8zPshsL5hKlwQrvmmtJ1uOvEGVRNLh7+NlJAV/+ZnDJkp6MXdBxBhpIptLR3j8SKX1A2WpitLp+Ir1xXM5zsa/P7FICbr7kojKFGDkugXjnnQiyYIU8oH4P0ZxnHmShRmr5g5wKW0OH0yGIYnrNSRcevEKmSAKmyefpF5Vp+5/EvWo64WqmAYSvWL1qOKJ0XOGchTZSPfs6J8omeG77f78OaS7kSzytRrL73dBuGbF5WS3u36BqZx/m5phRLoAfGLpXWf69bPgv7Dvdg+4GjKJ9UhN9943psvX0+Hrx5DrbePh977vk07lp8qf+1OgOn+Zl5+kRZMSpKCkVLfWfvadyxZb/o+0UKovUwfQ77LRMsWaf8rimm8rNU52cY8zmfMWWU+R9Pv46m1tEecq+9Hxj+7hp3voG7th3ArT97EV//1asonhA3+s2HSV54NJxixdcuvnRMrPhVF01xrACwoflNbHvp3ZxzS0WFLmEn4czjTJYJ1E2oDfvjlVq5518yNZTqZirW1mdee090ThPvNcxSk+/0nDR6XCa6FlK/95ZC9Bs6pePPCiwVnEYfF1bvBLeQnBVXVqNx5xu2YS6SvEG/65pbT4v0c1rFKby8HyoibFf/GSWvn8kywUGWqVUx4Li9P9X5mU+9QLKBqXDCY2cTx52q/jl9Q279a3JRNs15RUM1VtxaTDfuPoQNzYfGnK+j9zRWb97vmTCYiwQtYOuWBTQZ0uF1rijFrErjgMOobqYS3mOq/KNkPobZr+biyhKjx9mhE47n997WLq7NqbXMj3K54JIqbHyu3fO3Cy4ZHTYVpkJrJ9Af6x/AnVvkYS6Z386x/gE07vS/rtnNz8z/dlq3/HD+5GHvrWQ9NF0mOMiQQqkB51j/wJjk4/T3pzo/860XSNh47Yeqcy8zRG+4T1gtnthzZFSfMKcEc9MhyWGT04qGn1jxbS/90fXc97gkDOYiYQjYukmv0hKlZRMnoPfUR1qW/aFkCht3v2WbOGtt5m512oNCYuUOq0So9DqmkptNNJczWebvcwum4wfPvuEaPhWPDR8XJn6ta9OrSo2PKUj8KJfzZ0xFRUmha55GRUkh5mcIz2E3YE0X6K0KN9J9zO7bsSNIK6i1bm3Y9W8ixc6JzO9Xsh6aCLW1mFpaFGhIocSAs+LKak8lU3V+Vp0nzJcUHjcesfbD9TteH1Xl8oKyYqyad7G4CIddIRW7AjyLZ52PX+0/Kj5PLpHTioaue1CyUB0/OYiNu9/CXYtrTQ03a4SVFKab9CpxJW5cdRXi8ZiWZX+4pv7oxSId61xrtu4fJWSG5emQWLnDqm4muY7f5GbV5nJeTZFMhQUVTYjj9mtrXK91+7U12v00VEm3Wt98zcexofmQljUtakngXp4sP4psQTyG+2+a7Vre9v6bZo+ZL9lswKqyj/WeGhCHDAVtBS2Ix9Aw82NiRUO6Vnithyat8Fd+vDwUY5KTAWfd8llo3PmGp5L5u29crzY/hYtEkjkaAsZmVNWef56y8eeDE6cd977eU4OuSkbmeXKNnE4G13UPSn/3xB8O53yyVNhJYbpJr06/qy6fiEdum4tlV0zTOrf1YTspGek4xUU+2HwI2w8cRUt7d1bng7GkfQPX0X3PqvOxqbVD3BTJBPcuq8NXrqsZkwQbjwFfuU6vj4YOTa0dWPjAbqzatBd3bTuADc2HUFFSONKVNn1cTkQxCTzzvlZt2ouFD+welTApSZp2Uy6X1lfjkdvmIpFRECRRVuwYEiu9JjCcSG5yPZDuR519p5VDhoIukiEtavGTW67SKoRgh0nFeff/+9OYZN0gWFpfjRfuXjQqsf+FuxdhSmmxSMl8+Z1jSt9EV78sX/K/bn0llPvPRc7JDqPfz/t9p3Hnlv1YcaXavP2g7zTu+fXBcVU90CKnPRpB5wQcPzmYk26qdLKRFKZrfZeGEUnP7TeW1/pduouUNcjPofOeVebjvJpK1/cXA7Dj1Q58c+kspS7EXty7rA5f+/PL8IuWI3in5yQurixR7gzu5/qOVq+z4UDpRS6s2H4guPwdKV737OXJygxdfOiWuWPyDqThgjpz0yt0EIBrHL0u0v2o58Mz2iFDQVlBpd7NpfXV+Ex9tRGPrMm+H2HGvdt5alSMpSvnXCgOoRXLOKcGsXrzfqxdXKvcNyufkYTl73i1Aw/dchX+xzNtnobMeAz4wbP/z9eYgvSqBk1OKxp+cgIqJhWOSsJxIhfdVOlkKylMtweF5HfSc5uM5bVwCzeLQjWrsFF9zyrzce/b3VpKsol8pKIJcXzp2ktEx2bidn0v4VeywW176d1RHWcfjgefv+OF1zOXeLLu3LofqYzQxXXLZ3l2dXdCZw1yUlCsSktBhJ9K9rHK0iIc7u7XOj8QrBVUmttlqi+Ryb4ffgxtJtZ7VWOpVIGeV1OJCyYX4f0TA6Lzb2g+hK37/oj1K2hEA+QGsSmlxdhzz6cd8z8tVB2fQRZ+yQY5rWj4yQn4QsN026pTmeSimyqdsJMco0QQSqJT3HOUqllZRFHxkc6zI10n8d3tr4uOTX/P2W5S5Xb91Zv3j0lUzpwjOh5IL+Ej6Hkgeeblk4o8lf5Uxgk6e0/jzi2v4OHb5orKu5oiUyDWKTri9cwz/75ueR3u3GIvOKcAdPcPYPPed5XvxTK2XX3xFLS0dwc2B8LKIUu/3sO3zcV3t7+O90/IwoTcsGus5oap9V7HWCpR2P6+6Q188KFMybDo7MvtEqomUTGIFcRjuGtxLT6ROG/MnHCqIuXG2sW12PbSH3O+G3g6Oa1oAPoVedYsqsUTfzjiWJ0kl91U6WQzyTHbBKU82VWRiFoH1igqPsDwfEyUFTu6mmMAyksK8ePmN8WWSus9h9mx3A6J1T5zvcmcI7oeSCfhI+h5IH3m31x6mfK5o1LSUVX583rmTn//8nU12PFqhzEvbHpVo0/96LkxVW6+0DDdaLiMKY8FIFOOl9Ql8MKhLmx+UV0By6TxmdcxqTAu+iZMrvd+C2vYcd+zba4FLbzI9vcWBVQNtEPJFMonFeGbSy9Dz4dnUFlahJ7+AeWGklNLi/B3/2km1iyqjZyR0A85r2gAetYUqzqJ3YKR624qqbUs1+/TC2ksr47VARgW9rIt3NoRRcXHYldbJ05/lLT9W/r8lLyOTCU5202qdEL1MueISQ9kGPNA+sx7hM08nX6fzVw5FeXP65l/+boaPPr8Ydu/P/r8YTx0y1WYUlqMzr7TaHzmdfT0e4f3OmE1AbS73vFTg9jQfAhP/OEI7r9pdqQspRLlWFriV0pP/6CoxHkQ673J8uUDHyWx6ff6SkYUvrcooGKgdZqvN9QnlK/b3T+AT/3ouawbBE2TF4oGoB+PG0Z/AgmmwhtUrGW57o7zQhLLu3ZxLWrPPw93bnkFcDjGifMnT8y6cJtJFBUfC69uvuUlhfjCn8lCGi3SleTmtk7Rb4LKu9I9b2YCvAkPZFjzQHrPlaVFvhJ4s5krJ1X+qkqL8fVfver6zDf9fqzQn/73xp1v4IW7F2Hf4R4lJcMun+Xqi6fgUz96zvV5H7fpXJxNJMoxAGNdwdNJwbvEeVDrvdRY6iUnfOvJ17SMZpnkem6qX6SeJrfcrcf3HNG6dhQMgqbJG0VDl8wPvKq0GIgBXR+eQUt7dyguK1PhDW6LdLq1LF/ccRKclMnM5/twPCa2kKULe8+89p5oHGEt3FFTfCwkFcAmFRbgImHX7YqSwlGW2KFkCk8dkNUhDyqkzu95rXhfE6EUYc0D6T0nyieN3FeQ1wkCqfKHGDyfeWYeSubfrXeyS6g0/+2Ci3FDfbXtWt7S7l5MIf26UQiXkSrHqVTKuJJh4VTi3G9oowQvY6kkJE/ai8GLfMzZVMXLEL2kLuHZaDOmES2RbYNgEIx7RQM494E3tXbg6796NdS4dlPhDZJF2rKW5cPEVUGnbO6Rrn7bBmmZwl7Uku2lG9yuts5QFQ1JWFFH72n09MsSGB9aNRcNtVWjzi+xAAfZCdhv2c30yjJ+Pa1hVZtT8cAUxGN4+La5+NZTreL3HIUcMqny16UZHpbJrrZOsTX0hvpqx+9Y5d2mK51BFw9wOr9UOQ6TIEMbVZCUhm7c2eb7OlH43qKEm+zgpcinGxZUq6PlWwgbFY2zZCOu3WR4Q1Qt2TrobnRuv9Mpm/uJxGRPYS9qyfbSDe7xPUcwr6YyNNesOMTmvGLR85yvWY9+5ZxpgTY61Cm7aTdH/FbxCUsgUvXALK2vxqLLLsD8+5o9FcMo5ZBJlL+W9m4j1/qXAzIvaXX5RCSTKWw/cNR2fqi+WyvHJMjiAW7nP+OQu5VtgghtVEEiJ6zb3opuofLuRJS+tyjhJDtI95wvNUzHs62do4sxZFQfdCJfQtioaCB7ce0mlYOwLJhhlMrU2eiC2CAlwp5U0AIQaHlJC2sj9LL8he2aFYfYlE3UCh2Snn9JnXqCngpOAqm1saiW4dY1CoQpEKl6YIomxPHDG2ePhFE5KWRRyyHzWg8kz9wtlCIGYEppodjbc2pwCLc+9uLIf2eud9K1wOJIVz9+3HwoMGOblzHvq4trtc8dBiZDG1WQyAl+lQwget9b1JHuOYvrEvjW8rpR60YymRr17fq9RtShooHseQNMKgdBWzCHkils3H0IT+w5MqrRoWlrl91G1OGx0bn9Tqfrqaoyla2OwnZYG+Fqj1j4sD1cOiE2KqFDkrCl6pA8S25N38IqPBG2AqzqgXH6ZipLC3HjnAuxuC4RyRwyN+VP8sxvv3a46hRs/p4CcHpQbtX3KpUsXQusb2/rvncDM7ZJjHlb972LRNlEvN/nvkakUim833cmsDwNJ0yGNqrsMUFbtT916cew+lMzIvm9RRnVPS2zN0+UIiGCJpZKuaWnDdPX14fy8nL09vairKwsjHGFyvYDR3HXtgOex32pYTrW/cXlxq7b0t6NVZv2eh639fb5nsLgUDKFhQ/s9py4OjkaTa0duOfJg649R/xau6zxuyl8U0oK8a/fWTKm3KDX74BhS7mk66kfz4jd5uFUlcK6g6AqSzQ+/ToeE8R5P3jzHM9maCYrotlZsZ2ehep1Vc8fBpn3cPXFU/DyO8dCK8jgNp8BZL3XShSbSvpFp4/GlJJCHBOEUnhht867rd/Wk/7q4ktdOxtbOO1FXu9RutetXXwpfnx2HE7fMGC+6pRbiXOnvVN37qruMdJnN3niBJw4/ZHncZnEYsBDq67CsiumKf92vONnz4nifqWKVDegogH5h1xZWoiXvr3E2EZoWjkIYuJ6lSS1sFMCVJBvRLW4a/Glyr8DvBUip3vVfX5eSpAf5c8LU0qs6ZC0bMaAj9emiVFSgHMJP0qQSmfwqvOK8bVfHnBsYqlD5nc97JF+C0/sOWzrkT7zUVJkbLMzTEjmudSY9+DNc1A8IS7qo3HPrw+OuhcdiifE8fU/vxTVZZPwX7eNLXFu+nvQ2WOkcsK3b5iFNWfvQYdH+M1r4Wedj8oeoQsVDQWGkilc84NmUWysxLuggmnlwOTElXoLLDKVABWkG1HFpEK8vO6cQiP9HeAu2AehFJj0WKliQok1rXiljy0bVW3CPEdQz87E+CTfdXVACnCuEKYAoGIskeLkqXSaN7prlXSeq55fMr/3HOoSxblLqD7b3DCz15TJd+5nj5HKCT/Y2abdsG+8f/N+CNIoEWWkugFzNDAcW/uXc6aJSgqajpc03TTQb7WadFQ7HT+x54hSLkQ60tyR46cGR+UVqOScuOUlBJGnE1aCvh1+kxaDLJDgJ8k5jPP7FTKDLi7hd3zSUsO5UKEuCMKuQBjE9++0Ljp9GzrFA1Tmuer5rXFaQtgzr703Zi/r9enNSCeMXlN+9hipnPDt5XUAUtj0+yPK4xvP37xf/Ow5Qe+HUYCKxlmW1CVEioaKYCvVVE0qB4D/iWuN+zetHUq/S1cCVLX0eTWVqJhUKHKFp2/MOr0L7Db2IJSCbPfY8KPE5lO5ZBVMCJlBPjsT44tqr5UoYEpJVFn/TH7/ukmkOoYJ1Xmuen43hXpJXcJI34j0scYQbK8pv3uMVE749vLLcdXHK/Gd7fJ+NapjJEQFKhpn8SoFqLqAq1odo6LV2o1bBZ1a7NamvGDGVPymtdPzGukbc/oGKcVuYw9CKQiqxKiKEKOrxGbTG5MtTAmZQT07U+OTzuHtB97Dt5ePr5r6ukpi+jd5pKsfW/e9Oyrnwm3989vo0cIS4G+oT4z0fFB5d6qGCdV5rnJ+SSlcyR5VWVqIY/2DoucatPHExB4jlROWXVGNz5ydByoNIPOlnCqJFlQ0zpIpsPqpj52N5n8mkCZ+u6Fai11FsXESzK0NbP2O1z0TKitKCpFMpjCUTI16l0EoBUHUXNcJm9FRYrPtjZFiMr7VlCciqGdnanzzaipRWVro2TCvu38g7zxWXugoiZI1zG3t1230mEksNtyJ+PE9R/D4niNa+QUqhgmdeS45v0ShfkIoOF/18Qrs/n9/UnquQRlPwm72Z637C2ZMxX+8uBJrtu73rKyVL+VUSbSIZ3sAUcISWBPloxfQRPlEsXLgtUgCw1bHIacvPku4jVtKtUctdmD0vVuKjVTJAJwF86X11dhzz6ex1iMZ/fjJQdz62ItY+MBuNKWFhlmbffq13K49lEyhpb0b2w8cRUt7t+P7VJlTXud0el6WENOkGOrmhrUpOonsMYTXl8KJptYOLHxgN1Zt2ou7th3Aqk17x7xXFUx5IoJ6dqbGVxCP4UaPksaq18wXVIVn6RrmtfY7rRPV5RNRUVLoOJcAoKSoAMDY8qy664IloK6ccyEWzJjqqLjrznOv80sUamm1qVf+eBwP3TL2uboRlPFEdY8xybIrqrFx1VW2fwv62oTQo5GB33yJXI1tV038tuPmay5yrcWefu/zaiqVFBtJXkFBPIa7FtfiE4nztCyMzk3EitC4sn5UaUUVr4JkTnmdM+zu9dnogKtCEF5DU56IoJ6dSU/J4rqEqM9KUEJXVCutqFidVY0zXmu/W6NHp7mUwnCn9ZMDQ7bXM70upBPUPJcqt+cVF+DDM2PvO52e/kFMKS3CC3cvwt63u3HnP+93VFLCsOqbLv6Sidt3teyKaXgkHgutaSghFlQ0bPCTL5Grse3S8RQVxDAwNHprnVJSiPtumo0zH8m62u5qG87DkCg2a66fgYaZH1MSRKwN221jcdqEl9ZXI5lMnU2kG/5dd/8AGne2IX7W/6cj4LrNKYnQXD6pKHQFVmVTDFNwlHoNVYUrk6ENQQgUJscnPVcymcL2A0eNvtMo1I53mq8qwnNLe7eWccZtrbVbJ9zm0s3XfBwbmg85ni9ow1YQ81yq3F5b+zFRTt8HJ06jIB5Dw8wq3P+fZ/sOj/a71pku/mIh+a6CujYhblDRUECywORKbHsm0vE88YV5QApoebsLwPCmOP+SqSMbrwRpYhoA1F4wWWuDLIjHEI/FXF3sdptwU2sH7tzyiq3Qv3rzflSUFLoKuPc8eRCTiwsx3yXkIB2pp+KbSy/zPBegl2DsNqczN6aq0mIgBnR9eAYt7d0jFtcwBUdpedaNuw8p9XUxbaENopqcqfF5nSsF4NTg0Kg+BSbeaRTy17wEMqnwrGss0ln7nebSM6+9J/p9kIYt0/NcqgTfNv9i5eIhfhUjU0qy6eIvKt9VVArPkPEDFQ0h0gXGdPWqsJAu7pZS0VBb5XgOLyEwhuGKNhL8KGSq3iWJpfz4SffYYCsHRLr5SEPtej6UdQ1WeV7SOW1tTE2tHfj6r14ddXxFSaHtMwlScJS+1w3Nh/CJxGTlZFiTFlo/m7qdEmhyfE7nqigpxLGTg2Pea+Y7VbXshh3+Z4dUIJMIzzprU6KsWHvtt5tLUTFsmRRepQr1/Eumau21uopRFJRkO6LwXRHiBhUNAarWghVXVuOnzzt359SNbQ8yPMWEtdQ6x2qPUrMpDIcjuZUeNKGQHek6KTrO2oRN5KlYSDcfqdBcWVrkKNQDeuWXVTZNp+OdxhPkBqciNEmvn/lt/e4b1+Pld45lLbzASwk0ZUEe47E6rxhf++UB22PT32kyCTTuVLPsZjt/TWJI+NZTB3FqMIlE2fAz9arepVqWdtW8i1ybZKq+07ArGYWFVKHWrRSpqhhFWZjP9ndFiBdUNDxQXWCaWjvwqIuS8eXrarSsHmHENfu1lg4lUyifVIT/dGkV/u+bXZ7Xu3HOhXh8z5FAko2bWjvwY5fEdOs66ZuwyfAC6eYjFZrf7Tnl6k1JQf68VOe0bkWyoDY4qecMwuu7fVsrhdWZTCJVAk1akK1ztbR3u5aItt7pHVvGGhO8lOts569JDAk9/YNY+z8PAJCVjVbt4TO9qtT233XX96gXbfCDRKEOOrnaIsrCfLa/K0K8oKLhgcoC41VJKQZgx6sd+ObSWcq9E8Jy2fpxK6s2+ltcl8A1Z5+ZyU1CKhhnCuemwwskm4/EInlBWTG27nvX9VoVJYVYUpcQjUt10/Tr6TG9wRXEY1i3vM5W2FW9ftTCIXQtp6a8nX7elZdyne0wH9V7s+bAQ7dchSmlxbbP1hJ0v/XUQc++JID9vfmdg2EJ29lA4nkII8E5ysJ8tr8rQrygouGBygIThNUjGy5bVbeyaqO/dE9CQTxmfJOQCsZrF9fa5te4Cf3lJYXoPetZkN5vc1un4/OUWCRXzbvItbIMMBzCJJ1X0jm96+y4/W6epje4ptYONO5s8339KIZD6KwhJr2dft+V2xqX7TCfqtJipeOtMa7Z+sqoHhV2lXwWXXYB5t/3W/T0D9iey+neTM3B8V5NKOgE5ygL89n+rgjxgg37PFBZYIKweqgIHtlANazGzp0vbRDlNQ6r2d2et/4k+k1mGIOkodL9N822bazlxmN7jrg2zfJq6ucUbpGJdF5J5/TjZ8etu3nGYL6pn2qTR7frR/HbUl1DTDdx9GrCJsXuPsJuWJbZADOZ0mtHKmmEVzQhjh/eWI8Y1O7N5Bw0sY4Se6LcwDSbjQAJkUCPhgcq1gKpQKIiuEkFj87eU+JzmkQ1rCYId75O2BZg/x6kYQhefToy8bJKulkkpWWDpfNKpTrY955uw+++cb1y0mtQgqNUqZVcX/pt7XnrT6FZh1UMG0F4ZCRlb6Xjs0M1zEc3JMxuTaiYVCgcvTtuPXhUQ5iCDsnxE1IX1aaK2SDquTD5HD5Hch8qGh6oLDBBuDClgkfjzjcwqahAlLBtcvOQboB/u+Bi3FBfbXyzUg3bAs69h6svnoKW9u4xz0IShpDeAMqryhYgC5lzcv+bnlcq1cE6ek/j5XeOeQqfmRWxgtjgVJRayfWl39bG59rx6/1HQ9mwjzmE3qRTnWbYCCJB1U1oWbd8Fhp3vuFrLkrDfHRDwhwrpAkMAlKsZ/vzPYfx+YaaUcqGSghTkCE5fkLqotBUMWhU98KoC/PjPXyORBcqGgKkC0wQVg9pCcVj/QOeiYNBbB7SDfAGg1VyLHSqIVlPfsWV1fjUj55zfBbSmN+l9dX4YsN0URNCXatkEPNqaX01vtQwHY8Jx71yzoWu30AYG5z0+a25fgbWLvmE79Kg6bgl5ppS3oeSKVHuybrlw8UkgrSGuwkt8XjM91z0+r50E6R1K6Tp0rjzDfzshcNj9gHpWhdUfL2fBPOoFUgIAt29MOrCPJvxkShCRUOI2wKTKWg8dMvcMTXm/TT8klqf3UIlTG0emfd69cVTspaIplMNKVE+ESuurMajzx82tpGWC0My/CQKBmFNW1yXECka1ri9NlkTG5yb0C59fg0zP+a7O3YmTt+XSeVdOp+nnE1qDjpB1UloCdqy6yckzGQvHCl264ZU+QzCiODn+UWxQIIEFWXf715IYZ4QNahoKGC3wDgJGuuWz3IsiRgUTqESpjYPp3u1BPewY1flFu6ZqL3gvBHF6FM/es7YRjqUTHmWngXMJApKrGkqG66ONTXITdZLaA/C+uskNNuR+X1JBRbpO1H1UGSz2kyQll0/IWHSZ1gxqXBUKNWUkkKkMLoBZTw2NhHcaTzp68autk4l5dO04ubn+UW5X4QTKsp+ripShOQyVDR84CZo3LnlFTx821zfDb+shVGFzM3WxObhdq+PPn8YX76uBjte7Qg1dlVu4a4a1ZDM5Ea673CPa4Mzi5uvce4IrIKboK9qXfey6KcArFseToKjVGgPIiHTEpo37HoTG597y/P4D06cFgssyWQKjTvfEL0TVQ9FthNUg1I6/YSESZ/hQ7fMRfxs+JmlJAEYpTgd6x/AnVvGdp22w1o3Nu5+Cz9uflPZWm5ScfPz/KLcL8IOVe9ELipShOQ6LG+riZegAQwLGkMSk5gLOqEAmZut381Dcq87Xu3A775xPbbePh8P3jwHW2+fjxfuXhRoLK9OyUHTG6n0uOlVJaLjdNEtc+pUWteicWebcolUVYaSKazf8broW/IqBaw736zkfgnnT54oFlju2PKK+J3ozOegnkc28RMSJn2G82dMHVMKNrM87LIr3L8NO57YMzYkE5DtCabK0/p5flHuF5GJzh6ca4oUIfkAPRqahGUZUVnwnEIl/G4e0nt9+Z1joVqBdCy6pjfSKGzMfsMBltZXI5lM4Y4tr4z5W9AJoEPJFO7+1WuuXqHMbymosJ2rL56CytJCxw7P6d/XM6+9p30dp3ei66GIeoKqKn5Cwkx7eaxn+/M9h9G48w3P490qW4VlLffz/HKp+ZvOHhyF9ZqQ8QY9GpqEZRlRXfDsNtGrL54Cr301Hhs+zo4oW4FULbqmGy9FoZGT36ZfQ2fDe5x+C5jxzmXS1NqBq7+/C7/a/++i49Pnl+nmZE2tHfjUj55zVTKAc9+XyQ7a6eh6KPKpWZvfBmSmvTwF8Rg+31Dj+Z1L+3SYWiczGxJa36ef55dLzd909qUorNeEjDfo0dAkLMuItASnWyz+y+8c80xqTKbg6JGIuhVIxaJr2uKZ7Th5wL8imI24ZZ3+JzrzS5KILRlLZr6RSmlcNzLfyVAyhfJJRfjm0svQ8+EZVJYWIVE+Kac9FDr4TZA27eVJ/87tSAG4tnYqnn6t0/NcJtZJr3wsP88vW/0iVMtE6+xLUVivCRlvUNHQJCwXs6QE59rFtVizqNZ3B2Sn43LBna6SmGp6I3U7383XXIQzHyXR0t4tEnR0ejIc6eoXjdNpY1aZHyZ6Ruj0OtCxMkqS4yVjmVpahN9943oUTTjnAA6ig7bbeIMWfKLYBdqvsmA6WX1pfTW+fF0Nfvr8Ydu/P/1aJypKCtF7cjDQdVKaAO3n+YUdjqdTJlp3X4p64z1C8o1YKpXy3BP7+vpQXl6O3t5elJWVhTGu0NHZaK0FH7C3jJiMa/dTr7+lvRurNu31vMbW2+c7bszPvvaebQx/EPcaFqaFq/TzHenqx9Z9747KPXArubjvcA+a2zrx1IGjo8J3vN7xUDKFhvt/61n5qrp8Il64e5Ht/Unnx1/NvRDNb3wwKg5dp2eE9HrpPKI4v5yEscz56vfbcC5vXYfGnW2eQpD1TqTjDYLx0AXaBEPJFBY+sNvR+xcDUH5W0QD87wl26xMAzzEkXL71KOJn7vvZg6OoXBOSS0h1A3o04K9LaFiWET8WJr8eiabWDscY/ly2Apm2eFrna2rtwI+bD4lKLtrNPa/fpGOivK4kDCgWA361/6jy+OxQjVFfu7hWaX6pJMf79fa5d9CGZ4gGAOw51IV7fn0wK7X9x0MXaFNIQgyPnxzE2sWXYttL7/raE5z2pJuvuSivyrOaKGShuwez8R4h4TDuFQ2/G22YLmbdhdFPXKpX/Pq65cEqGblmdVLZOHe1dXrmBnhttibK60rC85z8njqCsEqMenX5RKxZVCs+HlDLOTGRf6TbQRtwt07bjdekYBRk87KBj5L4RcsRvNNzEhdXluBzC6aPCj3LRVS+tRfuXmS7bvnJGersPY0NzW8aHWvQeN2vifywfKu6Rki+Ma4VDVMbbS5YRnQsP17x6zEM91n4TH0wXVRzMaRDunHube8W5ymk/yazyZipRH2n+SHpjqwqCKskUuvkJ6h4KT57xTTPsUwpKdSOq3cSgiRKpt14LUwo4EEVAbjv2TZs+v3hUfPmB8++gduvrcG9y+qUxpht0p9z1wlvzyEw/K3Z7Ql+c4aCLpxgGsn9mqpomAt7MCHjlXGtaIy3LqGqlp9sPp9cDemQbpwtb3cpN2K8c8v+MfkR65bPMpaonzk/uk6cEfUOsJDeu8SDUlFSiPtvmq31jlWUL2ssqx2qCQHAsZOD2NXW6asZYPr3oZMMb40XMKeAB1G2+r5n22yTpZMpjPx7rigbds/ZTfF2+9ak65lOg1bpGMJEer9Rr2hICPFPbvuyfRKF/hBOtdCDQqXefraeT1hd102Q+f6qSouFv1T3AGU2A+vsPY07t7yCFVdWO54xheH8DCnp86NqsvRebRKbcwAAVdtJREFUhlERBpx6HVSUFGLt4kvx8neWaAv2qrXyl9QlUFHi3APB8myamm+qwmT6eHU7wNthWsgb+CiJTb+3r8hksen3hzHwUVJ0vmzi9JzdlAzA3gOnsp6pNmiVjiFMJPf77ada8dT+f0cymUKijH0tCMlnxrVHI9vWlKiHBuk8nyiHdJjG7v0lyiaKSlwumDEVG597y9f1rfC+Ha924KFb5qJxp31S+YbmN7HtpXeV55VqLoWqMBBUbLVqTtK+wz04fjK8js46wqSV02Eyp8J02epftBwR9ev5RcsRfOnaS0TnzAYSj1OmZ8MtBDWInKG1i2ux7aU/Zr08q916L7nf7v4BrP3lqwCGjQvW/GVfC0Lyj3GtaGSzP0QuhAapPh9TilNn7ynRcdlMeHR6f+/3nXtWbhvn/EumGmn4ZgkpU0qL8MLdi7Bx9yFsaD405rjMeeVUOjP9366+eEqguRRAcLHVKjlJYXvuVBS49PG2tHcbVcBNNy97p+ek0eOyhcTjlEwB65bPQtXkYk8FWTpvOntPYcWcCz2/OatAwppFtVlNgHZa72+oTyidx1LyyyZNQO+pj0b+PZcrGhJCzjGuFY1sdQkNstqLSVSejynFya2UbiZBdYoeSqawt70bLW93ARgWhOdfci7MTPL+KkoKUTwhPqr0bObG6ZWnAAAVkwrHhEzZYQkz2176o+3f0+dVMplC4843RgkIVuhQumW/unwiVlxZjUefPxxILkXQSD0mYXs2JcnwFZMK8dCtc0fNuyAUIpMlui+udK5spnOcKqYq1EmfX9XkYqycc6HncdJ507jzDUwqKvBcF04NDo3kDGXLo+u23j++54jWOU+c/ghf/XQtaj5WyspRhOQRbNiH8EOYTDTQCxOv5yNpZCVpIuVVSlf1fKr3YR1zz5MHx4TSpAvU0vf3z//lk4jHYq6Cj92YppYWYeWcaVhSl0AylcKtP3vR81pbb58PAMqN8NywRvrl62qw49WOMYrJF/6sBmsWzcx5YcCav9LmeibQaTQW5LphQkgf+CiJy9b9xjV8Kh4D/l/jDcZL3Zpcw00/Z6/5ZZH+7gHYrkOZx0nuLYjGpF7rfUxQrc4J1eachJDswIZ9CoRdhzsKSegqeD0fEzkVqpV4VD1NEo8LAMfqQ8dPDmL15v145La5OCNMZu368IynxdPr2Q4lU+LwtWdee080LinpOSC/+8b1ePmdY3lZpz4bnk0dT0KQoZ4mQtiKJsRx+7U1tlWnLG6/tiYQJcNkGKrp5yypbAaM9jr+7hvXY+KE1z2P8/J6B2FEk6z3lvnSzVvrRBS8+YQQc1DROIt0ozVhHcp2Enomkntyez4mFCdpJZ7K0kL88Ea1UB1JqNP6Ha87NqVL53tPt+Ef/upK0XWl78/t2aYLwU5YQnAQ88VSEl9+51gkvGuZmLLWmgwhUrmml5KZ+bdshHpaSJ61Vbo2s49GPIZA+mhIKhyt3/G6kuAahOJpVTZzKzpgjbmj9zR+0XJkVNil03Fuxpug8gCl6/2XGqbj2dZO5XK9USj0QQgxBxUNBUxZh8JMQvcSDkzckwnFSbp5rfvs5cqbo8QC57app9PRexqIIdQiAkvrq/Hl62ochTfreag0wlMl2941u3m8q61zzNytLC3CX54NO1NVOoLwbHp9f05Kptt3GbZC5DWezGveu6wOX/vzy0LpDC4xUHT2ncHG3W/hrsXyDvOmFU+vymaZSBPmnb7LIPMApev94roEvrW8DvsO96Cz7zQan3kdPf2yZ5Dt9YYQYg4qGkKcrEMdvadHQmqkm09YoRpewoHXPa1dPFzZxGscJhQn6eaVKFO32pvetLo+PBOqZbmptQOPPn94zLNNpYBHnz+Mqy6agqX11Z7zyo/ykc2GWXbz2Mk63NM/gMf3HMHje45oGQFMVsHSVeIllugX7l5kPNTTSSnSsYwXTYiHUsJW+m1vaH4Tn0icpzQXTCqeqmuQNGHe6bsMskS4ynqf/j1NKox7ho9ZsEEfIfnDuG7YJ0WSP3DPkweVGno5NSxLlE80UtrWq7HXs691eN7ThuZDaLh/t2cTMEvABfSbSKk2WVPB9KZ1/uSJgb8/C9XmhW7j+sktc12fsR1+nruJZpRO81hiHe7QaGJnCt3GetL3DUDceFM63oUP7MaqTXtx17YDWLVpLxY+sBvPHDiKbz3VGtnmmSrfts44VRqcuqHak+ZzC6b7Wg+DzAPUXe+X1lfjJ7dcBbdH6Ge9IYREE3o0BEjc88dPDmq5501YzDItkVdfPMXTbb5ueyu6+wc8z93ZJ4vn9RtqEKSXR2KBu6CsGKkU8P4J9xCq9E1Q8v785hDoWCbdxhWPw7OkroWf524iJE+1QIATQSeX6nx/TmPKRrNKN8/mmm0HXH+b7eaZ1rctyQOIwjglYY03X/Nx/Ka1Azdf83FsaD6ktR4GnQeou94vu2IaNiKGO7aM9WyEkWdECAkfKhoCpFafJ/5wWLncp99QDTuBrrK00DUW1urMqoJEWPOrOAWVkCtRYtavuByAc9Upi8xN0O39mRC2dS2TTuNyesZTznbnTfcU6D53U0mo0gIBbgQtCOt+f+ljSldUDr1/QnRd3XBAFaVIhWzF1EsrOlmYHqek8aW1Bnr1xygpKkDRhPiohpt2/W0k32UYeYC66/2yK6rxSDz8PCNCSHagoiFAavU5fnIwVIuZk0AnTbiToiKs+VWcgio1LFViHrltrm39+iklhbhPoTGdKWG76rxi0fVULJNOzxiwF5BUMJmEalIoDEIQ9vv9fXDitK2iIkHHEq2jFAU5HlMsra/G2sW1owR0J0yO0yl3CBjb+NJaY+zWoIqSQiycWYWdr3Xg5MDQqGv0nj3P2sWXYnpVifi7DCsPUHe9D7ukPCEke1DREDCvplK5Q3PQmAorUSGsezOZkJuOZHOzjnHrDO6FKWG7qbUD63fY19K30LVMOj1jv8/dZOjPka5+X2NJx7QgbOL7O9J1Ej9uflPpHLrvOyijhOkKa7qsWVSLrfv+iM4+96ahpsbp9DztcocyjQtL6hLY+3Y3Wtq7AaTwyelT8Y1fv+a6Xmx76V3lhpHZKNmsQlDrPCEkWlDREFAQj+ELDdNDt5i5YSKsRJX0ezPdbTaToM4v2dwK4jE01FahobZK6xomhG1Jl/QoxjSbSkJtau0QfW9eeAmYuvPMz/dn5QRt3feuspIBqL/voI0SUZh/BfEY1q84128myEpwqs8z07iQWZZ5I9o9f68b/kfPASEk21DRELJmUS2e+MMRx2o3YVv2wo6JLps4YeTegug2m07Q5w8av8K2VJCJimUyHRNJqNb9S3BrguYlYPqZZ7rfnxXGsnBmFX61/6jSb/30cAjCKDG1tAg/uLF+ZDxBGx+8kFrwgy7QYIelLGzc/ZayF8tCd87Rc0AIySZUNIQUxGO4/6bZtlbmbFiWpQJdZWkRetISv8smTkDf6Y+Ur3fVRRXaNfVVCPr8YeBX2JYKMv/wV1dqe12CwkQSqvT+1y6+FGsWzcS+wz1obuvEUweOjgoFmlJaiBvnXIjySUUYSqbGNKr0M890v7/yszH8UiVjzfUzUXvBeaH2cJBQWVqIlns/PdKELyrGAS8LfpgFGux4Ys/YfjhS2FuCEJKLsI+GApbFrDrg3gkSpH0n9t77aWy9fT4evHkOtt4+HyvnTNO63nW1H1Pu6aBK0OcPC789QaSCTFe/rJt5mJjoqSK9/+lVJSPW2nV/cTle+vYSbL19Pr7YMP2sgD+Ix/YcGekJYfWuMDHPdL6/tYsvRe/JQaUO0QtmTMX5kyfigxPDoTM6c18qoE4slG8H3185e5SSIe0ZYqK3ihdOvS90e5tk4kfgl+T5ZcLeEoSQXIYeDUWiEvMqrSpSNCE+ym3e9l6v8rXiMeBzC6YHXuM/Gz0EgsBvxZega+AHjd8k1CNdJ0XXybz/gngMvacG8MSeI66eivJJRb7nmer3N5RMYeEDu8XW7BiGw8K+9ssD6Ow7p1DqeAmkPRxODyYBDJdZ/cp1l6D2/Mlo3GlfEatxZxvicWBJXUJc+CAzN8G6n3XL6zCltEh5PVUJgTJZDU2lJ4ZFDEC5sKBI5u+AaOTBEEKIDlQ0NNCNeTUdw6wj0H1uwXT84Nk3oGJIvP3aGhRNiAfabVbld9mq2a+CH2HbVA38bMbM6yrkQ8kUtu571/P8ibLiMfcvFSa/ufQy0T14zTOVd6wS128pLscEFYwkSHo4pHNyYAgbmg/hkdvmYt3yWbhjyyuO4/jq4ktFSptTbkJH7+kxzdskypRqCJRJI4bq87RmvLSgSDpRzMPyS7ZzeQgh4UJFIySCimFWFeiKJsRx+7U1+Onzhz3PHY8NKxn3LhsOhQna0p7rlvxMdIVtEzXwoxAzr6OQ7zvc41iiNJ1V8y7S7qrd86Es5Ewyz6TvWEU5Lp9UiMFkEv1nhsb8TdX6nj5OO6XIjeHSyvbnt8bxxB+81xFALTfBS5nSya8xbcTQaXy5pC6BbS/90dWAcEFZMf7xb+ag68MzeSmER2FdIoSECxWNEAg6wTlToLPioJ0EH0tx2PT7w6M8G/EY8MnpU1GbOA8XV5bgcwumj8RhA8F3mw2jm23Y+GlopesRyeWEenl+Rqn2bytLi4zOM8k7VlGOvcJrdEMILaXo53sOo3HnG57Hp4dsOY1Dmm+iEjLkpkzphkAFYcTQaXzpZUBYv+JyNMysGrnXfLL85/K6RAjRh4pGwJiMDZbw7Gsd+M721lGVbuwsRvcuq8PX/vwy/KLlCN7pOWmrWGQSdLdZE+fPp81ZxyMiSXT+9lOtWHTZBa7vOlv4EQilv02UT3INfUnh3DwzNZ8sJdpkmVmdEMKCeAxVk2Xd5qVUTCpE76lBR6VNJzfBSZnSDYEKyoih2vhSakDIN8t/2PsgISQ6UNEImDATnO97ts02JKrDwWJUNCGOL117idI1gu4269eSb2JzjpKyouoRkeQCdPcPYP59zfjhjbMjJbQMJVNIJlOocBFM3QRCFWGyIB7Dw7fNxT1PHhxjla84W4LWpLBXEI9h3fK6MfkIfgg6RFHKFxqm48fNhxyNAzq5CRaZypRuCFTQRhIVJCV4883yny+FPggh6lDRCJiwEpyffe0917yLFMxZjIKuvKVzflObc65bEqXzqKd/MFJCi91zz8RLINQRJnttQn96Tw5i9WZ7hcCPsDeltEjpeCdMhCgmyoo9Q6MSZcUAYni/z11xW7OoFp9ITHY0DnjlJriRqRT58XgFbSRRwcmAkK+W/3wq9EEIUYOKRsCEkeA8lEzhO9tbPY8zaTEKutusyvlNbc75YElUnUdREFqcnnsmEoFQpTu0V4iZHTrCnuUh+42wT4MbmQqTjvetIB7D+hWXOypTFutXXA4ArtWVrHF4GQdUqjRZ92mnTPkNgYpKeXIn8tXyn2+FPgghcqhoBEwYCc77DveM6ojsRj5ajExszmFYEsMIyVKp8R8FocXtuVtUTCrEQ7fOxfxLpoqel0SYVCk3m4nKc5N4alRIV5j8eN+W1lfjEYfQsSklhbjvpnNhdU4hZlaXcws344BK1Ss3z5WJEKigjSQWOt97vlr+87HQByFEBhWNgAkjNlhl08lHi5GJzVlVWVEVIsIKyUqfb1JMCi2qz0Ui8B8/NYh4LKb0jXgJkybu2asMr9RT40UsBnx+wcX488urR56nCe+bpZDtbe9Gy9tdAIafmZ1CZ1ddqvekWvidnQJ4rP8MGne+oRTKFKUQKCd0v/cwLf9h5qJFKUeGEBIuVDRCIOiNUbrpTC0tykuLkYnNWUVZURUiwg7Jsubbt54aXX3MCVPKp91zqSwtxPdX1mPZFdNsf6OqJA4lU9j7djda2rsBpLDgkirMnzFWMPYSokzcc+Mzr2NSYdz23Uk8NVJSKeDnf3gHnzyrAJj0vhXEY2iorUJDbZXt361r2Y5L8VrW9TIVwM/UVysLvGGFQOkI436+97As/9LqhCbJBQWREGIeKhohEeTGOK+mEhUlhZ417RtX1uelxcjE5iwVPI90nbTtcOwkRJgUClWEnqX11Vh02QWYf1+zY1id9VySyRS2Hzjqa046CVc9/YO4Y8sr+Mq/Hx/p35KOipLY1NoxJoRn43PtqCgpxP1poT4SRVAlxMwJt4R61dCsipKzJWJdBmPNkzDj+MO4lm4oU9AhUDpeCb/fu1/Lv2SNUK1OaJKo58gQQsxDRSNEwooNtqOkqACfqU9k5dpBY8ItL1FWLigrxtZ97yoJEaYENR2hp2hCHD+8cfZIGFXmc0kBODU4hFsfe1F8Tjsk1vufPn8YV/6HKVh2xejzSpXEY/0DjqVhj5+tEvXIbXMBQGRN9pozKZv/74Sd4Cj11PztgotxQ301ksnUqPeQSfo8CTOOP19zBrzQ9UqY+N51Lf+SNSLM6oROZHMfJISET/Q6duUBVmfu7QeOoqW9G0NJXZupjH2Hezy9GScHhrDvcE+g48gm1uacKB9tIU+UTxRZ6CzBEzinnFhY/71q3kWucfnpQoSFCUHNEnoyBRhL6GlyqWbk9FysXhGZ80Zyzkyk1vt121vHfAuS575u+Sz8j2fsw3fS+e72Vqzf4V5J6ntPt42MwW3OPHLbXDxy21zPkrR27xyQe2puqK/GghlT0dXvXmrWwrICSzARHjYeqwVJKpKlz6N0TClmS+ur8cLdi7D19vl48OY52Hr7fLxw9yJXJcNrjVCtTkgIISagR8MwQST9ernDx6vVMRO/bnkvS+KZj5Ki86Q/Z7+CmonQq8znUnVeMb72ywO2x+rE3UvnVXf/gK0l1+u5l08q8ky8BoD3T7jno9hZk73mzKmBIaz95aue1858BpLQrHgMOHY2Rl5lnoRZwWc8Vgvy45UwqZhJLf/SNWJyceG4rk5ICMkOVDQMMZRMYePuQ7YdcNPd7TqN6LwUl1yyOgZd6cSvW95N8BxOQPYm/Tn7FdRMhV6lP5eW9m7XZm2qcfcq88pJgHF77tsPHBWfX2cMbnMmUT5JdM7MZyCp/pVMAXdu2Y+H48PrQnX5RNd3XZ3W1TysCj7jsVqQH8NNNhQz6RoxXFlMRhT2CkJIfkBFwwBNrR1Yv6PN0epqWZXuefLgmONMVCvKFatjVLpueyk7ToKnznP2K6gF4a0yfc55NZWoLJVZS90EGKfnblroUTmfn29raX01HrrlKqzZ+grcoict79GKK6td4+dXXFk9Mk/CrOAz3qoF+THcSL73dctnGTW2yL992TXytTohISQ7UNHwibRWfgpWPLx9TLzfakUSYRYYtmZno9pHVLpu+1F2dJUGP4JaEN4q0+csiMfw/ZX1uGPLK67HVWsqu/NqKpEomygKn3JDR+F2e+c4+9/rljsrilNKi12VDMvavLe9Gztedc+L2fFqB765dNYoZSOsCj7jqVqQie7jTt/7iiurx/QN8WtskX6nn6ypxE/+L1znIzDcET4f3yshJDtQ0fCBiVr5pqoVeQmzALDwgd1Z8SaE0XVbgqkmZw/dMndMDXpJkzEdQS0Ib1UQ51x2xTR85d+PO1rkY9APsSmIx7B+RR1WKzQhtLs+NMfg1dW6cWcb4nHYvnuptbnl7S7PhHq7cLYwK/iEXS0ozIZy6ZgIF7NvTjiAO7eYN7ZIv+d4LOapZABA1XnFymMghBAnWHVKkfSKUj/fc1ipVr4TpqoVOVUqAaBdtcgEKkpTUPipJJNOU2sHGne2jVIyKksLsW75LJFHZMGMqVg550IssGky5/Qbr6pMqsJzEOcEgHuX1eEnt8xFZUalpmph5S83ltZX45Hb5o5Uy1JFWn3M7frrls+y/ZvbdyT3NMmedS4m6epU4Wtq7cDCB3Zj1aa9uGvbAazatBcLH9itvVapjsFvFTtg9Pc+r6YSjTv9rz9O15F8zyqVzQghxBT0aChgF3ZjkvQFXmpVsktCTbc6RsGbEIWqWCaSqp08Isf6B3Hnllfw1Q/6Mb2qZMT6al1XYpF1s94GESMfVNz9siuq8Zn6YEJsLCux1Rn8zff78H/aPvD83ZrrZ2Dtkk/4GsNQMoXGnW/Y/s3tO/JqpmlZmxfMmIqNz73lOY5cS9LVCVU0HWapGy5pMlws6MaHku9Zp5gFIYT4hYqGEGkuhh+sBX44ufx112Ol4S1hdhF2IgpVsfwqOxKPyIbmN0f+za5PhZNwIxGEgoiRDyruPsgQm4J4DA0zq9Awswot7d0iRaNh5seU7ild6as6rxhIeYc2OX1Hu9o6XXvcpDBsbZ5/yVQj4WzZCjeyQ0dhMG0Y8au0mJrLYRhbvL7nXCkaQgjJL6hoCPCbi3HB5CKcGUqh9+Sg5wIvUWhUwlui4E2wNjgvT9AxoWtfB7/KjrQpnYWdcGkn3KgIQkEI8LncpTcIwcmv1zL9O7LWDTcqSgqVCjr4LYUdFroKg0nDSBS8uRZhGVvcvufxWKqYEJJ9mKMhQFXITGft4kvxh3sX4/6bZgNwj6EFIFJoVOKEo+BNKIjHsG55nedxjTvfCKyLuiWUOm2hMbhXRTKhiGXGYpvKGxmvmM41cequrEL6dyRZN46fHBzJTfKTF+Cne3wQ6OZlmTSMRCE3zMLv+mMKE7knhBCiAj0aAnSETLvQF0kMrUTI+Ye/uhINtVWicUTFXT4lI0HYjiBDuPxa80wpYpnCTbbD2kyQzXAdU7kmfr2Wdt+RbkEH1XC2KFnuLXQVBpOGkSh4cy2i5E0YT6WKCSHZh4qGAOnmt275LFRNLnZcuL0WeOmGJ60eAkRngzO16fsRav0IpV4KmypBNNjLBlEI1zEhOPnxWjp9R7pCs2o4WxTysDLRvXeThpEoeHPTiVLjw1wOmSSE5BZUNARIN7/PN9R4CjduC7zqxigVuv1scKas1SY2fbsO7ImyiVi/Qr5J6wqlXo3bVAmiwV7YZLMJo928tL4rnTnrR5lz+o7C8iZGyXJvoXvvJg0jUfHmpkNvAiFkvEFFQ0BYXgGVjVHVkqyzwZm0Vvvd9JtaO2wbtnX2ncbqzfvxiIJQq2vN82rcJiHzPqMmCEnJZriO27zE2eum/62ytAh/OWcaltQlHOe8jjK35vqZaJhZ5XjOsNaNqFnuAX/3bsryHxVvrt246E0ghIwXYqlUytM429fXh/LycvT29qKsrCyMcUWSMMJELCsxYL8xPnzbXACwtSSnH+N3PE7Waj/XkNyb3TmHkilc/f1drmVCp5QU4l+/syQUoeHZ1zpwxxb1LtV296n7TLJNS3s3Vm3a63nc1tvnGxWq3OalxMvk9L0OJVNY+MBuUWicpQC+cPcicYnVINcNr7Grjtckfu7dlDc1CuF9hBCSb0h1AyoaioSR+Oq2MS6pS2DhA7sdLeomhApLcAniGjqb/p63unDrz170PPc//5dPomGmLEleF4nSAwAVkyYAsZixPho64wxynm4/cBR3bTvgedyDN8/ByjkXao0v85irL56CT/3oOd8NM2OwV+CclL7M38Lh924E/T68ymJ/5boa3LvMu/JbEESht0cUxkAIIfmEVDdg6JQiYbi93cKcvCpTmUj8DDK5VCeES9rRtqW9O3BFY+PuQ55KBgA8dOvVmH/JVHEOjcm47TAsuIf/1C86rqp0bId7yfjsjqksLURPv/ezl2CFdQGju7c/dMtcNO50Do3TTdwNYt3IFJ7/y7XTsen3R2yPffT5w7jqoilZseBHIVQoCmMghJDxCBWNiOK0MYaR+Bn0NdQ3fWnqdbD9JoaSKTyx54jo2K4PzyjdpylByMmy3dE7nMuydvGlWLNopi9r7lAyhX/a+47o2LaOPnT1nxlRnna1dXomkAP2oYGmlAxLUd64+y1se+ndMQrPuuWzMKW0eFRn8PR7iIIl3E4R8xpW2CVuCSGEECoaOUYYiZ9RSy5dcEkVNj7XLjouSPYd7sHxUzJh18SzUQ33kPSC2ND8JrbuewfrV1yubd3ed7gHPf0DomN/8OwbI/8/UTYRpz8a8kwgT6VSAauMw2xofnPMv3X2nsadW17Bw7fNtQ35igJOyqRbX8dc6clCCCEkv6CikWOEUbIxamUh58+YioqSQteQpYqSQswPWICSenAqSgp9Pxud8CdpL4jOvjO+ys/qerLSyxLbYQnD2SToill2eScvv3PMqDLpRpR7shBCCMk/qGjkGGGUbIxaWciCeAz33zTbtrytxf03zQ58PFIvxRf+zLufihu6/SlUhUhdYTqKfT3S56nfPidBWf+dwp3SPRGmlEknovjuskUQCeJMOieEkNFQ0chB3OrMr1s+C+WTirD9wFFfG12Uutha43nktrlYv+N1dPad64yeKCv2FQakgqQ7eEVJIdYsmql9DT/9KVSESD/CtPUcsu19SCfh0kcjHRUlxKT1XxruZFqZtPDyQo43ATmIggkso0sIIWOhopGj2FUqOtY/MKZijp+NLmpdbLM9Hkl3cL+eFT8VvySKUCY6gmv6czCZS2EJw6lUCu/3nRGfe93yWfh8wzkvkjVHmts68dSBo6OSyBPlE3HzNR/HhuZDnueVKm5eQrpKuJNJZdLCyws53gTkIDraB3FOQgjJB6ho5DDplYqaWjtw5xbzG13UykJmezxOnh5Tgpmfil/pCoAU3VAap+dQNnEC+k5/pHy+dGEYgNI9VE0uHiVAW3NkwYyp+NbyujFKAABse+mPRnKQJEK6ariTX2UyMxzLzQs53gTkIDraB3FOQgjJF6ho5AFR3+jyLSwjSM+K34pflgKwfkeba/K1iYR+u+dgNdVzE+IrSgpRPCE+OgQuQxh+6JarcOeWV0ReALdn5qSYSnKQgOHeLE7vWCqk64Y7eSmTTmPfuGouppQWec7NqK4bQa4XQfQICrLvECGE5DpUNPKAKG90+RqWEZRnxUTFL0sB2Lj7kG2IkF0oja5wZ/ccvATh+26a7amoTSktFikZU0uLtJQlrxwkAFj4wG7HeasipOt6jbyUSbux33zNRRhMJgEAn71imus7jOK6EfR6EUSPoDB6GxFCSK5CRSMPiOpGN97CMkxgquJXQTyGuxZfik8kJnsm9JsW7qSFBNyEV+lcXTnHXZj2GqedwiNpKlg+qUgspKvmzqgok9bYj3T1Y+u+d0f1BvF6h81tnYLReL8LiZIqOSaM9cKuU72f44Do9R0ihJAoQUUjD4jiRhfVsIxcwCn8Safil1eYV1DCnd/wMulcXVKXUB5bOpkeGem8/ebSy0Tn/+DEaVERgczrSJXJBTOmoqm1Az9uPqT0DptaO/CYsMu927uQKKmSY0JbL6Q/VbhE1PoOEUJIlIhnewDEP9ZG57Q3xjC8sYe50amEZRAnRostqZRejSdLIF0550IsmDF1VLiUm3AHDAt3Q24tpzMYSqbQ0t6N7QeOjljzM68rwWtOA8HMaem87fnwjOMx6VhCuqU8XlDmrUBNKSkUK1A679D6jRde64alpGY+L0vBaWrtEB0DhLdedAnfm/Q44JwXEhirn2Sj7xAhhEQJKhp5QBQ3uqiGc+UClnCWniwNAO+f7ehtCWd+MS3cNbV2YOEDu7Fq017cte0AVm3ai4UP7NYar9ecjiGYOS2dj5WlRcrK/dL6avzjX1/pee5jJwfFz1znHUqrYLl5ViQKzvodr2P9DpkSFNZ6IfWUVZUWjyjMLe3dnsq2pUgmykefP1E+kSGihJBxDUOn8oSoNdiLYjhXLhBmyJkJ4c6Kvd/V1onHbUJx/IRgZWNOS+djonySVi5NV7/MUm5a8E4/TvqbLzZM1+5QngLGKMp2x1hKUFjrhSTMqbykEF/7X6+OCluU5CyF2ecn3yr5EULyFyoaeUS2G9qlkytxy1HbsMOsBCQV2rpOnLHtNG8Xe283Xj/KUdhzWjpvr754Cl5+5xi+2DDdtimgk1BqWqDWOc5E/otJT+QHJ07js1dMC2W98Cq2kAJw/OQggMFRv5MqzCar0TmtTflayY8Qkp9Q0cgzst3QLn0cbgmwKQDL6hMjcfw6VWr80tTagfU7Xh/dz6GsGOtXXJ61DTvMkDNp87fGnW+M/Lcl0AAQdwb3qxzpzmmdOSSp+rXiymp86kfPjRL0KkuL8JdzpmFJXcL1OqYV8Hk1lagoKTwrHMvOZ2IMJj2R50+eqFVtTXeNcPKUTSkpRBKwfZZhF7BwUiZWXFmNR58/zEp+hJCcIZYSZJj29fWhvLwcvb29KCsrC2NcREi2LPLS69ptmJmdi3Wq1PilqbUDq126Tz9ieMOWPq+W9m6s2rTX83xbb59vRKG08kEA72pIwDmhr9xFuHXiwZvnYOWcC9UGqInfOaQq6FnPRSLoOT1zlXOkn8ttHgP2c9nvGIaSKSx8YLersnJBWTGAGN7vc1doXrh7kauXzO692R2XKJuIVfMuwvSqEtFa+Oxr7+E721tHeaMkmPr2nHCqBOeF3fMkhJCgkOoGVDRymGy50FWv6xXHny7cAPaWcjcBSFXZGkqmcPX3d7kKyhUlhXj5O0uMbNgqz0siwJkWJiTKoAnWLZ+FqsnFgSvEToKaqiCfOa+srudOoWIq78bEt2vNFbfQtSklhfhXh3lsQhnzUlYAKCs0Xt+zVBB3uxddYR4IVmGWvFMvglaECCEEoKKR95gSpsK6rtcGaglpqVTKMYnUjwU0nT2HunDrYy+63SYA4J+/9Ek01FZ5HueGzvMyafGWki7cdZ04MypcygReXqzMMegqI9J5pqOoqXib5tVUGmliZ2o8ToKn3zGY6qMhRUUQd/pe/ArzQQry0nfqRpieQ0LI+EWqGzBHIweRVCb69lOtODUwhET5JGPWYz8VkaRJzm5kxvrrNptrebvL9Trpx/lRNHSfVzaqLaXnQWw/cNT4+TO9I5nvSEcYtROSg0yml+bFNLd14r/98oDnvfjNpzKRz+N3DJJkfZMJ/dLSvIDzN6ZyjnTCKGBhIveKlfwIIVGCikYOIhGmuvsHsPaXrwIwF07lR4gzXaVmKJnCPU8e1CwDG0B7YBv8PK9sVhAzKag4hWClv6NkMoU7t7ziqTCmKxZHuk5i6753x5QgXVYva3SnMx+lz8Wu43YQybpRKSEtUVYK4rFRXh6nIhBeqL43u29M592H1Y/Iz7uKSiU/QghJh4pGDqK6UfoVciwB7zfCxmt24zNdpWbj7kOuORZuQvyCGVOx8bm3PK8zIa2dpU6IiV+Lc7YqiEmqElWUFOLYyUHbimIA8KWG6ZhWMck1BMt6R9/Z3uqpMCaTQONO91K6nb2nbYV8O3Tmo+S5xASKlWrVIqe5lyslpAFz4VO660j6N6ZzjrD6EUkqwQEY892xAzkhJKpQ0chBVDfKdCFn0WUX4OV3jokFZkmvBMn4pEJRKpXC+31nPHsY/N3ml0VjsRPi518y1bUkqMW2l/6I//rpS7GrrVNLSArC4myXoKzyPiVISo3ed9NsAHB9LtIQLLeqP5YycscW98pK1rHAsBcllbJXgPwI3wXxGNYtr7Mdi/Wc3DLedMK2vAR0naaBYSMNcZQo81JBPJP0b0yyFl1QVox//Js56PrwTKjeRMm39+XrarDj1Y5INGYlhBAvqGjkIDqbrSXkzL/vt+jpHxj5d5OVWdyEOGmdfACex7z8zjEcPyUrSWknxBfEY/jCn9VgQ/Obrr/t7DuDjbsP4cfNh7Tq1pu2OOuUCtZFmifiFt6VrVhx63mYFr6bWjvQuLPN9m+J8om4oT5hW1UtE6mnSyqgh53Po4I0TymZTKFx5xuivBa3/jyZ2H1j6eewIwVg5ZxpaJipl5/lN8Fe8k6/uXRWpBqNEkKIE6w6laOo9j9wwlRlFmlFJBNVarYfOIq7th3wHJNbiVrxOSYVOio1kgpGuhWkMoWVY/0DuHOLt9JnujKVH6FJUqq3srQI3WmKrym+2DAdv2ntNFb62Uvp/sktV2FKabGoYpCkzK9q9awodbg3VcHMbi4PJVPY296NzS8ewfOHutB/Zkjp9+nc92wbfvr8Ycff6nxDpitsReWdEkJIJixvOw7QCWuyw05g3vNWF279mXcJWAuVzVSygbodIy0BuXbxpbhrca3t30yUkbTwKnepKnz47WsRpcZdXorWQ7fMRePONuVQGC/++UufxPwZU40IalKh/3ffuB6f+tFznp3WJR6osBs3msLUmmSRPpd3tXXinicPjgl5LC0qwPWXnY9/PdIzqjS2V28f02WQs1VynBBCsgHL244D0isTdfadRuMzryt3uQXsy8be8+uDot/+7YKLcUN9tZIQJ61S43SMJHSsoqQQaxbNdDy/JKxJ2v3aKxTGek973+5GS3s3gBQWXFKF+Tb35ySsqDTP81PC1TSSMJB43DlcTlv5iJlLppdWD3v5nWOeYT1eZX4tTJSuDRs/TfCcsJ7txt1vOYY69g8M4ZnXOvCTW+ZiSmmRSLE0XQbZT+lvQgjJZ6ho5DjpwtSkwrivcKoPTpxWFhZuqK8OXZiVxGnff9Ns1w1dkjMiyeMAZLkImQnlG59rH2NxdRNWdOjsO42W9m4li34Q4RpepXrdlJF1y2ehcecbyh6Prg/tmz7qoCL0r5xzoe29SMr8pguhUSldK8X03M3k8Rfe9jymcWeb2ANhWpELsn8LIYTkMlQ08ggnga2ytFDk6agqLcbXf/WqSFjQrd5jSpB1uleVEC4va/uSugS2vfSu72RuaVKvbiMxJzI9XF7PxmR8eSZe3gU3ZSQej4mTfy3sBHArvn+4YePweOZfMtVz/kmF+UPvf4iW9m4sqUuMuhevPAU7ITSXStcCek3wVN5n7+mPPI9REeRNK3K56IEihJAwoKKRZ9gJbFdfPMU1dtwSWhDz7s6djmr1HtOCrImmdkvqEpg8sXBMSJN1Dr/lQ1VCKkwLIZnKpVulLN0u6yZxUkacFEI7nATwptaOMfH9G597CxUlhbj/ptmu9yat8rbxubew8bm3xsxpaZnf9PcvrdIWlTAcnbk77LGqM5qjIx2HaUUu1zxQhBASFnHvQ0iuYQlsK+dciAUzpqJoQnykdKxTj+zv/kWdONykoqRQWfC0BNlMQbGj9zRWb96PxqdfR0t7N4ZUkhEw9l5VFZ+FD+zGrT978ayQ2I6v/+pV7GrrHDnGEnIT5aMFhET5RNEzUAmpMCGEuN299WS/93TbqOfspQzZ/cYkQ8kUWtq7sf3AUcc5sLS+Gi/cvQhbb5+PLzZMB+A+l9PnQVNrB1Zv3m+bb3P85CBWb96PJpdmlJbQL8VSzqxz6gqhfueeE5LnrYr0Htctn4UHb56DrbfPxwt3L8KyK6qVnq2pcaS/U+k8csNSXJyOjmHYqBIVDxQhhIQFPRrjBElS7rBV35uHVs1FQ628xrwkfvuxPUfw2J4jxkJ1vFCx4PvxnKiEVHz2immelvPMWP/M//YqF2sXppPN+HIVL5elVC6YMRXzaipFvSOGkims3/G65zi8EnWX1lfjy9fVYNPvD3sm5md6qvxYz0147dIJKjxOeo+fb6gZM/al9dX46uJLRflQbqgK8iZ7kOSaB4oQQsKCisY4wktokQoLdtWS3FCJ3w4jVEenQoxuBSMVa7ZEWNm4arhfg1Nn8M7eU1j7y1c9r5euAGUrvtxPuJZUAB+uyObtqfNSpJpaO/Do84eVG2Ra5/QjhJqqnhVkeJxfQXt6VYnWddPREeRNKnJRb55ICCHZgIrGOMNNaPGq5pQCsKx+eFNW2YxVBNQwSkGGacFXtWbrCCvWGIeSKfx8j30DskzSFaBsxJebKAcqEcBV5p7TsX4qKlnnzLYQKgmP+9ZTB7HosgtQNEEvotbPPUrn1nnFE/DhmdGJ4VNKCnGfR56NG6YUOcC8B4oQQnIdKhrjGLsKUE7CghWioxPipCqgBl0KMkwLvo6lV0dYkTZKswvTMZEYq1pNLCxlT2XuOR3rpxpY+jmzKYRK7qGnfxDz7/stfnhjvbbQrnuP0jn4u29cj5cO9yhXDgsTk4oLIYTkOlQ0xilesdqWsLCrrROP7zkibjRmh7RqTyZBlYIM24KvY+lVEVakvU+cFBsdZShdsTjS1Y+t+94Vd2UGwlP25tVUIlFW7Bk+5RbfrzMGJ+UsW0Ko9B56+geMhFGp3qN0DhZNiKOhtkopR4wQQkj2YNWpcYhTBaj0ajkF8Rjm1VTiN62dtudQqUbkVuHFjSNd/QpHy8lGhZj0qknpVXf8hsyohPW4VStSqXBkVetatWkv7tp2ABuaD40R5DMrL2USlrJXEI9h/YrLPY9zi+9XHUMUk39V7yHIKmMWmdWvltQlAqmyRQghJHvQozHOUImNNxneotILwWJD8yF8IjHZuICRrQoxQVizpWE9ZRMn4HffuN41/l4S9iL1nnjlWcyrqURFSaFtyVnAbEO6pfXVeOS2uWP6aACy+H5Vj1wUk39V7iGMLtZuHtUX7l7EHAdCCMkTqGiMM1SUB5PhLUPJFMonFeGbSy9Dz4dn8O/HTuKJP7zj+psgk8KzlZxrojN6+jkOvf+h6Dd9pz/Cy+8c8xQc3ZQh1aRoay7tfbsb8Vhs1D3vaut0VDKs37qFa6k+O0uJ0ukM7qWYpgCsXVyL6VWlkRWM0+9BSlChi1FoDkkIISQcqGjkASoCmIryYCq8xcl6+dkrqvHMa86N0oK2rIadnGuih4E06dsOv4KjblL0nf+8H8dPnVMqEmXFOP1R0vU3FSWFWFKXGPlvE8+uIB7Tju/PdtUoC7/K1sO3zcW3njo4pmu8HVXnFfsd7hhMVBsjhBCSO1DRyHFUBTAV5cFENSI366WbkpFOUJbVMDFhxZWGLTkhefdugqzue0hXMgCI+locPzk4omBGxQKe7dKlJpStpfXVWHTZBZh/32/R49LYEQC+9ssDWL/icqPPNpvNIQkhhIQPFY0cRkcAU1Ee/OYySGr3S7AEZBNhR+kE1SU5ExNWXD+9HABZcrvX8zDZR0PCBydOh24B95pjQVeNcrq+SWWraEIcP7yxfiSMymlOvd93xrgiF0a1MdPrBCGEEH2oaOQougKYqvLgJ2TET/8BazyW0mNaKfAS3B66ZXQHbj/Cigkrrp9nGYN3crtEkF1Sl9AqU6zL+ZMnhmoBD0vxVL3+uuV1aNxpVtmyvuv1O9rQ2Wf/fINQ5IKuNpbtd0gIIWQ0VDRyFD8CmKryoBsyomKVdFN6drV1Gg2dkXha1mx9ZVTvkIpJhfhCQw3WLJqpLHBJn8NvzpaCtXu20nOUFhWgf2Bo5L8lQpaK0urWOT4dt4pSXqQrmM+89p7oN37D66Qeg6Cs5W7Xv2OLewK3rrK1tL4ak4sLcetjLxo/txMmwjGdiEqIHSGEkHNQ0chR/IYgqCoPOiEjUqvk2sWXYttL79oqPUvqElj4wG6j1lyJdyCzhcDxU4PY0PwmnvjDYdzvUQ41E+lz+KeWd/BPLe/YKgfSczz6uf+IeDymJAirKK1OSmp1+UTcfM1FmF5VgvMnT0QymXIVYJ3I9KqF0W9Dqmglkyk07nzDuLXcVIihjrLV1e+dL6N7bjuCKi3NJHNCCIkmVDRyFBMCWNDx5lLr5ZpFM7Fm0UxbpaelvVskBP98z2FUTS4WCdd+hKbjJwexevN+PKJgHVXtw2BngZU+y/kzvMu1Anolcjt7TwGQKalDyZTneMtLCjFxQsGo0J1Mr1qQFnALqaJ1x5ZXxvzNhLXcb4ihhY6yFVbjxHSCqODFJHNCCIkmVDRylGMCS6Tp7taqqFov7QQAqVLQuPONkf/vZWU2ITSpWEfdnoMddhZYr3OkACyrHxb+vRQt3RK5jTvfwKSiAiytr/ZUUiXv/v6bZo8oLJ29p9DTP4DK84pRPqkIQ8mU532baq7oR/E0YS336y3wo2yFocjZYbqCl/QZNrd1UtEghJAQcW4TTCLL0NkQDi/WLTff3VoVy3qZKB8t3CfKJ4qswDpKgWVlbmq1L59rCVd+noxlHZXi9BycSLfAep3DesWP7TmCVZv2YuEDux3v3Ypj17GgH+sfcH2umUjefUE8ht5TA/j7//1vaNz5Btb+zwNj7sHvHPLCr+Jp966Cun7mnPWrbFmKXBDnllx7wYypWDnnQiwQeuKckD7Dpw4cxVBmXCQhhJDAoEcjB5GGWkwpLQphNN74sV5effEUxGNjcybc8LIyq3oYnFC1RKc/h9+0duCfWtw7o9tdI/0cu9o68fieI2OejVM4j98SuTrWe693L03g9TOHvBK4VUPbnND1TEi9CuuWzxqTIyINN3J7BlFpRuiHeTWVqCwt8uwN0tM/yPApQggJESoaOUgYtehNo5sP8vI7x5SUDAuvmGwn4UpFqdGxhKc/B4miYXeNgngM82oq8d9+ecD2N04KgYlcAJ1Yd6d3r5rAqzOHJOVOvcKzpNNP1zMiDQ9bWl+Nz9RXKytbkmeQ7WaEfimIx/CXc6bh8T1HPI+N0rpICCH5DkOncpBsJHBmC79Cgdvvl9ZX44W7F2Hr7fPx4M1zsPX2+di4aq5nSFUM/vNf5tVUIlFWrH0NleRXC5MClolz6dyDCk5hYnahdW7hWT+5Za5rqJ3f+TCUTKF8UhG+0DB9jBcyMzxMNdxI5RmYDGXKBkvqEqLj8mFdJISQXIEejRwkWwmc2cCvUOD1ezsr+cPxubjnyYO2fSBMxa3vauvE6Y+Stn+TXEPHq2VSwDJxriA9czrlTt2s+vE4AklIt/M2VJYW4sY5F2JxXcKXV2G8lXy11kUn5TWf1kVCCMkV6NHIQbKZwBk2uonbfqzMS+ur8fJ3lmDt4lpUTCoc9TcTCciWldmpoV15SaHnNXS8Wl7PMgYgUVaMRFlw1nunsZk4Lh1db4mTVT+IhHQnb8Ox/kE8vucIek8N+FIyfr7ncKAeo6hhrYsx5P+6SAghuQI9GjlKPiRwStBJ3DYhVBTEY7hr8aVYs6jWaNy6JCF7UmGBZxiIjldLkgvw3z9bh0Mf9GND85u2101hbDUz3W7ZpjxzdtcPwltiMo8hSG/Ds6914DvbWz0Toy3yKWdhvKyLhBCSK1DRyGFyPYFTils36hVXVmPHqx2BCRWmmxpKErIlyda6/SXcBLEVV1aPqWpkR+PONsTjw+dySzT2mpsmemQ4Xf/may5yvQcLVW+JW2K7yncYVIO5+55tw0+fPyw+Hsi/nIXxsi4SQkguEEulUp5G4r6+PpSXl6O3txdlZWVhjIuQMTgJc7oW9Wyw/cBR3LXtgOdxD948ByvnXOh5nKSikN3zATDq3471D+DOLWPLzNphPdkvX1eDR58/POY3ltJQUVI4KjzMqZGi3T1MLS1C48p6LLvCWVl0Ko1rja+8pBC9JwddvSUv3L3I91yRvINMTM8DAHj2tfdsu5c7YfIZEEIIGV9IdQN6NEjO4GRNNu11CBLTeQmSPhUSRWThA7vFZVyt0J5Nvx+rZFh/BzAmByW9N0bmmL99wyz896db0dM//Jvu/oFRnhNrnNZvqs4rxvodr7uGHsXS/n8QHcUBeR+QTEzPg6FkCt/+l1bRsQBzFgghhIQDFQ1CQiSIimFOipZUCNbpr5EC4O0LHfubGIB7nzyI9TteR2ffGdfjO3tPY/Xm/Vi7uBa9pwbxLwfeE+cdpAAcOzmItYtrse2lPwYSWucnz8L0PNi4+y0ccyguYEcUcxZyyTNJCCFEBhUNQkLERF6CBBUhOMxkYEsBkB4LABuaD2lfb3pVKV64e5ExATZdGO46cUY7z8LkPGhq7XBM3rdj3fJZ+HxDTaSEeJ3wM0IIIdGHigYxQtDWyHyydoZRGUcl2TjfkoHT6TpxBs+89h7OnzwRn71imq85YycMS3BS5EzMA0uhlDK1tCiSSoZO+BkhhJDoQ0WDaGMJ/7vaOseEtZi0RuajtTPoyjgq5V0/e8U01zAeO2IAYjEgqRg+FSbxGNC4842R//YzZ5yEYQluipzfeaAa9ta4sj5SSsZ4aypICCHjDTbsI1o0tXZg4QO7sWrTXjy+58iY2HnLGtnU2uH7OnZNzUydP5s4NYczgUqysVsDSDusY26/tsa2OVpUyFSC3ObMUDKFlvZubD9wFC3t3RhK+7Gk94kd0uaGfuaBStjbV66rca3ilQ10GysSQgjJDejRIMpIrLsmrJG0duqjmmzsFMZTUTLcGT29glR6aM9VF02x/c3xk4PiBoumiTt4WpzmjJfHTCdZ3nRVJ6fQQalCedenZ2Ltkk/4HocJrHvp7D2F3735J9Fv8qmpICGEjCeoaBAlVKy7uk3HLIJqajYe0Ek2dgrjAeAY2uP0m11tnbbC+6nBIcfeFjpYCtM//NWV6Oo/g64TZ0aFS2WSOWck+QFnPkoqj8tkvo1XU0SvsLfq8on4/z59qe9xmEA3zyWf84gIISSfoaJBlNCx7upaI1XyDMhYdJKNnUrlenUpz/y7mwJip/zokK4wNdRWAQAan35d9NsPTpwWe8z+4a+vFJ1z3fJZqJpcbDTfRqIIhVHFzAQ6eS465Z4JIYREByoaRAkdoV7XGmm6qZkpcqkCVtBJ5244KSB2yk91+USsWz4LU0qL8cGJ0zjSdRI/Pluy1UkwzVSYhpIpPHXgqGhs50+eKPaYIQVRGJrpak5SReiFuxcFXsXMLzp5LlFTlAghhKhDRYMooSLU+7VGBtHcToKbIpGNClh+FZuodU6XKj+fSJw35llXlhbixjkXYnFdYsxv9h3uGeks7sbU0iLMq6nEM6+9JxpvV/+ZrHgNVEIHs6lQStDxhEZJUSKEEKIHFQ2ihJfwb2FCAAuruV06booEgNDr/UeptK+KwuN1rET5URWepd62lXOmKSVSnz95IhbMmBq610A1dDBqCmU6qp7QNdfPxNoll0ZGUSKEEKIHFQ2ihJvwn44pASyM5nYWbvHwqzfvR0VJYagVsKLUyExF4TGpHNkJz34rMC2pSwDQq8wVptcgqqGDOqiOsWFmFZUMQgjJA6hoEGWchH+3sBa/1wtawPOKhwdGl3i1O8ZkBawolfZVUXi8jn3olqtG8jB03qOJCkyW4qDjMQvTa5Ct0MEgsO7FK3wql+6JEEKIN1Q0iCd2FuSwrbtBC3g6MeR2mKqAFZXSvioKD87+fzdlbc3WV0b1uFDxdJiqwAQALe3dI/P2oVuuQuPONyKXSB1W6OBQMoW97d1oebsLwPB3Nv8Ssw0k0+/FKyGcyd+EEJI/UNEgrniFwQRt3Q2rwpMpBcFUGEtUSvuqdm72UtacunV7hYGZqsAEAAsf2G1T8aoOU0qLIpdIHXToYFNrB+558uAob93G595CRUkh7r9ptlFFy+leLLKVe0QIISQ4qGgQR7KdIxBmIrRfBcF0yEfQ8flSBS5ohUcaBmaiApPVw8NuPt+5ZXg+r5xzodZ9BElQ3sOm1g6s3rzf9m/HTw5i9eb9eMTwN55+L529p9DTP4DK84qRKIuOckcIIcQcVDSILdnOEQhbyZHEw5eXFKL3rOU36ApYQcbnP/taB76zvRU9/QMj/+akwIWRkCwJA9OpwDSvpnJEON/b3o31O6KR86KD6dDBoWQK63d4NzcM4plEuToWIYQQs8SzPQASTVRDZkwy8FES33rqoGus//eebsNQZhyOD6wYcuCc4mBh/ff9N83Gw7fNRaJ8tFCdKJ9oXPGRjEdHsbnv2TbcsWX/KCUDGH6Xf7d5P5paO0b9u6XwOF0lhnMJ1l7HeuGmTKgqPE2tHVj4wG6s2rQXd207gFsfexGdfdmZz1Fk3+EedPad8TxuPD0TQggh5qGiQWzJVo5AU2sH5t/3W9fGa0EJhVYMuZsisbS+Gi/cvQhbb5+PB2+eg623z8cLdy8KJIRMMh4Vnn3tPfz0+cOOf09hrAKnovC4HSvBTZlQUXgsb5hOcn/QOS9RwU3pymS8PBNCCCHmYegUsSUbNfydwqWcCEIAksTDhxn6YY1n79vdaGnvBpDCgkuqMF/x+kPJFL6zvdXzOLsQJpWEZKdj47GxieAWkjAwaQUmwLnylYRc6Elhgp4Pvb0ZFuPlmRBCCDEPFQ1iS9g1/N1yQpxIF4BMVqeKWgz5rrbOUYL7xufalZPi9x3ucfUSpWOnwKkkJNsde6x/AHduGU481s1vkSg8Le3dWp4M3fkcVlU001SWFomOq5hUyJ4WhBBCtKGiQWwJq4a/hUofi0yh0K46VaKsGKvmXYTpVaU5JQBmYiopXsX742TBVlHA7I59OO6/TKuXwqPj5VKdz5Zy0dzWiacOHB2lwOVKidZE+STRcV9oqMnJ74YQQkg0oKJBHAm6hn+6NfjQ+x8q/dYSCh0F8b4z2NB8aOS/c0UATMdk5S9p+MvU0qLALNi6ZVrtvAZOCo9OmI/KfLZTatMJq/SzXySduitKCrFm0cwQR0UIISTfoKJBXAmyhr+bwOZEZWkhfnjjcCMxlXCrXBEA0zHZHVwiWAJA48r6QC3YqmFpqr1UJCF/F5QV4x//Zg66PjyjNJ8lOUQ6pXKzEX4l6dR9/02zAx9HroaeEUIIkUFFg3hiOmdBNenbYmppEVru/TSKJgwXS1MJtwqzV4Ip4clk5S+JYPmV62qw7IroKGE6YWOSkL/1Ky5Hw8wqpbGoKLUqCmCYTSkzcfJYhnV9t3tPN25UnVcMpICufjXFkBBCSPahokFCRSfp2xIpfnBj/YiSAajH46sIgLqYFBxNV/5yEiwrSwvx/ZX1WHbFNKXxBYmfsLEgQv5UlFoLr/kZdlNKO4LyWHrhdu+rN+9HRUkhjp+0L16Qi2GQhBAyXqGiQUJFR2BzEhB1y24G1RfAtOAYROWvbAmWqvgNGzN9nzpzxm1+qihSAAJ9X2FWWRtKprD37W7c82v3hpxOSgaQm2GQhBAyXqGiQUJFKrCtuX4Gai+Y7CpYeQniTgTRF8Bk4rZFUJW/ola+1w4TYWMm71NlzkgUQKkitXH3IWx76Y9ZCW0yjW5eViZhhkESQgjxBzuDk1CRCmwNMz+GlXMuxIIZUx0FCdVO1Ondo02jYoFXwXR38FwhGw0j3fDqTJ6JlwIoVaQ2NB8aM68si35Ta4dwNNnHT7d2O3S/J0IIIeFCjwYJFdPhQE7x+HbnBcz2/kjHZOJ2JrkS7mSSeTWVSJQVo7PPvoO16YaRXrh5l9KRehv8KEi5ZtHXycuSElQYJCGEEDNQ0SChEkQ4UKYgfqTrJLbuexedfeZ7fzgRtAU+F8KdTLKrrROnP0ra/i1opdEJJ6V2amkRVs6ZhiV1CbECqBv2ZxFGYQNT6ORlSQnLo0UIIUQPKhokdIKoCpQpiK9ZNDNUD8DVF09BPAYkXaTGeGz4OBPkc/8Br/LH5SWFuP+m2VkJGzPlXfJSuKXKx563/hT5dx+E1yFsjxYhhBA9qGiQrBB0OFDYHoCX3znmqmQAw0rIy+8c8z2ubPZeCBpJmM2kwoKRakzZwNTcclO4b77mImxoftPzHBufa8ev9x+N9LtX8TpYZW3dlK1sebQIIYSoQ0WDZI18CgcKMkcjnSj0XggSSZhNroQMSXBSuAFg20vvikKrov7uJWFiFSWFeGjVXMyfMRW72jpdc66CDoMkhBBiDioahBggjCpJAx8l8a2nWo2W0I0aYSlsUSJd4U4Pibv5movw4+Y3PUOpov7uJXlZ9980Gw21w93aM5UvdgYnhJDchYoGIQYIorleOk2tHfjWUwfR0+/cyCzMBOGgckSiVtY2TOxC4ipKCgG4N7ADop8crpqXlU/eTkIIGc9Q0SDEAEE11wO8k6MzCdrabyJHxElRCVphiypO77j35CBSAG6oT+A3rZ2e54myp2c8lmkmhJDxDhUNQgwRRDUtnR4EQVr7nQTijt7TWL15P35yy1VYdsU0z3O4KSpBKWxRRdJV/sXD3aJzSd99tqqW0VNBCCHjCyoahBjEtNVWpQdB0NZ+idKzZusr2IgYll1RPep36T1Oftz8pmcyu2mFLcpIusr39A+isrQIx/oHfHt68rlqGSGEkGhBRYMQw5i02qqGwgRp7ZcoPckUcMeW/XgkPqww2Am1dmQmNOdimI2ul0D6jv9yzjQ8seeIL09PvlctI4QQEi2oaBASYaShMFNLi/CDG+sDFRJVlJ7vPd2GZDKFO7e8Ig77ykxozqUwm6bWDqzf0Ta6G33ZRKxf4e0lkL5jq/O4rqdHEqIV1cpVhBBCchMqGoREGEkPgsrSQrTc+2kUTYgHOhaV3I+O3tP4znb7UrxeRDmh2Y6m1g6s3rx/zL939g3nrTzi4SVQSYAviMe0PT2SEK0oV64ihBCSewQrmRBCfGFVswLOhchYxM7+74c3zg5cyQDOCcRS3ErxupFLpWuHkinc8+RB12PuffIghlzaxnu9Y2B0WJTl6Vk558IRz4+E8dijhBBCSHahokFIxLGSoxMZQn6ifGKoMfXpAnEQxDCclJxLpWv3vt3t2ePi2MlB7H3bvWpUGO94PPcoIYQQkh0YOkVIDhCV5Oil9dX4yS1XYc3WV+BkpI8BqCwtQnf/gPi8uVq6tqVdVna2pb0bDTOrXI8J+h2P1x4lhBBCsgc9GoTkCLohM6ZZdsU0bFw11/Zv1ogaV9ajunzimFAgJ8L2zphDJdXdmyDfsWqIFiGEEOIXejQIIcosu6Iaj8Tde13E43BsvJcCsHZxLaZXlfqy3JtsPKdzrgWXVGHjc+2e515wibs3IyzGW48SQggh2SWWSqU8TW19fX0oLy9Hb28vysrKwhgXISQH8BLOg2wOJzm3VHnQHedQMoWrv7/LNU+joqQQL39nSaQ8BdnqDE4IISQ/kOoGVDQIIYEShFDr1HjOYu3iWtSefx4ad77hqTw4ncsaoVdIl1N5Wwuv8raEEEJIrkFFgxCSlwwlU1j4wG7PbuN2ZCoPXueyEqRfuHuRq3I03LDvdXT2nRn5t0RZMdavuJxKBiGEkLxDqhswR4MQklN4NZ5zI7MDtqkmdlGpCkYIIYRECSoahIwjrDCmzt5T6OkfQOV5xUiU5ZZQ7LehXLryYLKJnVUxihBCCCHDUNEgZJxgl/BsYSpBOwxMNZSzPA9hXpMQQggZT7CPBiHjACvh2SlMqKP3NP5u8340tXaEPDI1hpIpJJMpVEwq9H0uK7zJrd9HLnYrJ4QQQqICFQ1C8pyhZArfe7pN1DLue0+3Ycip5XeWaWrtwMIHduPWx17E8VPO5WS9SFcestnEbiiZQkt7N7YfOIqW9u7IPndCCCFEF4ZOEZLnSJOnpYnP2cCrnK0UO+UhG03sguwvQgghhEQFKhqE5DmqydN+k61No+KR8cJJeQizapST0tR5NnzNq2/HeIQNBgkhJDehokFInqOayBy1xGepR6aytAg9/QMj/11dPhHrltdhSmmRSEANo2qUm9KUWXqXgvQw9P4QQkjuQkWDGIfWx2hhJTx7CetWc7qoJT5LPSzrls9ConxSpOedqb4d4wV6fwghJLehokGMkmvWx/GgFFkJz5Ich6ASn/0g9bAkyidFXjg32bcj36H3hxBCch8qGsQYuWZ9bGrtwPodr6Oz78zIvyXKirF+xeWRGqcJnBKeLcJQBnWVOssj09l72lbojKonxo6o9e2IsqJN7w8hhOQ+VDSIEXLN+tjU2oHVm/eP+ffOvjNYvXk/HomYUmSC9ITnsDuD+/F0pXtkYsCoORZ0CVrTRElpirr3kd4fQgjJfdhHgxhBxfqYSdj9BIaSKdzz5EHXY+558mBe9jWwEp5vnPsf8KVrL8GNV12IBTOmBq5k2DUL7FRoEmh5ZBLloy39ifKJkfOUuZHNvh3pqL6TbPT8iJr3hxBCiDr0aBAjSK2Ke97qGmU9z4ZVdW97N46fdG/4dvzkIPa2d6OhtiqQMYwXTHq6wixBGyTZ6NuRzlAyhfU75O8kW56PKHl/CCGE6EFFgxhBalXc+Nxb+PX+fx+x6oad0zGUTOF/vfxH0bEtb3dR0fCJ6Tj7MErQhkE2laaNuw+hs0/2TnpPDWQt7yqfQuYIIWS8QkWDGMHL+phOZ+9prN68HxUlhaHmdNhZZt2hAOMXxtk7kw2lqam1AxuaD4mO7ew9hb//3//m+I0CwLefasWiyy5A0YRgonCz7f0hhBDiDyoaxAhu1sdMrL+5hS/pVpRxqqLjVBHLjXywnGcbxtlHByuMTUpP/4CnUt7dP4D59zXjhzfODkzoz5eQOUIIGY9Q0SDG8CqhqoOKpdsplnzd8llo3PmGkpIxpaQQ8y+houEXxtlHB2mHdWD4u6k8r1h0bE//YChhVFT8CSEk92DVKWKUpfXV+N03rkdpUYGR87lZutMr4TzY/CZWO1TRuWPLK8qKz303zabF1ABRqbKUjapJUUNFaf/uX9QhUabmZfre023j8rkSQghxhh4NYpyX3zmG/oEhX+fwsnRL8y1UxZ4o9RHIF7IdZx/1fhFhIQ1PW7v4Uiytr8ZQMiXOu2LzPEIIIXZQ0SDGkVpOS4oKcOqsQqJSUUYn30LCuuWz8PmGGnoyAiBbcfa51q0+SCQFGxJlxVizaCaA0XlXUsZjUj8hhBBnGDpFjCO1nH7luhnKTdjc+jLoEsOwhZtKRrBYcfYr5wTfJBDw7uEBjK9wH68wthiA9SsuH/VeLG9UZWmR6BpM6ieEEJIOPRrEOBLLaUVJIdYsmomCeEzJ0q2S0GoH6/GPH0z38HDCqdJZFNEJY1taX41Fl12A+fc1o6ffvlIck/oJIYTYQUWDGEdS6vb+tGRrlYoyOqEZlhC0bnkdGneyHn+uoSvIh9HDIxfzP3TC2IomxPHDG2ePhFFRWSeEECKBigYJBCfLqV8hTDU0I10IWlpfjc/Usx5/LuFHkA+6h0cu53/olIvNdlI/IYSQ3COWSqU8A5T7+vpQXl6O3t5elJWVhTEukieYDisZSqaw8IHdoko4QPSty8QZJ0Hemj1egrzXXLE8XS/cvUh5TlrndgrN8nPuqJNLoWKEEEKCQaob0KNBAsV0oy23sCxL1Pnq4ksxvaqEQlAO45XIHcNwIveSuoTj+5XMFd1wn7DyP6IIm+cRQgiRwqpTJOewQjicqlXdtbg2tMpGJBhUBHk3vOaKrqcrjPwPQgghJNehR4PkJNnqy0DCwaQgH8RcCTr/gxBCCMkHqGiQnIUhHPmLaUHe9FzxKuHMcq+EEEIIQ6cIIRHEEuSdfA5Wk8VsCfJeze8AlnslhBBCqGgQQsQMJVNoae/G9gNH0dLeHVhX7VwQ5IPK/yCEEELyBZa3JYSIyEZzulxoiMdyr4QQQsYbUt2AigYhxBO/PS38QEGeEEIIiRbso0EIMYKJnhZ+YNI/IYQQkptQ0SCEuJKN5nTj3Ysx3u+fEEJIfkBFg+QsFMbCIezmdLmQlxEkTa0dWL+jDZ195+4/UTYR61eMj/snhBCSP1DRIDnJsDD2Ojr7zoz8W6KsGOtXXE5hzDBhNqdzygXp7D2Nv9u8P++rOTW1dmD15v1j/r2z7zRWb96PR/L8/gkhhOQXLG9Lcg5LGEtXMgCgs+8MVm/ej6bWjiyNLD8Jq6eFVy4IMJwLElRJ3WwzlEzhnicPuh5z75MH8/b+CSGE5B9UNEhOIRHG7qEwZpSwelqo5ILkI3vf7sbxk4Ouxxw7OYi9b3eHNCJCCCHEH1Q0SE6xt91bGDt+chB728eXMBZ0I70wmtOFnQsSNVqEc1Z6HCGEEJJtmKNBcoo/vN0lPq6htirg0USDsJKnl9ZXY0ldIrAE/DBzQaKJVDmkt44QQkhuQI8GySneO3bK6HG5jpU8nRlyZCVPm85XsXparJxzIRbMmGq0yldYuSBRZcElMsVYehwhhBCSbahokJxiWsUko8flMvmWPB1WLkhUmT9jKipKCl2PqSgpxHw2LySEEJIjUNEgOcWfzZBZc6XH5TL5mDwdRi5IVCmIx3D/TbNdj7n/ptl5q2gRQgjJP5ijQXIKy+rrlhA+Xqy++Zo8HXQuSJRZWl+NR26byx4xhBBC8gIqGiSnsKy+dk3NLMaL1Tefk6etXJDxyHhWtAghhOQXDJ0iOYdl9U2UFY/690RZ8bjqnDzek6fzmSCT7gkhhJCwoEeD5CS0+p5Lnv67zfsRw+iip+MhedoEQ8nUuJ5DhBBCSJDEUqmUZ0mavr4+lJeXo7e3F2VlZWGMixAiJKw+GvkGnxshhBCih1Q3oKJBSB5Ay7waVv+RzMXPemL5XuGKEEII8YNUN2DoFCF5wHhOnlbFq/9IDMP9R5bUJaisEUIIIT5gMjghJKsMJVNoae/G9gNH0dLeHXiDwXzsP0IIIYREEXo0CCFZIxt5ErvaOkXH5Vr/EUIIISRq0KNBCMkKVp5Epnehs/c0/m7zfjS1dhi/5lAyhX858J7o2FzsP0IIIYRECSoahJDQ8cqTAIbzJEyHUe073IOe/gHP4ypLC9l/hBBCCPEJFQ1CSOhkK09CGg5145wLmQhOCCGE+ISKBiEkdKQCv+k8CWk41OK6hNHrEkIIIeMRKhqEkNCRCvym8yTm1VSiunwinHwVMQwnozNsihBCCPEPFQ1CSOhkS+AviMfw3b+oG7lG5jUB4Lt/UcewKUIIIcQAVDQIIaGTTYF/aX01Hr5tLhLlo70lifKJ7AhOCCGEGCSWSqU8y7pI24wTQogK2eijYTGUTGHf4R58cOI0zp887D2hJ4MQQgjxRqobUNEghGQVCvyEEEJIbiHVDdgZnBCSVQriMSyYMTXbwyCEEEKIYZijQQghhBBCCDEOFQ1CCCGEEEKIcahoEEIIIYQQQoxDRYMQQgghhBBiHCoahBBCCCGEEONQ0SCEEEIIIYQYh4oGIYQQQgghxDhUNAghhBBCCCHGoaJBCCGEEEIIMQ4VDUIIIYQQQohxqGgQQgghhBBCjENFgxBCCCGEEGIcKhqEEEIIIYQQ41DRIIQQQgghhBiHigYhhBBCCCHEOFQ0CCGEEEIIIcahokEIIYQQQggxDhUNQgghhBBCiHGoaBBCCCGEEEKMQ0WDEEIIIYQQYhwqGoQQQgghhBDjUNEghBBCCCGEGIeKBiGEEEIIIcQ4VDQIIYQQQgghxqGiQQghhBBCCDEOFQ1CCCGEEEKIcahoEEIIIYQQQowzQXJQKpUCAPT19QU6GEIIIYQQQki0sXQCS0dwQqRonDhxAgDw8Y9/3OewCCGEEEIIIfnAiRMnUF5e7vj3WMpLFQGQTCbx3nvvYfLkyYjFYkYHSAghhBBCCMkdUqkUTpw4gWnTpiEed87EECkahBBCCCGEEKICk8EJIYQQQgghxqGiQQghhBBCCDEOFQ1CCCGEEEKIcahoEEIIIYQQQoxDRYMQQgghhBBiHCoahBBCCCGEEONQ0SCEEEIIIYQY5/8H3bk0OWGKRXQAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10, 10))\n", + "plt.scatter(item_tsne[:, 0], item_tsne[:, 1]);\n", + "plt.xticks(()); plt.yticks(());\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": { + "tags": [] + }, + "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", + "tsne_df = pd.DataFrame(item_tsne, columns=[\"tsne_1\", \"tsne_2\"])\n", + "tsne_df[\"item_id\"] = np.arange(item_tsne.shape[0])\n", + "tsne_df = tsne_df.merge(items.reset_index())\n", + "\n", + "px.scatter(tsne_df, x=\"tsne_1\", y=\"tsne_2\",\n", + " color=\"popularity\",\n", + " hover_data=[\"item_id\", \"title\", \"popularity\"])" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercises\n", + "\n", + " - Add another layer to the neural network and retrain, compare train/test error.\n", + " - Try adding more dropout and change layer sizes.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 66, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"functional_3\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"functional_3\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)         Output Shape          Param #  Connected to      ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩\n",
+       "│ user_input          │ (None, 1)         │          0 │ -                 │\n",
+       "│ (InputLayer)        │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ item_input          │ (None, 1)         │          0 │ -                 │\n",
+       "│ (InputLayer)        │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ embedding_2         │ (None, 1, 64)     │     60,416 │ user_input[0][0]  │\n",
+       "│ (Embedding)         │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ embedding_3         │ (None, 1, 64)     │    107,712 │ item_input[0][0]  │\n",
+       "│ (Embedding)         │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ flatten_6 (Flatten) │ (None, 64)        │          0 │ embedding_2[0][0] │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ flatten_7 (Flatten) │ (None, 64)        │          0 │ embedding_3[0][0] │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dot_4 (Dot)         │ (None, 1)         │          0 │ flatten_6[0][0],  │\n",
+       "│                     │                   │            │ flatten_7[0][0]   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dense_9 (Dense)     │ (None, 128)       │        256 │ dot_4[0][0]       │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dropout_6 (Dropout) │ (None, 128)       │          0 │ dense_9[0][0]     │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dense_10 (Dense)    │ (None, 64)        │      8,256 │ dropout_6[0][0]   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dropout_7 (Dropout) │ (None, 64)        │          0 │ dense_10[0][0]    │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dense_11 (Dense)    │ (None, 1)         │         65 │ dropout_7[0][0]   │\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┃\u001b[1m \u001b[0m\u001b[1mConnected to \u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩\n", + "│ user_input │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n", + "│ (\u001b[38;5;33mInputLayer\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ item_input │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n", + "│ (\u001b[38;5;33mInputLayer\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ embedding_2 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m60,416\u001b[0m │ user_input[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mEmbedding\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ embedding_3 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m107,712\u001b[0m │ item_input[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mEmbedding\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ flatten_6 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ embedding_2[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ flatten_7 (\u001b[38;5;33mFlatten\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ embedding_3[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dot_4 (\u001b[38;5;33mDot\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ flatten_6[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n", + "│ │ │ │ flatten_7[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dense_9 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m256\u001b[0m │ dot_4[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dropout_6 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ dense_9[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dense_10 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m8,256\u001b[0m │ dropout_6[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dropout_7 (\u001b[38;5;33mDropout\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ dense_10[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dense_11 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m65\u001b[0m │ dropout_7[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "└─────────────────────┴───────────────────┴────────────┴───────────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 176,705 (690.25 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m176,705\u001b[0m (690.25 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 176,705 (690.25 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m176,705\u001b[0m (690.25 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/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 1.3453 - val_loss: 0.9196\n", + "Epoch 2/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.9015 - val_loss: 0.8012\n", + "Epoch 3/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.7115 - val_loss: 0.7874\n", + "Epoch 4/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.6068 - val_loss: 0.7887\n", + "Epoch 5/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.5407 - val_loss: 0.7871\n", + "Epoch 6/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.4795 - val_loss: 0.7906\n", + "Epoch 7/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.4344 - val_loss: 0.7902\n", + "Epoch 8/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3894 - val_loss: 0.7886\n", + "Epoch 9/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3566 - val_loss: 0.7894\n", + "Epoch 10/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3330 - val_loss: 0.7925\n", + "Epoch 11/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3182 - val_loss: 0.7910\n", + "Epoch 12/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3130 - val_loss: 0.7950\n", + "Epoch 13/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3082 - val_loss: 0.7983\n", + "Epoch 14/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3002 - val_loss: 0.7946\n", + "Epoch 15/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.3019 - val_loss: 0.7951\n", + "Epoch 16/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.2957 - val_loss: 0.7982\n", + "Epoch 17/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.2955 - val_loss: 0.8052\n", + "Epoch 18/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.2971 - val_loss: 0.7983\n", + "Epoch 19/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.2901 - val_loss: 0.8007\n", + "Epoch 20/20\n", + "\u001b[1m1250/1250\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 1ms/step - loss: 0.2900 - val_loss: 0.8011\n" + ] + }, + { + "data": { + "image/png": "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/O9//wMAxMXFwdvbGwcOHEBwcDDs7Oxwxx134MqVK6bt4+PjMW7cOLi7u8Pe3h69e/fGH3/80eznh4joZjDMEhG1kOjoaCgUCvTu3bva5XFxccjKysL+/fuxY8cO7N+/H6dPn8aCBQtM67z22mt466238M477+D48eOYNm0aJk+ejH///RcAkJubi759+yIqKgrff/89jh8/jkWLFsHFxcV0jIKCAmzevBnffPMNDhw4gNTUVHz66aem7UeOHIl+/frh0KFDiImJwUsvvQQvL69mPjtERDeH3QyIiFpITEwM9Ho93NzczOZPmTIFa9euRXx8PLp164YdO3ZAoTD+eH7qqafw2WefAQCOHTuGpUuX4vDhw+jbty8AYMGCBfjss8+wb98++Pv749VXX4XBYMDu3bthY2MDAOjSpYvpWHFxcQgODsb3338PmczYnjFgwABkZWWZaszLy8Pzzz8PJycnAED37t2b8awQETUOwywRUQuJjo7G/fffj3fffddsfuVW07feessUZAFArVabXm/YsAG33XabKchWUKlU0Gq1KCkpwTfffIP169ebguyN4uPjsWLFClOQBYC0tDQMGjQIABAcHIwOHTqgR48eeOCBB/DAAw+YlhERWSJ2MyAiaiGxsbG4/fbb4e/vbza5ubkhMzMTGRkZCAkJMdsmJibGNC8pKQmBgYFmy4uKinD27FkEBQXh5MmTKC4uRv/+/as9/vnz53H16lUMGDDANE+n0yEpKcl0DDc3N5w4cQKrVq1CXl4ehg8fjnnz5jXZOSAiampsmSUiagFpaWnIzc1FaGhotcvj4uIAAHq93jQvIyMDGzduxI8//ggAcHR0xLVr18y2+7//+z94enpi6NChSElJAQDk5eWhffv21R7DwcEB/v7+pnnHjx+HVqs1C9E2NjaYMGECJkyYgE6dOmHnzp039ZmJiFoCW2aJiFpAdHQ0AKBdu3bIyMgwmwwGA+Li4uDo6Ii3334bycnJOHz4MEaOHImxY8fi7rvvBgDcdddd2LFjB3bu3InTp0/j448/Rnh4ONauXQuFQoFu3bqhc+fOmDdvHuLi4pCamor169fj0KFDAK73l63cxSAuLg633HILnJ2dkZaWhnnz5uGvv/7CmTNnEBERgW+//RaTJ09u+RNGRFRPbJklImoBMTExAIBu3bqZzVcqlSgoKEBcXBweeeQRqNVq9O3bF2q1Gk888QT++9//mtadOnUqTp8+jTlz5iAnJwe33nor9uzZgyFDhgAAFAoFduzYgXnz5mHYsGEwGAwIDQ3FunXrABj7y97YjSE2NtY0r6SkBElJSfjuu+9QWFgIPz8/PP300+xmQEQWTRBFUZS6CCKiti4gIABz587FE088IXUpRERWhd0MiIgkVlJSgpMnT9Y4/iwREdWMYZaISGKJiYkwGAxVRiogIqK6sZsBEREREVkttswSERERkdVimCUiIiIiq8UwS0RERERWi2GWiIiIiKwWwywRERERWS2GWSIiIiKyWgyzRERERGS1GGaJiIiIyGr9P/K8QRWFsh6JAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.layers import Input, Embedding, Flatten, Dot, Dense, Dropout\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# ---------------------------\n", + "# Define constants\n", + "# ---------------------------\n", + "embedding_size = 64\n", + "max_user_id = all_ratings['user_id'].max()\n", + "max_item_id = all_ratings['item_id'].max()\n", + "\n", + "# ---------------------------\n", + "# Inputs\n", + "# ---------------------------\n", + "user_input = Input(shape=(1,), name='user_input')\n", + "item_input = Input(shape=(1,), name='item_input')\n", + "\n", + "# ---------------------------\n", + "# Embeddings\n", + "# ---------------------------\n", + "user_vec = Flatten()(Embedding(input_dim=max_user_id+1,\n", + " output_dim=embedding_size)(user_input))\n", + "item_vec = Flatten()(Embedding(input_dim=max_item_id+1,\n", + " output_dim=embedding_size)(item_input))\n", + "\n", + "# ---------------------------\n", + "# Dot product of embeddings\n", + "# ---------------------------\n", + "dot = Dot(axes=1)([user_vec, item_vec])\n", + "\n", + "# ---------------------------\n", + "# Add hidden layers with dropout\n", + "# ---------------------------\n", + "x = Dense(128, activation='relu')(dot) # new hidden layer\n", + "x = Dropout(0.5)(x) # increased dropout\n", + "x = Dense(64, activation='relu')(x) # original hidden layer\n", + "x = Dropout(0.4)(x)\n", + "\n", + "# ---------------------------\n", + "# Output layer\n", + "# ---------------------------\n", + "output = Dense(1)(x)\n", + "\n", + "# ---------------------------\n", + "# Define and compile the model\n", + "# ---------------------------\n", + "model = Model(inputs=[user_input, item_input], outputs=output)\n", + "model.compile(optimizer='adam', loss='mae')\n", + "model.summary()\n", + "\n", + "# ---------------------------\n", + "# Train the model\n", + "# ---------------------------\n", + "history = model.fit([user_id_train, item_id_train], rating_train,\n", + " validation_data=([user_id_test, item_id_test], rating_test),\n", + " epochs=20,\n", + " batch_size=64)\n", + "\n", + "# ---------------------------\n", + "# Plot train vs test error\n", + "# ---------------------------\n", + "plt.figure(figsize=(8,5))\n", + "plt.plot(history.history['loss'], label='Train MAE')\n", + "plt.plot(history.history['val_loss'], label='Test MAE')\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('MAE')\n", + "plt.title('Train vs Test Error')\n", + "plt.legend()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"functional_5\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"functional_5\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)         Output Shape          Param #  Connected to      ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩\n",
+       "│ user_input          │ (None, 1)         │          0 │ -                 │\n",
+       "│ (InputLayer)        │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ item_input          │ (None, 1)         │          0 │ -                 │\n",
+       "│ (InputLayer)        │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ embedding_6         │ (None, 1, 64)     │     60,416 │ user_input[0][0]  │\n",
+       "│ (Embedding)         │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ embedding_7         │ (None, 1, 64)     │    107,712 │ item_input[0][0]  │\n",
+       "│ (Embedding)         │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ flatten_10          │ (None, 64)        │          0 │ embedding_6[0][0] │\n",
+       "│ (Flatten)           │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ flatten_11          │ (None, 64)        │          0 │ embedding_7[0][0] │\n",
+       "│ (Flatten)           │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dot_6 (Dot)         │ (None, 1)         │          0 │ flatten_10[0][0], │\n",
+       "│                     │                   │            │ flatten_11[0][0]  │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dense_15 (Dense)    │ (None, 256)       │        512 │ dot_6[0][0]       │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dropout_10          │ (None, 256)       │          0 │ dense_15[0][0]    │\n",
+       "│ (Dropout)           │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dense_16 (Dense)    │ (None, 128)       │     32,896 │ dropout_10[0][0]  │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dropout_11          │ (None, 128)       │          0 │ dense_16[0][0]    │\n",
+       "│ (Dropout)           │                   │            │                   │\n",
+       "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n",
+       "│ dense_17 (Dense)    │ (None, 1)         │        129 │ dropout_11[0][0]  │\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┃\u001b[1m \u001b[0m\u001b[1mConnected to \u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━┩\n", + "│ user_input │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n", + "│ (\u001b[38;5;33mInputLayer\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ item_input │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ - │\n", + "│ (\u001b[38;5;33mInputLayer\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ embedding_6 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m60,416\u001b[0m │ user_input[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mEmbedding\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ embedding_7 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m107,712\u001b[0m │ item_input[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mEmbedding\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ flatten_10 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ embedding_6[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mFlatten\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ flatten_11 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ embedding_7[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mFlatten\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dot_6 (\u001b[38;5;33mDot\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ flatten_10[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m], │\n", + "│ │ │ │ flatten_11[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dense_15 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m512\u001b[0m │ dot_6[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dropout_10 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m256\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ dense_15[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mDropout\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dense_16 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m32,896\u001b[0m │ dropout_10[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dropout_11 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m128\u001b[0m) │ \u001b[38;5;34m0\u001b[0m │ dense_16[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "│ (\u001b[38;5;33mDropout\u001b[0m) │ │ │ │\n", + "├─────────────────────┼───────────────────┼────────────┼───────────────────┤\n", + "│ dense_17 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m) │ \u001b[38;5;34m129\u001b[0m │ dropout_11[\u001b[38;5;34m0\u001b[0m][\u001b[38;5;34m0\u001b[0m] │\n", + "└─────────────────────┴───────────────────┴────────────┴───────────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 201,665 (787.75 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m201,665\u001b[0m (787.75 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 201,665 (787.75 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m201,665\u001b[0m (787.75 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 Model\n", + "from tensorflow.keras.layers import Input, Embedding, Flatten, Dot, Dense, Dropout\n", + "\n", + "embedding_size = 64\n", + "max_user_id = all_ratings['user_id'].max()\n", + "max_item_id = all_ratings['item_id'].max()\n", + "\n", + "# Inputs\n", + "user_input = Input(shape=(1,), name='user_input')\n", + "item_input = Input(shape=(1,), name='item_input')\n", + "\n", + "# Embeddings\n", + "user_vec = Flatten()(Embedding(input_dim=max_user_id+1, output_dim=embedding_size)(user_input))\n", + "item_vec = Flatten()(Embedding(input_dim=max_item_id+1, output_dim=embedding_size)(item_input))\n", + "\n", + "# Dot product of embeddings\n", + "dot = Dot(axes=1)([user_vec, item_vec])\n", + "\n", + "# Hidden layers with **larger sizes** and **more dropout**\n", + "x = Dense(256, activation='relu')(dot) # larger first hidden layer\n", + "x = Dropout(0.6)(x) # increased dropout\n", + "x = Dense(128, activation='relu')(x) # larger second hidden layer\n", + "x = Dropout(0.5)(x)\n", + "\n", + "# Output layer\n", + "output = Dense(1)(x)\n", + "\n", + "# Model\n", + "model = Model(inputs=[user_input, item_input], outputs=output)\n", + "model.compile(optimizer='adam', loss='mae')\n", + "model.summary()\n", + "\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### A recommendation function for a given user\n", + "\n", + "Once the model is trained, the system can be used to recommend a few items for a user that they haven't seen before. The following code does that.\n", + "\n", + "- we use the `model.predict` to compute the ratings a user would have given to all items\n", + "- we build a function that sorts these items and excludes those the user has already seen." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "def recommend(user_id, top_n=10):\n", + " item_ids = range(1, items['item_id'].max())\n", + " seen_mask = all_ratings[\"user_id\"] == user_id\n", + " seen_movies = set(all_ratings[seen_mask][\"item_id\"])\n", + " item_ids = list(filter(lambda x: x not in seen_movies, item_ids))\n", + "\n", + " user = np.zeros_like(item_ids)\n", + " user[:len(item_ids)] = user_id\n", + " items_ = np.array(item_ids)\n", + " ratings = model.predict([user, items_]).flatten()\n", + " top_items = ratings.argsort()[-top_n:][::-1]\n", + " return [(indexed_items.loc[item_id][\"title\"], ratings[item_id]) for item_id in top_items]" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m48/48\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 965us/step\n", + " 4.4: 20,000 Leagues Under the Sea (1954)\n", + " 4.3: Letter From Death Row, A (1998)\n", + " 4.2: Young Guns (1988)\n", + " 4.1: Faster Pussycat! Kill! Kill! (1965)\n", + " 4.1: Dead Man Walking (1995)\n", + " 4.1: Legends of the Fall (1994)\n", + " 4.0: Color of Night (1994)\n", + " 4.0: Wizard of Oz, The (1939)\n", + " 4.0: To Kill a Mockingbird (1962)\n", + " 4.0: Eat Drink Man Woman (1994)\n" + ] + } + ], + "source": [ + "for title, pred_rating in recommend(5):\n", + " print(\" %0.1f: %s\" % (pred_rating, title))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "### Exercises\n", + "\n", + "- Try modifying our neural network to improve recommendation. You could try adding more layers, or using a different loss function. \n", + "- Your goal is to improve the Mean Absolute Error on the test set. Show the results of your best model." + ] + }, + { + "cell_type": "code", + "execution_count": 70, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Extend and improve the model below\n", + "class RegressionModel(Model):\n", + " def __init__(self, embedding_size, max_user_id, max_item_id):\n", + " super().__init__()\n", + "\n", + " self.user_embedding = Embedding(output_dim=embedding_size,\n", + " input_dim=max_user_id + 1,\n", + " name='user_embedding')\n", + " self.item_embedding = Embedding(output_dim=embedding_size,\n", + " input_dim=max_item_id + 1,\n", + " name='item_embedding')\n", + "\n", + " # The following two layers don't have parameters.\n", + " self.flatten = Flatten()\n", + " self.dot = Dot(axes=1)\n", + "\n", + " def call(self, inputs):\n", + " user_inputs = inputs[0]\n", + " item_inputs = inputs[1]\n", + "\n", + " user_vecs = self.flatten(self.user_embedding(user_inputs))\n", + " item_vecs = self.flatten(self.item_embedding(item_inputs))\n", + "\n", + " y = self.dot([user_vecs, item_vecs])\n", + " return y\n", + "\n", + "\n", + "model = RegressionModel(embedding_size=64, max_user_id=all_ratings['user_id'].max(), max_item_id=all_ratings['item_id'].max())\n", + "model.compile(optimizer=\"adam\", loss='mae')" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "metadata": { + "collapsed": false + }, + "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.2994 - val_loss: 1.0466\n", + "Epoch 2/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 993us/step - loss: 0.9039 - val_loss: 0.7929\n", + "Epoch 3/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 991us/step - loss: 0.7525 - val_loss: 0.7663\n", + "Epoch 4/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 997us/step - loss: 0.7217 - val_loss: 0.7564\n", + "Epoch 5/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 995us/step - loss: 0.6976 - val_loss: 0.7441\n", + "Epoch 6/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.6723 - val_loss: 0.7393\n", + "Epoch 7/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.6573 - val_loss: 0.7378\n", + "Epoch 8/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.6363 - val_loss: 0.7347\n", + "Epoch 9/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.6138 - val_loss: 0.7353\n", + "Epoch 10/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.5883 - val_loss: 0.7370\n" + ] + } + ], + "source": [ + "# Training the model\n", + "history = model.fit([user_id_train, item_id_train], rating_train,\n", + " batch_size=64, epochs=10, validation_split=0.1,\n", + " shuffle=True)" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Model\n", + "from tensorflow.keras.layers import Embedding, Flatten, Dense, Concatenate\n", + "from tensorflow.keras.losses import Huber\n", + "\n", + "class RegressionModelWithHidden(Model):\n", + " def __init__(self, embedding_size, max_user_id, max_item_id):\n", + " super().__init__()\n", + "\n", + " # Embeddings\n", + " self.user_embedding = Embedding(input_dim=max_user_id+1, output_dim=embedding_size)\n", + " self.item_embedding = Embedding(input_dim=max_item_id+1, output_dim=embedding_size)\n", + " self.flatten = Flatten()\n", + "\n", + " # Hidden layers\n", + " self.hidden1 = Dense(128, activation='relu') # first hidden layer\n", + " self.hidden2 = Dense(64, activation='relu') # second hidden layer\n", + " self.out_layer = Dense(1) # output layer\n", + "\n", + " def call(self, inputs):\n", + " user_vecs = self.flatten(self.user_embedding(inputs[0]))\n", + " item_vecs = self.flatten(self.item_embedding(inputs[1]))\n", + "\n", + " # Concatenate embeddings\n", + " x = Concatenate()([user_vecs, item_vecs])\n", + "\n", + " # Pass through hidden layers\n", + " x = self.hidden1(x)\n", + " x = self.hidden2(x)\n", + "\n", + " y = self.out_layer(x)\n", + " return y\n", + " \n", + "model =RegressionModel(embedding_size, max_user_id, max_item_id)\n", + "model.compile(optimizer='adam', loss=Huber())\n" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "metadata": {}, + "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: 2.7950 - val_loss: 0.6311\n", + "Epoch 2/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.5202 - val_loss: 0.4232\n", + "Epoch 3/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3913 - val_loss: 0.3991\n", + "Epoch 4/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3686 - val_loss: 0.3878\n", + "Epoch 5/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3513 - val_loss: 0.3832\n", + "Epoch 6/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3356 - val_loss: 0.3778\n", + "Epoch 7/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3221 - val_loss: 0.3770\n", + "Epoch 8/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.3021 - val_loss: 0.3727\n", + "Epoch 9/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.2844 - val_loss: 0.3727\n", + "Epoch 10/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 1ms/step - loss: 0.2608 - val_loss: 0.3752\n" + ] + } + ], + "source": [ + "# Training the model\n", + "history = model.fit([user_id_train, item_id_train], rating_train,\n", + " batch_size=64, epochs=10, validation_split=0.1,\n", + " shuffle=True)" + ] + } + ], + "metadata": { + "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.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +}