diff --git a/01_materials/labs/lab_1.ipynb b/01_materials/labs/lab_1.ipynb index 667fd306..2311661b 100644 --- a/01_materials/labs/lab_1.ipynb +++ b/01_materials/labs/lab_1.ipynb @@ -31,10 +31,12 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ + "# Import libraries and load dataset\n", + "\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", @@ -45,9 +47,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 8, 8)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "digits.images.shape" ] @@ -63,9 +76,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1797, 64)" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "digits.data.shape" ] @@ -81,9 +105,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(1797,)" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "digits.target.shape" ] @@ -99,9 +134,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "# Selecting 9 random indices\n", "random_indices = np.random.choice(len(digits.images), 9, replace=False)\n", @@ -131,12 +177,25 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH2CAYAAAChsP9pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAjs0lEQVR4nO3dX2zT9f7H8VdHuwls7I8QcWOuSxcFjTBioiKHnCGJEQ/JhhKNhwR29IIcQJzR5JzE4CaoEKOB34UTNWYjwXMkxGUgh8T4h+EJkojJmUQjyqLljCybiNkYR8cY+/wuDIsTgY7Pd+272/OR7MLavvpp+25ftv3aT8g55wQAAFIqI9ULAAAAFDIAACZQyAAAGEAhAwBgAIUMAIABFDIAAAZQyAAAGEAhAwBgAIUMAIABaVvIjY2NCoVC+uyzzwLJC4VCWrt2bSBZv86sq6u76st/8803euCBB5Sfn69Jkybpjjvu0J49e4JbIALDPMIS5jE9pW0hj3XxeFzz5s3T119/rW3btmnXrl2aNm2aqqqq9M4776R6eRhnmEdYMlbnMZzqBeD3bd68WT/99JPee+89FRUVSZLuvfde3XrrrXriiSe0dOlSZWTw31NIDuYRlozVeUy/FY9AX1+fnnzySZWXlys3N1cFBQWaN2+edu/efcnLvPbaa7rxxhuVlZWlm2++WW+//fZF5+ns7NSqVas0Y8YMZWZmqrS0VM8++6wGBgYCW/vBgwc1Z86coWGTpAkTJmjx4sVqb2/Xp59+Gth1ITmYR1jCPNozpt8hnz17Vj/++KOeeuopFRUVqb+/Xx988IHuv/9+NTQ0aMWKFcPOv2fPHu3fv18bNmzQ5MmTVV9fr4cffljhcFjLli2T9Muw3X777crIyNAzzzyjWCymQ4cO6bnnnlM8HldDQ8Nl1xSNRiX98pHL5fT396ugoOCi07OysiRJR44c0Z133pngPQELmEdYwjwa5NJUQ0ODk+QOHz6c8GUGBgbcuXPn3KOPPurmzp077N9JchMnTnSdnZ3Dzj9z5kxXVlY2dNqqVatcdna2O378+LDLv/TSS06S+/LLL4dl1tbWDjtfLBZzsVjsimutqqpyeXl5rre3d9jpCxYscJLcCy+8cMUMJA/zyDxawjym5zyO6Y+sJWnXrl2aP3++srOzFQ6HFYlE9Oabb+qrr7666LyLFi3SddddN/TPEyZM0EMPPaS2tjadOHFCkrR3714tXLhQhYWFGhgYGPpbvHixJOnAgQOXXU9bW5va2tquuO61a9eqp6dHK1as0Lfffquuri6tX79en3zyiSSl5fcjYB5hC/NoS3quOkFNTU168MEHVVRUpB07dujQoUM6fPiwHnnkEfX19V10/unTp1/ytFOnTkmSurq69O677yoSiQz7u+WWWyRJP/zwQyBrX7RokRoaGvTxxx8rFotp+vTpampq0saNGyVp2HcnSA/MIyxhHu0Z098h79ixQ6Wlpdq5c6dCodDQ6WfPnv3d83d2dl7ytGuvvVaSNHXqVM2ePVvPP//872YUFhb6LnvIypUrtXz5ch07dkyRSERlZWXatGmTQqGQFixYENj1IDmYR1jCPNozpgs5FAopMzNz2LB1dnZe8ijCDz/8UF1dXUMfy5w/f147d+5ULBbTjBkzJElLlizRvn37FIvFlJ+fP+q3IRwOa9asWZKknp4evf7666qsrFRJScmoXzeCxTzCEubRnrQv5I8++uh3j8i77777tGTJEjU1NWn16tVatmyZ2tvbtXHjRl1//fU6duzYRZeZOnWq7r77bq1fv37oKMKjR48OO7R/w4YNev/993XXXXdp3bp1uummm9TX16d4PK59+/Zp27ZtQ8P5e8rKyiTpit+TfP/993r55Zc1f/585eTk6OjRo3rxxReVkZGhV155JcF7B8nGPMIS5jHNpPqosqt14SjCS/199913zjnnNm/e7KLRqMvKynKzZs1yb7zxhqutrXW/vemS3Jo1a1x9fb2LxWIuEom4mTNnurfeeuui6z558qRbt26dKy0tdZFIxBUUFLjbbrvNPf300+7MmTPDMn97FGFJSYkrKSm54u07deqUu+eee9y0adNcJBJxN9xwg3vsscfcyZMnR3xfYfQxj7CEeUxPIeecS0bxAwCASxvTR1kDAJAuKGQAAAygkAEAMIBCBgDAAAoZAAADKGQAAAxI6IdBBgcH1dHRoZycnGG/6gJIknNOvb29KiwsTMqPujOPuBzmEZaMZB4TKuSOjg4VFxcHsjiMXe3t7Zf9FZ6gMI9IBPMISxKZx4QKOScnZyhwypQp/ivzUF9f752xd+9e74zc3FzvjFdffdU7Iy8vzzvD1+nTp1VcXDw0J6PN0jweP37cO2PTpk3eGf/85z+9M4J4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ + "# Now, displaying only images labelled as 9\n", + "\n", "# 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", @@ -176,12 +235,13 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ - "from sklearn.model_selection import train_test_split\n", + "# Splitting the dataset into training and testing sets\n", "\n", + "from sklearn.model_selection import train_test_split\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " digits.data, \n", @@ -202,11 +262,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": { "collapsed": false }, - "outputs": [], + "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", @@ -240,10 +311,21 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "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": [ + "# One-hot encoding the target labels\n", + "\n", "from tensorflow.keras.utils import to_categorical\n", "\n", "print(f'Before one-hot encoding: {y_train[0]}')\n", @@ -273,12 +355,96 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ dense (Dense)                   │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_1 (Dense)                 │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_2 (Dense)                 │ (None, 10)             │           650 │\n",
+       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
+       "
\n" + ], + "text/plain": [ + "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n", + "┃\u001b[1m \u001b[0m\u001b[1mLayer (type) \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m Param #\u001b[0m\u001b[1m \u001b[0m┃\n", + "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n", + "│ dense (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m4,160\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_1 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m64\u001b[0m) │ \u001b[38;5;34m4,160\u001b[0m │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_2 (\u001b[38;5;33mDense\u001b[0m) │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m10\u001b[0m) │ \u001b[38;5;34m650\u001b[0m │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 8,970 (35.04 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m8,970\u001b[0m (35.04 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 8,970 (35.04 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m8,970\u001b[0m (35.04 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ + "# Building the model\n", + "\n", "from tensorflow.keras.models import Sequential\n", "from tensorflow.keras.layers import Input, Dense\n", "\n", @@ -310,12 +476,14 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ + "# Compiling the model\n", + "\n", "model.compile(\n", " loss='categorical_crossentropy', # Loss function\n", " optimizer='sgd', # Optimizer\n", @@ -344,8 +512,37 @@ "metadata": { "collapsed": false }, - "outputs": [], + "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[1m2s\u001b[0m 22ms/step - accuracy: 0.4103 - loss: 2.7288 - val_accuracy: 0.8160 - val_loss: 0.5886\n", + "Epoch 2/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 12ms/step - accuracy: 0.8218 - loss: 0.5824 - val_accuracy: 0.8889 - val_loss: 0.3456\n", + "Epoch 3/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9119 - loss: 0.3167 - val_accuracy: 0.9167 - val_loss: 0.2909\n", + "Epoch 4/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9343 - loss: 0.2340 - val_accuracy: 0.8924 - val_loss: 0.2922\n", + "Epoch 5/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9464 - loss: 0.1834 - val_accuracy: 0.9306 - val_loss: 0.2046\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ + "# Training the model\n", + "\n", "model.fit(\n", " X_train, # Training data\n", " y_train, # Training labels\n", @@ -368,12 +565,24 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 9ms/step - accuracy: 0.9389 - loss: 0.2234 \n", + "Loss: 0.22\n", + "Accuracy: 94.17%\n" + ] + } + ], "source": [ + "# Evaluating the model on the test set\n", + "\n", "loss, accuracy = model.evaluate(X_test, y_test)\n", "\n", "print(f'Loss: {loss:.2f}')\n", @@ -391,11 +600,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 14ms/step\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH2CAYAAAChsP9pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5rUlEQVR4nO3de3AV9f3/8VeSQwiEhAgEMAkkEFFSGy61VlAhGRGqDnLRyiiiia2WVtqvUC71gly+KnjtFztfU6ZUIbQpjlQaFUGRkoDaMIA0FB0dwTEQoPClIiFSJSfk/fuDyflxBDSc3SSfA8/HTGZ0s/vez+55Z1+c3T1nY8zMBAAAWlVsaw8AAAAQyAAAOIFABgDAAQQyAAAOIJABAHAAgQwAgAMIZAAAHEAgAwDgAAIZAAAHeArkJUuWKCYmJvQTCASUkZGhu+66S3v37vVrjN8oKytLhYWFES8/c+ZMjRw5Uunp6YqJifFUq9HJ+yQmJkbJycm68sortWzZMs+1v01hYaGysrIiXv7YsWN66qmn9N3vfleJiYnq1q2brr/+ev3973/3b5DN5Fzox507d+qOO+5Qz5491a5dO2VnZ+tXv/qVPvvss4hrRnM/PvTQQxo4cKA6deqkhIQE9e7dWz/96U+1a9cu/wbZjM6FnuQYGa45j5G+vENevHixKioq9NZbb+mee+7RsmXLNGTIEB09etSP8s3qf/7nf/TZZ59p1KhRio+P963uj370I1VUVOjvf/+7Fi5cqCNHjmj8+PH685//7Ns6msM999yj+++/X2PGjNFrr72m5557TgcPHlReXp42bdrU2sNrkmjtx4MHD2rQoEF699139cgjj2jVqlWaNGmSFi1apGuvvVYNDQ0R147Wfjx8+LBuu+02FRcX64033tC0adO0cuVKXXHFFZ7+kdLSorUnJY6RX9esx0jzYPHixSbJNm/eHDb94YcfNkn2pz/96YzLHj161MuqQzIzM62goCDi5Y8fPx7678TERE+1GkmySZMmhU2rqqoySTZ06FDP9b9JQUGBZWZmRrTsV199ZXFxcTZhwoSw6fv27TNJ9l//9V8+jLD5RHs/Llq0yCTZ2rVrw6bPmzfPJNnWrVsjqhut/Xgmq1atMkn2/PPP+1q3OUR7T5pxjDxZcx8jm+Ua8qBBgyQpdFqpsLBQHTp00Pbt2zVixAglJSVp2LBhkqS6ujo9+uij6tu3r9q2bavU1FTdddddOnjwYFjNYDCoGTNmqHv37mrfvr2uvvpqX96xxca2zGX0zMxMpaam6sCBA2HTjxw5omnTpqlXr16Kj49Xenq6Jk+efMq/nJ977jkNHTpUXbt2VWJionJzc/Xkk08qGAz6NsbY2FjFxsaqY8eOYdOTk5MVGxurhIQE39bVkqKlH9u0aSNJp+z/lJQUSfJ1/0dDP55JamqqJCkQCDT7uppLtPSkxDHyZM19jGyWjt65c6ek//+HI51oqlGjRmnixIm6//77VV9fr4aGBo0ePVpvv/22ZsyYoSuvvFK7du3S7NmzlZ+fry1btqhdu3aSTpwmWLp0qaZNm6bhw4fr/fff10033aTa2tpT1t94faCqqqo5Ni8iNTU1OnToUOgPUZL+85//KC8vT3v27NGDDz6ofv366YMPPtCsWbO0fft2rV27VjExMZKkTz75ROPHjw815bZt2/TYY4/po48+0gsvvPCN654zZ47mzp2rsrIy5efnn3G+Nm3a6N5779Xzzz+va6+9Vtdcc40OHTqkBx98UB07dtQ999zjy75oadHSj2PGjFHPnj01depUFRUVKTMzU1u3btXjjz+uG2+8UTk5Of7sEEVHP56svr5ewWBQH330kSZPnqyLL75YN910U8Tb39qipSdbUjT0ZLMfI728vW48HbNx40YLBoNWW1trK1eutNTUVEtKSrL9+/eb2YlTBJLshRdeCFt+2bJlJslefvnlsOmbN282SVZUVGRmZh9++KFJsilTpoTNV1JSYpJOOYWSnZ1t2dnZZ709fp6Ouffeey0YDFpdXZ19/PHHNmrUKEtKSrItW7aE5ps/f77FxsaecjrrL3/5i0myVatWnbb+8ePHLRgM2tKlSy0uLs4OHToU+t3pTsfMnTvX4uLirLy8/FvH3tDQYLNmzbLY2FiTZJKsZ8+e9o9//KPpO6CVnAv9uG/fPhs8eHBo30uyW265xb766quz2RVhorkfzcz+9a9/he2PK664wvbu3dvErW9d50JPnoxjZPMeI30J5K//5Obm2jvvvBOar7HZampqwpa//fbbLSUlxerq6iwYDIb9dO/e3caNG2dmZkVFRSYp7IUyMwsGgxYIBHxpEDN/m+3rP23atLGVK1eGzXfVVVdZv379Ttn22tpai4mJsRkzZoTm3bp1q914443WqVOnU2pv3LgxNJ/Xa3aPPPKItW/f3v77v//bysrK7JVXXrHhw4dbly5dIr6G2VKivR8PHTpkl19+uV166aVWUlJiGzZssKKiIrvwwgttxIgRFgwGI6obzf1odmK/bt682d555x1btGiR9enTxy6++GLbt2+fp7otIdp78us4RjbvMdKXU9ZLly5VTk6OAoGAunXrpgsvvPCUedq3b6/k5OSwaQcOHNDhw4fPeOfev//9b0kK3U3ZvXv3sN8HAgF17tzZj03w3bhx4zR9+nQFg0Ft375dDzzwgG699VZt3bpVffr0kXRi+3fu3Bm6dvh1jdu/e/duDRkyRJdccomeffZZZWVlKSEhQZs2bdKkSZP05Zdf+jLmDz/8ULNmzdKTTz6padOmhaZff/31+s53vqNf/epXKisr82VdzSla+/GJJ55QZWWldu3aFRrzkCFD1LdvX11zzTUqKSlRQUFBRLWjsR8bBQIBff/735ckXXXVVbruuuvUq1cvPf7443r22Wd9XVdzidaebE7R2JPNfYz0JZBzcnJCfzBn0nie/2RdunRR586d9cYbb5x2maSkJEkKNdT+/fuVnp4e+n19fb2zH31ITU0N7ZPBgwcrJydHeXl5mjJlilauXCnpxPa3a9fujNc3unTpIkkqLS3V0aNHtWLFCmVmZoZ+X1lZ6euYt23bJjPT5ZdfHja9TZs26t+/v9avX+/r+ppLtPZjZWWl0tPTTzlYN74e77//fsS1o7EfzyQjI0NpaWn6+OOPW2R9fojWnmxO0diTzX2MbNXbFEeOHKkXX3xRx48f1xVXXHHG+RovspeUlOiyyy4LTX/ppZdUX1/f3MP0xZAhQ3TnnXequLhYFRUVGjx4sEaOHKl58+apc+fO6tWr1xmXbfxDbdu2bWiamWnRokW+jjEtLU2StHHjRuXl5YWmHzt2TFu3blVGRoav63NNa/djWlqa/va3v2nv3r1hB9WKigpJ8nX/R0M/nsnOnTu1Z88ejRo1qkXW15pauydbUjT0ZLMfI72c7z7TZ+y+rqCgwBITE0+ZXl9fb9dff7116tTJ5s6da6tXr7a1a9fakiVLrKCgwFasWBGad8KECaFrBmvWrLHf/OY3lpaWZsnJyZ5uWCgvL7fly5fb8uXLLSEhwfLz80P//3//93+h+crKykySzZ49+1tr6jSfsTMz2717tyUkJNiwYcPMzOyLL76wgQMHWkZGhj3zzDP21ltv2ZtvvmmLFi2yW265JXTd48MPP7T4+HjLz8+3VatW2YoVK2z48OHWp08fk2RlZWWhdXi5YeH48eN2+eWXW0JCgs2aNcvWrl1rL7/8suXn55sk++Mf//it296aor0ft2zZYvHx8ZaTk2PFxcW2bt06++1vf2tdu3a1bt262cGDB0Pzng/9uG3bNrvmmmusqKjI3njjDVuzZo0988wzlpGRYampqVZVVfWt297aor0nzThGnqy5j5GtGshmJ246ePrpp61///6WkJBgHTp0sL59+9rEiRNtx44dofmOHTtmU6dOta5du1pCQoINGjTIKioqTvuh98zMzCZftM/LyzvtDQZffxFfe+01k2QLFy781ppnajYzs+nTp5skW79+vZmdaLiZM2faJZdcYvHx8daxY0fLzc21KVOmhO7AbFx/4z5KT0+36dOn2+rVq5vUbLNnzz5lvjM5fPiwPfTQQ5aTk2Pt27e3rl27hprcdedCP27dutXGjh1rGRkZ1rZtW+vdu7fdfffdtnv37rD5zod+3L9/v02YMMGys7Otffv2Fh8fb71797af/exnp+wPV50LPckxMlxzHiNjzMy8vcc+P8yYMUPLli3Tjh07ovYLMnDuoB/hGnrSO5721ERlZWV6+OGHaTQ4gX6Ea+hJ73iHDACAA3iHDACAAwhkAAAcQCADAOAAAhkAAAc06Zu6GhoatG/fPiUlJZ32691wfjMz1dbWKi0trUWenUo/4pvQj3DJ2fRjkwJ537596tGjhy+Dw7mrurq6Rb5ek35EU9CPcElT+rFJgdz4BebV1dWnPI2kpb3++uueazz33HOeawwZMsRzjQceeMBzjcOHD3uukZKS4mn5I0eOqEePHqE+aW7nWj/OmzfPcw0vD55odNttt3mu8fjjj3uuQT9GbteuXZ5rzJ8/33ONmpoazzV+97vfea7htZf8cDb92KRAbjwNk5yc3OoN1759e881AgHvz9Q4+UvMI+XHvmxoaHBiHNLpn1bTHM61foyLi/NhJN6d6RF/Z8OP14N+jJwf/wjxow/O9LjEs+FSL/mhKf3ITV0AADiAQAYAwAEEMgAADiCQAQBwAIEMAIADCGQAABxAIAMA4AACGQAABxDIAAA4gEAGAMABBDIAAA4gkAEAcACBDACA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/2TR0JPNzZdT1l+3c+dOSVJqampoWl1dnUaNGqWJEyfq/vvvV319vRoaGjR69Gi9/fbbmjFjhq688krt2rVLs2fPVn5+vrZs2aJ27dpJku655x4tXbpU06ZN0/Dhw/X+++/rpptuUm1t7Snrb7w+UFVVddZjr6+v19tvv61LL7307Df8G9TU1OjQoUOhP0TpxPes5uXlac+ePXrwwQfVr18/ffDBB5o1a5a2b9+utWvXhq7hfvLJJxo/fnyoKbdt26bHHntMH330kV544YVvXPecOXM0d+5clZWVKT8/39ftigbR0o9jxoxRz549NXXqVBUVFSkzM1Nbt27V448/rhtvvFE5OTn+7BBFRz82fkd627Ztw6Y3/v8///nPSDbdCdHSk3V1derUqdMp009+DU7uIS+ioScbffLJJ+rUqZOOHDmizMxM3XrrrZo5c2botYiYl7fXjadjNm7caMFg0Gpra23lypWWmppqSUlJtn//fjM7cYpAkr3wwgthyy9btswk2csvvxw2ffPmzSbJioqKzMzsww8/NEk2ZcqUsPlKSkpM0imnY7KzsyM+5fzQQw+ZJCstLY1oebMTp2PuvfdeCwaDVldXZx9//LGNGjXKkpKSbMuWLaH55s+fb7GxsaeczvrLX/5ikmzVqlWnrX/8+HELBoO2dOlSi4uLs0OHDoV+d7rTMXPnzrW4uDgrLy8/q+2I1lPW0dyP+/bts8GDB5uk0M8tt9xiX3311dnsijDR2o+lpaUmyf74xz+GTX/++edNkl188cVN2fxWFe09OWbMGEtJSbHa2tqw6UOGDDFJNm/evCbth6+L1p40O5ERRUVFtm7dOnv99dftF7/4hQUCARs6dGjEp/Ab+RLIX//Jzc21d955JzRfY7PV1NSELX/77bdbSkqK1dXVWTAYDPvp3r27jRs3zszMioqKTFLYC2VmFgwGLRAIRHx95Osar+FNnTrVU53T7ZM2bdrYypUrw+a76qqrrF+/fqdse21trcXExNiMGTNC827dutVuvPFG69Sp0ym1N27cGJrP6/WRk0VrIEdrPx46dMguv/xyu/TSS62kpMQ2bNhgRUVFduGFF9qIESMsGAxGVDda+/HYsWN20UUXWVpamq1Zs8Y+//xzW716tXXr1s3i4uKsb9++EdVtSdHek2vXrrWYmBgbO3asffLJJ7Z//36bOXOm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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", @@ -478,11 +705,168 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_1\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_1\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ dense_3 (Dense)                 │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_4 (Dense)                 │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_5 (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_3 (\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_4 (\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_5 (\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": "code", + "execution_count": 16, "metadata": {}, "outputs": [], "source": [ - "# 2. Increasing the learning rate\n" + "# 1. Decreasing the learning rate\n", + "from tensorflow.keras.optimizers import SGD\n", + "\n", + "optimiser = SGD(learning_rate=0.001)\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=optimiser, # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "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[1m2s\u001b[0m 17ms/step - accuracy: 0.1331 - loss: 4.7091 - val_accuracy: 0.2465 - val_loss: 2.4592\n", + "Epoch 2/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.3496 - loss: 2.0673 - val_accuracy: 0.4444 - val_loss: 1.6320\n", + "Epoch 3/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.5308 - loss: 1.4175 - val_accuracy: 0.6076 - val_loss: 1.2806\n", + "Epoch 4/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.6531 - loss: 1.0397 - val_accuracy: 0.6701 - val_loss: 1.0801\n", + "Epoch 5/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.6983 - loss: 0.9546 - val_accuracy: 0.7153 - val_loss: 0.9320\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 17, + "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", + ")" ] }, { @@ -491,7 +875,228 @@ "metadata": {}, "outputs": [], "source": [ - "# 3. SGD with momentum\n" + "# 2. Increasing the learning rate" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_2\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_2\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ dense_6 (Dense)                 │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_7 (Dense)                 │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_8 (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_6 (\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_7 (\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_8 (\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": "code", + "execution_count": 20, + "metadata": {}, + "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[1m3s\u001b[0m 26ms/step - accuracy: 0.1084 - loss: 2.3124 - val_accuracy: 0.0868 - val_loss: 2.3210\n", + "Epoch 2/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 13ms/step - accuracy: 0.1003 - loss: 2.3135 - val_accuracy: 0.1076 - val_loss: 2.3220\n", + "Epoch 3/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - accuracy: 0.0970 - loss: 2.3155 - val_accuracy: 0.0833 - val_loss: 2.3267\n", + "Epoch 4/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 17ms/step - accuracy: 0.1014 - loss: 2.3137 - val_accuracy: 0.1042 - val_loss: 2.3132\n", + "Epoch 5/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 15ms/step - accuracy: 0.0984 - loss: 2.3072 - val_accuracy: 0.1042 - val_loss: 2.3151\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 2. Increasing the learning rate\n", + "\n", + "from tensorflow.keras.optimizers import SGD\n", + "\n", + "# Increased learning rate\n", + "optimizer = SGD(learning_rate=1.0) # increasing the learning rate\n", + "\n", + "\n", + "# Compile the model with the new optimizer\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer=optimizer,\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "# Train the model again\n", + "\n", + "model.fit(\n", + " X_train, y_train, \n", + " epochs=5, batch_size=32, \n", + " validation_split=0.2\n", + " )\n" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "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[1m3s\u001b[0m 47ms/step - accuracy: 0.0869 - loss: 2.3136 - val_accuracy: 0.0833 - val_loss: 2.3192\n", + "Epoch 2/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 14ms/step - accuracy: 0.0917 - loss: 2.3073 - val_accuracy: 0.1076 - val_loss: 2.3114\n", + "Epoch 3/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 27ms/step - accuracy: 0.0976 - loss: 2.3085 - val_accuracy: 0.1042 - val_loss: 2.3122\n", + "Epoch 4/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 11ms/step - accuracy: 0.1217 - loss: 2.3050 - val_accuracy: 0.1076 - val_loss: 2.3109\n", + "Epoch 5/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 7ms/step - accuracy: 0.1008 - loss: 2.3053 - val_accuracy: 0.1042 - val_loss: 2.3037\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# 3. SGD with momentum \n", + "\n", + "from tensorflow.keras.optimizers import SGD\n", + "\n", + "optimizer = SGD(learning_rate=0.1, momentum=0.9) # using momentum to accelerate SGD\n", + "\n", + "# Compile the model with the new optimizer t\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer=optimizer,\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "# Train the model again\n", + "\n", + "model.fit(\n", + " X_train, \n", + " y_train, epochs=5, \n", + " batch_size=32, \n", + " validation_split=0.2 \n", + " )" ] }, { @@ -507,23 +1112,288 @@ "2. Add another hidden layer with ReLU activation and 64 neurons. Does it improve the model performance?\n" ] }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "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[1m3s\u001b[0m 18ms/step - accuracy: 0.1248 - loss: 2.3018 - val_accuracy: 0.1042 - val_loss: 2.3041\n", + "Epoch 2/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 10ms/step - accuracy: 0.1044 - loss: 2.3006 - val_accuracy: 0.1042 - val_loss: 2.3043\n", + "Epoch 3/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.1003 - loss: 2.3004 - val_accuracy: 0.1042 - val_loss: 2.3047\n", + "Epoch 4/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.0934 - loss: 2.3037 - val_accuracy: 0.1042 - val_loss: 2.3049\n", + "Epoch 5/5\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.1017 - loss: 2.3025 - val_accuracy: 0.1042 - val_loss: 2.3054\n" + ] + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Import Adam optimizer to replace SGD\n", + "from tensorflow.keras.optimizers import Adam\n", + "\n", + "# Instantiate Adam with default parameters to replace SGD\n", + "optimizer = Adam()\n", + "\n", + "# Recompile the model with Adam to replace SGD\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer=optimizer,\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "# Retrain the model to see the effect of Adam optimizer\n", + "model.fit(X_train, y_train, epochs=5, batch_size=32, validation_split=0.2)" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "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_13 (Dense)                │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_14 (Dense)                │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_15 (Dense)                │ (None, 64)             │         4,160 │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_16 (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_13 (\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_14 (\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_15 (\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_16 (\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: 13,130 (51.29 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m13,130\u001b[0m (51.29 KB)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 13,130 (51.29 KB)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m13,130\u001b[0m (51.29 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": [ + "# Extra hidden layer\n", + "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,)))\n", + "\n", + "# Hidden layers\n", + "model.add(Dense(64, activation='relu'))\n", + "model.add(Dense(64, activation='relu')) # Original second layer\n", + "model.add(Dense(64, activation='relu')) # ➕ New third hidden layer\n", + "\n", + "# Output layer\n", + "model.add(Dense(10, activation='softmax'))\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy',\n", + " optimizer='adam', # Or SGD, depending on your test\n", + " metrics=['accuracy']\n", + ")\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 10ms/step - accuracy: 0.1335 - loss: 5.3353\n", + "Loss: 5.34\n", + "Accuracy: 12.50%\n" + ] + } + ], + "source": [ + "# Evaluating the model on the test set\n", + "\n", + "loss, accuracy = model.evaluate(X_test, y_test)\n", + "\n", + "print(f'Loss: {loss:.2f}')\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, { "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "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[1m4s\u001b[0m 16ms/step - accuracy: 0.2674 - loss: 2.5236 - val_accuracy: 0.7917 - val_loss: 0.7708\n", + "Epoch 2/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.8482 - loss: 0.6168 - val_accuracy: 0.8993 - val_loss: 0.3601\n", + "Epoch 3/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9279 - loss: 0.2592 - val_accuracy: 0.9167 - val_loss: 0.2684\n", + "Epoch 4/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9537 - loss: 0.1549 - val_accuracy: 0.9236 - val_loss: 0.2348\n", + "Epoch 5/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 11ms/step - accuracy: 0.9747 - loss: 0.1112 - val_accuracy: 0.9306 - val_loss: 0.1992\n", + "Epoch 6/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9838 - loss: 0.0825 - val_accuracy: 0.9479 - val_loss: 0.1630\n", + "Epoch 7/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9901 - loss: 0.0565 - val_accuracy: 0.9514 - val_loss: 0.1542\n", + "Epoch 8/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9935 - loss: 0.0411 - val_accuracy: 0.9514 - val_loss: 0.1299\n", + "Epoch 9/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9971 - loss: 0.0331 - val_accuracy: 0.9514 - val_loss: 0.1227\n", + "Epoch 10/10\n", + "\u001b[1m36/36\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9974 - loss: 0.0252 - val_accuracy: 0.9549 - val_loss: 0.1223\n", + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.9801 - loss: 0.0863 \n", + "Test Loss: 0.1150\n", + "Test Accuracy: 97.22%\n" + ] + } + ], "source": [ - "# Adam optimizer\n", - "from tensorflow.keras.optimizers import Adam" + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "from sklearn.datasets import load_digits\n", + "from sklearn.model_selection import train_test_split\n", + "from tensorflow.keras.utils import to_categorical\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Input, Dense\n", + "from tensorflow.keras.optimizers import Adam\n", + "\n", + "# Load and prepare data\n", + "digits = load_digits()\n", + "X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)\n", + "y_train = to_categorical(y_train, num_classes=10)\n", + "y_test = to_categorical(y_test, num_classes=10)\n", + "\n", + "# Build model with extra hidden layer softmax activation\n", + "model = Sequential()\n", + "model.add(Input(shape=(64,)))\n", + "model.add(Dense(64, activation='relu'))\n", + "model.add(Dense(64, activation='relu'))\n", + "model.add(Dense(64, activation='relu')) # Extra hidden layer\n", + "model.add(Dense(10, activation='softmax'))\n", + "\n", + "# Compile with Adam optimizer\n", + "model.compile(loss='categorical_crossentropy', optimizer=Adam(), metrics=['accuracy'])\n", + "\n", + "# Train model and store history\n", + "history = model.fit(X_train, y_train, epochs=10, batch_size=32, validation_split=0.2)\n", + "\n", + "# Evaluate on test set\n", + "loss, accuracy = model.evaluate(X_test, y_test)\n", + "print(f\"Test Loss: {loss:.4f}\")\n", + "print(f\"Test Accuracy: {accuracy*100:.2f}%\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m12/12\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 8ms/step - accuracy: 0.9801 - loss: 0.0863 \n", + "Test Loss: 0.1150\n", + "Test Accuracy: 97.22%\n" + ] + } + ], "source": [ - "# Extra hidden layer\n" + "loss, accuracy = model.evaluate(X_test, y_test)\n", + "print(f\"Test Loss: {loss:.4f}\")\n", + "print(f\"Test Accuracy: {accuracy*100:.2f}%\")" ] }, { @@ -539,9 +1409,35 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "predictions_tf = model(X_test)\n", "predictions_tf[:5]" @@ -549,9 +1445,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(tensorflow.python.framework.ops.EagerTensor, TensorShape([360, 10]))" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "type(predictions_tf), predictions_tf.shape" ] @@ -565,13 +1472,23 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 31, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1. 1. 1. 1. 0.99999994]\n" + ] + } + ], "source": [ "import tensorflow as tf\n", "\n", - "tf.reduce_sum(predictions_tf, axis=1)[:5]" + "tf.reduce_sum(predictions_tf, axis=1)[:5]\n", + "\n", + "print(predictions_tf.numpy().sum(axis=1)[:5])" ] }, { @@ -592,9 +1509,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "predicted_labels_tf = tf.argmax(predictions_tf, axis=1)\n", "predicted_labels_tf[:5]" @@ -611,11 +1539,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAeQAAAH2CAYAAAChsP9pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAbDElEQVR4nO3de2yedfk/8KujnHTtyjglZZ2TICIOVhKdQ0lWjIpsmNUD6hDcMASYkKwmEDnpOkHAPwibEhRDskI4iItxBESJRDrlD41KOsBgQoSyQY2TQ9dtEHC03z9+GUpQfk/3udf76vp6JfzTre/72tNrz3v30/J8msbGxsYCAKjVtLoHAAAUMgCkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBTyOD3yyCOxaNGiOOSQQ+Lggw+O973vfXH11VfXPRZTzG9+85v42te+Fscdd1y8+93vjqOOOiqWLFkSf/7zn+sejSmov78/mpqa/ut/v//97+seb9JornuAyeSuu+6Kc845J774xS/G7bffHtOnT4+//e1vMTQ0VPdoTDE//OEP48UXX4yVK1fG8ccfH//85z/jhhtuiAULFsSDDz4YH//4x+sekSno2muvjVNPPfUtH5s7d25N00w+Td7LujHPP/98vP/974+vfvWrcfPNN9c9DlPc1q1b44gjjnjLx3bs2BHHHHNMzJ07Nx566KGaJmMq6u/vj1NPPTXWr18fX/jCF+oeZ9LyknWDbr311ti5c2d885vfrHsUeFsZR0RMnz49jj/++NiyZUsNEwGlFHKDfvvb38bMmTPjr3/9a3R2dkZzc3McccQRceGFF8bIyEjd40Fs27YtHn300fjgBz9Y9yhMURdddFE0NzdHa2trnHbaafHII4/UPdKkopAb9Pzzz8crr7wSZ555ZnzpS1+Khx56KC699NK4/fbbY9GiReGVf+p20UUXxc6dO+PKK6+sexSmmBkzZsTKlSvjlltuiYcffjjWrl0bW7Zsia6urnjwwQfrHm/S8D3kBh177LHx1FNPxXXXXReXXXbZmx9fu3Zt9PT0xK9//ev4xCc+UeOETGXf+ta34pprrokf/OAHcfHFF9c9DsTw8HCccMIJMXPmzNi0aVPd40wK7pAbdOihh0ZExGmnnfaWj59++ukREfHoo49O+EwQEbF69eq45ppr4rvf/a4yJo22trY444wz4rHHHotXX3217nEmBYXcoBNPPPG/fnz3CwzTpnkomXirV6+O3t7e6O3tjSuuuKLuceAtdj8/NjU11TzJ5KBFGvT5z38+IiJ++ctfvuXjDzzwQERELFiwYMJnYmq7+uqro7e3N6666qpYtWpV3ePAW7z88stx//33R2dnZxx00EF1jzMpeGOQBn3qU5+Kz3zmM/Gd73wnRkdHY8GCBfGnP/0pVq9eHWeccUaccsopdY/IFHLDDTfEt7/97fj0pz8dixcvftu7IfkHIhPprLPOitmzZ8eHPvShOOyww+Kpp56KG264If7xj39EX19f3eNNGn6oaxxeffXVWL16ddx1113x97//Pdrb2+MrX/lKrFq1Kg488MC6x2MK6erqio0bN/7PX/fXmol0/fXXxz333BPPPPNM7NixI2bOnBmnnHJKXH755fHhD3+47vEmDYUMAAn4HjIAJKCQASABhQwACShkAEhAIQNAAgoZABJo6I1BRkdHY2hoKFpaWrwFGm8zNjYW27dvj/b29gl5C1H7yDuxj2Qynn1sqJCHhoaio6OjkuHYd23ZsiVmzZq1169jH2mEfSSTRvaxoUJuaWl5M7C1tbV8sprNnTu3OGPbtm3FGY8//nhxRltbW3FGqZGRkejo6HhzT/a2TPv4sY99rDjjiSeeKM5YtGhRccbdd99dnJHBZN3HZ599tniWFStWFGdU8dxWxU5X8Xc7w3PsePaxoULe/TJMa2tr7U+AVajiZawqXpqq4rHM9PWYqJfrMu3jfvvtV+v1d9t///2LM+p+LKs22faxin9ANDeXH0+QZaf3tefYRv48fqgLABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAmUn9U1wfr6+oozqjh3dMmSJcUZGc4ynsoGBweLMzZt2lScUcUu3XvvvcUZ/f39xRldXV3FGVNVFc9tGzduLM54z3veU5xRxU5XsUuT7TnWHTIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABJrrHmC81qxZU5wxY8aMFHNQrzlz5hRnVHGYexVzVLHTGzZsKM6o4lB56tXT05MiYypyhwwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEggea6BxivTZs2FWcsXLiwOKOKQ+WZ/AYHB1NkrF27tjijra2tOIM9l+Xx/8Y3vlGc0d/fX5zR19dXnJHlMW2UO2QASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACTRP5MUGBgYm8nL/08aNG4szmpqaijOWLVtWnLFmzZrijMl2iPe+ZnBwsO4RIiKiq6ur7hGmtJ6enuKM7u7u4oz+/v7ijCr+LL29vcUZVTw/TiR3yACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASaJ7Ii7W1tU3k5f6nhQsXFmdkOTw7y4Hk7LkNGzbUPUJERHR2dtY9AoXmzJlTnLF8+fLijIGBgeKMvr6+4owqnmMnkjtkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAk0T+TFqjg8e9myZcUZ/f39xRmDg4PFGVUc4j08PFycwZ7r6ekpzli7dm1xxowZM4ozqjjMvYqdPvfcc4s+/5VXXimeYbKq4vmgr6+vOKOKnV6yZElxxmTjDhkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACShkAEhAIQNAAs11DzBeVRyi3tXVVZxReoh6VZYtW1b3CBRauHBhcUYVB9OvXr26OCODf/3rX3WPsEeq+Boecsgh5YNUYN68ecUZfX195YNMMu6QASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBo6D3lsbCwiIkZGRvbqMI2oYoY33nijgklyeP3114szSh/T3Z+/e0/2tkz7+NprrxVn7Nq1qzhjX9rp0vOMd3/+ZNvHDPtclSr2sYrHY9q0+u85x/P82DTWwO967rnnoqOjo3wy9mlbtmyJWbNm7fXr2EcaYR/JpJF9bKiQR0dHY2hoKFpaWqKpqamyAdk3jI2Nxfbt26O9vX1C/kVqH3kn9pFMxrOPDRUyALB31f8COwCgkAEgA4UMAAkoZABIQCE3aGBgIBYvXhyzZ8+Ogw8+OGbOnBknn3xy3HHHHXWPxhRkH8nEPlajoTcGIWJ4eDg6Ojpi6dKlcdRRR8XOnTvjzjvvjHPOOScGBwfjqquuqntEphD7SCb2sRr+t6dCCxYsiKGhodi8eXPdo4B9JBX7OD5esi502GGHRXOzFxrIwT6SiX0cH4/UOI2Ojsbo6Gi8/PLLsX79+njwwQfjpptuqnsspij7SCb2sdAY43LBBReMRcRYRIwdcMABYzfffHPdIzGF2UcysY9lfA95nDZv3hxbt26NrVu3xn333Rc//vGP43vf+15ccskldY/GFGQfycQ+llHIhVasWBG33nprDA0NxeGHH173OExx9pFM7OP4+KGuQvPnz49du3bF008/XfcoYB9JxT6Oj0Iu9PDDD8e0adPi6KOPrnsUsI+kYh/Hx09ZN+j888+P1tbWmD9/fhx55JHxwgsvxPr16+Oee+6JSy+91MsxTCj7SCb2sRq+h9ygdevWxbp16+LJJ5+M4eHhmD59esybNy/OO++8OPvss+sejynGPpKJfayGQgaABHwPGQASUMgAkIBCBoAEFDIAJKCQASABhQwACTT0xiCjo6MxNDQULS0t0dTUtLdnYpIZGxuL7du3R3t7e0ybtvf/jWcfeSf2kUzGs48NFfLQ0FB0dHRUMhz7ri1btsSsWbP2+nXsI42wj2TSyD42VMgtLS1vBra2tu7xQMPDw3v8ubutWLGiOOPxxx8vzli8eHFxxuWXX16c0dbWVpxRamRkJDo6Ot7ck72tqn189tlni2e57LLLijOq2MdTTjmlOOP6668vzrCPe76PVbjwwguLM+6+++4KJim3dOnS4owf/ehHFUxSZjz72FAh734ZprW1tWjhRkdH9/hzd9t///2LM6p4GevAAw8szqjiL2/dTwD/aaJerqtqH6t4ws6yjwcccEBxhn0su07pPlahij3IIstOV6WRffRDXQCQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIoKHjF6syODhYnHHvvfcWZ6xatao4Y/Xq1cUZ3d3dxRldXV3FGVNVf39/cUYVZ3wvX768OGPNmjXFGVXo6+ure4RJq7e3tzhjw4YNxRk33nhjcUYV52JX8XhMNu6QASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACTQPJEX6+zsLM4YGxsrzhgYGCjOWL16dXFGFYd4s+eWL1+eIqMKg4ODxRnDw8PFGey5np6e4ozu7u7ijCqep6t4bqvi8Zhs3CEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASKC57gHGq4pD1Ks4xHvevHnFGVUcBM7k19vbW5zR39+fIoM919bWVpxRxXNKV1dXccacOXOKM3p6eoozJht3yACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASaK57gPGq4hDvKg6+XrNmTXHG8uXLizP6+vqKM6hXFTv97LPPFmdUcbj94OBgcUYVjwd7rru7uzijt7e3OGNgYKA4o6urqzhjIrlDBoAEFDIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJBA09jY2Nj/7zeNjIzEjBkzYtu2bdHa2joRc6VXxeHZJ510UnHGww8/XJxReoj3RO+HfXy7wcHB4owqDqbPcLi9faxf6dcwIqK/vz9FRqnx7Ic7ZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJNE/kxYaHh4szqjiIfc6cOcUZGzZsKM6gXlXs0qZNm4ozFi5cWJxRhba2thQZ7Lm+vr7ijOXLlxdn9Pf3F2dU8Tw92bhDBoAEFDIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJBA80RerIoD4desWVOccdtttxVnVGHVqlXFGV1dXeWDTFFtbW3FGTfeeGNxRnd3d3FGFZYtW1ac0dPTUz4Ie6yK58dzzz23OGPGjBnFGVX8WSYbd8gAkIBCBoAEFDIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACDZ2HPDY2FhERIyMjRRfbsWNH0edHRLz++uvFGVm89tprxRmlX5Mq7J5h957sbVXtYxWP3a5du4ozsqji75Z9rNcbb7xR9wgRUc1jX0VfZPiajGcfm8Ya+F3PPfdcdHR0lE/GPm3Lli0xa9asvX4d+0gj7COZNLKPDRXy6OhoDA0NRUtLSzQ1NVU2IPuGsbGx2L59e7S3t8e0aXv/uyD2kXdiH8lkPPvYUCEDAHuXH+oCgAQUMgAkoJABIAGFDAAJKORx2LFjR/T09ER7e3scdNBB0dnZGT/5yU/qHospaGBgIBYvXhyzZ8+Ogw8+OGbOnBknn3xy3HHHHXWPxhRkH6vR0BuD8P987nOfiz/+8Y9x/fXXx7HHHht33XVXLF26NEZHR+Oss86qezymkOHh4ejo6IilS5fGUUcdFTt37ow777wzzjnnnBgcHIyrrrqq7hGZQuxjNfxvTw164IEHYvHixW+W8G6f+tSn4i9/+Uts3rw59ttvvxonhIgFCxbE0NBQbN68ue5RwD6Ok5esG/Tzn/88pk+fHmeeeeZbPn7uuefG0NBQ/OEPf6hpMvi3ww47LJqbvfBFDvZxfDxSDXriiSfiAx/4wNuW68QTT3zz1z/60Y/WMRpT2OjoaIyOjsbLL78c69evjwcffDBuuummusdiirKPZRRyg1588cU4+uij3/bxmTNnvvnrMNG+/vWvxy233BIREQcccEB8//vfjwsuuKDmqZiq7GMZhTwO7/Q+td7DljpcccUVcd5558XWrVvjvvvui4svvjh27twZl1xySd2jMQXZxzIKuUGHHnrof70LfumllyLi33fKMJFmz54ds2fPjoiIRYsWRUTE5ZdfHsuWLYvDDz+8ztGYguxjGT/U1aATTjghnnzyybedf/v4449HRMTcuXPrGAveYv78+bFr1654+umn6x4F7OM4KeQGffazn40dO3bEz372s7d8/Lbbbov29vb4yEc+UtNk8G8PP/xwTJs27b/+vANMNPs4Pl6ybtDpp58en/zkJ2PFihUxMjISxxxzTNx9993xq1/9Ku644w7/DzIT6vzzz4/W1taYP39+HHnkkfHCCy/E+vXr45577olLL73Uy4NMKPtYDW8MMg47duyIK6+8Mn7605/GSy+9FMcdd1xcfvnl8eUvf7nu0Zhi1q1bF+vWrYsnn3wyhoeHY/r06TFv3rw477zz4uyzz657PKYY+1gNhQwACfgeMgAkoJABIAGFDAAJKGQASEAhA0ACChkAEmjojUFGR0djaGgoWlpaHKLA24yNjcX27dujvb09pk3b+//Gs4+8E/tIJuPZx4YKeWhoKDo6OioZjn3Xli1bYtasWXv9OvaRRthHMmlkHxsq5JaWljcDW1tbyycr8Itf/KI449prr61gknJXXHFFccbixYsrmKTMyMhIdHR0vLkne1umfbzuuuuKM+6///7ijBkzZhRnXH/99cUZJ554YnFGqcm6j4899ljxLJdddllxxu4Dc0qMjIwUZ1Thd7/7XXFG6U6PZx8bKuTdL8O0trbW/gT4rne9qzgjy/tOV/Fnqfvr8Z8m6uW6TPt44IEHFmdUsY/NzeVvSz99+vTijLq/Hv9psu1jFY9/FXuwL73snmmnG3lc/VAXACSgkAEgAYUMAAkoZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACShkAEhAIQNAAgoZABIoP6trgnV3d9c9QkRELFu2LEVGf39/cUZnZ2dxxmTU19dXnLFmzZrijN7e3uKMwcHB4oyenp7ijCr2caoaGBgozti4cWNxxsqVK4szqrB27drijCoe04l8fnSHDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASCB5om82L333juRl/ufnnnmmeKMtra24ow5c+YUZwwPDxdnTFXLly9PkVGFNWvWFGcMDg4WZ7Dnqtilzs7OFBnd3d3FGTNmzEgxx0RyhwwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEggeaJvFgVB07PmzevOGPOnDnFGVXo6uoqzujv708xB3uuiq9hb29vijmoV2dnZ3FGFXtw7733FmfceOONxRltbW3FGRPJHTIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASEAhA0ACChkAElDIAJCAQgaABJon8mJVHHw92Q6cfieDg4PFGfvS4zFV9fX1FWds27YtxRxr1qwpzqBeAwMDdY8QERGdnZ11jzDh3CEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACShkAEhAIQNAAgoZABJQyACQgEIGgAQUMgAkoJABIAGFDAAJKGQASKB5Ii920kknFWfsSwegDw8P1z0CCfT19RVnLF++vDiju7u7OGPOnDnFGT09PcUZ7LkqHv8qdrqK5/qurq7ijInkDhkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACShkAEhAIQNAAs0TebElS5YUZ2zbtq04o7e3tzjjpJNOSjFHf39/cQZ7rru7uzijioPYOzs7izOY/Kp4PqjiOXZwcLA4Y3h4uDhjsnGHDAAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASCB5roHGK8NGzYUZ6xcubI4o4pD5ZcvX16c4WD6elXx+L/3ve8tH6QCCxcuLM7o6ekpH2SKGhgYKM449dRTywepwIwZM4ozent7yweZZNwhA0ACChkAElDIAJCAQgaABBQyACSgkAEgAYUMAAkoZABIQCEDQAIKGQASUMgAkIBCBoAEFDIAJKCQASABhQwACTR0HvLY2FhERIyMjOzVYRrxyiuvFGeMjo4WZ+x+TEq89tprxRkZvia7Z6jiMWlEpn2s4muYxa5du4ozMnxNJus+7tixo4pxUqjisX/11VeLMybbPjaNNfC7nnvuuejo6CifjH3ali1bYtasWXv9OvaRRthHMmlkHxsq5NHR0RgaGoqWlpZoamqqbED2DWNjY7F9+/Zob2+PadP2/ndB7CPvxD6SyXj2saFCBgD2Lj/UBQAJKGQASEAhA0ACChkAElDIAJCAQgaABBQyACTwf8TtZugNEC2JAAAAAElFTkSuQmCC", + "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", @@ -671,9 +1610,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\NEWPC\\miniconda3\\envs\\dsi_participant\\lib\\site-packages\\keras\\src\\layers\\core\\dense.py:93: UserWarning: Do not pass an `input_shape`/`input_dim` argument to a layer. When using Sequential models, prefer using an `Input(shape)` object as the first layer in the model instead.\n", + " super().__init__(activity_regularizer=activity_regularizer, **kwargs)\n" + ] + } + ], "source": [ "from tensorflow.keras import initializers\n", "from tensorflow.keras import optimizers\n", @@ -698,9 +1646,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ]" + ] + }, + "execution_count": 36, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.layers" ] @@ -714,18 +1675,67 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 37, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 37, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.layers[0].weights" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 49, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1.58170769e-05, -1.59008696e-03, 1.03594466e-04, ...,\n", + " 9.62818274e-04, 6.24957378e-04, 9.94726201e-04],\n", + " [ 8.18789878e-04, 7.56817637e-04, -6.68141816e-04, ...,\n", + " 1.08445948e-03, -3.17478436e-04, -5.49116055e-04],\n", + " [-8.66180999e-05, -2.87622679e-04, 3.91692913e-04, ...,\n", + " 6.45583350e-05, -4.20471217e-04, 1.74565779e-04],\n", + " ...,\n", + " [-2.90059572e-04, -9.12180112e-04, 8.04327196e-04, ...,\n", + " -1.40708557e-03, 9.52831702e-04, -1.34855497e-03],\n", + " [ 3.75078467e-04, 9.67841595e-04, 9.81185003e-05, ...,\n", + " -4.13453788e-04, 1.69547147e-03, 2.51959373e-05],\n", + " [ 4.59809438e-04, 1.22309395e-03, -2.13172083e-04, ...,\n", + " 1.24683115e-03, -7.14749156e-04, -8.68594740e-04]], dtype=float32)" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "w = model.layers[0].weights[0].numpy()\n", "w" @@ -733,18 +1743,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 39, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float32(0.008835949)" + ] + }, + "execution_count": 39, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "w.std()" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 40, "metadata": {}, - "outputs": [], + "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": 40, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "b = model.layers[0].weights[1].numpy()\n", "b" @@ -752,9 +1787,56 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 41, "metadata": {}, - "outputs": [], + "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 5ms/step - accuracy: 0.1426 - loss: 2.2974\n", + "Epoch 2/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.4626 - loss: 1.9639\n", + "Epoch 3/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.6785 - loss: 1.1413\n", + "Epoch 4/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step - accuracy: 0.8560 - loss: 0.5598\n", + "Epoch 5/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 6ms/step - accuracy: 0.9006 - loss: 0.3709\n", + "Epoch 6/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9355 - loss: 0.2654\n", + "Epoch 7/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9625 - loss: 0.1505\n", + "Epoch 8/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9601 - loss: 0.1491\n", + "Epoch 9/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9680 - loss: 0.1130\n", + "Epoch 10/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9821 - loss: 0.0781\n", + "Epoch 11/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9822 - loss: 0.0677\n", + "Epoch 12/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9848 - loss: 0.0684\n", + "Epoch 13/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 5ms/step - accuracy: 0.9887 - loss: 0.0624\n", + "Epoch 14/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9954 - loss: 0.0431\n", + "Epoch 15/15\n", + "\u001b[1m45/45\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 4ms/step - accuracy: 0.9943 - loss: 0.0284\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA9UAAAFfCAYAAABA/u+IAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABJHklEQVR4nO3deXhU5eH28fvMksmekEA2CRAEWcK+ioqiKBaViqJgXRBsqbyuSFVE675QtVr1h6BUQYXaQgtaWrWKyqKC7JsQQDAQhIQQluzJZJb3jyQDAwFJSHKSyfdzXXNN5iwz92QM5s4553kMr9frFQAAAAAAqDaL2QEAAAAAAGisKNUAAAAAANQQpRoAAAAAgBqiVAMAAAAAUEOUagAAAAAAaohSDQAAAABADVGqAQAAAACoIZvZAc6Ex+PR/v37FRERIcMwzI4DAAAAAAhwXq9X+fn5SkpKksVy6uPRjaJU79+/X8nJyWbHAAAAAAA0MXv37lXLli1Pub5RlOqIiAhJ5W8mMjLS5DQAAAAAgECXl5en5ORkXx89lUZRqitP+Y6MjKRUAwAAAADqzS9dgsxAZQAAAAAA1BClGgAAAACAGqJUAwAAAABQQ43immoAAAAAZ8/tdqusrMzsGECDYLfbZbVaz/p5KNUAAABAgPN6vcrKytLRo0fNjgI0KNHR0UpISPjFwchOh1INAAAABLjKQh0XF6fQ0NCzKhBAIPB6vSoqKlJ2drYkKTExscbPRakGAAAAApjb7fYV6tjYWLPjAA1GSEiIJCk7O1txcXE1PhWcgcoAAACAAFZ5DXVoaKjJSYCGp/Ln4mzGGqBUAwAAAE0Ap3wDJ6uNnwtKdS3yer0qdrrNjgEAAAAAqCeU6lri9nj19H+26qa/fk+xBgAAAIAmglJdS7LySvTxhn3auPeo7vvHerk9XrMjAQAAAGjExowZo+HDh5sdo060adNGr7322inX1+S9G4ahjz/++Kxy1QSlupacEx2iv47uoyCbRYu2HtCz/90qr5diDQAAAFSXYRinvY0ZM8bsiKdUn0V4yZIlMgxDXbp0kdvtf7ZsdHS03nvvvXrJURdef/31aufPzMzU0KFDJUm7d++WYRjasGFD7Yc7AaW6FvVtE6NXR3aXJL23fLfe/Tbd5EQAAABA45OZmem7vfbaa4qMjPRb9vrrr/ttfzYjNweCXbt26YMPPqjV5zT7exoVFaXo6Ohq7ZOQkCCHw1E3gU6DUl3LrumWpMlDO0qSnv80TZ9tzjQ5EQAAAHCM1+tVkdNlyu1Mz+RMSEjw3aKiomQYhu9xSUmJoqOjNW/ePA0aNEjBwcGaM2eOnnrqKfXo0cPveV577TW1adPG97jyKPKf//xnJSYmKjY2VnfffbdfgSwtLdXDDz+s5ORkORwOtW/fXu+++66k8jm/f/vb3yolJUUhISHq0KGDX8F/6qmn9P777+vf//6376j6kiVLJEn79u3TqFGj1KxZM8XGxuraa6/V7t27ffu63W5NnDhR0dHRio2N1cMPP3zG3697771XTz75pEpKSk65TUZGhq699lqFh4crMjJSI0eO1IEDB/yy9+jRQzNnzlTbtm3lcDjk9XplGIbefvttXXPNNQoNDVWnTp20YsUK7dy5U4MGDVJYWJgGDBigXbt2+Z5r165duvbaaxUfH6/w8HD17dtXX3755Rm9l0onHvEfNGiQ7rvvPj388MOKiYlRQkKCnnrqKb99jj/9OyUlRZLUs2dPGYahQYMGVev1q8NWZ8/chP3+4rb6+UixZn+/RxPmblBcZLB6t25mdiwAAABAxWVudX7ic1Nee+szVyo0qHYqyKRJk/TKK69o1qxZcjgcmjFjxhntt3jxYiUmJmrx4sXauXOnRo0apR49emjcuHGSpNGjR2vFihV644031L17d6WnpysnJ0eS5PF41LJlS82bN0/NmzfX8uXL9fvf/16JiYkaOXKkHnzwQaWlpSkvL0+zZs2SJMXExKioqEiXXnqpBg4cqGXLlslms+m5557Tr371K23atElBQUF65ZVXNHPmTL377rvq3LmzXnnlFX300Ue67LLLfvE9TZgwQXPmzNHUqVP14IMPnrTe6/Vq+PDhCgsL09KlS+VyuXTXXXdp1KhRvtIvSTt37tS8efM0f/58Wa1W3/Jnn31Wr776ql599VVNmjRJN998s9q2bavJkyerVatWuuOOO3TPPffos88+kyQVFBToqquu0nPPPafg4GC9//77GjZsmLZv365WrVqd0edUlffff18TJ07UypUrtWLFCo0ZM0YXXnihrrjiipO2XbVqlfr166cvv/xSqampCgoKqvHr/hJKdR0wDENPDuuszNxifZmWrd+9v1oL7rpQKc3DzI4GAAAABIQJEybo+uuv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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", @@ -772,9 +1854,48 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 42, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 42, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.layers[0].weights" ] @@ -802,18 +1923,198 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 43, "metadata": {}, "outputs": [], "source": [ - "# Your code here" + "# Your code here\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'])" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ,\n", + " ]" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "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": 45, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[,\n", + " ]" + ] + }, + "execution_count": 45, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model.layers[0].weights" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([[ 1.58170769e-05, -1.59008696e-03, 1.03594466e-04, ...,\n", + " 9.62818274e-04, 6.24957378e-04, 9.94726201e-04],\n", + " [ 8.18789878e-04, 7.56817637e-04, -6.68141816e-04, ...,\n", + " 1.08445948e-03, -3.17478436e-04, -5.49116055e-04],\n", + " [-8.66180999e-05, -2.87622679e-04, 3.91692913e-04, ...,\n", + " 6.45583350e-05, -4.20471217e-04, 1.74565779e-04],\n", + " ...,\n", + " [-2.90059572e-04, -9.12180112e-04, 8.04327196e-04, ...,\n", + " -1.40708557e-03, 9.52831702e-04, -1.34855497e-03],\n", + " [ 3.75078467e-04, 9.67841595e-04, 9.81185003e-05, ...,\n", + " -4.13453788e-04, 1.69547147e-03, 2.51959373e-05],\n", + " [ 4.59809438e-04, 1.22309395e-03, -2.13172083e-04, ...,\n", + " 1.24683115e-03, -7.14749156e-04, -8.68594740e-04]], dtype=float32)" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "\n", + "w = model.layers[0].weights[0].numpy()\n", + "w" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "np.float32(0.000883595)" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "w.std()" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "metadata": {}, + "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": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "b = model.layers[0].weights[1].numpy()\n", + "b" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. What do you observe? Can you find an explanation for those outcomes?\n", + "Observation: The model still learns, but initial progress is slow.\n", + "Early epochs show low accuracy and high loss, which gradually improve.\n", + "\n", + "WE can say that our model initialized with a larger stddev (e.g., 0.01), this one likely\n", + "takes longer to escape the initial flat regions of the loss surface.\n", + "We can suggest to increase the number of epochs. " ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [] } ], "metadata": { "file_extension": ".py", "kernelspec": { - "display_name": ".venv", + "display_name": "dsi_participant", "language": "python", "name": "python3" }, @@ -827,7 +2128,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.12" + "version": "3.9.19" }, "mimetype": "text/x-python", "name": "python", diff --git a/01_materials/labs/lab_1_1.ipynb b/01_materials/labs/lab_1_1.ipynb new file mode 100644 index 00000000..1a8a5136 --- /dev/null +++ b/01_materials/labs/lab_1_1.ipynb @@ -0,0 +1,1150 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Training Neural Networks with Keras\n", + "\n", + "Welcome to the first practical session of the course! In this session, we will learn how to train neural networks with Keras. We will start with a simple example of a feedforward neural network for classification and then we will study the impact of the initialization of the weights on the convergence of the training algorithm.\n", + "\n", + "Keras is a high-level neural network API, built on top of TensorFlow 2.0. It provides a user-friendly interface to build, train and deploy deep learning models. Keras is designed to be modular, fast and easy to use.\n", + "\n", + "Throughout this course, we will focus on using Keras and TensorFlow for building and training neural networks. However, there are other popular deep learning frameworks such as PyTorch, MXNet, CNTK, etc. that you can also use to build and train neural networks.\n", + "\n", + "In order to use our code on Google Colab, we will need to ensure that any required packages are installed. We will use the following packages in this session:\n", + "\n", + "- `tensorflow`: an open-source library for numerical computation and large-scale machine learning.\n", + "- `matplotlib`: a plotting library for the Python programming language and its numerical mathematics extension NumPy.\n", + "- `numpy`: a library for scientific computing in Python.\n", + "- `scikit-learn`: a machine learning library for the Python programming language.\n", + "- `pandas`: a library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.\n", + "\n", + "Today, we will be working with the famous MNIST dataset. MNIST (Modified National Institute of Standards and Technology) is a database of low resolution images of handwritten digits. The history here is interesting - the dataset was originally created in the 1980s, when researchers from the aforementioned institute collected samples from American Census Bureau employees and high school students. The dataset was then modified in the 1990s (hence the M in MNIST), and has since become a popular benchmark for machine learning algorithms. \n", + "\n", + "The dataset contains images, each of which is a 28x28 grayscale image of a handwritten digit. The goal is to classify each image into one of the 10 possible classes (0-9).\n", + "\n", + "![MNIST](https://upload.wikimedia.org/wikipedia/commons/2/27/MnistExamples.png)\n", + "\n", + "The Scikit-Learn library provides a convenient function to download and load the MNIST dataset. The following cell will download the dataset. Then we will take a look at the shape of the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "from sklearn.datasets import load_digits\n", + "\n", + "digits = load_digits()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "digits.images.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "This means that we have 1797 images, each of which is a 8x8 image. For basic image processing, we will need to flatten the images into a 1D array. In this case, Scikit-Learn has already provided the data in this format too:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "digits.data.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "For each image, we also have the corresponding label (or target, or class) in `digits.target`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "digits.target.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "We can take a look at some random images from the dataset. The following cell will select 9 random images and plot them in a 3x3 grid (meaning that you can rerun the cell to see different images)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Selecting 9 random indices\n", + "random_indices = np.random.choice(len(digits.images), 9, replace=False)\n", + "\n", + "# Creating a 3x3 grid plot\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(digits.images[random_indices[i]], cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"Label: {digits.target[random_indices[i]]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "As you can see, these images are very low resolution. This is because they were originally scanned from paper forms, and then scaled down to 8x8 pixels. This is a common problem in machine learning - the quality of the data is often a limiting factor in the performance of the model. In this case, the low resolution of the images makes it difficult to distinguish between some digits, even for humans. For example, the following images are all labelled as 9, but they look very different:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Selecting 9 random indices of images labelled as 9\n", + "random_indices = np.random.choice(np.where(digits.target == 9)[0], 9, replace=False)\n", + "\n", + "# Creating a 3x3 grid plot\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(digits.images[random_indices[i]], cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"Label: {digits.target[random_indices[i]]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + " \n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "While we are plotting the samples as images, remember that our model is only going to see a 1D array of numbers. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Train / Test Split\n", + "\n", + "In order to understand how well our model performs on _new_ data, we need to split our dataset into a training set and a test set. The training set will be used to train the model, and the test set will be used to evaluate the performance of the model.\n", + "\n", + "Let's keep some held-out data to be able to measure the generalization performance of our model. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.model_selection import train_test_split\n", + "\n", + "\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " digits.data, \n", + " digits.target,\n", + " test_size=0.2, # 20% of the data is used for testing\n", + " random_state=42 # Providing a value here means getting the same \"random\" split every time\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Let's confirm that the data has been split correctly:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "print(f'X_train shape: {X_train.shape}')\n", + "print(f'y_train shape: {y_train.shape}')\n", + "print(f'X_test shape: {X_test.shape}')\n", + "print(f'y_test shape: {y_test.shape}')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "This is what we expected to see. It's always good to check as you go, to make sure that you haven't made a mistake somewhere - this is something that working in a notebook like this makes it easy to do." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preprocessing of the Target Data\n", + "\n", + "The labels that we have are integers between 0 and 9. However, we want to train a neural network to classify the images into one of 10 classes. It can be a little counter-intuitive because we are dealing with numbers, but our classes are not ordinal.\n", + "\n", + "What do we mean by that? Let's imagine we were trying to predict the height of a building (separated into classes) from images. If a given building was actually 10m tall, and our model predicted 9m, we would consider that to be a better prediction than if it predicted 1m. This is because the classes are ordinal - there is meaning in the difference between the classes.\n", + "\n", + "In our case, even though we are dealing with numbers, the classes are not ordinal. If a given image is actually a 9, and our model predicts 8, we would consider that to be just as bad as if it predicted 1. This is because the classes are not ordered, and the difference between the classes is not meaningful.\n", + "\n", + "Because of this, we need to convert our labels from an integer value into a one-hot encoded vector. This means that each label will be represented as a vector of length 10, with a 1 in the position corresponding to the class, and 0s everywhere else. For example, the label 9 would be represented as `[0, 0, 0, 0, 0, 0, 0, 0, 0, 1]`. This is a common way of representing categorical data in machine learning. By doing this, we ensure that our model is taught the correct relationship between the classes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.utils import to_categorical\n", + "\n", + "print(f'Before one-hot encoding: {y_train[0]}')\n", + "y_train = to_categorical(y_train, num_classes=10)\n", + "y_test = to_categorical(y_test, num_classes=10)\n", + "print(f'After one-hot encoding: {y_train[0]}')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from collections import Counter\n", + "\n", + "Counter(list(y_train.argmax(axis=1)))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feed Forward Neural Networks with Keras\n", + "\n", + "Now that we have prepared our data, it's time to build a simple neural network! In this section, we will use the Keras API to build a simple feed forward neural network. We will then train the model on the MNIST dataset, and evaluate its performance on the test set.\n", + "\n", + "In most modern deep learning frameworks, the process of building a model can be broken down into a few steps:\n", + "\n", + "- Define the model architecture: this is where we define the layers of the model, and how they are connected to each other.\n", + "- Compile the model: this is where we define the loss function, the optimizer, and the metrics that we want to use to evaluate the model.\n", + "- Train the model: this is where we train the model on the training data.\n", + "\n", + "Let's start with defining the model architecture. There are two ways to do this in Keras - the Sequential API and the Functional API. The Sequential API is the simplest way to build a model, and is suitable for most use cases. The Functional API is more flexible, and allows you to build more complex models. We will start with the Sequential API, and then we will look at the Functional API later in the course.\n", + "\n", + "Our simple neural network will be \"fully-connected\". This means that each neuron in a given layer is connected to every neuron in the next layer. This is also known as a \"dense\" layer. We will use the `Dense` class from Keras to define our layers." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense\n", + "\n", + "model = Sequential()\n", + "\n", + "# Input layer\n", + "#model.add(Input(shape=(X_train.shape[1], activation='relu', input_shape=(X_train.shape[1],)))\n", + "model.add(Dense(64, activation='relu', input_shape=(64,))) # 64 neurons, ReLU activation, input shape of 64\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "# model.add(Dense(y_train.shape[1], activation='softmax'))\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Congratulations! You have just built your first neural network with Keras. As we can confirm from the `model.summary()` output, our model has 3 layers. The first layer has 64 neurons, the second layer has 64 neurons, and the output layer has 10 neurons. The output layer uses the softmax activation function, which is commonly used for multi-class classification problems. The other layers use the ReLU activation function, which is commonly used for hidden layers in neural networks.\n", + "\n", + "Next, we need to compile the model. This is where we define the loss function, the optimizer, and the metrics that we want to use to evaluate the model. We will use the `compile` method of the model to do this." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer='sgd', # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Because we are predicting which class a sample belongs to, we will use the `categorical_crossentropy` function. This loss function is commonly used for multi-class classification problems. \n", + "\n", + "For our optimizer, we are using the standard stochastic gradient descent (SGD) algorithm. This is a simple optimizer that works well for many problems. We will look at more advanced optimizers later in the course.\n", + "\n", + "Finally, we are using the `accuracy` metric to evaluate the model. This is a common metric for classification problems, and it is simply the fraction of samples that are correctly classified. This is an easier metric for us to understand, but it's not quite as useful for actually training the model (for example, it doesn't tell us how \"confident\" the model is in its predictions).\n", + "\n", + "Now that we have (a) defined the model architecture and (b) compiled the model, we are ready to train the model. We will use the `fit` method of the model to do this." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "model.fit(\n", + " X_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=5, # Number of epochs\n", + " batch_size=32, # Number of samples per batch\n", + " validation_split=0.2 # Use 20% of the data for validation\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "We have now trained our model! We can see that the model has been trained for 5 epochs, and the loss and accuracy have been printed for each epoch. We can also see that the model has been evaluated on the validation data at the end of each epoch. This is useful for us to see how the model is performing on data that it hasn't seen during training.\n", + "\n", + "Once the model is trained, it's time to evaluate the model on the test set. We can use the `evaluate` method of the model to do this. If you were building a model for a real-world application, this is the very last thing you would do, and the result here would be the figure you'd report in your paper or presentation." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "loss, accuracy = model.evaluate(X_test, y_test)\n", + "\n", + "print(f'Loss: {loss:.2f}')\n", + "print(f'Accuracy: {accuracy*100:.2f}%')" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "X_train.shape" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "NUM_TRAINING_SAMPLES = np.ceil(X_train.shape[0] * 0.8)\n", + "\n", + "print(f'Number of training samples: {NUM_TRAINING_SAMPLES}')\n", + "print(f'Batch size: {32}')\n", + "print(f'Number of steps: {np.ceil(NUM_TRAINING_SAMPLES / 32)}')" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "Hopefully you have achieved an accuracy of around 95%. This is pretty good, but we can do better! In the next section, we will look at how we can improve the performance of our model by using a more advanced optimizer. But before we get there, let's do one other thing - let's look at the predictions that our model is making on the test set. When you are building a model, it's often useful to have a look at some of the examples your model is getting wrong. Sometimes this can reveal problems with the data, or it can give you ideas for how to improve your model." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Get the predictions for the test data\n", + "predictions = model.predict(X_test)\n", + "\n", + "# Get the index of the largest probability (i.e. the predicted class)\n", + "predicted_classes = np.argmax(predictions, axis=1)\n", + "true_classes = np.argmax(y_test, axis=1)\n", + "misclassified_indices = np.where(predicted_classes != true_classes)[0]\n", + "\n", + "# Get the misclassified samples themselves\n", + "misclassified_samples = X_test[misclassified_indices]\n", + "misclassified_labels = np.argmax(y_test[misclassified_indices], axis=1)\n", + "\n", + "# Pick 9 random misclassified samples\n", + "random_indices = np.random.choice(len(misclassified_indices), 9, replace=False)\n", + "\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(misclassified_samples[random_indices[i]].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"Pred: {predicted_classes[misclassified_indices[random_indices[i]]]}, Real: {misclassified_labels[random_indices[i]]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + " \n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "What do you think? Would you have made the same mistakes as the model? Determining whether the mistakes are \"understandable\" is a rough way of seeing if you could improve the model further, or if this is the best you can do with the data you have." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### b) Exercises: Impact of the Optimizer\n", + "\n", + "In this section, you will play around with the optimizer and see how it affects the performance of the model. We will start with the standard SGD optimizer, and then we will look at more advanced optimizers.\n", + "\n", + "1. Try decreasing the learning rate of the SGD optimizer by a factor of 10, or 100. What do you observe?\n", + "2. Try increasing the learning rate of the SGD optimizer. What happens?\n", + "3. The SGD optimizer has a momentum parameter. In a nutshell, this parameter controls how much the gradient from the previous step affects the current step. Try enabling momentum in the SGD optimizer with a value of 0.9. What happens?\n", + " \n", + "**Notes**: \n", + "\n", + "The keras API documentation is available at:\n", + "\n", + "https://www.tensorflow.org/api_docs/python/tf/keras\n", + "\n", + "It is also possible to learn more about the parameters of a class by using the question mark: type and evaluate:\n", + "\n", + "```python\n", + "optimizers.SGD?\n", + "```\n", + "\n", + "in a jupyter notebook cell.\n", + "\n", + "It is also possible to type the beginning of a function call / constructor and type \"shift-tab\" after the opening paren:\n", + "\n", + "```python\n", + "optimizers.SGD(\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense\n", + "\n", + "model = Sequential()\n", + "\n", + "# Input layer\n", + "#model.add(Input(shape=(X_train.shape[1], activation='relu', input_shape=(X_train.shape[1],)))\n", + "model.add(Dense(64, activation='relu', input_shape=(64,))) # 64 neurons, ReLU activation, input shape of 64\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "# model.add(Dense(y_train.shape[1], activation='softmax'))\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 1. Decreasing the learning rate\n", + "from tensorflow.keras.optimizers import SGD\n", + "\n", + "optimiser = SGD(learning_rate=0.001)\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=optimiser, # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.fit(\n", + " X_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=5, # Number of epochs\n", + " batch_size=32, # Number of samples per batch\n", + " validation_split=0.2 # Use 20% of the data for validation\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense\n", + "\n", + "model = Sequential()\n", + "\n", + "# Input layer\n", + "#model.add(Input(shape=(X_train.shape[1], activation='relu', input_shape=(X_train.shape[1],)))\n", + "model.add(Dense(64, activation='relu', input_shape=(64,))) # 64 neurons, ReLU activation, input shape of 64\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "# model.add(Dense(y_train.shape[1], activation='softmax'))\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# 2. Increasing the learning rate\n", + "optimiser = SGD(learning_rate=0.1)\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=optimiser, # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.fit(\n", + " X_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=5, # Number of epochs\n", + " batch_size=32, # Number of samples per batch\n", + " validation_split=0.2 # Use 20% of the data for validation\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model = Sequential()\n", + "\n", + "# Input layer\n", + "#model.add(Input(shape=(X_train.shape[1], activation='relu', input_shape=(X_train.shape[1],)))\n", + "model.add(Dense(64, activation='relu', input_shape=(64,))) # 64 neurons, ReLU activation, input shape of 64\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(64, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "# model.add(Dense(y_train.shape[1], activation='softmax'))\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "optimiser = SGD(learning_rate=0.01)\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=optimiser, # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.fit(\n", + " X_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=5, # Number of epochs\n", + " batch_size=32, # Number of samples per batch\n", + " validation_split=0.2 # Use 20% of the data for validation\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, let's try a more advanced optimizer. Adam is likely the most popular optimizer for deep learning. It is an adaptive learning rate optimizer, which means that it automatically adjusts the learning rate based on how the training is going. This can be very useful, as it means that we don't need to manually tune the learning rate. Let's see how it performs on our model.\n", + "\n", + "\n", + "1. Replace the SGD optimizer by the Adam optimizer from keras and run it\n", + " with the default parameters.\n", + "\n", + "2. Add another hidden layer with ReLU activation and 64 neurons. Does it improve the model performance?\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model = Sequential()\n", + "\n", + "# Input layer\n", + "#model.add(Input(shape=(X_train.shape[1], activation='relu', input_shape=(X_train.shape[1],)))\n", + "model.add(Dense(64, activation='relu', input_shape=(64,))) # 64 neurons, ReLU activation, input shape of 64\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(256, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Hidden layer\n", + "model.add(Dense(256, activation='relu')) # 64 neurons, ReLU activation\n", + "\n", + "# Output layer\n", + "# model.add(Dense(y_train.shape[1], activation='softmax'))\n", + "model.add(Dense(10, activation='softmax')) # 10 neurons, softmax activation\n", + "\n", + "model.summary()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Adam optimizer\n", + "from tensorflow.keras.optimizers import Adam\n", + "\n", + "optimiser = Adam()\n", + "\n", + "model.compile(\n", + " loss='categorical_crossentropy', # Loss function\n", + " optimizer=optimiser, # Optimizer\n", + " metrics=['accuracy'] # Metrics to evaluate the model\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.fit(\n", + " X_train, # Training data\n", + " y_train, # Training labels\n", + " epochs=5, # Number of epochs\n", + " batch_size=32, # Number of samples per batch\n", + " validation_split=0.2 # Use 20% of the data for validation\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Exercises: Forward Pass and Generalization\n", + "\n", + "Let's look in more detail at how the model makes predictions on the test set. We will walk through each step of making predictions, examining exactly what's going on.\n", + "\n", + "To start, we will apply our model to the test set, and look at what we get as output:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "predictions_tf = model(X_test)\n", + "predictions_tf[:5]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "type(predictions_tf), predictions_tf.shape" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The raw output of the model is a tensor of shape `(360, 10)`. This means that we have 360 samples, and for each sample we have 10 values. Each of these values represents the probability that the sample belongs to a given class. This means that we have 10 probabilities for each sample, and the sum of these probabilities is 1. We can confirm this by summing the probabilities for each sample:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import tensorflow as tf\n", + "\n", + "tf.reduce_sum(predictions_tf, axis=1)[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "...okay, there might be a small rounding error here and there. This is to do with how floating point numbers are represented in computers, and it's not something we need to worry about for now." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also extract the label with the highest probability using the tensorflow API:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "predicted_labels_tf = tf.argmax(predictions_tf, axis=1)\n", + "predicted_labels_tf[:5]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": false + }, + "source": [ + "One helpful aspect of this approach is that we don't just get the prediction, but also a sense of how confident the model is in its prediction. To see this in practice, let's take a look at some of the predictions the model is highly confident about (i.e. a lot of the probability mass is on one class):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "# Get the values corresponding to the predicted labels for each sample\n", + "predicted_values_tf = tf.reduce_max(predictions_tf, axis=1)\n", + "\n", + "# Get the indices of the samples with the highest predicted values\n", + "most_confident_indices_tf = tf.argsort(predicted_values_tf, direction='DESCENDING').numpy()[:9]\n", + "\n", + "# Get the 9 most confident samples\n", + "most_confident_samples_tf = X_test[most_confident_indices_tf]\n", + "\n", + "# Get the true labels for the 9 most confident samples\n", + "most_confident_labels_tf = np.argmax(y_test[most_confident_indices_tf], axis=1)\n", + "\n", + "# Plot the 9 most confident samples\n", + "fig, axes = plt.subplots(3, 3, figsize=(6, 6))\n", + "\n", + "for i, ax in enumerate(axes.flat):\n", + " ax.imshow(most_confident_samples_tf[i].reshape(8, 8), cmap=plt.cm.gray_r, interpolation='nearest')\n", + " ax.set_title(f\"{most_confident_labels_tf[i]}\")\n", + "\n", + " # Removing axis labels\n", + " ax.set_xticks([])\n", + " ax.set_yticks([])\n", + " \n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Impact of Initialization\n", + "\n", + "Let's study the impact of a bad initialization when training\n", + "a deep feed forward network.\n", + "\n", + "By default, Keras dense layers use the \"Glorot Uniform\" initialization\n", + "strategy to initialize the weight matrices:\n", + "\n", + "- each weight coefficient is randomly sampled from [-scale, scale]\n", + "- scale is proportional to $\\frac{1}{\\sqrt{n_{in} + n_{out}}}$\n", + "\n", + "This strategy is known to work well to initialize deep neural networks\n", + "with \"tanh\" or \"relu\" activation functions and then trained with\n", + "standard SGD.\n", + "\n", + "To assess the impact of initialization let us plug an alternative init\n", + "scheme into a 2 hidden layers networks with \"tanh\" activations.\n", + "For the sake of the example let's use normal distributed weights\n", + "with a manually adjustable scale (standard deviation) and see the\n", + "impact the scale value:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras import initializers\n", + "from tensorflow.keras import optimizers\n", + "\n", + "input_dim = 64\n", + "hidden_dim = 64\n", + "output_dim = 10\n", + "\n", + "normal_init = initializers.TruncatedNormal(stddev=0.01, seed=42)\n", + "\n", + "model = Sequential()\n", + "model.add(Dense(hidden_dim, input_dim=input_dim, activation=\"tanh\",\n", + " kernel_initializer=normal_init))\n", + "model.add(Dense(hidden_dim, activation=\"tanh\",\n", + " kernel_initializer=normal_init))\n", + "model.add(Dense(output_dim, activation=\"softmax\",\n", + " kernel_initializer=normal_init))\n", + "\n", + "model.compile(optimizer=optimizers.SGD(learning_rate=0.1),\n", + " loss='categorical_crossentropy', metrics=['accuracy'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.layers" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's have a look at the parameters of the first layer after initialization but before any training has happened:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.layers[0].weights" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "w = model.layers[0].weights[0].numpy()\n", + "w" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "w.std()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "b = model.layers[0].weights[1].numpy()\n", + "b" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "\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": {}, + "source": [ + "Once the model has been fit, the weights have been updated and notably the biases are no longer 0:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model.layers[0].weights" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Questions:\n", + "\n", + "- Try the following initialization schemes and see whether\n", + " the SGD algorithm can successfully train the network or\n", + " not:\n", + " \n", + " - a very small e.g. `stddev=1e-3`\n", + " - a larger scale e.g. `stddev=1` or `10`\n", + " - initialize all weights to 0 (constant initialization)\n", + " \n", + "- What do you observe? Can you find an explanation for those\n", + " outcomes?\n", + "\n", + "- Are more advanced solvers such as SGD with momentum or Adam able\n", + " to deal better with such bad initializations?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Your code here" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# import necessary libraries\n", + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from sklearn.datasets import load_digits\n", + "from sklearn.model_selection import train_test_split\n", + "from tensorflow.keras.models import Sequential\n", + "from tensorflow.keras.layers import Dense\n", + "from tensorflow.keras.utils import to_categorical\n", + "from tensorflow.keras import initializers, optimizers" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# \n", + "from sklearn.model_selection import train_test_split\n", + "\n", + "# Load and prepare data\n", + "digits = load_digits()\n", + "X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)\n", + "y_train = to_categorical(y_train, 10)\n", + "y_test = to_categorical(y_test, 10)\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Initialization schemes to test\n", + "init_configs = {\n", + " \"stddev=1e-3\": initializers.TruncatedNormal(stddev=1e-3, seed=42),\n", + " \"stddev=1\": initializers.TruncatedNormal(stddev=1.0, seed=42),\n", + " \"stddev=10\": initializers.TruncatedNormal(stddev=10.0, seed=42),\n", + " \"constant=0\": initializers.Constant(0.0)\n", + "}\n", + "\n", + "# Optimizers to test\n", + "optim_configs = {\n", + " \"SGD\": optimizers.SGD(learning_rate=0.1),\n", + " \"Momentum\": optimizers.SGD(learning_rate=0.1, momentum=0.9),\n", + " \"Adam\": optimizers.Adam(learning_rate=0.01)\n", + "}\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "results = {}\n", + "\n", + "for init_name, init in init_configs.items():\n", + " for opt_name, opt in optim_configs.items():\n", + " print(f\"Training with {init_name} + {opt_name}\")\n", + " model = Sequential([\n", + " Dense(64, input_dim=64, activation='tanh', kernel_initializer=init),\n", + " Dense(64, activation='tanh', kernel_initializer=init),\n", + " Dense(10, activation='softmax', kernel_initializer=init)\n", + " ])\n", + " model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])\n", + " history = model.fit(X_train, y_train, epochs=15, batch_size=32, verbose=0)\n", + " test_loss, test_acc = model.evaluate(X_test, y_test, verbose=0)\n", + " results[(init_name, opt_name)] = {\n", + " \"history\": history,\n", + " \"test_loss\": test_loss,\n", + " \"test_acc\": test_acc\n", + " }\n", + "\n" + ] + } + ], + "metadata": { + "file_extension": ".py", + "kernelspec": { + "display_name": "dsi_participant", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.19" + }, + "mimetype": "text/x-python", + "name": "python", + "npconvert_exporter": "python", + "pygments_lexer": "ipython3", + "toc": { + "base_numbering": 1, + "nav_menu": {}, + "number_sections": true, + "sideBar": true, + "skip_h1_title": false, + "title_cell": "Table of Contents", + "title_sidebar": "Contents", + "toc_cell": false, + "toc_position": {}, + "toc_section_display": true, + "toc_window_display": false + }, + "version": 3 + }, + "nbformat": 4, + "nbformat_minor": 4 +} diff --git a/01_materials/labs/lab_2.ipynb b/01_materials/labs/lab_2.ipynb index a45b46e9..e7a04376 100644 --- a/01_materials/labs/lab_2.ipynb +++ b/01_materials/labs/lab_2.ipynb @@ -22,7 +22,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 55, "metadata": {}, "outputs": [], "source": [ @@ -36,9 +36,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 56, "metadata": {}, - "outputs": [], + "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", @@ -58,7 +69,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 57, "metadata": {}, "outputs": [], "source": [ @@ -89,9 +100,24 @@ "Before we get there, let's write a function that one-hot encodes the class labels:" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Added by me not the teacher\n", + "\n", + "It takes a list or array of class labels and converts it into a binary matrix format suitable for training classification models, especially those using the categorical_crossentropy loss function.\n", + "\n", + "1. Function Definitiondef one_hot(n_classes, y):n_classes: This is an integer representing the total number of unique categories (classes) in your dataset. For example, if you are classifying images into 10 categories (0 through 9), n_classes would be 10.y: This is the input array or list containing your integer class labels (e.g., [1, 0, 2, 1]).2. The Conversion Logicreturn np.eye(n_classes)[y]This line uses a powerful NumPy indexing trick to achieve the one-hot encoding:np.eye(n_classes): This creates an Identity Matrix of size n_classes by n_classes. An identity matrix is a square matrix where all elements on the main diagonal are $1$, and all other elements are $0$.Example (if n_classes=3):\n", + "\n", + " - [[1., 0., 0.], <-- Represents Class 0\n", + " - [0., 1., 0.], <-- Represents Class 1\n", + " - [0., 0., 1.]] <-- Represents Class 2" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": {}, "outputs": [], "source": [ @@ -101,18 +127,43 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([0., 0., 0., 1., 0., 0., 0., 0., 0., 0.])" + ] + }, + "execution_count": 59, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "one_hot(n_classes=10, y=3)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 60, "metadata": {}, - "outputs": [], + "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": 60, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "one_hot(n_classes=10, y=[0, 4, 9, 1])" ] @@ -141,9 +192,25 @@ "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": "markdown", + "metadata": {}, + "source": [ + "# Added by me not the teacher\n", + "This Python function calculates the Softmax function for a given input array or matrix X, which is a crucial operation typically used in the final layer of a neural network for multi-class classification. It converts a vector of raw scores (called logits) into a vector of probabilities that sum up to 1.\n", + "\n", + "- Explanation of the Softmax Function CodeThe implementation includes a standard numerical stability trick to prevent a common issue called overflow when dealing with large numbers in the exponent.\n", + "\n", + " # Conceptual Role in MLIn a neural network:\n", + "- The final layer outputs a vector of logits X (raw, unnormalized scores).\n", + "- The Softmax function takes these logits and transforms them into an array of probabilities.\n", + "- Each probability represents the model's confidence that the input belongs to a specific class.\n", + "- Crucially, these probabilities sum up to 1 across all classes, making it a valid probability distribution." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 66, "metadata": { "collapsed": false }, @@ -164,9 +231,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 67, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[9.99662391e-01 3.35349373e-04 2.25956630e-06]\n" + ] + } + ], "source": [ "print(softmax([10, 2, -3]))" ] @@ -181,9 +256,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 72, "metadata": {}, - "outputs": [], + "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", @@ -199,18 +283,36 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 71, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1.0\n" + ] + } + ], "source": [ "print(np.sum(softmax([10, 2, -3])))" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 73, "metadata": {}, - "outputs": [], + "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", @@ -227,9 +329,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 77, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "[1. 1.]\n" + ] + } + ], "source": [ "print(np.sum(softmax(X), axis=1))" ] @@ -249,11 +359,32 @@ "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": "markdown", + "metadata": {}, + "source": [ + "# Personal added notes by me not the teacher, please:\n", + "\n", + "- This function, named nll, calculates the Negative Log Likelihood (NLL).\n", + "\n", + "- In the context of machine learning and neural networks, NLL is synonymous with Cross-Entropy Loss or Log Loss when applied to a single sample. It is the core loss function that your model (using categorical_crossentropy) tries to minimize during training.\n", + "\n", + "- The primary goal of the NLL is to penalize the model heavily when it is confident in a wrong answer, and lightly when it is confident in the correct answer." + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 76, "metadata": {}, - "outputs": [], + "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", @@ -279,9 +410,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 84, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "4.605170185988091\n" + ] + } + ], "source": [ "print(nll([1, 0, 0], [0.01, 0.01, .98]))" ] @@ -295,9 +434,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 85, "metadata": {}, - "outputs": [], + "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", @@ -307,7 +454,7 @@ "\n", "Y_pred = np.array([[0, 1, 0],\n", " [.99, 0.01, 0],\n", - " [0, 0, 1]])\n", + " [0, 0.01, 1]])\n", "\n", "print(nll(Y_true, Y_pred))" ] @@ -337,35 +484,36 @@ "source": [ "class LogisticRegression:\n", "\n", - " def __init__(self, input_size, output_size):\n", + " def __init__(self, input_size, output_size): # 1- construcstion\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", + " high=0.1, low=-0.1) # initialize weights matrix(W)\n", " self.b = np.random.uniform(size=output_size,\n", - " high=0.1, low=-0.1)\n", + " high=0.1, low=-0.1) # Initializes the bias vector (b)\n", " \n", - " # Store the input size and output size\n", + " # Store the input size and output size /Stores the dimensions for later use (e.g., in the loss function).\n", " self.output_size = output_size\n", " self.input_size = input_size\n", " \n", - " def forward(self, X):\n", + " def forward(self, X): # 2- (Prediction/Inference)\n", " # Compute the linear combination of the input and weights\n", - " Z = None\n", - " return None\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", + " # Return the most probable class for each sample in X # 3- (Classification)\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", + " def loss(self, X, y): # 4- (Evaluation)/ (Loss Calculation)\n", " # Compute the negative log likelihood over the data provided\n", " y_onehot = one_hot(self.output_size, y.astype(int))\n", - " return None\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)\n", "\n", - " def grad_loss(self, X, y_true, y_pred):\n", + " def grad_loss(self, X, y_true, y_pred): # 5- (Backpropagation) / (Gradient Calculation)\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", @@ -395,9 +543,9 @@ "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)" + "n_features = X_train.shape[1] # \n", + "n_classes = len(np.unique(y_train)) # \n", + "lr = LogisticRegression(n_features, n_classes) # learnable model instance" ] }, { @@ -411,11 +559,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 91, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQ7klEQVR4nO3deVhU5f//8dfIMiwqKspmqGi5r0ELqIm5FC7f9izLncpckWwxy9QsssUPlVuWSpaZ3xbNyiXKrVJLScrUj1kumIKkJbgUCpzfH/2YryODMniYAX0+rutcl3PPfc79nhk8Z15zNothGIYAAAAA4CJVcXcBAAAAAC4NhAsAAAAApiBcAAAAADAF4QIAAACAKQgXAAAAAExBuAAAAABgCsIFAAAAAFMQLgAAAACYgnABAAAAwBSEiwrMYrGUalq7dq1b64yNjVVsbKxbayhvEydOlMViKdO8AwcOVNWqVU2tZ+DAgWrQoEGZ5s3NzdVzzz2n2NhYhYSEqGrVqmrVqpWmTp2qf/75x9Q6gUvVpk2bdNdddyk0NFTe3t4KCQnRnXfeqY0bN17Ucp9//nktXbrUnCIv4NChQ5o4caLS09NdMp4z9u3bJ4vFopdfftm0Za5du1YWi0UffvjhBfs6Wuc72tZZLBZNnDjR9njHjh2aOHGi9u3bV2yZF7PevlhdunTR0KFD3TL2+Zz7/qWkpMhisTh8/85n+fLldss5W4MGDTRw4MAy11ge1qxZo27duikoKEhVq1ZV69at9dprr6mgoMDW58yZM2rUqJGSk5PdV2gZES4qsI0bN9pNPXr0kK+vb7H2q6++2q11zpw5UzNnznRrDSi9jIwMJScn6+qrr9acOXO0bNky3XnnnZo4caJ69eolwzDcXSJQob3++utq3769fv/9d7344ov68ssv9fLLL+vgwYPq0KGDpk+fXuZluzpcTJo0qUKGC3eLj48vVVDcuHGj4uPjbY937NihSZMmOfxy/PTTT2vJkiVmllkqn3zyib799ls9/fTTLh/bWT179tTGjRsVGhrq1HzLly/XpEmTHD63ZMmSCvXav/zyS3Xt2lX5+fl68803tXTpUsXGxmr06NFKTEy09fPy8tKECRM0efJkHT161I0VO8/T3QWgZNdff73d4zp16qhKlSrF2s916tQp+fn5lWdpdpo3b+6ysXDxIiIitG/fPvn7+9vabrzxRvn7++vRRx/Vt99+qw4dOrixQqDi+vbbb5WQkKAePXpoyZIl8vT8v83oPffco9tuu02jR49Wu3bt1L59ezdWWvG4ett0Ma644gpdccUVF+x3oe3x2Ro1anQxJZXZ888/r9tuu01169Y1bZnl9VnWqVNHderUMXWZ7dq1M3V5FyslJUVeXl767LPPbNvhrl27ateuXUpJSdGrr75q63vvvfcqMTFRb7zxhp588kl3lew09lxUcrGxsWrZsqXWr1+vmJgY+fn5afDgwZKK724s4mgXYVZWlh566CFdccUV8vb2VkREhCZNmqT8/PxS1XD2ruKi3dkvvfSSpk6dqgYNGsjX11exsbH65ZdfdObMGT3xxBMKCwtTQECAbrvtNmVnZ9stc/HixerevbtCQ0Pl6+urZs2a6YknntDJkyeLjf/mm2+qcePGslqtat68ud577z2Hu59Pnz6tKVOmqGnTprJarapTp44GDRqkP/7444Kv0RFnapSk7du3q0uXLvL391edOnU0YsQInTp1yq6PYRiaOXOm2rZtK19fX9WsWVN33nmn9uzZU6YaHfH397cLFkWuvfZaSdKBAwdMGwu41CQlJclisWjWrFl2wUKSPD09NXPmTFksFr3wwgu29pIOhzn30BuLxaKTJ0/q7bffth32WrRuLTpcJDU1VYMGDVKtWrXk7++v3r17F1s/lHQYyNnr6rVr1+qaa66RJA0aNMg2XkmHljhbw/m2TRkZGbr//vsVFBQkq9WqZs2a6ZVXXlFhYWGxMQsLC/Xcc8+pXr168vHxUVRUlL766iu7Pr/++qsGDRqkq666Sn5+fqpbt6569+6tbdu2OXwd//zzjxITExUSEiJfX1916tRJW7dutetT2kNhz37PUlJSdNddd0mSOnfubHtPU1JSJDn+OyjtOn/r1q3q1auX7T0LCwtTz5499fvvv5+3vq1bt+r7779Xv3797NrN+ixzc3M1duxYRUREyNvbW3Xr1lVCQkKx7WBubq4eeOABBQYGqmrVqrr55pv1yy+/FKu3pMOiVq5cqS5duiggIEB+fn5q1qyZkpKSbO/rjBkzJNkfTl60DEf/H0rzN3j2oXnTpk1TRESEqlatqujoaG3atOm87/v5eHl5ydvbW76+vnbtNWrUkI+Pj12bt7e3+vTpozlz5lSqowoIF5eAzMxM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hg0bZtr/J2f/Bnv27CkPDw/b49atW0uS9u/fb2urX7++8vPzNXfu3AuOn5aWpttuu02RkZH69NNPtXr1ao0bN05PPfWUnn322WL9iz6/gwcPlv5FuhkndF8CnL2qwrkOHz6sTz/9VF5eXg6fP3LkSJmWW6tWLbvH3t7e520vugzqiRMn1LFjR/n4+GjKlClq3Lix/Pz8dODAAd1+++22Q5iKrp4QHBxcbOzg4GDt3bvX9vjw4cM6duyYbaxzOfsaS1tjEU9PTwUGBtq1hYSE2L2Ow4cPyzAMh69Hkho2bOhUjaWxf/9+de7cWZ6envrqq6+KfTYA/k/t2rXl5+dnt25xZN++ffLz8yuX/09F641z21x5NZnS1uBo23T06FGH55+EhYXZni/NWKdPn9aJEycUEBCgxMREzZgxQ48//rg6deqkmjVrqkqVKoqPj3d4yGtJy/zxxx+LtZen0q7zAwICtG7dOj333HN68skn9ddffyk0NFQPPPCAnnrqqRK33ZL0999/l7h86eI+y8OHD+vXX3+94HeHo0ePnncbeD5F50SW5uT60nL2b/Dcuq1WqySV6XBqSRo+fLiCg4O1ZMkSW2jp3LmzqlSpookTJ+q+++6z294XheuyjucOhItLQElp3mq1Ki8vr1j7uf9xateurdatW+u5555zuJyi/3Cusnr1ah06dEhr1661+xX+3GNAi/7DOzoXISsry+5x7dq1FRgYqJUrVzocs1q1auVSY5H8/HwdPXrUbiVVVGNRW+3atWWxWPT111/bVl5nc9R2Mfbv36/Y2FgZhqG1a9eauvIGLkUeHh7q3LmzVq5cqd9//93h/5nff/9daWlpiouLs31x8PHxcbguLssPN+eu24rarrzyStvj841Xu3Ztp8csSw2S421TYGCgMjMzi7UfOnRIkorVV9JY3t7etvsHvfvuu+rfv7/tfIciR44cUY0aNUpd/7lfIsubM+v8Vq1a6f3335dhGPrpp5+UkpKiyZMny9fXV0888cR5x/jzzz9LfP5iPsvatWvL19dX8+bNK3Fs6d/P/HzbwPMpunLUhU5cd4azf4NmS09P17333mu3N0SSrrnmGhUWFmrnzp124aLo8yvvuszEYVGXsAYNGuinn36ya1u9erVOnDhh19arVy/9/PPPatSokaKioopNrg4XRSuxc1e2b7zxht3jJk2aKCQkRP/7v/9r156RkaENGzbYtfXq1UtHjx5VQUGBw9fYpEmTcqnxbAsXLrR7/N5770mS7eotRfeYOHjwoMMaW7Vq5VSN55ORkaHY2FgVFBRo9erVql+/vmnLBi5l48aNk2EYGjZsWLETtgsKCvTwww/LMAyNGzfO1t6gQQNlZ2fb/RBy+vRprVq1qtjyrVbreX+hPHc9smHDBtsPBWePd+66/5dffil2cnNZf4EtTQ0l6dKli3bs2KEffvjBrn3BggWyWCzq3LmzXfvHH39sd3PP48eP69NPP1XHjh1tX84sFkuxdfHnn39e4mEkixYtsrvyzv79+7VhwwZTbgbrzHtalnW+xWJRmzZt9J///Ec1atQo9j6eq2nTpuc9Uf1iPstevXrpt99+U2BgoMP6i/YOFH2mJW0DzycmJkYBAQGaPXv2ea+W5Mz77uzfoNnCwsK0ZcuWYuuPoosUnPujRdHnV5ku+8+ei0tYv3799PTTT2vChAnq1KmTduzYoenTpysgIMCu3+TJk5WamqqYmBiNGjVKTZo00T///KN9+/Zp+fLlmj17tkt/1Y6JiVHNmjU1dOhQPfPMM/Ly8tLChQuL7bKuUqWKJk2apIceekh33nmnBg8erGPHjmnSpEkKDQ21O9/jnnvu0cKFC9WjRw+NHj1a1157rby8vPT7779rzZo1uuWWW3TbbbeZXmMRb29vvfLKKzpx4oSuueYabdiwQVOmTFFcXJztnhLt27fXgw8+qEGDBmnLli264YYb5O/vr8zMTH3zzTdq1aqVHn744RJrmjx5siZPnqyvvvrqvOddZGdnq3PnzsrMzNTcuXOVnZ1tdyng0l7fHbgctW/fXsnJyUpISFCHDh00YsQI1atXTxkZGZoxY4a+++47JScnKyYmxjZPnz59NGHCBN1zzz169NFH9c8//xS7G2+RVq1aae3atfr0008VGhqqatWq2f34sWXLFsXHx+uuu+7SgQMHNH78eNWtW9fuKoH9+vXT/fffr2HDhumOO+7Q/v379eKLLxa7f0CjRo3k6+urhQsXqlmzZqpatarCwsIu+INSaWooyZgxY7RgwQL17NlTkydPVv369fX5559r5syZevjhh9W4cWO7/h4eHurWrZsSExNVWFioqVOnKjc31+6Gab169VJKSoqaNm2q1q1bKy0tTS+99FKJ67Hs7GzddttteuCBB5STk6NnnnlGPj4+doGwrFq2bCnp3ysZVqtWTT4+PoqIiHC4V6S06/zPPvtMM2fO1K233qqGDRvKMAx9/PHHOnbsmLp163beemJjYzVv3jz98ssvxd5b6eI+y4SEBH300Ue64YYbNGbMGLVu3VqFhYXKyMjQF198oUceeUTXXXedunfvrhtuuEGPPfaYTp48qaioKH377bd65513LjhG1apV9corryg+Pl5du3bVAw88oODgYP3666/68ccfbTesLApiU6dOte01bN26tcNDoZ39GyyN/fv3q1GjRhowYMAFz7sYM2aMRo0apd69e+uhhx6Sn5+fvvrqK73yyivq2rWr2rRpY9d/06ZN573iV4XkjrPIUTYlXS2qRYsWDvvn5eUZjz32mBEeHm74+voanTp1MtLT0x1eSeSPP/4wRo0aZURERBheXl5GrVq1jMjISGP8+PHGiRMnzltXSVeLeumll+z6FV2p44MPPrBrL7o6xNlXnNiwYYMRHR1t+Pn5GXXq1DHi4+ONH374weGVTebMmWNceeWVhre3t9G4cWNj3rx5xi233GK0a9fOrt+ZM2eMl19+2WjTpo3h4+NjVK1a1WjatKnx0EMPGbt37z7va3R05ZDS1lj0uf30009GbGys4evra9SqVct4+OGHHb638+bNM6677jrD39/f8PX1NRo1amT079/f2LJli90yz736TFGNjq5Scraiz6GkydEVxgDY27hxo3HnnXcawcHBhqenpxEUFGTcfvvtxoYNGxz2X758udG2bVvD19fXaNiwoTF9+nSH65X09HSjffv2hp+fnyHJtm4tWk9+8cUXRr9+/YwaNWoYvr6+Ro8ePYqtvwoLC40XX3zRaNiwoeHj42NERUUZq1evdni1o0WLFhlNmzY1vLy8Lvj/35kazrdt2r9/v9G3b18jMDDQ8PLyMpo0aWK89NJLdlcXLNqOTJ061Zg0aZJxxRVXGN7e3ka7du2MVatW2S3vr7/+MoYMGWIEBQUZfn5+RocOHYyvv/662OstWve98847xqhRo4w6deoYVqvV6Nixo9361TDKfrUow/j3yogRERGGh4eH3fagpKuGXWid/9///te49957jUaNGhm+vr5GQECAce211xopKSkO39+z5eTkGFWrVi12JSKzPssTJ04YTz31lNGkSRPD29vbCAgIMFq1amWM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GzY4nGfZsmWKiorSiy++qLp166px48YaO3as/v777xLHycvLU25urt0EAKjYnNpzccUVV+iFF17QlVdeKUl6++23dcstt2jr1q1q0aJFuRQIAKhYjhw5ooKCAgUHB9u1BwcHKysry+E8e/bs0TfffCMfHx8tWbJER44c0bBhw/Tnn3+WeN5FUlKSJk2aZHr9AIDy49Sei969e6tHjx5q3LixGjdurOeee05Vq1bVpk2bSpyHX54A4NJksVjsHhuGUaytSGFhoSwWixYuXKhrr71WPXr00LRp05SSklLi3otx48YpJyfHNh04cMD01wAAMFeZrxZVUFCg999/XydPnlR0dHSJ/ZKSkhQQEGCbwsPDyzokAKACqF27tjw8PIrtpcjOzi62N6NIaGio6tatq4CAAFtbs2bNZBiGfv/9d4fzWK1W22G4RRMAoGJzOlxs27ZNVatWldVq1dChQ7VkyRI1b968xP788gQAlxZvb29FRkYqNTXVrj01NVUxMTEO52nfvr0OHTqkEydO2Np++eUXValSRVdccUW51gsAcB2nw0WTJk2Unp6uTZs26eGHH9aAAQO0Y8eOEvvzyxMAXHoSExP11ltvad68edq5c6fGjBmjjIwMDR06VNK/Pyz179/f1r9v374KDAzUoEGDtGPHDq1fv16PPvqoBg8eLF9fX3e9DACAyZy+FK23t7fthO6oqCht3rxZr776qt544w3TiwMAVEx9+vTR0aNHNXnyZGVmZqply5Zavny56tevL0nKzMxURkaGrX/VqlWVmpqqkSNHKioqSoGBgbr77rs1ZcoUd70EAEA5uOj7XBiGoby8PDNqAQBUIsOGDdOwYcMcPpeSklKsrWnTpsUOpQIAXFqcChdPPvmk4uLiFB4eruPHj+v999/X2rVrtXLlyvKqDwAAAEAl4VS4OHz4sPr166fMzEwFBASodevWWrlypbp161Ze9QEAAACoJJwKF3Pnzi2vOgAAAABUcmW+zwUAAAAAnI1wAQAAAMAUhAsAAAAApiBcAAAAADAF4QIAAACAKQgXAAAAAExBuAAAAABgCsIFAAAAAFMQLgAAAACYgnABAAAAwBSECwAAAACmIFwAAAAAMIWnuwtA5bd27Vp3l+BQQECAu0so0cCBA91dAgAAgOnYcwEAAADAFIQLAAAAAKYgXAAAAAAwBeECAAAAgCkI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CBcAAADl6PTp0/L29jZlWSEhIRViGUBJnDosqkGDBrJYLMWm4cOHl1d9AAAAFUpsbKxGjBihESNGqEaNGgoMDNRTTz0l4//vAWnQoIGmTJmigQMHKiAgQA888IAkacOGDbrhhhvk6+ur8PBwjRo1SidPnrQtNzs7W71795avr68iIiK0cOHCYmOfe0jT77//rnvuuUe1atWSv7+/oqKi9N133yklJUWTJk3Sjz/+aPu+lpKS4nAZ27Zt04033ihfX18FBgbqwQcf1IkTJ2zPDxw4ULfeeqtefvllhYaGKjAwUMOHD9eZM2dMfFdxqXAqXGzevFmZmZm2KTU1VZJ01113lUtxAAAAFdHbb78tT09Pfffdd3rttdf0n//8R2+99Zbt+ZdeekktW7ZUWlqann76aW3btk033XSTbr/9dv30009avHixvvnmG40YMcI2z8CBA7Vv3z6tXr1aH374oWbOnKns7OwSazhx4oQ6deqkQ4cOadmyZfrxxx/12GOPqbCwUH369NEjjzyiFi1a2L639enTp9gyTp06pZtvvlk1a9bU5s2b9cEHH+jLL7+0q0uS1qxZo99++01r1qzR22+/rZSUFFtYAc7m1GFRderUsXv8wgsvqFGjRurUqVOJ8+Tl5SkvL8/2ODc318kSAQAAKpbw8HD95z//kcViUZMmTbRt2zb95z//se2luPHGGzV27Fhb//79+6tv375KSEiQJF111VV67bXX1KlTJ82aNUsZGRlasWKFNm3apOuuu06SNHfuXDVr1qzEGt577z398ccf2rx5s2rVqiVJuvLKK23PV61aVZ6enuc9DGrhwoX6+++/tWDBAvn7+0uSpk+frt69e2vq1KkKDg6WJNWsWVPTp0+Xh4eHmjZtqp49e+qrr76yvV6gSJmvFnX69Gm9++67Gjx4sCznOfEqKSlJAQEBtik8PLysQwIAAFQI119/vd33n+joaO3evVsFBQWSpKioKLv+aWlpSklJUdWqVW3TTTfdpMLCQu3du1c7d+6Up6en3XxNmzZVjRo1SqwhPT1d7dq1swWLsti5c6fatGljCxaS1L59exUWFmrXrl22thYtWsjDw8P2ODQ09Lx7VXD5KvMJ3UuXLtWxY8c0cODA8/YbN26cEhMTbY9zc3MJGAAA4JJ29pd1SSosLNRDDz2kUaNGFetbr1492xf58/1g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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", @@ -449,11 +608,33 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 93, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Average NLL over the last 100 samples at step 100: 163\n", + "Average NLL over the last 100 samples at step 200: 189\n", + "Average NLL over the last 100 samples at step 300: 136\n", + "Average NLL over the last 100 samples at step 400: 200\n", + "Average NLL over the last 100 samples at step 500: 130\n", + "Average NLL over the last 100 samples at step 600: 284\n", + "Average NLL over the last 100 samples at step 700: 62\n", + "Average NLL over the last 100 samples at step 800: 92\n", + "Average NLL over the last 100 samples at step 900: 105\n", + "Average NLL over the last 100 samples at step 1000: 124\n", + "Average NLL over the last 100 samples at step 1100: 295\n", + "Average NLL over the last 100 samples at step 1200: 178\n", + "Average NLL over the last 100 samples at step 1300: 198\n", + "Average NLL over the last 100 samples at step 1400: 136\n", + "Average NLL over the last 100 samples at step 1500: 232\n" + ] + } + ], "source": [ "lr = LogisticRegression(input_size=X_train.shape[1], output_size=10)\n", "\n", @@ -489,11 +670,22 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 94, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQnElEQVR4nO3deVhUdf//8dfIMiwq5saiCGiuuUsLmImaFi7fbLUsdyxzC7lbNCuXLLLFm8otyyTLzG+lZuVGuZZaalKm3ma3C6ggaQkuhQLn90c/5uvIoAweZsCej+s61+X5zOecz3sWz+E1ZxmLYRiGAAAAAOAKVXJ3AQAAAACuDoQLAAAAAKYgXAAAAAAwBeECAAAAgCkIFwAAAABMQbgAAAAAYArCBQAAAABTEC4AAAAAmIJwAQAAAMAUhItyzGKxlGhat26dW+uMiYlRTEyMW2soaxMnTpTFYinVsgMHDlTlypVNrWfgwIEKDw8v1bI5OTl64YUXFBMTo6CgIFWuXFktWrTQ1KlT9ddff5laJ3C12rJli+69914FBwfL29tbQUFBuueee7R58+YrWu+LL76opUuXmlPkZRw9elQTJ05UamqqS8ZzxsGDB2WxWPTqq6+ats5169bJYrHok08+uWxfR9t8R/s6i8WiiRMn2uZ3796tiRMn6uDBg0XWeSXb7SvVpUsXDRs2zC1jX8rFr19ycrIsFovD1+9Sli9fbreeC4WHh2vgwIGlrtFsixcv1gMPPKBrr71Wvr6+Cg8P14MPPqh9+/bZ9Tt//rwaNGigpKQk9xR6BQgX5djmzZvtpu7du8vX17dIe9u2bd1a58yZMzVz5ky31oCSS0tLU1JSktq2bas5c+Zo2bJluueeezRx4kT17NlThmG4u0SgXHvzzTfVvn17HT58WC+//LK++uorvfrqqzpy5IhuvvlmTZ8+vdTrdnW4mDRpUrkMF+4WFxdXoqC4efNmxcXF2eZ3796tSZMmOfzj+Nlnn9WSJUvMLLNEPvvsM3377bd69tlnXT62s3r06KHNmzcrODjYqeWWL1+uSZMmOXxsyZIl5eq5T506VWfPntX48eO1cuVKTZkyRTt27FDbtm21a9cuWz8vLy8999xzmjx5sk6cOOHGip3n6e4CULybbrrJbr5WrVqqVKlSkfaLnT17Vn5+fmVZmp1mzZq5bCxcuYiICB08eFD+/v62ts6dO8vf319PPPGEvv32W918881urBAov7799lvFx8ere/fuWrJkiTw9/283ev/99+vOO+/UY489pjZt2qh9+/ZurLT8cfW+6UrUrVtXdevWvWy/y+2PL9SgQYMrKanUXnzxRd15552qU6eOaessq/eyVq1aqlWrlqnrbNOmjanru1Kff/65ateubdfWuXNnhYeH69///rfeeecdW/sDDzyghIQEvfXWW3r66addXWqpceSigouJiVHz5s21YcMGRUdHy8/PT4MHD5ZU9HBjIUeHCDMzM/XII4+obt268vb2VkREhCZNmqS8vLwS1XDhoeLCw9mvvPKKpk6dqvDwcPn6+iomJka//PKLzp8/r7FjxyokJEQBAQG68847lZWVZbfORYsWqVu3bgoODpavr6+aNm2qsWPH6syZM0XGf/vtt9WoUSNZrVY1a9ZMH374ocPDz+fOndOUKVPUpEkTWa1W1apVS4MGDdJvv/122efoiDM1StKuXbvUpUsX+fv7q1atWho5cqTOnj1r18cwDM2cOVOtW7eWr6+vrrnmGt1zzz3av39/qWp0xN/f3y5YFLrhhhskSenp6aaNBVxtEhMTZbFYNGvWLLtgIUmenp6aOXOmLBaLXnrpJVt7cafDXHzqjcVi0ZkzZ/Tee+/ZTnst3LYWni6SkpKiQYMGqXr16vL391evXr2KbB+KOw3kwm31unXrdP3110uSBg0aZBuvuFNLnK3hUvumtLQ0PfTQQ6pdu7asVquaNm2q1157TQUFBUXGLCgo0AsvvKB69erJx8dHkZGR+vrrr+36/Prrrxo0aJAaNmwoPz8/1alTR7169dLOnTsdPo+//vpLCQkJCgoKkq+vrzp27KgdO3bY9SnpqbAXvmbJycm69957JUmdOnWyvabJycmSHH8OSrrN37Fjh3r27Gl7zUJCQtSjRw8dPnz4kvXt2LFD33//vfr162fXbtZ7mZOTo8cff1wRERHy9vZWnTp1FB8fX2Q/mJOTo6FDh6pGjRqqXLmybr/9dv3yyy9F6i3utKiVK1eqS5cuCggIkJ+fn5o2barExETb6zpjxgxJ9qeTF67D0f+HknwGLzw1b9q0aYqIiFDlypUVFRWlLVu2XPJ1v5SLg4UkhYSEqG7dukX2v97e3urTp4/mzJlToc4qIFxcBTIyMvTQQw+pb9++Wr58uYYPH+7U8pmZmbrhhhu0atUqPffcc1qxYoWGDBmixMREDR06tNR1zZgxQ99++61mzJihd955R//5z3/Uq1cvDRkyRL/99pveffdd2ykFFx5WlqR9+/ape/fumjt3rlauXKn4+Hj97//+r3r16mXXb86cOXr44YfVsmVLLV68WM8884wmTZpU5DqUgoIC3XHHHXrppZfUt29fffnll3rppZeUkpKimJgY/fnnn04/v5LWKP197mT37t3VpUsXLV26VCNHjtRbb72lPn362PV75JFHFB8fr1tvvVVLly7VzJkztWvXLkVHR+vYsWOXrKdwZ1jaa3DWrFkjSbruuutKtTxwtcvPz9fatWsVGRlZ7LfaoaGhateundasWaP8/Hyn1r9582b5+vqqe/futtNeLz7ldMiQIapUqZI+/PBDJSUl6fvvv1dMTIxOnjzp1Fht27bVvHnzJEnPPPOMbbyLt8WOlLQGR/um3377TdHR0Vq9erWef/55LVu2TLfeeqsef/xxjRw5sshY06dP18qVK5WUlKQPPvhAlSpVUmxsrN0pS0ePHlWNGjX00ksvaeXKlZoxY4Y8PT114403au/evUXW+fTTT2v//v1655139M477+jo0aOKiYm54i9xevTooRdffFHS3/u/wte0R48exS5Tkm3+mTNn1LVrVx07dkwzZsxQSkqKkpKSVK9ePZ06deqSNX3xxRfy8PDQLbfc4vDxK3kvz549q44dO+q9997T6NGjtWLFCj311FNKTk7W//zP/9j+GDYMQ71799b777+vf/3rX1qyZIluuukmxcbGluh1nTt3rrp3766CggLNnj1bn3/+uUaPHm0LVs8++6zuueceSfankxd3apWzn8ELX/MFCxbozJkz6t69u7Kzs219CoNIaa/t2L9/vw4dOuRw/xsTE6NDhw7p559/LtW63cJAhTFgwADD39/frq1jx46GJOPrr78u0l+SMWHChCLtYWFhxoABA2zzjzzyiFG5cmXj0KFDdv1effVVQ5Kxa9euS9bVsWNHo2PHjrb5AwcOGJKMVq1aGfn5+bb2pKQkQ5LxP//zP3bLx8fHG5KM7Oxsh+svKCgwzp8/b6xfv96QZPz444+GYRhGfn6+ERQUZNx44412/Q8dOmR4eXkZYWFhtraFCxcakoxPP/3Uru/WrVsNScbMmTMv+RwnTJhgXOq/S3E1Gsbf75sk4/XXX7db5oUXXjAkGd98841hGIaxefNmQ5Lx2muv2fVLT083fH19jSeffNJunRc+P8MwjEmTJhkeHh7GunXrLvlcHPnxxx8NX19f484773R6WeCfIjMz05Bk3H///Zfs16dPH0OScezYMcMwHP9/NQzH2xV/f3+77XOhefPmGZKK/B/99ttvDUnGlClTbG0Xb+MLXbytLtz+zZs375LPpzQ1FLdvGjt2rCHJ+O677+zaH330UcNisRh79+41DOP/9iMhISHGn3/+aeuXk5NjVK9e3bj11luLrTMvL884d+6c0bBhQ2PMmDG29rVr1xqSjLZt2xoFBQW29oMHDxpeXl5GXFycrc3Re3Px62cYRfezH3/8sSHJWLt2bZG6Lv4clHSbv23bNkOSsXTp0mKfc3FiY2ONJk2aFGk3471MTEw0KlWqZGzdutWu/ZNPPjEkGcuXLzcMwzBWrFhxyX3gha9fYV0HDhwwDMMwTp06ZVStWtW4+eab7d6zi40YMaLYffTF/x+c/Qy2aNHCyMvLs/X7/vvvDUnGwoULbW0HDx40PDw8jMGDBxdbY3HOnz9vxMTEGFWrVjXS0tKKPL5v3z5DkjFr1iyn1+0uHLm4ClxzzTXq3LlzqZf/4osv1KlTJ4WEhCgvL882FX6rsH79+lKtt3v37qpU6f8+Yk2bNpWkIt/iFLanpaXZ2vbv36++ffsqKChIHh4e8vLyUseOHSVJe/bskSTt3btXmZmZuu++++zWV69evSLnOn/xxReqVq2aevXqZfccW7duraCgoFJ921+SGi/04IMP2s337dtXkrR27VpbjRaLRQ899JBdjUFBQWrVqtVla3zuueeUl5dnq6GkDh48qJ49eyo0NNTuXE8ApWP8/29sS3uHuUu5eDsSHR2tsLAw23bEFUpag6N905o1a9SsWTPbaZiFBg4cKMMwbEdQC911113y8fGxzVepUkW9evXShg0bbEeG8vLy9OKLL6pZs2by9vaWp6envL29tW/fPofb4r59+9q9N2FhYYqOjnbpayiVfJt/7bXX6pprrtFTTz2l2bNna/fu3SUe4+jRow5Pwyl0Je/lF198oebNm6t169Z29d922212R9EL11XcPvBSNm3apJycHA0fPty0/0/OfgZ79OghDw8P23zLli0lSYcOHbK1hYWFKS8vT3PnznWq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TStWrNCWLVt04403SpLmzp2rpk2bFlvDhx9+qN9++01bt25V9erVJUnXXnut7fHKlSvL09PzkqdBLViwQH/++afmz58vf39/SdL06dPVq1cvTZ06VYGBgZKka665RtOnT5eHh4eaNGmiHj166Ouvvy7zcMFpUQAAALjq3XTTTbJccKepqKgo7du3T/n5+ZKkyMhIu/7bt29XcnKyKleubJtuu+02FRQU6MCBA9qzZ488PT3tlmvSpImqVatWbA2pqalq06aNLViUxp49e9SqVStbsJCk9u3bq6CgQHv37rW1XXfddfLw8LDNBwcHX/Koilk4cgEAAIB/vAv/WJekgoICPfLIIxo9enSRvvXq1bP9IW9x4ta4vr6+V1akJMMwih3zwnYvL68ijxUUFFzx+JfDkQsAAABc9bZs2VJkvmHDhnbf7l+obdu22rVrl6699toik7e3t5o2baq8vDxt27bNtszevXt18uTJYmto2bKlUlNT9fvvvzt83Nvb23YkpTjNmjVTamqq3YXl3377rSpVqqRGjRpdcllXIFwAAADgqpeenq6EhATt3btXCxcu1JtvvnnJm9I89dRT2rx5s0aMGKHU1FTt27dPy5Yt06hRoyRJjRs31u23366hQ4fqu+++0/bt2xUXF3fJoxMPPPCAgoKC1Lt3b3377bfav3+/Pv30U23evFnS33etOnDggFJTU3X8+HHl5uYWWceDDz4oHx8fDRgwQD///LPWrl2rUaNGqV+/frbrLdyJcAEAAIArYxiunUqhf//++vPPP3XDDTdoxIgRGjVqlB5++OFi+7ds2VLr16/Xvn371KFDB7Vp00bPPvusgoODbX3mzZun0NBQdezYUXfddZcefvhh1a5du9h1ent7a/Xq1apdu7a6d++uFi1a6KWXXrIdPbn77rt1++23q1OnTqpVq5YWLlxYZB1+fn5atWqVfv/9d11//fW655571KVLF02fPr1Ur4vZuOYCAAAAVz0vLy8lJSVp1qxZRR47ePCgw2Wuv/56rV69uth1BgUF6YsvvrBr69evn928cVEYCgsL0yeffOJwfVar1eFjF6+jRYsWWrNmTbF1XXhL2kJJSUnF9jcTRy4AAAAAmIJwAQAAAMAUnBYFAACAq9q6devcXcI/BkcuAAAAAJiCcAEAAACnXHyBMa4OZryvhAsAAACUSOEtU8+d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Xbt22rhx4yX75+bmavz48QoLC5PValWDBg307rvvuqhaAIAreLq7AABAxbNo0SLFx8dr5syZat++vd566y3FxsZq9+7dqlevnsNl7rvvPh07dkxz587Vtddeq6ysLOXl5bm4cgBAWSJcAACcNm3aNA0ZMkRxcXGSpKSkJK1atUqzZs1SYmJikf4rV67U+vXrtX//flWvXl2SFB4e7sqSAQAu4NRpUbNmzVLLli1VtWpVVa1aVVFRUVqxYkVZ1QYAKIfOnTun7du3q1u3bnbt3bp106ZNmxwus2zZMkVGRurll19WnTp11KhRIz3++OP6888/ix0nNzdXOTk5dhMAoHxz6shF3bp19dJLL+naa6+VJL333nu64447tGPHDl133XVlUiAAoHw5fvy48vPzFRgYaNceGBiozMxMh8vs379f33zzjXx8fLRkyRIdP35cw4cP1++//17sdReJiYmaNGmS6fUDAMqOU0cuevXqpe7du6tRo0Zq1KiRXnjhBVWuXFlbtmwpdhm+eQKAq5PFYrGbNwyjSFuhgoICWSwWLViwQDfccIO6d++uadOmKTk5udijF+PGjVN2drZtSk9PN/05AADMVeq7ReXn5+ujjz7SmTNnFBUVVWy/xMREBQQE2KbQ0NDSDgkAKAdq1qwpDw+PIkcpsrKyihzNKBQcHKw6deooICDA1ta0aVMZhqHDhw87XMZqtdpOwy2cAADlm9PhYufOnapcubKsVquGDRumJUuWqFmzZsX255snALi6eHt7q127dkpJSbFrT0lJUXR0tMNl2rdvr6NHj+r06dO2tl9++UWVKlVS3bp1y7ReAIDrOB0uGjdurNTUVG3ZskWPPvqoBgwYoN27dxfbn2+eAODqk5CQoHfeeUfvvvuu9uzZozFjxigtLU3Dhg2T9PcXS/3797f179u3r2rUqKFBgwZp9+7d2rBhg5544gkNHjxYvr6+7noaAACTOX0rWm9vb9sF3ZGRkdq6datef/11vfXWW6YXBwAon/r06aMTJ05o8uTJysjIUPPmzbV8+XKFhYVJkjIyMpSWlmbrX7lyZaWkpGjUqFGKjIxUjRo1dN9992nKlCnuegoAgDJwxb9zYRiGcnNzzagFAFCBDB8+XMOHD3f4WHJycpG2Jk2aFDmVCgBwdXEqXDz99NOKjY1VaGioTp06pY8++kjr1q3TypUr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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plot_prediction(lr, sample_idx=0)" ] @@ -525,18 +717,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 95, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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Zbil7du343Q6eeWVV9iyZQvPPvssL7/8Mg899JDVpbm0BQsWMHnyZKZPn8769esZPHgwo0ePJjk52erS3MqyZcu44447WL16NUuWLKG8vJyRI0dSUFBgdWluac2aNbz66qt0797d6lJciqb2uoGvv/6aKVOm8Omnn9KlSxfWr19Pz549rS7Lrc2ePZt58+axd+9eq0txWf3796dXr17Mmzev4lxCQgJjx45l1qxZFlbm3jIzM4mIiGDZsmUMGTLE6nLcSn5+Pr169WLu3Lk89thj9OzZkzlz5lhdlktQz4iLS09P5+abb+add94hICDA6nIajdzcXMLDw60uw2WVlpaSmJjIyJEjK50fOXIkK1eutKiqxiE3NxdA/3/rwB133MGFF17IiBEjrC7F5bjERnlSNcMwmDBhApMmTaJPnz4kJSVZXVKjsGfPHl544QWefvppq0txWVlZWTgcDiIjIyudj4yM5NChQxZV5f4Mw2DKlCmcc845dO3a1epy3MqHH37IunXrWLNmjdWluCT1jDRAjzzyCDab7ZTH2rVreeGFF7Db7UybNs3qkl1Sdb/Px0tNTeWCCy7gyiuv5KabbrKocvdhs9kq3TYM44RzUnv+/ve/s2nTJj744AOrS3ErKSkp3H333bz77rv4+flZXY5L0piRBigrK4usrKxTtomLi+Pqq6/myy+/rPTm7XA48PT05Nprr+Wtt96q61JdWnW/z3+8uaSmpjJs2DD69+/P/Pnz8fBQlj9dpaWlBAQE8PHHH3PppZdWnL/77rvZsGEDy5Yts7A693TnnXfy2WefsXz5cuLj460ux6189tlnXHrppXh6elacczgc2Gw2PDw8KCkpqfQ1OZHCiAtLTk7GbrdX3E5NTWXUqFF88skn9O/fn1atWllYnXs5ePAgw4YNo3fv3rz77rt6Y6kF/fv3p3fv3sydO7fiXOfOnbnkkks0gLUWGYbBnXfeyaJFi/jpp59o37691SW5nby8PPbv31/p3A033ECnTp2YOnWqLolVg8aMuLDWrVtXuh0UFARA27ZtFURqUWpqKkOHDqV169Y89dRTZGZmVnwtKirKwspc25QpU7juuuvo06cPAwYM4NVXXyU5OZlJkyZZXZpbueOOO3j//ff5/PPPCQ4OrhiTExoair+/v8XVuYfg4OATAkdgYCBNmzZVEKkmhRGRP/Hdd9+xe/dudu/efULIU8fi6Rs3bhyHDx9m5syZpKWl0bVrVxYvXkxsbKzVpbmVP6ZODx06tNL5N998kwkTJtR/QSJV0GUaERERsZRG4ImIiIilFEZERETEUgojIiIiYimFEREREbGUwoiIiIhYSmFERERELKUwIiIiIpZSGBERERFLKYyIiIiIpRRGRERExFIKIyIiImIphRERERGx1P8DR6Abafq1E70AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "def sigmoid(X):\n", " # Clip X to prevent overflow or underflow\n", " X = np.clip(X, -500, 500) # This ensures that np.exp(X) doesn't overflow\n", - " return None\n", + " return 1 / (1 + np.exp(-X))\n", + "\n", "\n", "\n", "def dsigmoid(X):\n", - " return None\n", + " s = sigmoid(X)\n", + " return s * (1 - s)\n", "\n", "\n", "x = np.linspace(-5, 5, 100)\n", @@ -556,7 +761,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 96, "metadata": {}, "outputs": [], "source": [ @@ -581,17 +786,17 @@ "\n", " def forward_hidden(self, X):\n", " # Compute the linear combination of the input and weights\n", - " self.Z_h = None\n", + " self.Z_h = np.dot(X, self.W_h) + self.b_h\n", "\n", " # Apply the sigmoid activation function\n", - " return None\n", + " return sigmoid(self.Z_h)\n", "\n", " def forward_output(self, H):\n", " # Compute the linear combination of the hidden layer activation and weights\n", - " self.Z_o = None\n", + " self.Z_o = np.dot(H, self.W_o) + self.b_o\n", "\n", " # Apply the sigmoid activation function\n", - " return None\n", + " return sigmoid(self.Z_o)\n", "\n", " def forward(self, X):\n", " # Compute the forward activations of the hidden and output layers\n", @@ -602,7 +807,10 @@ "\n", " def loss(self, X, y):\n", " y = y.astype(int)\n", - " return None\n", + " y_onehot = one_hot(self.output_size, y)\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)\n", + " \n", "\n", " def grad_loss(self, X, y_true):\n", " y_true = one_hot(self.output_size, y_true)\n", @@ -654,6 +862,60 @@ " raise NotImplementedError(\"You need to correctly implement the NeuralNet class.\")" ] }, + { + "cell_type": "code", + "execution_count": 53, + "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", + " 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", + " 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", + "\n", + " # Apply the sigmoid activation function\n", + " return sigmoid(self.Z_h)\n", + "\n", + " def forward_output(self, H):\n", + " # Compute the linear combination of the hidden layer activation and weights\n", + " self.Z_o = np.dot(H, self.W_o) + self.b_o\n", + "\n", + " # Apply the sigmoid activation function\n", + " return sigmoid(self.Z_o)\n", + "\n", + " def forward(self, X):\n", + " H = self.forward_hidden(X)\n", + " Y = self.forward_output(H)\n", + " return Y\n", + "\n", + " def loss(self, X, y):\n", + " y = y.astype(int)\n", + " y_onehot = one_hot(self.output_size, y)\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)\n", + " \n", + "nn = NeuralNet(input_size=64, hidden_size=32, output_size=10)\n", + "assert(nn.forward(np.zeros((1, 64))).shape == (1, 10))\n", + "assert(nn.loss(np.zeros((1, 64)), np.zeros(1)) > 0)\n", + " \n" + ] + }, { "cell_type": "markdown", "metadata": { @@ -665,7 +927,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 97, "metadata": {}, "outputs": [], "source": [ @@ -675,27 +937,60 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 98, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(1042.8610387309582)" + ] + }, + "execution_count": 98, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.loss(X_train, y_train)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 99, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.float64(0.10019646365422397)" + ] + }, + "execution_count": 99, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "model.accuracy(X_train, y_train)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 100, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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T9dHH32kX375RV27dlW/fv30+++/a+7cudYpBdcOK0vSoUOH1KlTJ82ZM0dr1qxRZGSk/vd//1ddu3a1qTd79mw999xzatKkiZYuXapXXnlFEyZMyHEfSlZWlh566CG98cYb6t69u77++mu98cYbiouLU9u2bfXXX385fHz5jVH6Z+5kp06d1L59ey1fvlyDBw/WBx98oG7dutnUe/755xUZGan7779fy5cv14wZM7Rv3z6FhYXp9OnTecaT3Rm6+h4c4FaVmZmpDRs2KCQkJNdvtYOCgtSiRQutX79emZmZDu1/+/bt8vHxUadOnazTXq+fctqvXz+VKFFCCxcuVExMjL7//nu1bdtW58+fd6itO+64Q/PmzZMkvfLKK9b2rr8W25PfGOz1Tb///rvCwsK0bt06vfbaa1qxYoXuv/9+jRgxQoMHD87R1rRp07RmzRrFxMTo008/VYkSJRQeHm4zZenUqVOqUKGC3njjDa1Zs0bTp0+Xu7u77r77bh08eDDHPkePHq0jR47oo48+0kcffaRTp06pbdu2N/0lTufOnTV58mRJ//R/2ee0c+fOuW6Tn2v+pUuX1KFDB50+fVrTp09XXFycYmJiVL16dV24cCHPmFauXCk3Nzfde++9dl+/mffy8uXLatOmjT7++GMNHTpUq1ev1ssvv6zY2Fj9z//8j/XDsGEYevjhh/XJJ5/oP//5j5YtW6Z77rlH4eHh+Tqvc+bMUadOnZSVlaVZs2bpq6++0tChQ62J1auvvqrHH39cku108tymVjn6N3jtOV+wYIEuXbqkTp06KTU11VonOxHJz70dP//8s5o0aZKjPLts3759NuVt27bV8ePH9fPPP99w30WGgWKjV69eRsmSJW3K2rRpY0gyvv322xz1JRnjxo3LUV6jRg2jV69e1vXnn3/eKFWqlHH8+HGbem+//bYhydi3b1+ecbVp08Zo06aNdf3o0aOGJKNp06ZGZmamtTwmJsaQZPzP//yPzfaRkZGGJCM1NdXu/rOysoyrV68amzZtMiQZP/74o2EYhpGZmWkEBAQYd999t03948ePGx4eHkaNGjWsZYsWLTIkGV988YVN3V27dhmSjBkzZuR5jOPGjTPy+u+SW4yG8c/7Jsl49913bbZ5/fXXDUnGd999ZxiGYWzfvt2QZLzzzjs29ZKSkgwfHx/jpZdestnn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vHP8+HFt27bNlB+DdeScFuSab7FY1LRpU/33v/9V2bJlc5zH69WvXz/PG9Vv5r3s0qWLfvvtN1WoUMFu/NmjA9nvaW59YF7CwsLk5+enWbNm5fm0JEfOu6N/g2Z75JFH9Msvv9g8cjYjI0Offvqp7r777hyfubLfv+L02H9GLm5hPXr00KuvvqqxY8eqTZs22r9/v6ZNmyY/Pz+behMnTlRcXJzCwsI0dOhQ1atXT3///beOHTumVatWadasWaYOSd5IWFiYypUrpwEDBmjcuHHy8PDQggULcgxZlyhRQhMmTNDzzz+vxx9/XH379tX58+c1YcIEBQYG2tzv8dRTT2nBggXq1KmThg0bprvuukseHh46ceKENmzYoIceekiPPPKI6TFm8/T01DvvvKOLFy/qzjvv1LZt2zRp0iSFh4erVatWkqSWLVvqueeeU58+fbR7927de++9KlmypJKTk/Xdd9+pcePGeuGFF3KNaeLEiZo4caK+/fbbG953cfz4ce3atUuS9Ntvv0mS9Vdra9asqZCQkHyfC+DfpGXLloqJiVFkZKRatWqlwYMHq3r16kpMTNT06dO1c+dOxcTEKCwszLpNt27dNHbsWD311FN68cUX9ffff+u9996z+zSpxo0ba+PGjfrqq68UGBio0qVL23z5sXv3bkVEROiJJ55QUlKSxowZo6pVq9o8JbBHjx569tlnNXDgQD322GM6fvy43nzzzRy/H1C7dm35+PhowYIFatCggUqVKqUqVarc8Aul/MSQm+HDh2v+/Pnq3LmzJk6cqBo1aujrr7/WjBkz9MILL6hu3bo29d3c3NShQwdFRUUpKytLU6ZMUVpams0PpnXp0kWxsbGqX7++mjRpovj4eL311lu59ltnzpzRI488ov79+ys1NVXjxo2Tt7e3TUJYUNnfOs+ePVulS5eWt7e3goOD7Y6K5Peav3LlSs2YMUMPP/ywatWqJcMwtHTpUp0/f14dOnTIM562bdtq7ty5+vXXX3OcW+nm3svIyEh98cUXuvfeezV8+HA1adJEWVlZSkxM1Lp16/Sf//xHd999tzp27Kh7771XL730ki5duqSQkBBt3bpVn3zyyQ3bKFWqlN555x1FRETo/vvvV//+/eXv76/Dhw/rxx9/tP5gZXYiNmXKFOuoYZMmTexOhXb0bzA/jh8/rtq1a6tXr143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r01qgoOD9dprr+mFF16wJheJiYl67LHH1LhxY0lSrVq1rPUTExPVvHlzhYSESPrnZnGgsDAtCgAA/GsZhpHr/RIHDx5UkyZN5O3tbS276667TGk3ISFB7du3z3f9DRs2qEOHDqpatapKly6tnj176ty5c7p06ZIkaejQoZo0aZJatmypcePG2SRML7zwghYvXqxmzZrppZde0rZt20w5BsAekgsAAPCvdeDAAQUHB9t9zV7iYRiGKe36+Pjku+7x48fVqVMnNWrUSF988YXi4+M1ffp0SdLVq1clSRERETpy5Ih69OihvXv3KiQkRO+//74kKTw83Dql69SpU2rfvr1GjBhhynEA1yO5AAAA/0rr16/X3r179dhjj9l9PXvKVHp6urVs9+7dee7T09NTmZmZN2y7SZMm+vbbb/MV5+7du5WRkaF33nlH99xzj+rWratTp07lqBcUFKQBAwZo6dKl+s9//qMPP/zQ+lqlSpXUu3dvffrpp4qJidHs2bPz1TbgKJILAABwy0tPT1dKSopOnjypH374QZMnT9ZDDz2kLl26qGfPnna36d69u7KysvTcc8/pwIEDWrt2rd5++21JynUqVc2aNXXx4kV9++23Onv2rC5fvmy33rhx47Ro0SKNGzdOBw4c0N69e/Xmm2/arVu7dm1lZGTo/fff15EjR/TJJ59o1qxZNnUiIyO1du1aHT16VD/88IPWr1+vBg0aSJLGjh2rL7/8UocPH9a+ffu0cuVK62uA2UguAADALW/NmjUKDAxUzZo19eCDD2rDhg1677339OWXX8rNzc3uNmXKlNFXX32lhIQENWvWTGPGjNHYsWMlyeY+jGuFhYVpwIAB6tatmypVqpRrwtC2bVt99tlnWrFihZo1a6b77rtPO3futFu3WbNmmjp1qqZMmaJGjRppwYIFio6OtqmTmZmpQYMGqUGDBnrwwQdVr149683enp6eGjVqlJo0aaJ7771Xbm5uWrx4cb7OG+Aoi2HW5EEAAIBb3IIFC6y/ZeHIfRPAvwWPogUAAMjF/PnzVatWLVWtWlU//vijXn75ZT355JMkFkAuSC4AAABykZKSorFjxyolJUWBgYF64okn9Prrr7s6LKDIYloUAAAAAFNwQzcAAAAAU5BcAAAAADAFyQUAAAAAU5BcAAAAADAFyQUAAAAAU5BcAAAAADAFyQUAAAAAU5BcAAAAADDF/wMs0CZo9ZvRIAAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plot_prediction(model, sample_idx=5)" ] @@ -711,9 +1006,32 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 101, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Random init: train loss: 1042.86104, train acc: 0.100, test acc: 0.093\n", + "Epoch #1, train loss: 3070.01010, train acc: 0.117, test acc: 0.085\n", + "Epoch #2, train loss: 3424.94024, train acc: 0.109, test acc: 0.063\n", + "Epoch #3, train loss: 3492.12186, train acc: 0.115, test acc: 0.070\n", + "Epoch #4, train loss: 3361.90578, train acc: 0.217, test acc: 0.185\n", + "Epoch #5, train loss: 3275.23669, train acc: 0.291, test acc: 0.259\n", + "Epoch #6, train loss: 3231.03182, train acc: 0.367, test acc: 0.319\n", + "Epoch #7, train loss: 2996.14224, train acc: 0.602, test acc: 0.589\n", + "Epoch #8, train loss: 2794.94260, train acc: 0.508, test acc: 0.515\n", + "Epoch #9, train loss: 2553.44598, train acc: 0.532, test acc: 0.533\n", + "Epoch #10, train loss: 1752.48541, train acc: 0.408, test acc: 0.430\n", + "Epoch #11, train loss: 2564.01699, train acc: 0.414, test acc: 0.448\n", + "Epoch #12, train loss: 2434.58440, train acc: 0.420, test acc: 0.459\n", + "Epoch #13, train loss: 2289.33447, train acc: 0.428, test acc: 0.448\n", + "Epoch #14, train loss: 2079.93116, train acc: 0.455, test acc: 0.433\n", + "Epoch #15, train loss: 2324.87280, train acc: 0.447, test acc: 0.419\n" + ] + } + ], "source": [ "losses, accuracies, accuracies_test = [], [], []\n", "losses.append(model.loss(X_train, y_train))\n", @@ -736,9 +1054,69 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 103, "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", + " 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", + " 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", + "\n", + " # Apply the sigmoid activation function\n", + " return sigmoid(self.Z_h)\n", + "\n", + " def forward_output(self, H):\n", + " # Compute the linear combination of the hidden layer activation and weights\n", + " self.Z_o = np.dot(H, self.W_o) + self.b_o\n", + "\n", + " # Apply the sigmoid activation function\n", + " return sigmoid(self.Z_o)\n", + "\n", + " def forward(self, X):\n", + " H = self.forward_hidden(X)\n", + " Y = self.forward_output(H)\n", + " return Y\n", + "\n", + " def loss(self, X, y):\n", + " y = y.astype(int)\n", + " y_onehot = one_hot(self.output_size, y)\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)" + ] + }, + { + "cell_type": "code", + "execution_count": 104, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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6tQpbNmyBX5+flKXZDUJCQk4ePBgvd9fISEh+Oc//4lff/1V6vKsireTGmH27NlISEhA3759ERcXh+XLl+PChQt46qmnpC7N4p555hl8/fXX+OGHH+Dl5SX+C06j0cDNzU3i6izPy8vruvU+Hh4e8PPzc9p1QM8//zwGDBiA+fPnY8KECUhPT8fy5cuxfPlyqUuzinHjxuHtt99GeHg4unXrhv379+ODDz7AtGnTpC7NIsrLy3H69Gnx++zsbGRlZcHX1xfh4eFITEzE/PnzERkZicjISMyfPx/u7u6YOHGihFU33c2uNyQkBA888AAyMzPx008/wWQyib/DfH19oVKppCq7yW7193ttSHNxcUFQUBA6depk61JtS9rNUY7n448/FiIiIgSVSiX07t3babccA7jh14oVK6QuzWacfYu1IAjCjz/+KERFRQlqtVro3LmzsHz5cqlLsprS0lLhueeeE8LDwwVXV1ehffv2wr/+9S9Br9dLXZpFbNu27Yb/n50yZYogCLXbrF9//XUhKChIUKvVwuDBg4VDhw5JW3Qz3Ox6s7Oz//Z32LZt26QuvUlu9fd7rZayxVomCIJgo7xEREREZDFcE0NEREQOiSGGiIiIHBJDDBERETkkhhgiIiJySAwxRERE5JAYYoiIiMghMcQQERGRQ2KIISIiIofEEENEREQOiSGGiIiIHBJDDBERETmk/w9pXaMCX9dsMgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(losses)\n", "plt.title(\"Training loss\");" @@ -746,9 +1124,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 106, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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unWsW7cOMC/1XrduXdkdSadOncrYsWPLth8/fjy7du1iypQpbN68mXnz5vHmm29y3333uaN8ERGREzMMcOTV/XIa98OeNWsW/fr144477iAtLY20tDR8fHw4//zz6d27N2vWrOGrr77iwIEDjBo1CoC0tDSuv/56br31VjZv3syPP/7I1VdfjWEY3HfffYwaNYrLLrus7Hj9+/evrZ/wCbm1W2rNmjVceOGFZa+nTJkCwM0338zbb79NWlpauVuvx8TEsGTJEiZPnsyrr75KVFQUL730ki4DFxGR+qcoH6ZH1f3nPpwKtoAqbRoSEoLNZsPf35/IyEgAHnvsMfr27cv06dPLtps3bx7R0dFs27aN3NxciouLufrqq2nTpg0APXr0KNvWz8+PwsLCsuO5g1vDzQUXXFA2ILgyb7/9doV1559/PmvXrq3FqkRERBqvxMREfvjhBwIDAyu8t337dgYPHszFF19Mjx49GDJkCIMHD2bkyJE0bdrUDdVWrkENKBYREWkwfPzNVhR3fO4ZcLlcDB8+nKeffrrCey1atMBqtZKQkMCKFSv45ptvePnll3nkkUdYuXIlMTExZ/TZNUXhRkREpDZYLFXuHnInm82G0+kse923b18++eQT2rZti7d35THBYrEwYMAABgwYwGOPPUabNm349NNPmTJlSoXjuUODulpKREREalbbtm1ZuXIlO3fuJCMjgwkTJnDo0CGuv/56Vq1axY4dO/jmm2+49dZbcTqdrFy5kunTp7NmzRp2797NwoULOXjwIF27di073oYNG9i6dSsZGRknvINAbVK4ERERacTuu+8+rFYr3bp1Izw8HIfDwfLly3E6nQwZMoTY2FjuueceQkJC8PLyIjg4mJ9++olhw4bRqVMnHn30UZ577rmye0XecccddO7cmfj4eMLDw1m+fHmdn5PFONmIXg+UnZ1NSEgIWVlZBAcHu7scERHxAAUFBaSkpBATE4Ovr6+7y2mwTvZzPJ3f32q5EREREY+icCMiIiIeReFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIiNaSRXYBc42rq56dwIyIicoZ8fHwAyM/Pd3MlDZvD4QDAarWe0XF0+wUREZEzZLVaadKkCenp6QD4+/tjsVjcXFXD4nK5OHjwIP7+/ie87UNVKdyIiIjUgMjISICygCOnz8vLi9atW59xMFS4ERERqQEWi4UWLVrQvHlzt9xPyRPYbDa8vM58xIzCjYiISA2yWq1nPGZEzowGFIuIiIhHUbgRERERj6JwIyIiIh5F4UZEREQ8isKNiIiIeBSFGxEREfEoCjciIiLiURRuRERExKMo3IiIiIhHUbgRERERj6JwIyIiIh5F4UZEREQ8isKNiIiIeBSFGxEREfEoCjciIiLiURRuRERExKMo3IiIiIhHUbgRERERj6JwIyIiIh5F4UZEREQ8isKNiIiIeBSFGxEREfEoCjciIiLiURRuRERExKMo3IiIiIhHUbgRERERj6JwIyIiIh5F4UZEREQ8isKNiIiIeBSFGxEREfEoCjciIiLiURRuRERExKMo3IiIiIhHUbgRERERj6JwIyIiIh5F4UZEREQ8isKNiIiIeBSFGxEREfEoCjciIiLiURRuRERExKO4PdzMnj2bmJgYfH19iYuLY9myZSfd/r333qNXr174+/vTokULbrnlFjIzM+uoWhEREanv3Bpu5s+fz6RJk3jkkUdISkpi0KBBDB06lN27d1e6/c8//8zYsWO57bbb2LRpEwsWLGD16tXcfvvtdVy5iIiI1FduDTfPP/88t912G7fffjtdu3blxRdfJDo6mjlz5lS6/a+//krbtm2ZOHEiMTExDBw4kDvvvJM1a9bUceUiIiJSX7kt3DgcDhITExk8eHC59YMHD2bFihWV7tO/f3/27t3LkiVLMAyDAwcO8PHHH3P55Zef8HMKCwvJzs4ut4iIiIjnclu4ycjIwOl0EhERUW59REQE+/fvr3Sf/v3789577zF69GhsNhuRkZE0adKEl19++YSfM2PGDEJCQsqW6OjoGj0PERERqV/cPqDYYrGUe20YRoV1pZKTk5k4cSKPPfYYiYmJfPXVV6SkpDB+/PgTHn/q1KlkZWWVLXv27KnR+kVERKR+8XbXB4eFhWG1Wiu00qSnp1dozSk1Y8YMBgwYwP333w9Az549CQgIYNCgQTz11FO0aNGiwj52ux273V7zJyAiIiL1kttabmw2G3FxcSQkJJRbn5CQQP/+/SvdJz8/Hy+v8iVbrVbAbPERERERcWu31JQpU3jjjTeYN28emzdvZvLkyezevbusm2nq1KmMHTu2bPvhw4ezcOFC5syZw44dO1i+fDkTJ07k7LPPJioqyl2nISIiIvWI27qlAEaPHk1mZibTpk0jLS2N2NhYlixZQps2bQBIS0srN+fNuHHjyMnJ4ZVXXuHee++lSZMmXHTRRTz99NPuOgURERGpZyxGI+vPyc7OJiQkhKysLIKDg91djoiIiFTB6fz+dvvVUiIiIiI1SeFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSjKNyIiIiIR1G4EREREY+icCMiIiIeReFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSjKNyIiIiIR1G4EREREY+icCMiIiIeReFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSjKNyIiIiIR1G4EREREY+icCMiIiIeReFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSjKNyIiIiIR1G4EREREY+icCMiIiIeReFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSjKNyIiIiIR1G4EREREY+icCMiIiIeReFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSjKNyIiIiIR1G4EREREY9SrXDz448/1nAZIiIiIjWjWuHmsssuo3379jz11FPs2bOnpmsSERERqbZqhZvU1FTuueceFi5cSExMDEOGDOGjjz7C4XDUdH0iIiIip6Va4aZZs2ZMnDiRtWvXsmbNGjp37syECRNo0aIFEydOZP369TVdp4iIiEiVnPGA4t69e/PQQw8xYcIE8vLymDdvHnFxcQwaNIhNmzbVRI0iIiIiVVbtcFNUVMTHH3/MsGHDaNOmDV9//TWvvPIKBw4cICUlhejoaK699tqarFVERETklLyrs9Pf//53PvjgAwBuuukmZs6cSWxsbNn7AQEB/Otf/6Jt27Y1UqSIiIhIVVUr3CQnJ/Pyyy9zzTXXYLPZKt0mKiqKH3744YyKExERETld1eqW+u6777j++utPGGwAvL29Of/88095rNmzZxMTE4Ovry9xcXEsW7bspNsXFhbyyCOP0KZNG+x2O+3bt2fevHmnfQ4iIiLimarVcjNjxgwiIiK49dZby62fN28eBw8e5MEHH6zScebPn8+kSZOYPXs2AwYM4PXXX2fo0KEkJyfTunXrSvcZNWoUBw4c4M0336RDhw6kp6dTXFxcndMQERERD2QxDMM43Z3atm3L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5Zcbt956a7l1V199tXHTTTe5qaLaAxiffvpp2WuXy2VERkYa//rXv8rWFRQUGCEhIcZrr73mhgpr1vHnW5lVq1YZgLFr1666KaoWneh89+7da7Rs2dL47bffjDZt2hgvvPBCnddW19Ryc4YcDgeJiYkMHjy43PrBgwezYsUKN1VVt7KysgBo1qyZmyupPRMmTODyyy/nkksucXcptW7x4sXEx8dz7bXX0rx5c/r06cO///1vd5dVawYOHMh3333Htm3bAFi/fj0///wzw4YNc3NltS8lJYX9+/eX+/6y2+2cf/75jer7y2KxeGzLpMvlYsyYMdx///10797d3eXUGbffFbyhy8jIwOl0VrjZZ0RERIWbfHoiwzCYMmUKAwcOJDY21t3l1IoPP/yQtWvXsnr1aneXUid27NjBnDlzmDJlCg8//DCrVq1i4sSJ2O32crdD8RQPPvggWVlZdOnSBavVitPp5J///CfXX3+9u0urdaXfUZV9f+3atcsdJdWpgoICHnroIW644QaPubHk8Z5++mm8vb2ZOHGiu0upUwo3NcRisZR7bRhGhXWe6O6772bDhg38/PPP7i6lVuzZs4d77rmHb775Bl9fX3eXUydcLhfx8fFMnz4dgD59+rBp0ybmzJnjkeFm/vz5/Pe//+X999+ne/furFu3jkmTJhEVFcXNN9/s7vLqRGP8/ioqKuK6667D5XIxe/Zsd5dTKxITE5k1axZr1671+H/P46lb6gyFhYVhtVortNKkp6dX+GvI0/z9739n8eLF/PDDD7Rq1crd5dSKxMRE0tPTiYuLw9vbG29vb5YuXcpLL72Et7c3TqfT3SXWuBYtWtCtW7dy67p27eqxA+Tvv/9+HnroIa677jp69OjBmDFjmDx5MjNmzHB3abUuMjISoNF9fxUVFTFq1ChSUlJISEjw2FabZcuWkZ6eTuvWrcu+v3bt2sW9995L27Zt3V1erVK4OUM2m424uDgSEhLKrU9ISKB///5uqqp2GYbB3XffzcKFC/n++++JiYlxd0m15uKLL2bjxo2sW7eubImPj+fGG29k3bp1WK1Wd5dY4wYMGFDh0v5t27aV3dDW0+Tn5+PlVf6r0Gq1esyl4CcTExNDZGRkue8vh8PB0qVLPfb7qzTY/P7773z77beEhoa6u6RaM2bMGDZs2FDu+ysqKor777+fr7/+2t3l1Sp1S9WAKVOmMGbMGOLj4+nXrx9z585l9+7djB8/3t2l1YoJEybw/vvv89lnnxEUFFT2V19ISAh+fn5urq5mBQUFVRhLFBAQQGhoqMeOMZo8eTL9+/dn+vTpjBo1ilWrVjF37lzmzp3r7tJqxfDhw/nnP/9J69at6d69O0lJSTz//PPceuut7i6tRuTm5vLHH3+UvU5JSWHdunU0a9aM1q1bM2nSJKZPn07Hjh3p2LEj06dPx9/fnxtuuMGNVVffyc43KiqKkSNHsnbtWr744gucTmfZ91ezZs2w2WzuKrvaTvXve3x48/HxITIyks6dO9d1qXXLvRdreY5XX33VaNOmjWGz2Yy+fft69GXRQKXLW2+95e7S6oSnXwpuGIbx+eefG7GxsYbdbje6dOlizJ07190l1Zrs7GzjnnvuMVq3bm34+voa7dq1Mx555BGjsLDQ3aXViB9++KHS/19vvvlmwzDMy8Eff/xxIzIy0rDb7cZ5551nbNy40b1Fn4GTnW9KSsoJv79++OEHd5deLaf69z1eY7kU3GIYhlFHOUpERESk1mnMjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSjKNyIiIiIR1G4EREREY+icCMiIiIeReFGREREPIrCjYiIiHgUhRsRERHxKAo3IiIi4lEUbkRERMSj/D9gecsPhQj+OwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plt.plot(accuracies, label='train')\n", "plt.plot(accuracies_test, label='test')\n", @@ -759,9 +1148,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 107, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABQYElEQVR4nO3deVxU5f///+fIMoALKCqLoqC55ppkgZqaaeHybs+y3LHMFcl3aZamWWSLbyq3LJMsMz+9S9vcKNdSS0nK1LdpLqCCpiWoFQic3x/9mK8jgzJ4mAF73G+3c7t5rrnOuV7nzHguXnNd54zFMAxDAAAAAHCFKrk7AAAAAABXB5ILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpILAAAAAKYguQAAAABgCpKLcsxisZRoWb9+vVvj7NKli7p06eLWGMraM888I4vFUqptBw0apCpVqpgaz6BBgxQeHl7q7T///HMNGDBALVu2lJeXV6mPDfin2rp1q+69916FhITI29tbwcHBuueee7Rly5Yr2u/zzz+v5cuXmxPkZRw7dkzPPPOMUlNTXdKeMw4dOiSLxaKXX37ZtH2uX79eFotF//3vfy9b19E131FfZ7FY9Mwzz9jWd+/erWeeeUaHDh0qss8rvW5fiW7dumn48OFuaftSLj5/SUlJslgsDs/fpaxYscJuPxcKDw/XoEGDSh2j2b788kt1795doaGhslqtql27tm6++WatWLHCrt758+fVsGFDJSYmuifQK0ByUY5t2bLFbunZs6d8fX2LlF933XVujXPOnDmaM2eOW2OAc5YtW6atW7eqefPmat26tbvDASqU119/XR06dNCRI0f04osv6ssvv9TLL7+so0ePqmPHjpo1a1ap9+3q5GLq1KnlMrlwt9jY2BIlilu2bFFsbKxtfffu3Zo6darDP46ffvppLVu2zMwwS+STTz7RN998o6efftrlbTurV69e2rJli0JCQpzabsWKFZo6darD15YtW1aujv3UqVO69tpr9Z///Edr1qzRG2+8IS8vL/Xq1UvvvfeerZ6Xl5cmT56sadOm6dSpU26M2Hme7g4Axbvxxhvt1mvVqqVKlSoVKb/YH3/8IT8/v7IMzU7z5s1d1hbM8eabb6pSpb+/Wxg1apRSUlLcHBFQMXzzzTeKi4tTz549tWzZMnl6/r9u9P7779edd96psWPHqm3bturQoYMbIy1/XN03XYm6deuqbt26l613uf74Qg0bNrySkErt+eef15133qk6deqYts+yei9r1aqlWrVqmbrPtm3bmrq/K9W3b1/17dvXrqx3796KiIjQ/Pnz9dBDD9nKH3jgAcXHx+uNN97Qk08+6epQS42RiwquS5cuatGihTZu3Kjo6Gj5+flpyJAhkooONxZyNESYmZmpRx55RHXr1pW3t7ciIiI0depU5eXllSiGC4eKC4ezX3rpJc2YMUPh4eHy9fVVly5d9PPPP+v8+fOaMGGCQkND5e/vrzvvvFMnTpyw2+fSpUvVo0cPhYSEyNfXV82aNdOECRN07ty5Iu2/+eabaty4saxWq5o3b67333/f4fBzbm6upk+frqZNm8pqtapWrVoaPHiwfv3118seoyPOxChJu3btUrdu3VS5cmXVqlVLo0aN0h9//GFXxzAMzZkzR23atJGvr6+qV6+ue+65RwcOHChVjMUpTCwAOCchIUEWi0Vz5861SywkydPTU3PmzJHFYtELL7xgKy9uOszFU28sFovOnTund955xzbttfDaWjhdJDk5WYMHD1aNGjVUuXJl9enTp8j1obhpIBdeq9evX6/rr79ekjR48GBbe8VNLXE2hkv1TWlpaXrooYdUu3ZtWa1WNWvWTK+88ooKCgqKtFlQUKDnnntO9erVk4+PjyIjI/XVV1/Z1dm/f78GDx6sRo0ayc/PT3Xq1FGfPn20c+dOh8fx119/KT4+XsHBwfL19VXnzp21Y8cOuzolnQp74TlLSkrSvffeK0nq2rWr7ZwmJSVJcvw5KOk1f8eOHerdu7ftnIWGhqpXr146cuTIJePbsWOHvvvuO/Xv39+u3Kz3Mjs7W+PHj1dERIS8vb1Vp04dxcXFFekHs7OzNWzYMAUGBqpKlSq67bbb9PPPPxeJt7hpUatWrVK3bt3k7+8vPz8/NWvWTAkJCbbzOnv2bEn208kL9+Ho/0NJPoMXTs2bOXOmIiIiVKVKFUVFRWnr1q2XPO/O8vLyUkBAQJFrire3t/r27av58+fLMAxT2yxL/IVxFcjIyNBDDz2kfv36acWKFRoxYoRT22dmZqp9+/ZavXq1Jk+erJUrV2ro0KFKSEjQsGHDSh3X7Nmz9c0332j27Nl666239L///U99+vTR0KFD9euvv+rtt9+2TSm4cFhZkvbt26eePXtqwYIFWrVqleLi4vR///d/6tOnj129+fPn6+GHH1arVq308ccf66mnntLUqVOL3IdSUFCg22+/XS+88IL69eunL774Qi+88IKSk5PVpUsX/fnnn04fX0ljlP6eO9mzZ09169ZNy5cv16hRo/TGG28U+fbikUceUVxcnG655RYtX75cc+bM0a5duxQdHa3jx49fMp7CztDd9+AAV6v8/HytW7dOkZGRxX6rHRYWpnbt2mnt2rXKz893av9btmyRr6+vevbsaZv2evGU06FDh6pSpUp6//33lZiYqO+++05dunTR6dOnnWrruuuu08KFCyVJTz31lK29i6/FjpQ0Bkd906+//qro6GitWbNGzz77rD799FPdcsstGj9+vEaNGlWkrVmzZmnVqlVKTEzUe++9p0qVKikmJsZuytKxY8cUGBioF154QatWrdLs2bPl6empG264QXv37i2yzyeffFIHDhzQW2+9pbfeekvHjh1Tly5drvhLnF69eun555+X9Hf/V3hOe/XqVew2Jbnmnzt3Tt27d9fx48c1e/ZsJScnKzExUfXq1dOZM2cuGdPnn38uDw8P3XTTTQ5fv5L38o8//lDnzp31zjvvaMyYMVq5cqWeeOIJJSUl6V//+pftj2HDMHTHHXfo3Xff1WOPPaZly5bpxhtvVExMTInO64IFC9SzZ08VFBRo3rx5+uyzzzRmzBhbYvX000/rnnvukWQ/nby4qVXOfgYvPOeLFy/WuXPn1LNnT2VlZdnqFCYiztzbUVBQoLy8PB07dkxTpkzRzz//rMcee6xIvS5duujw4cP66aefSrxvtzNQYQwcONCoXLmyXVnnzp0NScZXX31VpL4kY8qUKUXK69evbwwcONC2/sgjjxhVqlQxDh8+bFfv5ZdfNiQZu3btumRcnTt3Njp37mxbP3jwoCHJaN26tZGfn28rT0xMNCQZ//rXv+y2j4uLMyQZWVlZDvdfUFBgnD9/3tiwYYMhyfjhhx8MwzCM/Px8Izg42Ljhhhvs6h8+fNjw8vIy6tevbytbsmSJIcn46KOP7Opu27bNkGTMmTPnksc4ZcoU41L/XYqL0TD+ft8kGa+++qrdNs8995whyfj6668NwzCMLVu2GJKMV155xa5eenq64evrazz++ON2+7zw+AzDMKZOnWp4eHgY69evv+SxXGzkyJGXPDYAf8vMzDQkGffff/8l6/Xt29eQZBw/ftwwDMf/Xw3D8XWlcuXKdtfnQgsXLjQkGXfeeadd+TfffGNIMqZPn24ru/gaX+jia3Xh9W/hwoWXPJ7SxFBc3zRhwgRDkvHtt9/alT/66KOGxWIx9u7daxjG/+tHQkNDjT///NNWLzs726hRo4Zxyy23FBtnXl6ekZubazRq1MgYN26crXzdunWGJOO6664zCgoKbOWHDh0yvLy8jNjYWFuZo/fm4vNnGEX72Q8//NCQZKxbt65IXBd/Dkp6zd++fbshyVi+fHmxx1ycmJgYo2nTpkXKzXgvExISjEqVKhnbtm2zK//vf/9rSDJWrFhhGIZhrFy58pJ94IXnrzCugwcPGoZhGGfOnDGqVatmdOzY0e49u9il+rGL/z84+xls2bKlkZeXZ6v33XffGZKMJUuW2MoOHTpkeHh4GEOGDCk2xovdeuuthiRDklGtWjXj448/dlhv3759hiRj7ty5Jd63uzFycRWoXr26br755lJv//nnn6tr164KDQ1VXl6ebSn8VmHDhg2l2m/Pnj3tpt80a9ZMkop8i1NYnpaWZis7cOCA+vXrp+DgYHl4eMjLy0udO3eWJO3Zs0eStHfvXmVmZuq+++6z21+9evWKzHX+/PPPFRAQoD59+tgdY5s2bRQcHFyqb/tLEuOFHnzwQbv1fv36SZLWrVtni9Fiseihhx6yizE4OFitW7e+bIyTJ09WXl6eLQYA7mH8/9/YlsVT2C6+jkRHR6t+/fq264grlDQGR33T2rVr1bx5c7Vv396ufNCgQTIMQ2vXrrUrv+uuu+Tj42Nbr1q1qvr06aONGzfaRoby8vL0/PPPq3nz5vL29panp6e8vb21b98+h9fifv362b039evXV3R0tEvPoVTya/4111yj6tWr64knntC8efO0e/fuErdx7Ngx1a5du9jXr+S9/Pzzz9WiRQu1adPGLv5bb73VbhS9cF/F9YGXsnnzZmVnZ2vEiBGm/X9y9jPYq1cveXh42NZbtWolSTp8+LCtrH79+srLy9OCBQtKHMfrr7+u7777Tp988oluvfVW9e3bV0uWLClSr/D9O3r0aIn37W7c0H0VcPapChc7fvy4PvvsM3l5eTl8/eTJk6Xab40aNezWvb29L1n+119/SZLOnj2rTp06ycfHR9OnT1fjxo3l5+en9PR03XXXXbYpTIVPTwgKCirSdlBQkA4ePGhbP378uE6fPm1r62LOHmNJYyzk6empwMBAu7Lg4GC74zh+/LgMw3B4PJLUoEEDp2IEYK6aNWvKz8/P7triyKFDh+Tn51fkWmeGwuvGxWWufJpMSWNw1DedOnXK4f0noaGhttdL0lZubq7Onj0rf39/xcfHa/bs2XriiSfUuXNnVa9eXZUqVVJsbKzDKa/F7fOHH34oUl6WSnrN9/f314YNG/Tcc8/pySef1O+//66QkBANGzZMTz31VLF9tyT9+eefxe5furL38vjx49q/f/9l/3Y4derUJfvASym8J7IkN9eXlLOfwYvjtlqtklSq6dQXatSoke3f//rXvxQTE6ORI0eqb9++dl/MFibXV9qeK5FcXAWKy+atVqtycnKKlF/8H6dmzZpq1aqVnnvuOYf7KfwP5ypr167VsWPHtH79ertv4S+eA1r4H97RvQiZmZl26zVr1lRgYKBWrVrlsM2qVauWSYyF8vLydOrUKbuLVGGMhWU1a9aUxWLRpk2bbBevCzkqA+A6Hh4e6tq1q1atWqUjR444/IPnyJEjSklJUUxMjO3bTh8fH4fX4tJ8cXPxta2w7JprrrGtX6q9mjVrOt1maWKQHPdNgYGBysjIKFJ+7NgxSSoSX3FteXt7234/6L333tOAAQNs9zsUOnnypAICAkoc/8V/RJY1Z675LVu21AcffCDDMPTjjz8qKSlJ06ZNk6+vryZMmHDJNn777bdiX7+S97JmzZry9fXV22+/XWzb0t/v+aX6wEspfHLU5W5cd4azn0FXad++vVatWqVff/3VLiEsfP/cFVdpMC3qKhYeHq4ff/zRrmzt2rU6e/asXVnv3r31008/qWHDhoqMjCyyuDq5KLyIXXyxfeONN+zWmzRpouDgYP3f//2fXXlaWpo2b95sV9a7d2+dOnVK+fn5Do+xSZMmZRLjhRYvXmy3/v7770uS7ektvXv3lmEYOnr0qMMYW7Zs6VSMAMw3ceJEGYahESNGFLlhOz8/X48++qgMw9DEiRNt5eHh4Tpx4oTdFyG5ublavXp1kf1brdZLfkN58XVk8+bNOnz4sN0T+xxd+3/++eciNzeX9hvYksRQnG7dumn37t36/vvv7coXLVoki8Wirl272pV//PHHtlFtSTpz5ow+++wzderUyZa8WSyWItfiL774othpJEuWLLF78s7hw4e1efNmU34M1plzWpprvsViUevWrfWf//xHAQEBRc7jxZo2bXrJG9Wv5L3s3bu3fvnlFwUGBjqMv3B0oPA9La4PvJTo6Gj5+/tr3rx5l3xakjPn3dnPoCsYhqENGzYoICCgSJJb+P5VpMf+M3JxFevfv7+efvppTZ48WZ07d9bu3bs1a9Ys+fv729WbNm2akpOTFR0drTFjxqhJkyb666+/dOjQIa1YsULz5s0zdUjycqKjo1W9enUNHz5cU6ZMkZeXlxYvXlxkyLpSpUqaOnWqHnnkEd1zzz0aMmSITp8+ralTpyokJMRuWPH+++/X4sWL1bNnT40dO1bt27eXl5eXjhw5onXr1un222/XnXfeaXqMhby9vfXKK6/o7Nmzuv7667V582ZNnz5dMTEx6tixoySpQ4cOevjhhzV48GBt375dN910kypXrqyMjAx9/fXXatmypR599NFiY5o2bZqmTZumr7766rL3XRw+fFjbtm2TJP3yyy+SZPvV2vDwcEVGRpb4XAD/JB06dFBiYqLi4uLUsWNHjRo1SvXq1VNaWppmz56tb7/9VomJiYqOjrZt07dvX02ePFn333+//v3vf+uvv/7Sa6+95vBpUi1bttT69ev12WefKSQkRFWrVrX78mP79u2KjY3Vvffeq/T0dE2aNEl16tSxe0pg//799dBDD2nEiBG6++67dfjwYb344otFfj+gYcOG8vX11eLFi9WsWTNVqVJFoaGhl/1CqSQxFGfcuHFatGiRevXqpWnTpql+/fr64osvNGfOHD366KNq3LixXX0PDw91795d8fHxKigo0IwZM5SdnW33g2m9e/dWUlKSmjZtqlatWiklJUUvvfRSsf3WiRMndOedd2rYsGHKysrSlClT5OPjY5cQllaLFi0k/f0kw6pVq8rHx0cREREOR0VKes3//PPPNWfOHN1xxx1q0KCBDMPQxx9/rNOnT6t79+6XjKdLly56++239fPPPxc5t9KVvZdxcXH66KOPdNNNN2ncuHFq1aqVCgoKlJaWpjVr1uixxx7TDTfcoB49euimm27S448/rnPnzikyMlLffPON3n333cu2UaVKFb3yyiuKjY3VLbfcomHDhikoKEj79+/XDz/8YPvBysJEbMaMGbZR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WhQAAACuejfeeKMsFzxpKioqSvv27VN+fr4kKTIy0q5+SkqKkpKSVKVKFdty6623qqCgQAcPHtSePXvk6elpt13Tpk0VEBBQbAypqalq27atLbEojT179qh169a2xEKSOnTooIKCAu3du9dWdu2118rDw8O2HhIScslRFbMwcgEAAIB/vAv/WJekgoICPfLIIxozZkyRuvXq1bP9IW9x4tG4vr6+VxakJMMwim3zwnIvL68irxUUFFxx+5fDyAUAAACuelu3bi2y3qhRI7tv9y903XXXadeuXbrmmmuKLN7e3mrWrJny8vK0fft22zZ79+7V6dOni42hVatWSk1N1W+//ebwdW9vb9tISnGaN2+u1NRUuxvLv/nmG1WqVEmNGze+5LauQHIBAACAq156erri4+O1d+9eLVmyRK+//rrGjh1bbP0nnnhCW7Zs0ciRI5Wamqp9+/bp008/1ejRoyVJTZo00W233aZhw4bp22+/VUpKimJjYy85OvHAAw8oODhYd9xxh7755hsdOHBAH330kbZs2SLp76dWHTx4UKmpqTp58qRycnKK7OPBBx+Uj4+PBg4cqJ9++knr1q3T6NGj1b9/f9v9Fu5EcgEAAIArYxiuXUphwIAB+vPPP9W+fXuNHDlSo0eP1sMPP1xs/VatWmnDhg3at2+fOnXqpLZt2+rpp59WSEiIrc7ChQsVFhamzp0766677tLDDz+s2rVrF7tPb29vrVmzRrVr11bPnj3VsmVLvfDCC7bRk7vvvlu33Xabunbtqlq1amnJkiVF9uHn56fVq1frt99+0/XXX6977rlH3bp106xZs0p1XsxmMYxSvkOllJ2dLX9/f2VlZalatWqubLpCe+aZZ9wdQrGmTp3q7hAqHEePlisvLjWcC3tcz1zrajnf4RO+cEk7h17o5ZJ28M/y119/6eDBg4qIiJCPj4+7wymxLl26qE2bNkpMTHR3KOVace+vM9dfRi4AAAAAmILkAgAAAIApeBQtAAAArmrr1693dwj/GIxcAAAAADAFyQUAAACc4uLnAcFFzHhfSS4AAABQIoWPTM3NzXVzJCgLf/zxh6Siv+7tDO65AAAAQIl4enrKz89Pv/76q7y8vFSpEt9TXw0Mw9Aff/yhEydOKCAgoNhfLS8JkgsAAACUiMViUUhIiA4ePKjDhw+7OxyYLCAgQMHBwVe0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BckFAAAAAFOQXAAAAAAwBckFAKBU5syZo4iICPn4+Khdu3batGlTsXU//vhjde/eXbVq1VK1atUUFRWl1atXuzBaAIArOJ1cHD16VA899JACAwPl5+enNm3aKCUlpSxiAwCUU0uXLlVcXJwmTZqkHTt2qFOnToqJiVFaWprD+hs3blT37t21YsUKpaSkqGvXrurTp4927Njh4sgBAGXJ05nKv//+uzp06KCuXbtq5cqVql27tn755RcFBASUUXgAgPJo5syZGjp0qGJjYyVJiYmJWr16tebOnauEhIQi9RMTE+3Wn3/+eX3yySf67LPP1LZtW1eEDABwAaeSixkzZigsLEwLFy60lYWHh5sdEwCgHMvNzVVKSoomTJhgV96jRw9t3ry5RPsoKCjQmTNnVKNGjWLr5OTkKCcnx7aenZ1duoABAC7j1LSoTz/9VJGRkbr33ntVu3ZttW3bVm+++eYlt8nJyVF2drbdAgCouE6ePKn8/HwFBQXZlQcFBSkzM7NE+3jllVd07tw53XfffcXWSUhIkL+/v20JCwu7orgBAGXPqeTiwIEDmjt3rho1aqTVq1dr+PDhGjNmjBYtWlTsNnQOAHB1slgsduuGYRQpc2TJkiV65plntHTpUtWuXbvYehMnTlRWVpZtSU9Pv+KYUU5YLK5ZALicU9OiCgoKFBkZqeeff16S1LZtW+3atUtz587VgAEDHG4zceJExcfH29azs7NJMACgAqtZs6Y8PDyKjFKcOHGiyGjGxZYuXaqhQ4fqww8/1C233HLJularVVar9YrjBQC4jlMjFyEhIWrevLldWbNmzYp9Ooj0d+dQrVo1uwUAUHF5e3urXbt2Sk5OtitPTk5WdHR0sdstWbJEgwYN0vvvv69evXqVdZgAADdwauSiQ4cO2rt3r13Zzz//rPr165saFACgfIuPj1f//v0VGRmpqKgozZ8/X2lpaRo+fLikv0etjx49aps2u2TJEg0YMECvvvqqbrzxRtuoh6+vr/z9/d12HAAAczmVXIwbN07R0dF6/vnndd999+m7777T/PnzNX/+/LKKDwBQDvXt21enTp3StGnTlJGRoRYtWmjFihW2L5syMjLsRrXfeOMN5eXlaeTIkRo5cqStfODAgUpKSnJ1+HDV/QiG4Zp2AJQbTiUX119/vZYtW6aJEydq2rRpioiIUGJioh58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QNOmTVNBQYFL2i905swZxcXFqX79+vL19VV0dLS2bdvm0hgup0ImF0uXLlVcXJwmTZqkHTt2qFOnToqJibF77CH+nw0bNmjkyJHaunWrkpOTlZeXpx49eujcuXPuDq1C2LZtm+bPn69WrVq5O5Ry7ffff1eHDh3k5eWllStXavfu3XrllVfc9ovKwJVyd19z7tw5tW7dWrNmzXJJexcrD31H3bp19cILL2j79u3avn27br75Zt1+++3atWuXy2Io5M6+4Nprr1VGRoZt2blzp0vbLw/X923bttmdg8If5bz33ntd0v6MGTM0b948zZo1S3v27NGLL76ol156Sa+//rpL2i8UGxur5ORkvfvuu9q5c6d69OihW265RUePHnVpHJdkVEDt27c3hg8fblfWtGlTY8KECW6KqGI5ceKEIcnYsGGDu0Mp986cOWM0atTISE5ONjp37myMHTvW3SGVW0888YTRsWNHd4cBmKY89TWSjGXLlrm83QuVl76jevXqxltvveXSNt3ZF0yZMsVo3bq1y9pzpDxe38eOHWs0bNjQKCgocEl7vXr1MoYMGWJXdtdddxkPPfSQS9o3DMP4448/DA8PD+Pzzz+3K2/durUxadIkl8VxORVu5CI3N1cpKSnq0aOHXXmPHj20efNmN0VVsWRlZUmSatSo4eZIyr+RI0eqV69euuWWW9wdSrn36aefKjIyUvfee69q166ttm3b6s0333R3WECp0NcU5e6+Iz8/Xx988IHOnTunqKgol7bt7r5g3759Cg0NVUREhO6//34dOHDApe2Xt+t7bm6u3nvvPQ0ZMkQWi8UlbXbs2FFfffWVfv75Z0nSDz/8oK+//lo9e/Z0SfvS31Oz8vPz5ePjY1fu6+urr7/+2mVxXE6F+4XukydPKj8/X0FBQXblQUFByszMdFNUFYdhGIqPj1fHjh3VokULd4dTrn3wwQf6/vvvy91cxvLqwIEDmjt3ruLj4/Xkk0/qu+++05gxY2S1WjVgwAB3hwc4hb7Gnjv7jp07dyoqKkp//fWXqlSpomXLlql58+Yua9/dfcENN9ygRYsWqXHjxjp+/LimT5+u6Oho7dq1S4GBgS6Jobxd35cvX67Tp09r0KBBLmvziSeeUFZWlpo2bSoPDw/l5+frueee0wMPPOCyGKpWraqoqCg9++yzatasmYKCgrRkyRJ9++23atSokcviuJwKl1wUujhTNQzDZdlrRTZq1Cj9+OOP5SrDLY/S09M1duxYrVmzpsg3BHCsoKBAkZGRev755yVJbdu21a5duzR37lySC1RY9DV/c2ff0aRJE6Wmpur06dP66KOPNHDgQG3YsMElCUZ56AtiYmJs/27ZsqWioqLUsGFDvfPOO4qPj3dJDOXt+r5gwQLFxMQoNDTUZW0uXbpU7733nt5//31de+21Sk1NVVxcnEJDQzVw4ECXxfHuu+9qyJAhqlOnjjw8PHTdddepX79++v77710Ww+VUuGlRNWvWlIeHR5Fvjk6cOFHkGybYGz16tD799FOtW7dOdevWdXc45VpKSopOnDihdu3aydPTU56entqwYYNee+01eXp6Kj8/390hljshISFFOvtmzZrxoAVUSPQ1/4+7+w5vb29dc801ioyMVEJCglq3bq1XX33VJW2Xx76gcuXKatmypfbt2+eyNsvT9f3w4cP68ssvFRsb69J2//3vf2vChAm6//771bJlS/Xv31/jxo1TQkKCS+No2LChNmzYoLNnzyo9PV3fffedzp8/r4iICJfGcSkVLrnw9vZWu3btbE8JKJScnKzo6Gg3RVW+GYahUaNG6eOPP9batWvL1QewvOrWrZt27typ1NRU2xIZGakHH3xQqamp8vDwcHeI5U6HDh2KPKby559/Vv369d0UEVB69DXlt+8wDEM5OTkuaas89gU5OTnas2ePQkJCXNZmebq+L1y4ULVr11avXr1c2u4ff/yhSpXs/2z28PBw+aNoC1WuXFkhISH6/ffftXr1at1+++1uicORCjktKj4+Xv3791dkZKSioqI0f/58paWlafjw4e4OrVwaOXKk3n//fX3yySeqWrWq7Zs4f39/+fr6ujm68qlq1apF5hVXrlxZgYGB3KtSjHHjxik6OlrPP/+87rvvPn333XeaP3++5s+f7+7QgFJxd19z9uxZ7d+/37Z+8OBBpaamqkaNGqpXr16Zt18e+o4nn3xSMTExCgsL05kzZ/TBBx9o/fr1WrVqlUvaLw99wfjx49WnTx/Vq1dPJ06c0PTp05Wdne3SqTjl5fpeUFCghQsXauDAgfL0dO2fsH369NFzzz2nevXq6dprr9WOHTs0c+ZMDRkyxKVxrF69WoZhqEmTJtq/f7/+/e9/q0mTJho8eLBL47gk9z2o6srMnj3bqF+/vuHt7W1cd911bn80XnkmyeGycOFCd4dWofAo2sv77LPPjBYtWhhWq9Vo2rSpMX/+fHeHBFwRd/Y169atc3jtHjhwoEvaLw99x5AhQ2znv1atWka3bt2MNWvWuKx9R1zdF/Tt29cICQkxvLy8jNDQUOOuu+4ydu3a5bL2C5WH6/vq1asNScbevXtd3nZ2drYxduxYo169eoaPj4/RoEEDY9KkSUZOTo5L41i6dKnRoEEDw9vb2wgODjZGjhxpnD592qUxXI7FMAzD1QkNAAAAgKtPhbvnAgAAAED5RHIBAAAAwBQkFwAAAABMQXIBAAAAwBQkFwAAAABMQXIBAAAAwBQkFwAAAABMQXIBAAAAwBQkFwAAAP8/i8Wi5cuXl7j++vXrZbFYdPr0aVPjCA8PV2Jioqn7BFyB5AIAAFzVBg0aJIvFIovFIi8vLwUFBal79+56++23VVBQYFc3IyNDMTExJd53dHS0MjIy5O/vL0lKSkpSQECAmeEDFQrJBQAAuOrddtttysjI0KFDh7Ry5Up17dpVY8eOVe/evZWXl2erFxwcLKvVWuL9ent7Kzg4WBaLpSzCBiockgsAAHDVs1qtCg4OVp06dXTdddfpySef1CeffKKVK1cqKSnJVu/iaVGbN29WmzZt5OPjo8jISC1fvlwWi0WpqamS7KdFrV+/XoMHD1ZWVpZtpOSZZ54pNqZPP/1UkZGR8vHxUc2aNXXXXXcVW3fmzJlq2bKlKleurLCwMI0YMUJnz561vX748GH16dNH1atXV+XKlXXttddqxYoVkqTff/9dDz74oGrVqiVfX181atRICxcuLNV5BC7H090BAAAAuMPNN9+s1q1b6+OPP1ZsbGyR18+cOaM+ffqoZ8+eev/993X48GHFxcUVu7/o6GglJiZq8uTJ2rt3rySpSpUqDut+8cUXuuuuuzRp0iS9++67ys3N1RdffFHsvitVqqTXXntN4eHhOnjwoEaMGKHHH39cc+bMkSSNHDlSubm52rhxoypXrqzdu3fb2n766ae1e/durVy5UjVr1tT+/fv1559/lvQ0AU4huQAAAP9YTZs21Y8//ujwtcWLF8tisejNN9+Uj4+PmjdvrqNHj2rYsGEO63t7e8vf318Wi0XBwcGXbPe5557T/fffr6lTp9rKWrduXWz9C5OaiIgIPfvss3r00UdtyUVaWpruvvtutWzZUpLUoEEDW/20tDS1bdtWkZGRkv6+WRwoK0yLAgAA/1iGYRR7v8TevXvVqlUr+fj42Mrat29vSrupqanq1q1bieuvW7dO3bt3V506dVS1alUNGDBAp06d0rlz5yRJY8aM0fTp09WhQwdNmTLFLmF69NFH9cEHH6hNmzZ6/PHHtXnzZlOOAXCE5AIAAPxj7dmzRxEREQ5fc5R4GIZhSru+vr4lrnv48GH17NlTLVq00EcffaSUlBTNnj1bknT+/HlJUmxsrA4cOKD+/ftr586dioyM1Ouvvy5JiomJsU3pOnbsmLp166bx48ebchzAxUguAADAP9LatWu1c+dO3X333Q5fL5wylZOTYyvbvn37Jffp7e2t/Pz8y7bdqlUrffXVVyWKc/v27crLy9Mrr7yiG2+8UY0bN9axY8eK1AsLC9Pw4cP18ccf67HHHtObb75pe61WrVoaNGiQ3nvvPSUmJmr+/PklahtwFskFAAC46uXk5CgzM1NHjx7V999/r+eff1633367evfurQEDBjjcpl+/fiooKNDDDz+sPXv2aPXq1Xr55ZclqdipVOHh4Tp79qy++uornTx5Un/88YfDelOmTNGSJUs0ZcoU7dmzRzt37tSLL77osG7Dhg2Vl5en119/XQcOHNC7776refPm2dWJi4vT6tWrdfDgQX3//fdau3atmjVrJkmaPHmyPvnkE+3fv1+7du3S559/bnsNMBvJBQAAuOqtWrVKISEhCg8P12233aZ169bptdde0yeffCIPDw+H21SrVk2fffaZUlNT1aZNG02aNEmTJ0+WJLv7MC4UHR2t4cOHq2/fvqpVq1axCUOXLl304Ycf6tNPP1WbNm10880369tvv3VYt02bNpo5c6ZmzJihFi1aaPHixUpISLCrk5+fr5EjR6pZs2a67bbb1KRJE9vN3t7e3po4caJatWqlm266SR4eHvrggw9KdN4AZ1kMsyYPAgAAXOUWL15s+y0LZ+6bAP4peBQtAABAMRYtWqQGDRqoTp06+uGHH/TEE0/ovvvuI7EAikFyAQAAUIzMzExNnjxZmZmZCgkJ0b333qvnnnvO3WEB5RbTogAAAACYghu6AQAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKUguAAAAAJiC5AIAAACAKf4/pxjdN/87c+EAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "plot_prediction(model, sample_idx=4)" ] @@ -785,7 +1185,88 @@ "metadata": {}, "outputs": [], "source": [ - "# Your code here" + "# Your code here\n", + "\n", + "# Step 1: Identify Worst Prediction Errors\n", + "# We'll compute the difference between predicted probabilities and the true one-hot labels, then sort by confidence in the wrong class.\n", + "\n", + "\n", + "# Get predictions and true one-hot labels\n", + "y_pred = model.forward(X_test)\n", + "y_true = one_hot(model.output_size, y_test)\n", + "\n", + "# Compute confidence in the wrong prediction\n", + "predicted_classes = np.argmax(y_pred, axis=1)\n", + "true_classes = y_test\n", + "confidence_wrong = []\n", + "\n", + "for i in range(len(y_test)):\n", + " if predicted_classes[i] != true_classes[i]:\n", + " confidence_wrong.append((i, y_pred[i][predicted_classes[i]]))\n", + "\n", + "# Sort by highest confidence in wrong prediction\n", + "worst_errors = sorted(confidence_wrong, key=lambda x: -x[1])\n" + ] + }, + { + "cell_type": "code", + "execution_count": 110, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRCklEQVR4nO3deVhUdf//8dcIMoALKiqLoqC55pq0gJmaaeFyZ6tluWOZK3K3uJRbJtriTeWWpaKl5rfNrFyiXFrUUpIy9TbLBVLQtASXAoHz+6MfczsyIIOHGbDn47rOdTGf+Zzzec8ZOIfXnGUshmEYAgAAAIArVMHdBQAAAAC4OhAuAAAAAJiCcAEAAADAFIQLAAAAAKYgXAAAAAAwBeECAAAAgCkIFwAAAABMQbgAAAAAYArCBQAAAABTEC7KMIvFUqxp8+bNbq2zU6dO6tSpk1trKG1TpkyRxWIp0bwDBw5U5cqVTa1n4MCBCg0NvaJlnDt3TpMmTVLjxo1ltVrl7++vzp0768CBA+YUCVzFtm/frvvuu09BQUHy8vJSYGCg7r33Xm3btu2KljtjxgytXr3anCIv49ixY5oyZYqSk5NdMp4zDh8+LIvFohdffNG0ZW7evFkWi0XvvvvuZfs62uY72tdZLBZNmTLF9njv3r2aMmWKDh8+XGCZZmy3S6pLly4aNmyYW8YuyqXrLyEhQRaLxeH6K8ratWvtlnOx0NBQDRw4sMQ1lrann35aFotFLVq0sGu/cOGCGjZsqPj4ePcUdgU83V0ACnfpTurZZ5/Vpk2btHHjRrv25s2bu7KsAubNm+fW8eG8s2fPqnPnzjp27JjGjRunVq1aKSMjQ1u3btX58+fdXR5Qpr366quKiYnRDTfcoOeff17169dXSkqK5s6dq5tvvlkvv/yyRo4cWaJlz5gxQ/fee6969+5tbtEOHDt2TFOnTlVoaKjatGlT6uOVJ9HR0brjjjsu22/btm2qW7eu7fHevXs1depUderUqUCQeOaZZzRmzBizS72sDz/8UF9//bWWLVvm8rGd1aNHD23btk1BQUFOzbd27VrNnTvXYcD44IMPVLVqVZMqNFdycrJefPFFBQQEFHiuYsWKmjRpksaOHat+/frJ39/fDRWWDOGiDLvpppvsHteqVUsVKlQo0H6p8+fPy9fXtzRLs+PucAPnPf3009q3b59++OEHNWjQwNb+r3/9y41VAWXf119/rZiYGHXv3l0ffPCBPD3/txt94IEHdNddd2nMmDFq27at2rdv78ZKyx5X75uuRN26de1CQ2Eutz++WMOGDa+kpBKbMWOG7rrrLtWpU8e0ZZbWe1mrVi3VqlXL1GW2bdvW1OWZJScnR4MGDdKjjz6q77//XidPnizQ58EHH1RsbKxee+01TZgwwQ1VlgynRZVznTp1UosWLfTFF18oMjJSvr6+Gjx4sKSChxvzOTpEmJ6erkcffVR169aVl5eXwsLCNHXqVOXk5BSrhosPFecfzn7hhRc0a9YshYaGysfHR506ddJPP/2kCxcuaNy4cQoODpafn5/uuusunThxwm6Zq1atUrdu3RQUFCQfHx81a9ZM48aN07lz5wqM//rrr9tO7WnevLlWrFjh8PBzdna2pk+frqZNm8pqtapWrVoaNGiQfvvtt8u+RkecqVGS9uzZoy5duqhSpUqqVauWRo4cWeAogWEYmjdvntq0aSMfHx9Vr15d9957rw4ePFiiGh05f/683njjDd133312wQLA5cXFxclisWj+/Pl2wUKSPD09NW/ePFksFs2cOdPWXtjpMJeeemOxWHTu3DktXbrUdtpr/rY1/3SRxMREDRo0SDVq1FClSpXUq1evAtuHwk4DuXhbvXnzZl1//fWSpEGDBtnGK+zUEmdrKGrflJKSoocffli1a9eW1WpVs2bN9NJLLykvL6/AmHl5eXruuedUr149eXt7Kzw8XJ9//rldn59//lmDBg1So0aN5Ovrqzp16qhXr17avXu3w9fx119/KTY2VoGBgfLx8VHHjh21a9cuuz7FPRX24nWWkJCg++67T5LUuXNn2zpNSEiQ5Pj3oLjb/F27dqlnz562dRYcHKwePXro119/LbK+Xbt26dtvv1W/fv3s2s16LzMzM/X4448rLCxMXl5eqlOnjmJiYgrsBzMzMzV06FD5+/urcuXKuuOOO/TTTz8VqLew06LWr1+vLl26yM/PT76+vmrWrJni4uJs63Xu3LmS7E8nz1+Go7+H4vwOXnxq3uzZsxUWFqbKlSsrIiJC27dvL3K9F8fMmTP1+++/67nnniu0j5eXl/r06aOFCxfKMIwrHtNVCBdXgbS0ND388MPq27ev1q5dq+HDhzs1f3p6um644QZt2LBBkyZN0rp16zRkyBDFxcVp6NChJa5r7ty5+vrrrzV37ly98cYb+u9//6tevXppyJAh+u2337R48WI9//zz+uyzzxQdHW0374EDB9S9e3ctWrRI69evV0xMjP7v//5PvXr1suu3cOFCPfLII2rVqpXef/99Pf3005o6dWqB61Dy8vJ05513aubMmerbt68++eQTzZw5U4mJierUqZP+/PNPp19fcWuU/j53snv37urSpYtWr16tkSNH6rXXXlOfPn3s+j366KOKiYnRbbfdptWrV2vevHnas2ePIiMjdfz48SLryd8ZXu4anKSkJJ07d06NGjXSY489purVq8vLy0vh4eH65JNPnF4PwD9Fbm6uNm3apPDw8EI/1Q4JCVG7du20ceNG5ebmOrX8bdu2ycfHR927d9e2bdu0bdu2AqedDhkyRBUqVNCKFSsUHx+vb7/9Vp06ddLp06edGuu6667TkiVLJP19JDN/vEu3xY4UtwZH+6bffvtNkZGR+vTTT/Xss89qzZo1uu222/T44487PJVszpw5Wr9+veLj4/XWW2+pQoUKioqKsjtt+NixY/L399fMmTO1fv16zZ07V56enrrxxhu1f//+AsucMGGCDh48qDfeeENvvPGGjh07pk6dOl3xhzg9evTQjBkzJP29/8tfpz169Ch0nuJs88+dO6euXbvq+PHjmjt3rhITExUfH6969erpzJkzRdb08ccfy8PDQ7fccovD56/kvTx//rw6duyopUuXavTo0Vq3bp2eeuopJSQk6F//+pftn2HDMNS7d2+9+eab+ve//60PPvhAN910k6Kiooq1XhctWqTu3bsrLy9PCxYs0EcffaTRo0fbgtUzzzyje++9V5Js67yoU6uc/R28eJ0vX75c586dU/fu3ZWRkWHrkx9Einttx969ezV9+nTNnz//stdkdurUSUeOHNGPP/5YrGWXCQbKjQEDBhiVKlWya+vYsaMhyfj8888L9JdkTJ48uUB7/fr1jQEDBtgeP/roo0blypWNI0eO2PV78cUXDUnGnj17iqyrY8eORseOHW2PDx06ZEgyWrdubeTm5tra4+PjDUnGv/71L7v5Y2JiDElGRkaGw+Xn5eUZFy5cMLZs2WJIMr7//nvDMAwjNzfXCAwMNG688Ua7/keOHDEqVqxo1K9f39a2cuVKQ5Lx3nvv2fXdsWOHIcmYN29eka9x8uTJRlF/LoXVaBh/v2+SjJdfftlunueee86QZHz11VeGYRjGtm3bDEnGSy+9ZNcvNTXV8PHxMZ588km7ZV78+gzDMKZOnWp4eHgYmzdvLvK15K+LqlWrGu3btzfWrFljfPzxx0bnzp0Ni8VirF+/vsj5gX+q9PR0Q5LxwAMPFNmvT58+hiTj+PHjhmE4/ns1DMfblUqVKtltn/MtWbLEkGTcdddddu1ff/21IcmYPn26re3SbXy+S7fV+du/JUuWFPl6SlJDYfumcePGGZKMb775xq79scceMywWi7F//37DMP63HwkODjb+/PNPW7/MzEyjRo0axm233VZonTk5OUZ2drbRqFEjY+zYsbb2TZs2GZKM6667zsjLy7O1Hz582KhYsaIRHR1ta3P03ly6/gyj4H72nXfeMSQZmzZtKlDXpb8Hxd3m79y505BkrF69utDXXJioqCijadOmBdrNeC/j4uKMChUqGDt27LBrf/fddw1Jxtq1aw3DMIx169YVuQ+8eP3l13Xo0CHDMAzjzJkzRtWqVY2bb77Z7j271IgRIwrdR1/69+Ds72DLli2NnJwcW79vv/3WkGSsXLnS1nb48GHDw8PDGDx4cKE15svNzTVuvPFG48EHH7S1dezY0bj22msd9j9w4IAhyZg/f/5ll11WcOTiKlC9enXdeuutJZ7/448/VufOnRUcHKycnBzblP+pwpYtW0q03O7du6tChf/9ijVr1kySCnyKk9+ekpJiazt48KD69u2rwMBAeXh4qGLFiurYsaMkad++fZKk/fv3Kz09Xffff7/d8urVq1fgXOePP/5Y1apVU69evexeY5s2bRQYGFiiO24Vp8aLPfTQQ3aP+/btK0natGmTrUaLxaKHH37YrsbAwEC1bt36sjVOmjRJOTk5thoKk3/Y18vLS+vWrVOvXr3Uo0cPffzxxwoKCtKzzz5brNcPwDHj/39iW9I7zBXl0u1IZGSk6tevb9uOuEJxa3C0b9q4caOaN2+uG264wa594MCBMgyjwA1L7r77bnl7e9seV6lSRb169dIXX3xhOzKUk5OjGTNmqHnz5vLy8pKnp6e8vLx04MABh9vivn372r039evXV2RkpEvXoVT8bf4111yj6tWr66mnntKCBQu0d+/eYo9x7Ngx1a5du9Dnr+S9/Pjjj9WiRQu1adPGrv7bb7/d7ih6/rIK2wcW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ou655x6H82RlZSkrK8v2ODMz84pqBgCUPsIFAKDUbdu2Td26dbNru/3227Vo0SJduHBBFStWLDBPXFycpk6desVjh4775IqXUVyHZ/Zwep5OnTqpTZs2tuAFuIqr/jZK8neB8qtEp0XNmzdPYWFh8vb2Vrt27fTll1+aXRcA4CqSnp6ugIAAu7aAgADl5OTo5MmTDucZP368MjIybFNqaqorSi1z8r8YEADKA6fDxapVqxQTE6OJEydq165d6tChg6KiopSSklIa9QEArhKXfu+EYRgO2/NZrVZVrVrVbrraDBw4UFu2bNHLL78si8Uii8WihIQEWSwWbdiwQeHh4bJarfryyy81cOBA9e7d227+mJgYderUyfbYMAw9//zzatCggXx8fNS6dWu9++67rn1RAP7RnA4Xs2fP1pAhQxQdHa1mzZopPj5eISEhmj9/fmnUBwC4CgQGBio9Pd2u7cSJE/L09JS/v7+bqnK/l19+WRERERo6dKjS0tKUlpamkJAQSdKTTz6puLg47du3T61atSrW8p5++mktWbJE8+fP1549ezR27Fg9/PDD2rJlS2m+DACwceqai+zsbCUlJWncuHF27d26ddPWrVsdzsMFeQCAiIgIffTRR3Ztn376qcLDwx1eb/FP4efnJy8vL/n6+iowMFCS9N///leSNG3aNHXt2rXYyzp37pxmz56tjRs3KiIiQpLUoEEDffXVV3rttdfUsWNH818AAFzCqXBx8uRJ5ebmOjxv9tJPpPKZdUEeAKDsOHv2rH7++Wfb40OHDik5OVk1atRQvXr1NH78eB09elTLli2TJA0bNkxz5sxRbGyshg4dqm3btmnRokVauXKlu15CmRceHu5U/7179+qvv/4qEEiys7PVtm1bM0sDgEKV6G5Rjs6bLeyc2fHjxys2Ntb2ODMz03bIFwBQPu3cuVOdO3e2Pc7fzg8YMEAJCQlKS0uzuxYvLCxMa9eu1dixYzV37lwFBwfrlVdeKfQ2tJAqVapk97hChQq261TyXbhwwfZzXl6eJOmTTz5RnTp17PpZrdZSqhIA7DkVLmrWrCkPDw+H581eejQjn9VqZaMGAFeZTp06FfhH92IJCQkF2jp27KjvvvuuFKsqn7y8vJSbm3vZfrVq1dKPP/5o15acnGw7rax58+ayWq1KSUnhFCgAbuPUBd1eXl5q166dEhMT7doTExMVGRlpamEAAPwThIaG6ptvvtHhw4d18uRJ2xGIS916663auXOnli1bpgMHDmjy5Ml2YaNKlSp6/PHHNXbsWC1dulS//PKLdu3apblz52rp0qWuejkA/uGcPi0qNjZW/fr1U3h4uCIiIrRw4UKlpKRo2LBhpVEfAABXpKx/gdfjjz+uAQMGqHnz5vrzzz+1ZMkSh/1uv/12PfPMM3ryySf1119/afDgwerfv792795t6/Pss8+qdu3aiouL08GDB1WtWjVdd911mjBhgqteDoB/OKfDRZ8+fXTq1ClNmzZNaWlpatGihdauXav69euXRn0AAFzVGjdurG3bttm1DRw40GHfqVOnFnmTFIvFotGjR2v06NFmlggAxVaiC7qHDx+u4cOHm10LAAAAgHLM6S/RAwAAAABHCBcAAAAATEG4AAAAAGAKwgUAAAAAUxAuAAAAAJiCcAEAAADAFIQLAAAAAKYgXAAAAAAwBeECAHB1s1hcN5VxoaGhio+Ptz22WCxavXr1FS3TjGUAuHqU6Bu6AQBA+ZeWlqbq1asXq++UKVO0evVqJScnl3gZAK5+hAsAAMqR7OxseXl5mbKswMDAMrEMAFcPTosCAMCNOnXqpJEjR2rkyJGqVq2a/P399fTTT8swDEl/n8o0ffp0DRw4UH5+fho6dKgkaevWrbrlllvk4+OjkJAQjR49WufOnbMt98SJE+rVq5d8fHwUFham5cuXFxj70lOafv31Vz3wwAOqUaOGKlWqpPDwcH3zzTdKSEjQ1KlT9f3338tischisSghIcHhMnbv3q1bb71VPj4+8vf31yOPPKKzZ8/anh84cKB69+6tF198UUFBQfL399eIESN04cIFE9cqAHfhyEU5UZbPZ/3www/dXYJDAwYMcHcJhVq6dKm7SyjUpac8lBWdOnVydwlAqVm6dKmGDBmib775Rjt37tQjjzyi+vXr24LECy+8oGeeeUZPP/20pL//gb/99tv17LPPatGiRfrtt99sAWXJkiWS/v4nPjU1VRs3bpSXl5dGjx6tEydOFFrD2bNn1bFjR9WpU0dr1qxRYGCgvvvuO+Xl5alPnz768ccftX79en322WeSJD8/vwLLOH/+vO644w7ddNNN2rFjh06cOKHo6GiNHDnSFkYkadOmTQoKCtKmTZv0888/q0+fPmrTpo3t9QIo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mRUXF6frr79eVapUUe3atdW7d2/t37/f3WWVK3FxcbJYLIqJiXF3KWXa0aNH9fDDD8vf31++vr5q06aNkpKS3F0WUGLu3Nd88cUX6tWrl4KDg2WxWLR69WqXjS2VjX3H/Pnz1apVK9uXhUVERGjdunUureFi7tgXTJkyRRaLxW4KDAx02fj53L19Dw0NLbAeLBaLRowY4ZLxc3Jy9PTTTyssLEw+Pj5q0KCBpk2bpry8PJeMn+/MmTOKiYlR/fr15ePjo8jISO3YscOlNVxOuQwXq1atUkxMjCZOnKhdu3apQ4cOioqKsrvtIf5ny5YtGjFihLZv367ExETl5OSoW7duOnfunLtLKxd27NihhQsXqlWrVu4upUz7448/1L59e1WsWFHr1q3T3r179dJLL7ntG5WBK+Xufc25c+fUunVrzZkzxyXjXaos7Dvq1q2rmTNnaufOndq5c6duvfVW3XnnndqzZ4/Lasjnzn3Btddeq7S0NNu0e/dul45fFrbvO3bssFsH+V/Ked9997lk/FmzZmnBggWaM2eO9u3bp+eff14vvPCCXn31VZeMny86OlqJiYl68803tXv3bnXr1k233Xabjh496tI6imSUQzfccIMxbNgwu7amTZsa48aNc1NF5cuJEycMScaWLVvcXUqZd+bMGaNRo0ZGYmKi0bFjR2PMmDHuLqnMeuqpp4ybb77Z3WUApilL+xpJxgcffODycS9WVvYd1atXN9544w2XjunOfcHkyZON1q1bu2w8R8ri9n3MmDFGw4YNjby8PJeM16NHD2Pw4MF2bXfffbfx8MMPu2R8wzCM8+fPGx4eHsbHH39s1966dWtj4sSJLqvjcsrdkYvs7GwlJSWpW7dudu3dunXT1q1b3VRV+ZKRkSFJqlGjhpsrKftGjBihHj166LbbbnN3KWXemjVrFB4ervvuu0+1a9dW27Zt9frrr7u7LKBE2NcU5O59R25urt5++22dO3dOERERLh3b3fuCAwcOKDg4WGFhYXrggQd08OBBl45f1rbv2dnZeuuttzR48GBZLBaXjHnzzTfr888/108//SRJ+v777/XVV1+pe/fuLhlf+vvUrNzcXHl7e9u1+/j46KuvvnJZHZdT7r6h++TJk8rNzVVAQIBde0BAgNLT091UVflhGIZiY2N18803q0WLFu4up0x7++239d1335W5cxnLqoMHD2r+/PmKjY3VhAkT9O2332r06NGyWq3q37+/u8sDnMK+xp479x27d+9WRESE/vrrL1WuXFkffPCBmjdv7rLx3b0vuPHGG7Vs2TI1btxYx48f1/Tp0xUZGak9e/bI39/fJTWUte376tWrdfr0aQ0cONBlYz711FPKyMhQ06ZN5eHhodzcXD333HN68MEHXVZDlSpVFBERoWeffVbNmjVTQECAVq5cqW+++UaNGjVyWR2XU+7CRb5Lk6phGC5Lr+XZyJEj9cMPP5SphFsWpaamasyYMfr0008LfEIAx/Ly8hQeHq4ZM2ZIktq2bas9e/Zo/vz5hAuUW+xr/ubOfUeTJk2UnJys06dP67333tOAAQO0ZcsWlwSMsrAviIqKsv3csmVLRUREqGHDhlq6dKliY2NdUkNZ274vWrRIUVFRCg4OdtmYq1at0ltvvaUVK1bo2muvVXJysmJiYhQcHKwBAwa4rI4333xTgwcPVp06deTh4aHrrrtOffv21XfffeeyGi6n3J0WVbNmTXl4eBT45OjEiRMFPmGCvVGjRmnNmjXatGmT6tat6+5yyrSkpCSdOHFC7dq1k6enpzw9PbVlyxa98sor8vT0VG5urrtLLHOCgoIK7OybNWvGjRZQLrGv+R937zu8vLx0zTXXKDw8XHFxcWrdurVefvlll4xdFvcFlSpVUsuWLXXgwAGXjVmWtu9HjhzRZ599pujoaJeO+8QTT2jcuHF64IEH1LJlS/Xr109jx45VXFycS+to2LChtmzZorNnzyo1NVXffvutLly4oLCwMJfWUZRyFy68vLzUrl07210C8iUmJioyMtJNVZVthmFo5MiRev/997Vx48Yy9QtYVnXp0kW7d+9WcnKybQoPD9dDDz2k5ORkeXh4uLvEMqd9+/YFblP5008/qX79+m6qCCg59jVld99hGIaysrJcMlZZ3BdkZWVp3759CgoKctmYZWn7vmTJEtWuXVs9evRw6bjnz59XhQr2/zZ7eHi4/Fa0+SpVqqSgoCD98ccf2rBhg+6880631OFIuTwtKjY2Vv369VN4eLgiIiK0cOFCpaSkaNiwYe4urUwaMWKEVqxYoQ8//FBVqlSxfRLn5+cnHx8fN1dXNlWpUqXAecWVKlWSv78/16oUYuzYsYqMjNSMGTN0//3369tvv9XChQu1cOFCd5cGlIi79zVnz57Vzz//bHt86NAhJScnq0aNGqpXr16pj18W9h0TJkxQVFSUQkJCdObMGb399tvavHmz1q9f75Lxy8K+4PHHH1evXr1Ur149nThxQtOnT1dmZqZLT8UpK9v3vLw8LVmyRAMGDJCnp2v/he3Vq5eee+451atXT9dee6127dql2bNna/DgwS6tY8OGDTIMQ02aNNHPP/+sJ554Qk2aNNGgQYNcWkeR3Hejqiszd+5co379+oaXl5dx3XXXuf3WeGWZJIfTkiVL3F1aucKtaC/vo48+Mlq0aGFYrVajadOmxsKFC91dEnBF3Lmv2bRpk8Nt94ABA1wyflnYdwwePNi2/mvVqmV06dLF+PTTT102viOu3hf06dPHCAoKMipWrGgEBwcbd999t7Fnzx6XjZ+vLGzfN2zYYEgy9u/f7/KxMzMzjTFjxhj16tUzvL29jQYNGhgTJ040srKyXFrHqlWrjAYNGhheXl5GYGCgMWLECOP06dMureFyLIZhGK4ONAAAAACuPuXumgsAAAAAZRPhAgAAAIApCBcAAAAATEG4AAAAAGAKwgUAAAAAUxAuAAAAAJiCcAEAAADAFIQLAAAAAKYgXAAAAPx/FotFq1evLnb/zZs3y2Kx6PTp06bWERoaqvj4eFOXCbgC4QIAAFzVBg4cKIvFIovFoooVKyogIEBdu3bV4sWLlZeXZ9c3LS1NUVFRxV52ZGSk0tLS5OfnJ0lKSEhQtWrVzCwfKFcIFwAA4Kp3xx13KC0tTYcPH9a6devUuXNnjRkzRj179lROTo6tX2BgoKxWa7GX6+XlpcDAQFksltIoGyh3CBcAAOCqZ7VaFRgYqDp16ui6667ThAkT9OGHH2rdunVKSEiw9bv0tKitW7eqTZs28vb2Vnh4uFavXi2LxaLk5GRJ9qdFbd68WYMGDVJGRobtSMmUKVMKrWnNmjUKDw+Xt7e3atasqbvvvrvQvrNnz1bLli1VqVIlhYSEaPjw4Tp79qzt+SNHjqhXr16qXr26KlWqpGuvvVZr166VJP3xxx966KGHVKtWLfn4+KhRo0ZasmRJidYjcDme7i4AAADAHW699Va1bt1a77//vqKjows8f+bMGfXq1Uvdu3fXihUrdOTIEcXExBS6vMjISMXHx2vSpEnav3+/JKly5coO+37yySe6++67NXHiRL355pvKzs7WJ598UuiyK1SooFdeeUWhoaE6dOiQhg8frieffFLz5s2TJI0YMULZ2dn64osvVKlSJe3du9c29jPPPKO9e/dq3bp1qlmzpn7++Wf9+eefxV1NgFMIFwAA4B+radOm+uGHHxw+t3z5clksFr3++uvy9vZW8+bNdfToUQ0dOtRhfy8vL/n5+clisSgwMLDIcZ977jk98MADmjp1qq2tdevWhfa/ONSEhYXp2Wef1WOPPWYLFykpKbrnnnvUsmVLSVKDBg1s/VNSUtS2bVuFh4dL+vticaC0cFoUAAD4xzIMo9DrJfbv369WrVrJ29vb1nbDDTeYMm5ycrK6dOlS7P6bNm1S165dVadOHVWpUkX9+/fXqVOndO7cOUnS6NGjNX36dLVv316TJ0+2C0yPPfaY3n77bbVp00ZPPvmktm7dasprABwhXAAAgH+sffv2KSwszOFzjoKHYRimjOvj41PsvkeOHFH37t3VokULvffee0pKStLcuXMlSRcuXJAkRUdH6+DBg+rXr592796t8PBwvfrqq5KkqKgo2yldx44dU5cuXfT444+b8jqASxEuAADAP9LGjRu1e/du3XPPPQ6fzz9lKisry9a2c+fOIpfp5eWl3Nzcy47dqlUrff7558Wqc+fOncrJydFLL72km266SY0bN9axY8cK9AsJCdGwYcP0/vvv69///rdef/1123O1atXSwIED9dZbbyk+Pl4LFy4s1tiAswgXAADgqpeVlaX09HQdPXpU3333nWbMmKE777xTPXv2VP/+/R3O07dvX+Xl5emRRx7Rvn37tGHDBr344ouSVOipVKGhoTp79qw+//xznTx5UufPn3fYb/LkyVq5cqUmT56sffv2affu3Xr++ecd9m3YsKFycnL06quv6uDBg3rzzTe1YMECuz4xMTHasGGDDh06pO+++04bN25Us2bNJEmTJk3Shx9+qJ9//ll79uzRxx9/bHsOMBvhAgAAXPXWr1+voKAghYaG6o477tCmTZv0yiuv6MMPP5SHh4fDeapWraqPPvpIycnJatOmjSZOnKhJkyZJkt11GBeLjIzUsGHD1KdPH9WqVavQwNCpUye98847WrNmjdq0aaNbb71V33zzjcO+bdq00ezZszVr1iy1aNFCy5cvV1xcnF2f3NxcjRgxQs2aNdMdd9yhJk2a2C729vLy0vjx49WqVSvdcsst8vDw0Ntvv12s9QY4y2KYdfIgAADAVW758uW277Jw5roJ4J+CW9ECAAAUYtmyZWrQoIHq1Kmj77//Xk899ZTuv/9+ggVQCMIFAABAIdLT0zVp0iSlp6crKChI9913n5577jl3lwWUWZwWBQAAAMAUXNANAAAAwBSECwAAAACmIFwAAAAAMAXhAgAAAIApCBcAAAAATEG4AAAAAGAKwgUAAAAAUxAuAAAAAJji/wGJNejjXMm45QAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAxcAAAGHCAYAAADC2a9WAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABRHElEQVR4nO3deVhUdf//8dcIsrmgorIYCpprrkkLmImaFi53tlqWO5a5Ind3aZZbJtriTeWWpZJl5re7MiuXKNdSS0nK1NssF0hB0xJcCgTO749+zO3IgAweZgZ7Pq7rXJfzmc85n/ecGc/hNWcZi2EYhgAAAADgClVydQEAAAAArg6ECwAAAACmIFwAAAAAMAXhAgAAAIApCBcAAAAATEG4AAAAAGAKwgUAAAAAUxAuAAAAAJiCcAEAAADAFIQLN2axWEo1bdy40aV1RkdHKzo62qU1lLcpU6bIYrGUad5BgwapatWqptYzaNAghYWFXdEyzp07p0mTJqlJkyby9vZWQECAOnfurAMHDphTJHAV2759u+677z4FBwfLy8tLQUFBuvfee7Vt27YrWu6MGTO0cuVKc4q8jGPHjmnKlClKTU11yniOOHz4sCwWi1588UXTlrlx40ZZLBb95z//uWxfe9t8e/s6i8WiKVOmWB/v3btXU6ZM0eHDh4ss04ztdll17dpVw4cPd8nYJbl0/SUlJclisdhdfyVZvXq1zXIuFhYWpkGDBpW5xvL29NNPy2KxqGXLljbtFy5cUKNGjZSYmOiawq6Ap6sLQPEu3Uk9++yz2rBhg9avX2/T3qJFC2eWVcS8efNcOj4cd/bsWXXu3FnHjh3T+PHj1bp1a2VlZWnr1q06f/68q8sD3Nqrr76quLg43XjjjXr++efVoEEDpaWlae7cubrlllv08ssva9SoUWVa9owZM3TvvfeqT58+5hZtx7FjxzR16lSFhYWpbdu25T5eRRIbG6s77rjjsv22bduma665xvp47969mjp1qqKjo4sEiWeeeUZjx441u9TL+uijj/TVV19p6dKlTh/bUT179tS2bdsUHBzs0HyrV6/W3Llz7QaMDz/8UNWrVzepQnOlpqbqxRdfVGBgYJHnKleurEmTJmncuHHq37+/AgICXFBh2RAu3NjNN99s87hOnTqqVKlSkfZLnT9/Xn5+fuVZmg1Xhxs47umnn9a+ffv0/fffq2HDhtb2f/zjHy6sCnB/X331leLi4tSjRw99+OGH8vT83270gQce0F133aWxY8eqXbt26tChgwsrdT/O3jddiWuuucYmNBTncvvjizVq1OhKSiqzGTNm6K677lK9evVMW2Z5vZd16tRRnTp1TF1mu3btTF2eWfLy8jR48GA9+uij+u6773Ty5MkifR588EHFx8frtdde01NPPeWCKsuG06IquOjoaLVs2VKbN29WVFSU/Pz8NGTIEElFDzcWsneIMDMzU48++qiuueYaeXl5KTw8XFOnTlVeXl6parj4UHHh4ewXXnhBs2bNUlhYmHx9fRUdHa0ff/xRFy5c0Pjx4xUSEiJ/f3/dddddOnHihM0yV6xYoe7duys4OFi+vr5q3ry5xo8fr3PnzhUZ//XXX7ee2tOiRQu98847dg8/5+bmavr06WrWrJm8vb1Vp04dDR48WL/++utlX6M9jtQoSXv27FHXrl1VpUoV1alTR6NGjSpylMAwDM2bN09t27aVr6+vatasqXvvvVcHDx4sU432nD9/Xm+88Ybuu+8+m2AB4PISEhJksVg0f/58m2AhSZ6enpo3b54sFotmzpxpbS/udJhLT72xWCw6d+6c3nzzTetpr4Xb1sLTRZKTkzV48GDVqlVLVapUUe/evYtsH4o7DeTibfXGjRt1ww03SJIGDx5sHa+4U0scraGkfVNaWpoefvhh1a1bV97e3mrevLleeuklFRQUFBmzoKBAzz33nOrXry8fHx9FREToiy++sOnz008/afDgwWrcuLH8/PxUr1499e7dW7t377b7Ov7880/Fx8crKChIvr6+6tSpk3bt2mXTp7Snwl68zpKSknTfffdJkjp37mxdp0lJSZLsfw5Ku83ftWuXevXqZV1nISEh6tmzp3755ZcS69u1a5e++eYb9e/f36bdrPcyOztbjz/+uMLDw+Xl5aV69eopLi6uyH4wOztbw4YNU0BAgKpWrao77rhDP/74Y5F6izstau3ateratav8/f3l5+en5s2bKyEhwbpe586dK8n2dPLCZdj7/1Caz+DFp+bNnj1b4eHhqlq1qiIjI7V9+/YS13tpzJw5U7/99puee+65Yvt4eXmpb9++WrhwoQzDuOIxnYVwcRXIyMjQww8/rH79+mn16tUaMWKEQ/NnZmbqxhtv1Lp16zRp0iStWbNGQ4cOVUJCgoYNG1bmuubOnauvvvpKc+fO1RtvvKH//ve/6t27t4YOHapff/1Vixcv1vPPP6/PP/9csbGxNvMeOHBAPXr00KJFi7R27VrFxcXp//7v/9S7d2+bfgsXLtQjjzyi1q1b64MPPtDTTz+tqVOnFrkOpaCgQHfeeadmzpypfv366dNPP9XMmTOVnJys6Oho/fHHHw6/vtLWKP117mSPHj3UtWtXrVy5UqNGjdJrr72mvn372vR79NFHFRcXp9tuu00rV67UvHnztGfPHkVFRen48eMl1lO4M7zcNTgpKSk6d+6cGjdurMcee0w1a9aUl5eXIiIi9Omnnzq8HoC/i/z8fG3YsEERERHFfqsdGhqq9u3ba/369crPz3do+du2bZOvr6969Oihbdu2adu2bUVOOx06dKgqVaqkd955R4mJifrmm28UHR2t06dPOzTW9ddfryVLlkj660hm4XiXbovtKW0N9vZNv/76q6KiovTZZ5/p2Wef1apVq3Tbbbfp8ccft3sq2Zw5c7R27VolJibq7bffVqVKlRQTE2Nz2vCxY8cUEBCgmTNnau3atZo7d648PT110003af/+/UWW+dRTT+ngwYN644039MYbb+jYsWOKjo6+4i9xevbsqRkzZkj6a/9XuE579uxZ7Dyl2eafO3dO3bp10/HjxzV37lwlJycrMTFR9evX15kzZ0qs6ZNPPpGHh4duvfVWu89fyXt5/vx5derUSW+++abGjBmjNWvW6Mknn1RSUpL+8Y9/WP8YNgxDffr00VtvvaV//vOf+vDDD3XzzTcrJiamVOt10aJF6tGjhwoKCrRgwQJ9/PHHGjNmjDVYPfPMM7r33nslybrOSzq1ytHP4MXrfNmyZTp37px69OihrKwsa5/CIFLaazv27t2r6dOna/78+Ze9JjM6OlpHjhzRDz/8UKpluwUDFcbAgQONKlWq2LR16tTJkGR88cUXRfpLMiZPnlykvUGDBsbAgQOtjx999FGjatWqxpEjR2z6vfjii4YkY8+ePSXW1alTJ6NTp07Wx4cOHTIkGW3atDHy8/Ot7YmJiYYk4x//+IfN/HFxcYYkIysry+7yCwoKjAsXLhibNm0yJBnfffedYRiGkZ+fbwQFBRk33XSTTf8jR44YlStXNho0aGBtW758uSHJeP/992367tixw5BkzJs3r8TXOHnyZKOk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uusuDRs2TFlZWZo8ebJ8fHxsAmFZFf7K8sKFC1WtWjX5+PgoPDzc7lGR0m7zP/nkE82bN099+vRRw4YNZRiGPvjgA50+fVrdunUrsZ7o6GgtXrxYP/74Y5F1K13ZexkXF6f3339ft956q8aNG6fWrVuroKBAaWlp+uyzz/TPf/5TN910k7p3765bb71VTzzxhM6dO6eIiAh99dVXeuutty47RtWqVfXSSy8pNjZWt912m4YNG6bAwED99NNP+u677zRnzhxJsgaxWbNmWY8atm7d2u6p0I5+BkvjyJEjatSokQYOHFjidRc1atSwG9xq1KihvLw8u89t3769xDt+uSVXXEWOsinublHF3WEgJyfHeOKJJ4zQ0FDD19fX6NSpk5Gammr3TiK//vqrMWbMGCM8PNyoXLmyUatWLaN9+/bGxIkTjbNnz5ZYV3F3i3rhhRds+hXeqeO9996zaS+8O8TFd5zYunWrERkZafj5+Rl16tQxYmNjjW+//dbunU0WLlxoXHvttYaXl5fRpEkTY/Hixcadd95ptGvXzqbfhQsXjBdffNFo06aN4ePjY1StWtVo1qyZ8eijjxoHDhwo8TXau3NIaWssfN++//57Izo62vD19TVq1aplPPbYY3bX7eLFi42bbrrJqFKliuHr62s0atTIGDBggLFz506bZV5695nCGu3dpcSeLVu2GJ06dTL8/PwMPz8/o0uXLsZXX31VqnmBv7tt27YZ9957rxEYGGh4enoadevWNe6++25j69atdvuvXr3aaNu2reHr62s0bNjQmDNnjt3tSmpqqtGhQwfDz8/PkGTdthZuJz/77DOjf//+Ro0aNQxfX1+jR48eRbZfBQUFxvPPP280bNjQ8PHxMSIiIoz169fbvdvR8uXLjWbNmhmVK1cu9g6DhRypoaR905EjR4x+/foZAQEBRuXKlY2mTZsaL7zwgs3dBQv3I7NmzTKmTp1qXHPNNYaXl5fRrl07Y926dTbL+/33342hQ4cadevWNfz8/IxbbrnFun27+PUW7oPeeustY8yYMUadOnUMb29vo2PHjjbbV8Mo+92iDOOvOyOGh4cbHh4eNvuD4u4adrlt/n//+1/jwQcfNBo1amT4+voa/v7+xo033mgkJSXZXb8Xy8rKMqpWrWo8//zzNu1mvZdnz541nn76aaNp06aGl5eX4e/vb7Rq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yTbtycnJioqKMrUwAAD+DsLCwvT111/r8OHDOnnypPUIxKW6dOminTt3aunSpTpw4IAmT55sEzaqVaumxx9/XOPGjdObb76pn3/+Wbt27dLcuXP15ptvOuvlAPibc/i0qPj4ePXv318RERGKjIzUwoULlZaWpuHDh5dHfQAAXBF3/wGvxx9/XAMHDlSLFi30xx9/aMmSJXb73X777XrmmWf0xBNP6M8//9SQIUM0YMAA7d6929rn2WefVd26dZWQkKCDBw+qRo0auv766/XUU0856+UA+JtzOFz07dtXp06d0rRp05SRkaGWLVtq9erVatCgQXnUBwDAVa1Jkybatm2bTdugQYPs9p06dWqJN0mxWCwaM2aMxowZY2aJAFBqZbqge8SIERoxYoTZtQAAAACowBz+ET0AAAAAsIdwAQAAAMAUhAsAAAAApiBcAAAAADAF4QIAAACAKQgXAAAAAExBuAAAAABgCsIFAAAAAFMQLgAAVzeLxXmTmwsLC1NiYqL1scVi0cqVK69omWYsA8DVo0y/0A0AACq+jIwM1axZs1R9p0yZopUrVyo1NbXMywBw9SNcAABQgeTm5srLy8uUZQUFBbnFMgBcPTgtCgAAF4qOjtaoUaM0atQo1ahRQwEBAXr66adlGIakv05lmj59ugYNGiR/f38NGzZMkrR161bdeuut8vX1VWhoqMaMGaNz585Zl3vixAn17t1bvr6+Cg8P17Jly4qMfekpTb/88oseeOAB1apVS1WqVFFERIS+/vprJSUlaerUqfruu+9ksVhksViUlJRkdxm7d+9Wly5d5Ovrq4CAAD3yyCM6e/as9flBgwapT58+evHFFxUcHKyAgACNHDlSFy5cMHGtAnAVjlxUEIUbcXd0+vRpV5dgV40aNVxdAgCUyptvvqmhQ4fq66+/1s6dO/XII4+oQYMG1iDxwgsv6JlnntHTTz8t6a8/4G+//XY9++yzWrRokX799VdrQFmyZImkv/6IT09P1/r16+Xl5aUxY8boxIkTxdZw9uxZderUSfXq1dOqVasUFBSkb7/9VgUFBerbt69++OEHrV27Vp9//rkkyd/fv8gyzp8/rzvuuEM333yzduzYoRMnTig2NlajRo2y2Y9t2LBBwcHB2rBhg3766Sf17dtXbdu2tb5eABUX4QIAABcLDQ3Vv//9b1ksFjVt2lS7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YArCBQAAAABTEC4AAAAAmIJwAQAAAMAUhAsAAAAApiBcAAAAADAF4QIAAACAKQgXAIAymTdvnsLDw+Xj46P27dtry5YtJfbPycnRxIkT1aBBA3l7e6tRo0ZavHixk6oFADiDp6sLAABUPCtWrFBcXJzmzZunDh066LXXXlNMTIz27t2r+vXr253n/vvv1/Hjx7Vo0SJde+21OnHihPLy8pxcOQCgPBEuAAAOmz17toYOHarY2FhJUmJiotatW6f58+crISGhSP+1a9dq06ZNOnjwoGrVqiVJCgsLc2bJAAAncOi0qPnz56t169aqXr26qlevrsjISK1Zs6a8agMAuKHc3FylpKSoe/fuNu3du3fX1q1b7c6zatUqRURE6Pnnn1e9evXUpEkTPf744/rjjz+KHScnJ0fZ2dk2EwDAvTl05OKaa67RzJkzde2110qS3nzzTd15553atWuXrrvuunIpEADgXk6ePKn8/HwFBgbatAcGBiozM9PuPAcPHtSXX34pHx8fffjhhzp58qRGjBih3377rdjrLhISEjR16lTT6wcAlB+Hjlz07t1bPXr0UJMmTdSkSRM999xzqlq1qrZv317sPHzzBABXJ4vFYvPYMIwibYUKCgpksVi0bNky3XjjjerRo4dmz56tpKSkYo9eTJgwQVlZWdYpPT3d9NcAADBXme8WlZ+fr3fffVfnzp1TZGRksf0SEhLk7+9vnUJDQ8s6JADADdSuXVseHh5FjlKcOHGiyNGMQsHBwapXr578/f2tbc2bN5dhGPrll1/szuPt7W09DbdwAgC4N4fDxe7du1W1alV5e3tr+PDh+vDDD9WiRYti+/PNEwBcXby8vNS+fXslJyfbtCcnJysqKsruPB06dNCxY8d09uxZa9uPP/6oSpUq6ZprrinXegEAzuNwuGjatKlSU1O1fft2PfbYYxo4cKD27t1bbH++eQKAq098fLzeeOMNLV68WPv27dO4ceOUlpam4cOHS/rri6UBAwZY+/fr108BAQEaPHiw9u7dq82bN+tf//qXhgwZIl9fX1e9DACAyRy+Fa2Xl5f1gu6IiAjt2LFDL7/8sl577TXTiwMAuKe+ffvq1KlTmjZtmjIyMtSyZUutXr1aDRo0kCRlZGQoLS3N2r9q1apKTk7W6NGjFRERoYCAAN1///2aPn26q14CAKAcXPHvXBiG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qGXLlq4ux629++67+vbbb93uXEZ3dfDgQc2fP1/x8fF66qmn9M0332jMmDHy9vbWgAEDXF0e4BD2NbZcue/YvXu3IiMj9eeff6pq1ar68MMP1aJFC6eN7+p9wU033aSlS5eqSZMmOn78uKZPn66oqCjt2bNHAQEBTqnB3bbvK1eu1OnTpzVo0CCnjfnkk08qKytLzZo1k4eHh/Lz8/Xcc8/pwQcfdFoN1apVU2RkpJ599lk1b95cgYGBWr58ub7++ms1btzYaXVcToULF4UuTaqGYTgtvVZko0aN0vfff+9WCdcdpaena+zYsfrss8+KfEMA+woKChQREaEZM2ZIktq1a6c9e/Zo/vz5hAtUWOxr/uLKfUfTpk2Vmpqq06dP6/3339fAgQO1adMmpwQMd9gXxMTEWP/dqlUrRUZGqlGjRnrzzTcVHx/vlBrcbfu+aNEixcTEKCQkxGljrlixQm+//bbeeecdXXfddUpNTVVcXJxCQkI0cOBAp9Xx1ltvaciQIapXr548PDx0/fXXq1+/fvr222+dVsPlVLjTomrXri0PD48i3xydOHGiyDdMsDV69GitWrVKGzZs0DXXXOPqctxaSkqKTpw4ofbt28vT01Oenp7atGmTXnnlFXl6eio/P9/VJbqd4ODgIjv75s2bc6MFVEjsa/7H1fsOLy8vXXvttYqIiFBCQoLatGmjl19+2Slju+O+oEqVKmrVqpUOHDjgtDHdaft+5MgRff7554qNjXXquP/61780fvx4PfDAA2rVqpX69++vcePGKSEhwal1NGrUSJs2bdLZs2eVnp6ub775RhcuXFB4eLhT6yhJhQsXXl5eat++vfUuAYWSk5MVFRXloqrcm2EYGjVqlD744AOtX7/erT6A7qpr167avXu3UlNTrVNERIQeeughpaamysPDw9Ulup0OHToUuU3ljz/+qAYNGrioIqDs2Ne4777DMAzl5OQ4ZSx33Bfk5ORo3759Cg4OdtqY7rR9X7JkierWrauePXs6ddzz58+rUiXbP5s9PDycfivaQlWqVFFwcLB+//13rVu3TnfeeadL6rCnQp4WFR8fr/79+ysiIkKRkZFauHCh0tLSNHz4cFeX5pZGjhypd955Rx999JGqVatm/SbO399fvr6+Lq7OPVWrVq3IecVVqlRRQEAA16oUY9y4cYqKitKMGTN0//3365tvvtHChQu1cOFCV5cGlImr9zVnz57VTz/9ZH186NAhpaamqlatWqpfv365j+8O+46nnnpKMTExCg0N1ZkzZ/Tuu+9q48aNWrt2rVPGd4d9weOPP67evXurfv36OnHihKZPn67s7GynnorjLtv3goICLVmyRAMHDpSnp3P/hO3du7eee+451a9fX9ddd5127dql2bNna8iQIU6tY926dTIMQ02bNtVPP/2kf/3rX2ratKkGDx7s1DpK5LobVV2ZuXPnGg0aNDC8vLyM66+/3uW3xnNnkuxOS5YscXVpFQq3or28jz/+2GjZsqXh7e1tNGvWzFi4cKGrSwKuiCv3NRs2bLC77R44cKBTxneHfceQIUOs679OnTpG165djc8++8xp49vj7H1B3759jeDgYKNy5cpGSEiIcffddxt79uxx2viF3GH7vm7dOkOSsX//fqePnZ2dbYwdO9aoX7++4ePjYzRs2NCYOHGikZOT49Q6VqxYYTRs2NDw8vIygoKCjJEjRxqnT592ag2XYzEMw3B2oAEAAABw9alw11wAAAAAcE+ECwAAAACmIFwAAAAAMAXhAgAAAIApCBcAAAAATEG4AAAAAGAKwgUAAAAAUxAuAAAAAJiCcAEAAPD/WSwWrVy5stT9N27cKIvFotOnT5taR1hYmBITE01dJuAMhAsAAHBVGzRokCwWiywWiypXrqzAwEB169ZNixcvVkFBgU3fjIwMxcTElHrZUVFRysjIkL+/vyQpKSlJNWrUMLN8oEIhXAAAgKveHXfcoYyMDB0+fFhr1qxR586dNXbsWPXq1Ut5eXnWfkFBQfL29i71cr28vBQUFCSLxVIeZQMVDuECAABc9by9vRUUFKR69erp+uuv11NPPaWPPvpIa9asUVJSkrXfpadFbd26VW3btpWPj48iIiK0cuVKWSwWpaamSrI9LWrjxo0aPHiwsrKyrEdKpkyZUmxNq1atUkREhHx8fFS7dm3dfffdxfadPXu2WrVqpSpVqig0NFQjRozQ2bNnrc8fOXJEvXv3Vs2aNVWlShVdd911Wr16tSTp999/10MPPaQ6derI19dXjRs31pIlS8q0HoHL8XR1AQAAAK7QpUsXtWnTRh988IFiY2OLPH/mzBn17t1bPXr00DvvvKMjR44oLi6u2OVFRUUpMTFRkyZN0v79+yVJVatWtdv3008/1d13362JEyfqrbfeUm5urj799NNil12pUiW98sorCgsL06FDhzRixAg98cQTmjdvniRp5MiRys3N1ebNm1WlShXt3bvXOvYzzzyjvXv3as2aNapdu7Z++ukn/fHHH6VdTYBDCBcAAOBvq1mzZvr+++/tPrds2TJZLBa9/vrr8vHxUYsWLXT06FENGzbMbn8vLy/5+/vLYrEoKCioxHGfe+45PfDAA5o6daq1rU2bNsX2vzjUhIeH69lnn9Vjjz1mDRdpaWm655571KpVK0lSw4YNrf3T0tLUrl07RURESPrrYnGgvHBaFAAA+NsyDKPY6yX279+v1q1by8fHx9p24403mjJuamqqunbtWur+GzZsULdu3VSvXj1Vq1ZNAwYM0KlTp3Tu3DlJ0pgxYzR9+nR16NBBkydPtglMjz32mN599121bdtWTzzxhLZu3WrKawDsIVwAAIC/rX379ik8PNzuc/aCh2EYpozr6+tb6r5HjhxRjx491LJlS73//vtKSUnR3LlzJUkXLlyQJMXGxurgwYPq37+/du/erYiICL366quSpJiYGOspXceOHVPXrl31+OOPm/I6gEsRLgAAwN/S+vXrtXv3bt1zzz12ny88ZSonJ8fatnPnzhKX6eXlpfz8/MuO3bp1a33xxRelqnPnzp3Ky8vTSy+9pJtvvllNmjTRsWPHivQLDQ3V8OHD9cEHH+if//ynXn/9detzderU0aBBg/T2228rMTFRCxcuLNXYgKMIFwAA4KqXk5OjzMxMHT16VN9++61mzJihO++8U7169dKAAQPsztOvXz8VFBTokUce0b59+7Ru3Tq9+OKLklTsqVRhYWE6e/asvvjiC508eVLnz5+322/y5Mlavny5Jk+erH379mn37t16/vnn7fZt1KiR8vLy9Oqrr+rgwYN66623tGDBAps+cXFxWrdunQ4dOqRvv/1W69evV/PmzSVJkyZN0kcffaSffvpJe/bs0SeffGJ9DjAb4QIAAFz11q5dq+DgYIWFhemOO+7Qhg0b9Morr+ijjz6Sh4eH3XmqV6+ujz/+WKmpqWrbtq0mTpyoSZMmSZLNdRgXi4qK0vDhw9W3b1/VqVOn2MAQHR2t9957T6tWrVLbtm3VpUsXff3113b7tm3bVrNnz9asWbPUsmVLLVu2TAkJCTZ98vPzNXLkSDVv3lx33HGHmjZtar3Y28vLSxMmTFDr1q116623ysPDQ++++26p1hvgKIth1smDAAAAV7lly5ZZf8vCkesmgL8LbkULAABQjKVLl6phw4aqV6+evvvuOz355JO6//77CRZAMQgXAAAAxcjMzNSkSZOUmZmp4OBg3XfffXruuedcXRbgtjgtCgAAAIApuKAbAAAAgCkIFwAAAABMQbgAAAAAYArCBQAAAABTEC4AAAAAmIJwAQAAAMAUhAsAAAAApiBcAAAAADDF/wMqkwKUEfqedwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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psWLF2vNmjWKiYnR//7v/6pnz552/RYtWqTHH39cLVq00EcffaRnnnlGU6dOzXcdSm5uru655x7NmjVLffr00RdffKFZs2YpMTFRkZGR+vPPP51+fUWtUfr73Mlu3bqpc+fOWrlypUaMGKHXXntNvXv3tuv3xBNPKCYmRnfeeadWrlyp+fPna+/evYqIiNCpU6cKrSdvZ1jUa3B++eUXVatWTZ6enqpfv74mTpxYrPUA/FPk5ORow4YNCgsLK/Bb7aCgILVp00br169XTk6OU8vftm2bfHx81K1bN23btk3btm3Ld9rp4MGDVa5cOb377ruKj4/Xd999p8jISJ07d86psW6++WYtWbJE0t/nfOeNd+W22JGi1uBo3/Trr78qIiJC69at03PPPadPP/1Ud955p8aOHevwVLK5c+dqzZo1io+P1zvvvKNy5copKirK7rThkydPqnr16po1a5bWrFmjefPmydPTU7feeqsOHDiQb5kTJkzQ4cOH9cYbb+iNN97QyZMnFRkZec1f4nTv3l0zZ86U9Pf+L2+ddu/evcB5irLNv3jxorp06aJTp05p3rx5SkxMVHx8vOrWravz588XWtPnn38uDw8P3XHHHQ6fv5b38o8//lCHDh301ltvadSoUVq9erWefvppJSQk6H/+539sfwwbhqFevXrp7bff1r/+9S99/PHHuu222xQVFVWk9bp48WJ169ZNubm5WrhwoT777DONGjXKFqyeffZZPfDAA5JkW+eFnVrl7Gfw8nW+bNkyXbx4Ud26dVN6erqtT14QKeq1Hfv27dP06dO1YMGCq16TGRkZqWPHjumnn34q0rJLBQNlRv/+/Y0KFSrYtXXo0MGQZHz11Vf5+ksyJk+enK89ODjY6N+/v+3xE088YVSsWNE4duyYXb8XX3zRkGTs3bu30Lo6dOhgdOjQwfb4yJEjhiSjZcuWRk5Ojq09Pj7ekGT8z//8j938MTExhiQjPT3d4fJzc3ONS5cuGZs2bTIkGT/88INhGIaRk5NjBAQEGLfeeqtd/2PHjhnly5c3goODbW3Lly83JBkffvihXd8dO3YYkoz58+cX+honT55sFPbfpaAaDePv902S8fLLL9vNM2PGDEOS8fXXXxuGYRjbtm0zJBkvvfSSXb+UlBTDx8fHeOqpp+yWefnrMwzDmDp1quHh4WFs3Lix0NdiGIYxceJEY/78+cb69euNL774whgxYoTh6elp3HHHHXbvGYD/k5aWZkgyHn744UL79e7d25BknDp1yjAMx/9fDcPxdqVChQp22+c8S5YsMSQZ9957r137N998Y0gypk+fbmu7chuf58ptdd72b8mSJYW+nuLUUNC+ady4cYYk49tvv7Vrf/LJJw2LxWIcOHDAMIz/24/Url3b+PPPP239MjIyjGrVqhl33nlngXVmZ2cbWVlZRoMGDYwxY8bY2jds2GBIMm6++WYjNzfX1n706FGjfPnyRnR0tK3N0Xtz5fozjPz72ffff9+QZGzYsCFfXVd+Doq6zd+5c6chyVi5cmWBr7kgUVFRRuPGjfO1m/FexsXFGeXKlTN27Nhh1/7BBx8YkoxVq1YZhmEYq1evLnQfePn6y6vryJEjhmEYxvnz543KlSsbt99+u917dqXhw4cXuI++8v+Ds5/B5s2bG9nZ2bZ+3333nSHJWL58ua3t6NGjhoeHhzFo0KACa8yTk5Nj3HrrrcYjjzxia+vQoYNx0003Oex/8OBBQ5KxYMGCqy67tODIxXWgatWq6tSpU7Hn//zzz9WxY0fVrl1b2dnZtinvW4VNmzYVa7ndunVTuXL/9xFr0qSJJOX7FievPTk52dZ2+PBh9enTRwEBAfLw8FD58uXVoUMHSdL+/fslSQcOHFBaWpoeeughu+XVrVs337nOn3/+uapUqaKePXvavcZWrVopICCgWHfcKkqNl3v00UftHvfp00eStGHDBluNFotFjz32mF2NAQEBatmy5VVrnDRpkrKzs201FGb69Ol68skn1bFjR3Xr1k2vvvqqZs2apc2bN+uTTz4pyssHUADj/39jW9w7zBXmyu1IRESEgoODbdsRVyhqDY72TevXr1fTpk3Vtm1bu/YBAwbIMIx8Nyy577775O3tbXtcqVIl9ezZU5s3b7YdGcrOztbMmTPVtGlTeXl5ydPTU15eXjp48KDDbXGfPn3s3pvg4GBFRES4dB1KRd/m33jjjapataqefvppLVy4UPv27SvyGCdPnlStWrUKfP5a3svPP/9czZo1U6tWrezqv+uuu+yOouctq6B9YGG2bt2qjIwMDRs2zLT/T85+Brt37y4PDw/b4xYtWkiSjh07ZmsLDg5Wdna2Fi9efNXx58yZo4MHDxb5LlB579+JEyeK1L804ILu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EC4AAAAAmMLT3QWUNr169XJ3CQ6tXLnS3SUUKD4+3t0lOJSQkODuEgoUExPj7hIAAABMx5ELAAAAAKYgXAAAAAAwBeECAAAAgCkIFwAAAABMQbgAAAAAYArCBQAAAABTEC4AAAAAmIJwAQAAAMAUhAsAAAAApiBcAAAAADAF4QIAAACAKQgXAAAAAExBuAAAAABgCsIFAKBY5s+fr9DQUHl7e6tNmzbasmVLgX0/+ugjdenSRTVr1lTlypUVHh6utWvXurBaAIArOB0uTpw4occee0zVq1eXr6+vWrVqpV27dpVEbQCAUmrFihWKiYnRxIkTtXv3brVv315RUVFKTk522H/z5s3q0qWLVq1apV27dqljx47q2bOndu/e7eLKAQAlydOZzr///rvatWunjh07avXq1apVq5Z++eUXValSpYTKAwCURnPmzNHgwYMVHR0tSYqPj9fatWu1YMECxcXF5esfHx9v93jmzJn65JNP9Nlnn6l169auKBkA4AJOhYvZs2crKChIS5YssbWFhISYXRMAoBTLysrSrl27NG7cOLv2rl27auvWrUVaRm5urs6fP69q1aoV2CczM1OZmZm2xxkZGcUrGADgMk6dFvXpp58qLCxMDz74oGrVqqXWrVvr9ddfL3SezMxMZWRk2E0AgLLrzJkzysnJkb+/v127v7+/0tLSirSMl156SRcvXtRDDz1UYJ+4uDj5+fnZpqCgoGuqGwBQ8pwKF4cPH9aCBQvUoEEDrV27VkOHDtWoUaO0dOnSAudh5wAA1yeLxWL32DCMfG2OLF++XFOmTNGKFStUq1atAvuNHz9e6enptiklJeWaawYAlCynTovKzc1VWFiYZs6cKUlq3bq19u7dqwULFqhfv34O5xk/frxiY2NtjzMyMggYAFCG1ahRQx4eHvmOUpw+fTrf0YwrrVixQoMHD9b777+vO++8s9C+VqtVVqv1musFALiOU0cuAgMD1bRpU7u2Jk2aFHh3EOnvnUPlypXtJgBA2eXl5aU2bdooMTHRrj0xMVEREREFzrd8+XINGDBA7777rrp3717SZQIA3MCpIxft2rXTgQMH7Np+/vlnBQcHm1oUAKB0i42NVd++fRUWFqbw8HAtWrRIycnJGjp0qKS/j1qfOHHCdtrs8uXL1a9fP7388su67bbbbEc9fHx85Ofn57bXAQAwl1Ph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FBMT4+5SSrUTJ07oscceU/Xq1eXr66tWrVpp165d7i4LKDZ37ms2b96snj17qnbt2rJYLFq5cqXLxpZKx75jwYIFatGihe3HwsLDw7V69WqX1nA5d+wLpkyZIovFYjcFBAS4bPw87t6+h4SE5FsPFotFw4cPd8n42dnZeuaZZxQaGiofHx/Vq1dP06ZNU25urkvGz3P+/HnFxMQoODhYPj4+ioiI0I4dO1xaw9WUyXCxYsUKxcTEaOLEidq9e7fat2+vqKgou9se4v9s2rRJw4cP1/bt25WYmKjs7Gx17dpVFy9edHdpZcKOHTu0aNEitWjRwt2llGq///672rVrp/Lly2v16tXat2+fXnrpJbf9ojJwrdy9r7l48aJatmypuXPnumS8K5WGfccNN9ygWbNmaefOndq5c6c6deqke+65R3v37nVZDXncuS+46aablJqaapv27Nnj0vFLw/Z9x44ddusg70c5H3zwQZeMP3v2bC1cuFBz587V/v379fzzz+uFF17Qq6++6pLx80RHRysxMVFvv/229uzZo65du+rOO+/UiRMnXFpHoYwyqG3btsbQoUPt2ho3bmyMGzfOTRWVLadPnzYkGZs2bXJ3KaXe+fPnjQYNGhiJiYlGhw4djNGjR7u7pFLr6aefNm6//XZ3lwGYpjTtayQZH3/8scvHvVxp2XdUrVrVeOONN1w6pjv3BZMnTzZatmzpsvEcKY3b99GjRxv169c3cnNzXTJe9+7djUGDBtm13XfffcZjjz3mkvENwzD++OMPw8PDw/j888/t2lu2bGlMnDjRZXVcTZk7cpGVlaVdu3apa9eudu1du3bV1q1b3VRV2ZKeni5JqlatmpsrKf2GDx+u7t27684773R3KaXep59+qrCwMD344IOqVauWWrdurddff93dZQHFwr4mP3fvO3JycvTee+/p4sWLCg8Pd+nY7t4XHDx4ULVr11ZoaKgefvhhHT582KXjl7bte1ZWlt555x0NGjRIFovFJWPefvvt+uqrr/Tzzz9Lkn744Qd9/fXX6tatm0vGl/4+NSsnJ0fe3t527T4+Pvr6669dVsfVlLlf6D5z5oxycnLk7+9v1+7v76+0tDQ3VVV2GIah2NhY3X777WrWrJm7yynV3nvvPX3//fel7lzG0urw4cNasGCBYmNjNWHCBH333XcaNWqUrFar+vXr5+7yAKewr7Hnzn3Hnj17FB4err/++ksVK1bUxx9/rKZNm7psfHfvC2699VYtXbpUDRs21KlTpzR9+nRFRERo7969ql69uktqKG3b95UrV+rcuXMaMGCAy8Z8+umnlZ6ersaNG8vDw0M5OTmaMWOGHnnkEZfVUKlSJYWHh+u5555TkyZN5O/vr+XLl+vbb79VgwYNXFbH1ZS5cJHnyqRqGIbL0mtZNmLECP3444+lKuGWRikpKRo9erTWrVuX7xsCOJabm6uwsDDNnDlTktS6dWvt3btXCxYsIFygzGJf8zd37jsaNWqkpKQknTt3Th9++KH69++vTZs2uSRglIZ9QVRUlO3fzZs3V3h4uOrXr6+33npLsbGxLqmhtG3fFy9erKioKNWuXdtlY65YsULvvPOO3n33Xd10001KSkpSTEyMateurf79+7usjrfffluDBg1SnTp15OHhoZtvvll9+vTR999/77IarqbMnRZVo0YNeXh45Pvm6PTp0/m+YYK9kSNH6tNPP9WGDRt0ww03uLucUm3Xrl06ffq02rRpI09PT3l6emrTpk165ZVX5OnpqZycHHeXWOoEBgbm29k3adKEGy2gTGJf83/cve/w8vLSjTfeqLCwMMXFxally5Z6+eWXXTJ2adwXVKhQQc2bN9fBgwddNmZp2r4fO3ZMX375paKjo1067r///W+NGzdODz/8sJo3b66+fftqzJgxiouLc2kd9evX16ZNm3ThwgWlpKTou+++06VLlxQaGurSOgpT5sKFl5eX2rRpY7tLQJ7ExERFRES4qarSzTAMjRgxQh999JHWr19fqj6ApVXnzp21Z88eJSUl2aawsDA9+uijSkpKkoeHh7tLLHXatWuX7zaVP//8s4KDg91UEVB87GtK777DMAxlZma6ZKzSuC/IzMzU/v37FRgY6LIxS9P2fcmSJapVq5a6d+/u0nH/+OMPlStn/2ezh4eHy29Fm6dChQoKDAzU77//rrVr1+qee+5xSx2OlMnTomJjY9W3b1+FhYUpPDxcixYtUnJysoYOHeru0kql4cOH691339Unn3yiSpUq2b6J8/Pzk4+Pj5urK50qVaqU77ziChUqqHr16lyrUoAxY8YoIiJCM2fO1EMPPaTvvvtOixYt0qJFi9xdGlAs7t7XXLhwQYcOHbI9PnLkiJKSklStWjXVrVu3xMcvDfuOCRMmKCoqSkFBQTp//rzee+89bdy4UWvWrHHJ+KVhXzB27Fj17NlTdevW1enTpzV9+nRlZGS49FSc0rJ9z83N1ZIlS9S/f395err2T9iePXtqxowZqlu3rm666Sbt3r1bc+bM0aBBg1xax9q1a2UYhho1aqRDhw7p3//+txo1aqSBAwe6tI5Cue9GVddm3rx5RnBwsOHl5WXcfPPNbr81XmkmyeG0ZMkSd5dWpnAr2qv77LPPjGbNmhlWq9Vo3LixsWjRIneXBFwTd+5rNmzY4HDb3b9/f5eMXxr2HYMGDbKt/5o1axqdO3c21q1b57LxHXH1vqB3795GYGCgUb58eaN27drGfffdZ+zdu9dl4+cpDdv3tWvXGpKMAwcOuHzsjIwMY/To0UbdunUNb29vo169esbEiRONzMxMl9axYsUKo169eoaXl5cREBBgDB8+3Dh37pxLa7gai2EYhqsDDQAAAIDrT5m75gIAAABA6US4AAAAAGAKwgUAAAAAUxAuAAAAAJiCcAEAAADAFIQLAAAAAKYgXAAAAAAwBeECAAAAgCkIFwAAAP+fxWLRypUri9x/48aNslgsOnfunKl1hISEKD4+3tRlAq5AuAAAANe1AQMGyGKxyGKxqHz58vL391eXLl305ptvKjc3165vamqqoqKiirzsiIgIpaamys/PT5KUkJCgKlWqmFk+UKYQLgAAwHXv7rvvVmpqqo4eParVq1erY8eOGj16tHr06KHs7Gxbv4CAAFmt1iIv18vLSwEBAbJYLCVRNlDmEC4AAMB1z2q1KiAgQHXq1NHNN9+sCRMm6JNPPtHq1auVkJBg63flaVFbt25Vq1at5O3trbCwMK1cuVIWi0VJSUmS7E+L2rhxowYOHKj09HTbkZIpU6YUWNOnn36qsLAweXt7q0aNGrrvvvsK7Dtnzhw1b95cFSpUUFBQkIYNG6YLFy7Ynj927Jh69uypqlWrqkKFCrrpppu0atUqSdLvv/+uRx99VDVr1pSPj48aNGigJUuWFGs9Alfj6e4CAAAA3KFTp05q2bKlPvroI0VHR+d7/vz58+rZs6e6deumd999V8eOHVNMTEyBy4uIiFB8fLwmTZqkAwcOSJIqVqzosO8XX3yh++67TxMnTtTbb7+trKwsffHFFwUuu1y5cnrllVcUEhKiI0eOaNiwYXrqqac0f/58SdLw4cOVlZWlzZs3q0KFCtq3b59t7GeffVb79u3T6tWrVaNGDR06dEh//vlnUVcT4BTCBQAA+Mdq3LixfvzxR4fPLVu2TBaLRa+//rq8vb3VtGlTnThxQkOGDHHY38vLS35+frJYLAoICCh03BkzZujhhx/W1KlTbW0tW7YssP/loSY0NFTPPfecnnzySVu4SE5O1v3336/mzZtLkurVq2frn5ycrNatWyssLEzS3xeLAyWF06IAAMA/lmEYBV4vceDAAbVo0ULe3t62trZt25oyblJSkjp37lzk/hs2bFCXLl1Up04dVapUSf369dPZs2d18eJFSdKoUaM0ffp0tWvXTpMnT7YLTE8++aTee+89tWrVSk899ZS2bt1qymsAHCFcAACAf6z9+/crNDTU4XOOgodhGKaM6+PjU+S+x44dU7du3dSsWTN9+OGH2rVrl+bNmydJunTpkiQpOjpahw8fVt++fbVnzx6FhYXp1VdflSRFRUXZTuk6efKkOnfurLFjx5ryOoArES4AAMA/0vr167Vnzx7df//9Dp/PO2UqMzPT1rZz585Cl+nl5aWcnJyrjt2iRQt99dVXRapz586dys7O1ksvvaTbbrtNDRs21MmTJ/P1CwoK0tChQ/XRRx/pX//6l15//XXbczVr1tSAAQP0zjvvKD4+XosWLSrS2ICzCBcAAOC6l5mZqbS0NJ04cULff/+9Zs6cqXvuuUc9evRQv379HM7Tp08f5ebm6vHHH9f+/fu1du1avfjii5JU4KlUISEhunDhgr766iudOXNGf/zxh8N+kydP1vLlyzV58mTt379fe/bs0fPPP++wb/369ZWdna1XX31Vhw8f1ttvv62FCxfa9YmJidHatWt15MgRff/991q/fr2aNGkiSZo0aZI++eQTHTp0SHv37tXnn39uew4wG+ECAABc99asWaPAwECFhITo7rvv1oYNG/TKK6/ok08+kYeHh8N5KleurM8++0xJSUlq1aqVJk6cqEmTJkmS3XUYl4uIiNDQoUPVu3dv1axZs8DAEBkZqffff1+ffvqpWrVqpU6dOunbb7912LdVq1aaM2eOZs+erWbNmmnZsmWKi4uz65OTk6Phw4erSZMmuvvuu9WoUSPbxd5eXl4aP368WrRooTvuuEMeHh567733irTeAGdZDLNOHgQAALjOLVu2zPZbFs5cNwH8U3ArWgAAgAIsXbpU9erVU506dfTDDz/o6aef1kMPPUSwAApAuAAAAChAWlqaJk2apLS0NAUGBurBBx/UjBkz3F0WUGpxWhQAAAAAU3BBNwAAAABTEC4AAAAAmIJwAQAAAMAUhAsAAAAApiBcAAAAADAF4QIAAACAKQgXAAAAAExBuAAAAABgiv8HwmzLh+wcDd8AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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7rvvNHfuXL355pv6z3/+o169emnIkCH67bfftHjxYtuUgkuHlSVp37596t69uxYtWqS1a9cqNjZW//u//6tevXrZ1Vu4cKEeffRRtWrVSh999JGeeeYZTZ06tcB1KHl5ebrrrrs0c+ZM9e3bV59//rlmzpyppKQkderUSX/++afTz6+4MUp/z53s3r27unTpolWrVmnkyJF6/fXX1adPH7t6jz32mGJjY3X77bdr1apVmjdvnnbt2qWoqCgdP368yHjyO8MrXYPzyy+/SJJatWpV4LFWrVrZHgdgLzc3Vxs2bFBERESh32qHhIQoPDxc69evV25urlP737Jli3x8fNS9e3fbtNfLp5wOGTJEFSpU0LvvvquEhAT98MMP6tSpk06fPu1UWzfccIOWLFki6e853/ntXX4udqS4MTjqm3777TdFRUXpiy++0HPPPadPPvlEt99+u8aNG6eRI0cWaGvOnDlau3atEhIS9M4776hChQqKjo62m7J07NgxBQQEaObMmVq7dq3mzp0rT09P3XTTTdq7d2+BfT799NM6cOCA3nzzTb355ps6duyYOnXqdNVf4vTo0UMzZsyQ9Hf/l39Me/ToUeg2xTnnnzt3Tl27dtXx48c1d+5cJSUlKSEhQfXq1dOZM2eKjOmzzz6Th4eHbr31VoePX81ref78eXXs2FFvvfWWRo8erTVr1uipp55SYmKi/ud//sf2z7BhGOrdu7fefvtt/etf/9LKlSt18803Kzo6uljHddGiRerevbvy8vK0YMECffrppxo9erQtsXr22Wd13333SbKfTl7Y1Cpn34OXHvNly5bp3Llz6t69uzIzM2118hOR4l7bsXv3bk2fPl3z58+/4jWZnTp10uHDh8tX32yg3BgwYIBRqVIlu7KOHTsakoyvvvqqQH1JxuTJkwuU169f3xgwYIBt/bHHHjMqV65sHD582K7eSy+9ZEgydu3aVWRcHTt2NDp27GhbP3jwoCHJaN26tZGbm2srT0hIMCQZ//M//2O3fWxsrCHJyMzMdLj/vLw84+LFi8amTZsMScZPP/1kGIZh5ObmGkFBQcZNN91kV//w4cNGxYoVjfr169vKli9fbkgyPvzwQ7u627ZtMyQZ8+bNK/I5Tp482Sjq41JYjIbx9+smyXjllVfstnn++ecNSca3335rGIZhbNmyxZBkvPzyy3b1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JkyYIMMwNHz48AIXbOfm5urxxx+XYRiaMGGCrTw0NFQnTpyw+yLkwoULWrduXYH9W63WIr+hvPw8snnzZh0+fNjujn2Ozv2//vprgYubS/oNbHFiKEyXLl20e/du/fjjj3blS5culcViUefOne3KP/roI9uotiSdOXNGn376qTp06GBL3iwWS4Fz8eeff17oNJLly5fb3Xnn8OHD2rx5syk/BuvMMS3JOd9isah169b697//LX9//wLH8XJNmzYt8kL1q3kte/bsqf/+978KCAhwGH/+6ED+a1pYH1iUqKgo+fn5acGCBUXeLcmZ4+7se9BMbdq00YYNGwosrVu3VmhoqDZs2FDgovL816883fafkYtrWL9+/fTss89q0qRJ6tixo3bv3q05c+bIz8/Prt60adOUlJSkqKgojR49Wk2aNNFff/2lQ4cOafXq1VqwYIGpQ5JXEhUVpWrVqmnYsGGaPHmyKlasqGXLlhUYsq5QoYKmTp2qxx57TPfdd58GDx6s06dPa+rUqQoODra73uPBBx/UsmXL1L17d40ZM0bt2rVTxYoVdeTIEW3YsEF33XWX7r77btNjzOfl5aWXX35ZZ8+e1Y033qjNmzdr+vTpio6O1i233CJJat++vR599FENGjRI27dv16233qpKlSopPT1d3377rVq2bFnk709MmzZN06ZN01dffXXF6y5mzZqlrl276v7779fw4cN14sQJjR8/Xi1atNCgQYOKfRyAf5r27dsrISFBsbGxuuWWWzRy5EjVq1dPqampmjt3rr7//nslJCQoKirKtk2fPn00adIkPfjgg3riiSf0119/6dVXX3V4N6mWLVtq48aN+vTTTxUcHKwqVarYffmxfft2xcTE6P7771daWpomTpyoOnXq2N0lsF+/fnrkkUc0fPhw3XvvvTp8+LBeeOGFAr8f0LBhQ/n4+GjZsmVq1qyZKleurNq1a1/xC6XixFCYsWPHaunSperRo4emTZum+vXr6/PPP9e8efP0+OOPq3Hjxnb1PTw81LVrV8XFxSkvL0+zZs1SVlaW3Q+m9ezZU4mJiWratKlatWql5ORkvfjii4X2WydOnNDdd9+toUOHKjMzU5MnT5a3t7ddQlhS+SO/CxcuVJUqVeTt7a2wsDCHoyLFPed/9tlnmjdvnnr37q0GDRrIMAx99NFHOn36tLp27Vpk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37g7pDIrPj5eN954o6pUqaJatWqpd+/e2rt3r7vDKlfi4+NlsVgUGxvr7lDKtKNHj+qRRx5RQECAfH191aZNGyUnJ7s7LKDE3NnXfP311+rVq5dq164ti8WiVatWuaxtqWz0HfPnz1erVq1sPxYWGRmpNWvWuDSGS7mjL5gyZYosFovdEhQU5LL287n7/B4aGlrgOFgsFo0YMcIl7efk5OiZZ55RWFiYfHx81KBBA02bNk15eXkuaT/fmTNnFBsbq/r168vHx0dRUVHatm2bS2O4knKZXKxYsUKxsbGaOHGiduzYoQ4dOig6Otrutof4/zZt2qQRI0Zo69atSkpKUk5Ojrp166Zz5865O7RyYdu2bVq4cKFatWrl7lDKtD/++EPt27dXxYoVtWbNGu3evVsvv/yy235RGbha7u5rzp07p9atW2vOnDkuae9yZaHvqFu3rmbOnKnt27dr+/btuu2223TXXXdp165dLoshnzv7guuvv17p6em2ZefOnS5tvyyc37dt22Z3DPJ/lPP+++93SfuzZs3SggULNGfOHO3Zs0cvvPCCXnzxRb322msuaT9fTEyMkpKS9Pbbb2vnzp3q1q2bbr/9dh09etSlcRTJKIfatWtnDBs2zK6sadOmxvjx490UUfly4sQJQ5KxadMmd4dS5p05c8Zo1KiRkZSUZHTs2NEYM2aMu0Mqs5566injlltucXcYgGnKUl8jyVi5cqXL271UWek7qlWrZrz55psubdOdfcHkyZON1q1bu6w9R8ri+X3MmDFGw4YNjby8PJe016NHD2Pw4MF2Zffcc4/xyCOPuKR9wzCM8+fPGx4eHsZnn31mV966dWtj4sSJLovjSsrdyMWFCxeUnJysbt262ZV369ZNmzdvdlNU5UtmZqYkqXr16m6OpOwbMWKEevToodtvv93doZR5n3zyiSIiInT//ferVq1aatu2rd544w13hwWUCH1NQe7uO3Jzc/Xee+/p3LlzioyMdGnb7u4L9u3bp9q1ayssLEwPPvigDhw44NL2y9r5/cKFC3rnnXc0ePBgWSwWl7R5yy236KuvvtKvv/4qSfrpp5/07bffqnv37i5pX/p7alZubq68vb3tyn18fPTtt9+6LI4rKXe/0H3y5Enl5uYqMDDQrjwwMFAZGRluiqr8MAxDcXFxuuWWW9SiRQt3h1Omvffee/rxxx/L3FzGsurAgQOaP3++4uLi9PTTT+uHH37Q6NGjZbVa1b9/f3eHBziFvsaeO/uOnTt3KjIyUn/99ZcqV66slStXqnnz5i5r3919wU033aSlS5eqcePGOn78uKZPn66oqCjt2rVLAQEBLomhrJ3fV61apdOnT2vgwIEua/Opp55SZmammjZtKg8PD+Xm5ur555/XQw895LIYqlSposjISD333HNq1qyZAgMDtXz5cn3//fdq1KiRy+K4knKXXOS7PFM1DMNl2Wt5NnLkSP38889lKsMti9LS0jRmzBh98cUXBb4hgGN5eXmKiIjQjBkzJElt27bVrl27NH/+fJILlFv0NX9zZ9/RpEkTpaSk6PTp0/rwww81YMAAbdq0ySUJRlnoC6Kjo21/t2zZUpGRkWrYsKHeeustxcXFuSSGsnZ+X7RokaKjo1W7dm2XtblixQq98847evfdd3X99dcrJSVFsbGxql27tgYMGOCyON5++20NHjxYderUkYeHh2644Qb17dtXP/74o8tiuJJyNy2qRo0a8vDwKPDN0YkTJwp8wwR7o0aN0ieffKINGzaobt267g6nTEtOTtaJEycUHh4uT09PeXp6atOmTXr11Vfl6emp3Nxcd4dY5gQHBxfo7Js1a8aNFlAu0df8f+7uO7y8vHTdddcpIiJC8fHxat26tV555RWXtF0W+4JKlSqpZcuW2rdvn8vaLEvn98OHD+vLL79UTEyMS9t94oknNH78eD344INq2bKl+vXrp7Fjxyo+Pt6lcTRs2FCbNm3S2bNnlZaWph9++EEXL15UWFiYS+MoSrlLLry8vBQeHm67S0C+pKQkRUVFuSmqss0wDI0cOVIfffSR1q9fX6begGVVly5dtHPnTqWkpNiWiIgIPfzww0pJSZGHh4e7Qyxz2rdvX+A2lb/++qvq16/vpoiAkqOvKbt9h2EYys7OdklbZbEvyM7O1p49exQcHOyyNsvS+X3JkiWqVauWevTo4dJ2z58/rwoV7P9t9vDwcPmtaPNVqlRJwcHB+uOPP7Ru3TrdddddbonDkXI5LSouLk79+vVTRESEIiMjtXDhQqWmpmrYsGHuDq1MGjFihN599119/PHHqlKliu2bOD8/P/n4+Lg5urKpSpUqBeYVV6pUSQEBAVyrUoixY8cqKipKM2bM0AMPPKAffvhBCxcu1MKFC90dGlAi7u5rzp49q/3799vWDx48qJSUFFWvXl316tUr9fbLQt/x9NNPKzo6WiEhITpz5ozee+89bdy4UWvXrnVJ+2WhLxg3bpx69eqlevXq6cSJE5o+fbqysrJcOhWnrJzf8/LytGTJEg0YMECenq79F7ZXr156/vnnVa9ePV1//fXasWOHZs+ercGDB7s0jnXr1skwDDVp0kT79+/XE088oSZNmmjQoEEujaNI7rtR1dWZO3euUb9+fcPLy8u44YYb3H5rvLJMksNlyZIl7g6tXOFWtFf26aefGi1atDCsVqvRtGlTY+HChe4OCbgq7uxrNmzY4PDcPWDAAJe0Xxb6jsGDB9uOf82aNY0uXboYX3zxhcvad8TVfUGfPn2M4OBgo2LFikbt2rWNe+65x9i1a5fL2s9XFs7v69atMyQZe/fudXnbWVlZxpgxY4x69eoZ3t7eRoMGDYyJEyca2dnZLo1jxYoVRoMGDQwvLy8jKCjIGDFihHH69GmXxnAlFsMwDFcnNAAAAACuPeXumgsAAAAAZRPJBQAAAABTkFwAAAAAMAXJBQAAAABTkFwAAAAAMAXJBQAAAABTkFwAAAAAMAXJBQAAAABTkFwAAAD8H4vFolWrVhW7/saNG2WxWHT69GlT4wgNDVVCQoKp+wRcgeQCAABc0wYOHCiLxSKLxaKKFSsqMDBQXbt21eLFi5WXl2dXNz09XdHR0cXed1RUlNLT0+Xn5ydJSkxMlL+/v5nhA+UKyQUAALjm3XnnnUpPT9ehQ4e0Zs0ade7cWWPGjFHPnj2Vk5NjqxcUFCSr1Vrs/Xp5eSkoKEgWi6U0wgbKHZILAABwzbNarQoKClKdOnV0ww036Omnn9bHH3+sNWvWKDEx0Vbv8mlRmzdvVps2beTt7a2IiAitWrVKFotFKSkpkuynRW3cuFGDBg1SZmambaRkypQphcb0ySefKCIiQt7e3qpRo4buueeeQuvOnj1bLVu2VKVKlRQSEqLhw4fr7NmztscPHz6sXr16qVq1aqpUqZKuv/56rV69WpL0xx9/6OGHH1bNmjXl4+OjRo0aacmSJSU6jsCVeLo7AAAAAHe47bbb1Lp1a3300UeKiYkp8PiZM2fUq1cvde/eXe+++64OHz6s2NjYQvcXFRWlhIQETZo0SXv37pUkVa5c2WHdzz//XPfcc48mTpyot99+WxcuXNDnn39e6L4rVKigV199VaGhoTp48KCGDx+uJ598UvPmzZMkjRgxQhcuXNDXX3+tSpUqaffu3ba2n332We3evVtr1qxRjRo1tH//fv3555/FPUyAU0guAADAP1bTpk31888/O3xs2bJlslgseuONN+Tt7a3mzZvr6NGjGjp0qMP6Xl5e8vPzk8ViUVBQUJHtPv/883rwwQc1depUW1nr1q0LrX9pUhMWFqbnnntOjz/+uC25SE1N1b333quWLVtKkho0aGCrn5qaqrZt2yoiIkLS3xeLA6WFaVEAAOAfyzCMQq+X2Lt3r1q1aiVvb29bWbt27UxpNyUlRV26dCl2/Q0bNqhr166qU6eOqlSpov79++vUqVM6d+6cJGn06NGaPn262rdvr8mTJ9slTI8//rjee+89tWnTRk8++aQ2b95synMAHCG5AAAA/1h79uxRWFiYw8ccJR6GYZjSro+PT7HrHj58WN27d1eLFi304YcfKjk5WXPnzpUkXbx4UZIUExOjAwcOqF+/ftq5c6ciIiL02muvSZKio6NtU7qOHTumLl26aNy4caY8D+ByJBcAAOAfaf369dq5c6fuvfdeh4/nT5nKzs62lW3fvr3IfXp5eSk3N/eKbbdq1UpfffVVseLcvn27cnJy9PLLL+vmm29W48aNdezYsQL1QkJCNGzYMH300Uf617/+pTfeeMP2WM2aNTVw4EC98847SkhI0MKFC4vVNuAskgsAAHDNy87OVkZGho4ePaoff/xRM2bM0F133aWePXuqf//+Drfp27ev8vLy9Oijj2rPnj1at26dXnrpJUkqdCpVaGiozp49q6+++konT57U+fPnHdabPHmyli9frsmTJ2vPnj3auXOnXnjhBYd1GzZsqJycHL322ms6cOCA3n77bS1YsMCuTmxsrNatW6eDBw/qxx9/1Pr169WsWTNJ0qRJk/Txxx9r//792rVrlz777DPbY4DZSC4AAMA1b+3atQoODlZoaKjuvPNObdiwQa+++qo+/vhjeXh4ONymatWq+vTTT5WSkqI2bdpo4sSJmjRpkiTZXYdxqaioKA0bNkx9+vRRzZo1C00YOnXqpPfff1+ffPKJ2rRpo9tuu03ff/+9w7pt2rTR7NmzNWvWLLVo0ULLli1TfHy8XZ3c3FyNGDFCzZo105133qkmTZrYLvb28vLShAkT1KpVK916663y8PDQe++9V6zjBjjLYpg1eRAAAOAat2zZMttvWThz3QTwT8GtaAEAAAqxdOlSNWjQQHXq1NFPP/2kp556Sg888ACJBVAIkgsAAIBCZGRkaNKkScrIyFBwcLDuv/9+Pf/88+4OCyizmBYFAAAAwBRc0A0AAADAFCQXAAAAAExBcgEAAADAFCQXAAAAAExBcgEAAADAFCQXAAAAAExBcgEAAADAFCQXAAAAAEzx/wBxwhxeH/VOfgAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "image/png": "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bJgSEhI0fPjwMtc1b948ffnll5o3b55ee+01/fe//1WfPn00bNgw/fLLL3r99df17LPP6pNPPlFsbKzdsgcOHFDPnj21ePFirV+/XnFxcfq///s/9enTx67fokWL9NBDD6l169Z677339OSTT2ratGlF7kMpKCjQ7bffrlmzZql///766KOPNGvWLCUnJ6tLly76/fffnX59pa1R+vPayZ49e6pbt25avXq1Ro8erVdeeUX9+vWz6/fwww8rLi5Ot9xyi1avXq358+drz549io6O1vHjx0usp/BgeKl7cFJSUnTu3Dk1btxYjzzyiGrWrCkfHx9FRkbqo48+cno7AH8X+fn52rRpkyIjI4v9VDssLEzt27fXxo0blZ+f79T6t23bJj8/P/Xs2VPbtm3Ttm3bilx2OmzYMFWqVElvv/22EhMT9fXXX6tLly46ffq0U2Nde+21WrJkiaQ/z2QWjnfxvtiR0tbg6Nj0yy+/KDo6Wh9//LGefvpprVmzRrfccoseffRRh5eSzZ07V+vXr1diYqLeeustVapUSTExMXaXDR87dkyBgYGaNWuW1q9fr3nz5snb21s33HCD9u/fX2SdTzzxhA4ePKjXXntNr732mo4dO6YuXbpc9oc4vXr10syZMyX9efwr3Ka9evUqdpnS7PPPnTun7t276/jx45o3b56Sk5OVmJio+vXr68yZMyXW9OGHH8rLy0s33XSTw59fznt5/vx5de7cWW+88YbGjh2rdevW6fHHH1dSUpL+8Y9/2P4YNgxDffv21Ztvvql//vOfWrVqlW688UbFxMSUarsuXrxYPXv2VEFBgRYuXKgPPvhAY8eOtQWrp556Snfffbck2bZ5SZdWOfs7+NdtvmzZMp07d049e/ZUVlaWrU9hECntvR179+7VjBkztGDBgkvek9mlSxcdOXJE33//fanW7REMVBiDBg0yqlSpYtfWuXNnQ5Lx6aefFukvyZgyZUqR9gYNGhiDBg2yzT/88MNG1apVjSNHjtj1e/755w1Jxp49e0qsq3Pnzkbnzp1t84cOHTIkGW3atDHy8/Nt7YmJiYYk4x//+Ifd8nFxcYYkIysry+H6CwoKjAsXLhhbtmwxJBnffvutYRiGkZ+fbwQHBxs33HCDXf8jR44YlStXNho0aGBrW758uSHJePfdd+367tixw5BkzJ8/v8TXOGXKFKOk/y7F1WgYf75vkowXX3zRbplnnnnGkGR88cUXhmEYxrZt2wxJxgsvvGDXLz093fDz8zMee+wxu3X+9fUZhmFMmzbN8PLyMjZv3lziayncFtWrVzc6dOhgrFmzxvjwww+Nrl27GhaLxVi/fn2JywN/V5mZmYYk47777iuxX79+/QxJxvHjxw3DcPz/1TAc71eqVKlit38utGTJEkOScccdd9i1f/nll4YkY8aMGba2i/fxhS7eVxfu/5YsWVLi6ylLDcUdmyZMmGBIMr766iu79kceecSwWCzG/v37DcP433EkNDTU+P333239srOzjVq1ahm33HJLsXXm5eUZubm5RuPGjY3x48fb2jdt2mRIMq699lqjoKDA1n748GGjcuXKRmxsrK3N0Xtz8fYzjKLH2XfeeceQZGzatKlIXRf/HpR2n79z505DkrF69epiX3NxYmJijGbNmhVpN+O9TEhIMCpVqmTs2LHDrv0///mPIclYu3atYRiGsW7duhKPgX/dfoV1HTp0yDAMwzhz5oxRvXp1o2PHjnbv2cVGjRpV7DH64v8Pzv4OtmrVysjLy7P1+/rrrw1JxvLly21thw8fNry8vIyhQ4cWW2Oh/Px844YbbjDuv/9+W1vnzp2Na665xmH/AwcOGJKMBQsWXHLdnoIzF1eAmjVr6uabby7z8h9++KG6du2q0NBQ5eXl2abCTxW2bNlSpvX27NlTlSr971esefPmklTkU5zC9rS0NFvbwYMH1b9/fwUHB8vLy0uVK1dW586dJUn79u2TJO3fv1+ZmZm699577dZXv379Itc6f/jhh6pRo4b69Olj9xrbtm2r4ODgMj1xqzQ1/tUDDzxgN9+/f39J0qZNm2w1WiwWPfjgg3Y1BgcHq02bNpescfLkycrLy7PVUJzC074+Pj5at26d+vTpo169eunDDz9USEiInn766VK9fgCOGf//E9uyPmGuJBfvR6Kjo9WgQQPbfsQVSluDo2PTxo0b1aJFC11//fV27YMHD5ZhGEUeWHLnnXfK19fXNl+tWjX16dNHn332me3MUF5enmbOnKkWLVrIx8dH3t7e8vHx0YEDBxzui/v372/33jRo0EDR0dEu3YZS6ff5V199tWrWrKnHH39cCxcu1N69e0s9xrFjx1S3bt1if3457+WHH36oli1bqm3btnb133rrrXZn0QvXVdwxsCRbt25Vdna2Ro4cadr/J2d/B3v16iUvLy/bfOvWrSVJR44csbU1aNBAeXl5Wrx48SXHnzNnjg4cOFDqp0AVvn9Hjx4tVX9PwA3dVwBnn6pwsePHj+uDDz5Q5cqVHf7c0U1GpVGrVi27eR8fnxLb//jjD0l/PsmoU6dO8vX11YwZM9SkSRP5+/srPT1dd955p+0SplOnTkmSw6csBAUF6dChQ7b548eP6/Tp07axLubsayxtjYW8vb2LPOkhODjY7nUcP35chmE4fD2STLs/orCO6OhoVatWzdbu7++vzp07u+wxmEBFU7t2bfn7+9vtWxw5fPiw/P39i+zrzFC437i4rXA/4gqlrcHRsenUqVMO7z8JDQ21/bw0Y+Xm5urs2bMKCAhQfHy85s2bp8cff1ydO3dWzZo1ValSJcXGxjq85LW4dX777bdF2stTaff5AQEB2rJli5555hk98cQT+u233xQSEqLhw4frySefLPbYLUm///57seuXLu+9PH78uH788cdL/u1w6tSpEo+BJSm8J7I0N9eXlrO/gxfXbbVaJalMl1OnpaVp8uTJmjVrlnx8fGyXn+Xl5amgoECnT5+W1WqVn5+fbZnCcF2W8dyFcHEFKC7NW61W5eTkFGm/+D9O7dq11bp162JvKir8D+cqGzdu1LFjx7R582a7T+Evvga08D+8o3sRMjMz7eZr166twMBArV+/3uGYf/0j28waC+Xl5enUqVN2O6nCGgvbateuLYvFos8//9y28/orR21lUfipiyOGYdidbQLwP15eXuratavWr1+vn3/+2eEfPD///LNSUlIUExNj+7TT19fX4b64LB/cXLxvK2y7+uqrbfMljVe7dm2nxyxLDZLjY1NgYKAyMjKKtB87dkySitRX3Fg+Pj62a9XfeustDRw40Ha/Q6GTJ0+qRo0apa7f1Y/6dGaf36pVK61YsUKGYei7775TUlKSpk+fLj8/P02YMKHEMX799ddif34572Xt2rXl5+en119/vdixpT/f85KOgSUpfHLUpW5cd4azv4NmOnjwoH7//XeNGzfO4WOJa9asqXHjxtmd1Sh8/8qzLrPxV8QVLDw8XN99951d28aNG3X27Fm7tt69e+v7779Xo0aNFBkZWWRydbgo3IldvLN95ZVX7OabNm2q4OBg/d///Z9de1pamrZu3WrX1rt3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lsViUdOmTbV79279+9//tv2xffPNN+vRRx+19R84cKD69++vuLg4SVLjxo310ksvqXPnzlqwYIHS0tK0bt06bd++XTfccIMkafHixWrevHmxNbz99tv65ZdftGPHDtWqVUuSdPXVV9t+XrVqVXl7e5d4GdSyZcv0+++/a+nSpapSpYokae7cuerTp49mz56toKAgSVLNmjU1d+5ceXl5qVmzZurVq5c+/fRTwgVwBeCyKAAA3OzGG2+U5S9Pm4qKitKBAweUn58vSYqMjLTrn5KSoqSkJFWtWtU23XrrrSooKNChQ4e0b98+eXt72y3XrFkz1ahRo9gaUlNT1a5dO1uwKIt9+/apTZs2tmAhSR06dFBBQYH2799va7vmmmvk5eVlmw8JCSnxrAqAioMzFwAAeLi//rEuSQUFBXr44Yc1duzYIn3r169v+0Pe4sTjcf38/C6vSEmGYRQ75l/bK1euXORnBQUFlz0+APfjzAUAAG62ffv2IvONGze2+3T/r6699lrt2bNHV199dZHJx8dHzZs3V15ennbu3GlbZv/+/SXeI9e6dWulpqbq119/dfhzHx8f25mU4rRo0UKpqal2N5Z/+eWXqlSpkpo0aVLisgCuDIQLAADcLD09XfHx8dq/f7+WL1+ul19+WePGjSu2/+OPP65t27Zp1KhRSk1N1YEDB7RmzRqNGTNGktS0aVPddtttGj58uL766iulpKQoNja2xLMT999/v4KDg9W3b199+eWXOnjwoN59911t27ZN0p9PrTp06JBSU1N18uRJ5eTkFFnHAw88IF9fXw0aNEjff/+9Nm3apDFjxmjAgAG2+y0AXNkIFwCAK5thuG4qo4EDB+r333/X9ddfr1GjRmnMmDF66KGHiu3funVrbdmyRQcOHFCnTp3Url07PfXUUwoJCbH1WbJkicLCwtS5c2fdeeedeuihh1S3bt1i1+nj46OPP/5YdevWVc+ePdWqVSvNmjXLdvbkrrvu0m233aauXbuqTp06Wr58eZF1+Pv7a8OGDfr111913XXX6e6771a3bt00d+7cMm8bABWLxTAuY29YBtnZ2QoICFBWVpaqV6/uyqErtPDwcHeXUCxPfRTt5s2b3V1CsTz50cIoPfZnrlXS9v7jjz906NAhRUREyNfX100Vlk2XLl3Utm1bJSYmursUj1WR319PFj7hI5eM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AAAAQLngsigAAAAApiBcAAAAADAF4QIAAACAKQgXAAAAAExRYcPF/PnzFRERIV9fX7Vv316ff/65u0vyWAkJCbruuutUrVo11a1bV3379tX+/fvdXVaFkpCQIIvFori4OHeX4tGOHj2qBx98UIGBgfL391fbtm2VkpLi7rKAMnPnseazzz5Tnz59FBoaKovFotWrV7tsbMkzjh0LFixQ69atbV8WFhUVpXXr1rm0hr9yx7Fg6tSpslgsdlNwcLDLxi/k7v17eHh4ke1gsVg0atQol4yfl5enJ598UhEREfLz81PDhg01ffp0FRQUuGT8QmfOnFFcXJwaNGggPz8/RUdHa8eOHS6t4VIqZLhYuXKl4uLiNGnSJO3atUudOnVSTEyM3WMP8T9btmzRqFGjtH37diUnJysvL089evTQuXPn3F1ahbBjxw4tWrRIrVu3dncpHu23335Thw4dVLlyZa1bt0579+7VCy+84LZvVAYul7uPNefOnVObNm00d+5cl4x3MU84dlx11VWaNWuWdu7cqZ07d+rmm2/W7bffrj179rishkLuPBZcc801ysjIsE27d+926fiesH/fsWOH3TYo/FLOe+65xyXjz549WwsXLtTcuXO1b98+Pfvss3ruuef08ssvu2T8QrGxsUpOTtabb76p3bt3q0ePHrrlllt09OhRl9ZRIqMCuv76640RI0bYtTVr1syYMGGCmyqqWE6cOGFIMrZs2eLuUjzemTNnjMaNGxvJyclG586djXHjxrm7JI/1+OOPGx07dnR3GYBpPOlYI8lYtWqVy8f9K085dtSsWdN47bXXXDqmO48FU6ZMMdq0aeOy8RzxxP37uHHjjEaNGhkFBQUuGa9Xr17G0KFD7druvPNO48EHH3TJ+IZhGOfPnze8vLyMDz/80K69TZs2xqRJk1xWx6VUuDMXubm5SklJUY8ePezae/Tooa1bt7qpqoolKytLklSrVi03V+L5Ro0apV69eumWW25xdykeb82aNYqMjNQ999yjunXrql27dnr11VfdXRZQJhxrinL3sSM/P18rVqzQuXPnFBUV5dKx3X0sOHDggEJDQxUREaH77rtPBw8edOn4nrZ/z83N1VtvvaWhQ4fKYrG4ZMyOHTvq008/1Q8//CBJ+vbbb/XFF1+oZ8+eLhlf+vPSrPz8fPn6+tq1+/n56YsvvnBZHZdS4b6h++TJk8rPz1dQUJBde1BQkDIzM91UVcVhGIbi4+PVsWNHtWzZ0t3leLQVK1bom2++8bhrGT3VwYMHtWDBAsXHx+uJJ57Q119/rbFjx8pqtWrgwIHuLg9wCscae+48duzevVtRUVH6448/VLVqVa1atUotWrRw2fjuPhbccMMNWrp0qZo0aaLjx49rxowZio6O1p49exQYGOiSGjxt/7569WqdPn1agwcPdtmYjz/+uLKystSsWTN5eXkpPz9fzzzzjO6//36X1VCtWjVFRUXp6aefVvPmzRUUFKTly5frq6++UuPGjV1Wx6VUuHBR6OKkahiGy9JrRTZ69Gh99913HpVwPVF6errGjRunjz/+uMgnBHCsoKBAkZGRmjlzpiSpXbt22rNnjxYsWEC4QIXFseZP7jx2NG3aVKmpqTp9+rTeffddDRo0SFu2bHFJwPCEY0FMTIzt361atVJUVJQaNWqkN954Q/Hx8S6pwdP274sXL1ZMTIxCQ0NdNubKlSv11ltv6e2339Y111yj1NRUxcXFKTQ0VIMGDXJZHW+++aaGDh2qevXqycvLS9dee6369++vb775xmU1XEqFuyyqdu3a8vLyKvLJ0YkTJ4p8wgR7Y8aM0Zo1a7Rp0yZdddVV7i7Ho6WkpOjEiRNq3769vL295e3trS1btuill16St7e38vPz3V2ixwkJCSlysG/evDkPWkCFxLHmf9x97PDx8dHVV1+tyMhIJSQkqE2bNnrxxRddMrYnHguqVKmiVq1a6cCBAy4b05P270eOHNEnn3yi2NhYl477r3/9SxMmTNB9992nVq1aacCAARo/frwSEhJcWkejRo20ZcsWnT17Vunp6fr666914cIFRUREuLSOklS4cOHj46P27dvbnhJQKDk5WdHR0W6qyrMZhqHRo0frvffe08aNGz3qF9BTdevWTbt371ZqaqptioyM1AMPPKDU1FR5eXm5u0SP06FDhyKPqfzhhx/UoEEDN1UElB3HGs89dhiGoZycHJeM5YnHgpycHO3bt08hISEuG9OT9u9LlixR3bp11atXL5eOe/78eVWqZP9ns5eXl8sfRVuoSpUqCgkJ0W+//aYNGzbo9ttvd0sdjlTIy6Li4+M1YMAARUZGKioqSosWLVJaWppGjBjh7tI80qhRo/T222/r/fffV7Vq1WyfxAUEBMjPz8/N1XmmatWqFbmuuEqVKgoMDORelWKMHz9e0dHRmjlzpu699159/fXXWrRokRYtWuTu0oAycfex5uzZs/rxxx9t84cOHVJqaqpq1aql+vXrl/v4nnDseOKJJxQTE6OwsDCdOXNGK1as0ObNm7V+/XqXjO8Jx4JHH31Uffr0Uf369XXixAnNmDFD2dnZLr0Ux1P27wUFBVqyZIkGDRokb2/X/gnbp08fPfPMM6pfv76uueYa7dq1S3PmzNHQoUNdWseGDRtkGIaaNm2qH3/8Uf/617/UtGlTDRkyxKV1lMh9D6q6PPPmzTMaNGhg+Pj4GNdee63bH43nySQ5nJYsWeLu0ioUHkV7aR988IHRsmVLw2q1Gs2aNTMWLVrk7pKAy+LOY82mTZsc7rsHDRrkkvE94dgxdOhQ2/avU6eO0a1bN+Pjjz922fiOuPpY0K9fPyMkJMSoXLmyERoaatx5553Gnj17XDZ+IU/Yv2/YsMGQZOzfv9/lY2dnZxvjxo0z6tevb/j6+hoNGzY0Jk2aZOTk5Li0jpUrVxoNGzY0fHx8jODgYGPUqFHG6dOnXVrDpVgMwzBcHWgAAAAAXHkq3D0XAAAAADwT4QIAAACAKQgXAAAAAExBuAAAAABgCsIFAAAAAFMQLgAAAACYgnABAAAAwBSECwAAAACmIFwAAAD8fxaLRatXry51/82bN8tisej06dOm1hEeHq7ExERT1wm4AuECAABc0QYPHiyLxSKLxaLKlSsrKChI3bt31+uvv66CggK7vhkZGYqJiSn1uqOjo5WRkaGAgABJUlJSkmrUqGFm+UCFQrgAAABXvNtuu00ZGRk6fPiw1q1bp65du2rcuHHq3bu38vLybP2Cg4NltVpLvV4fHx8FBwfLYrGUR9lAhUO4AAAAVzyr1arg4GDVq1dP1157rZ544gm9//77WrdunZKSkmz9Lr4sauvWrWrbtq18fX0VGRmp1atXy2KxKDU1VZL9ZVGbN2/WkCFDlJWVZTtTMnXq1GJrWrNmjSIjI+Xr66vatWvrzjvvLLbvnDlz1KpVK1WpUkVhYWEaOXKkzp49a/v5kSNH1KdPH9WsWVNVqlTRNddco7Vr10qSfvvtNz3wwAOqU6eO/Pz81LhxYy1ZsqRM2xG4FG93FwAAAOAON998s9q0aaP33ntPsbGxRX5+5swZ9enTRz179tTbb7+tI0eOKC4urtj1RUdHKzExUZMnT9b+/fslSVWrVnXY96OPPtKdd96pSZMm6c0331Rubq4++uijYtddqVIlvfTSSwoPD9ehQ4c0cuRIPfbYY5o/f74kadSoUcrNzdVnn32mKlWqaO/evbaxn3rqKe3du1fr1q1T7dq19eOPP+r3338v7WYCnEK4AAAAf1vNmjXTd9995/Bny5Ytk8Vi0auvvipfX1+1aNFCR48e1fDhwx329/HxUUBAgCwWi4KDg0sc95lnntF9992nadOm2dratGlTbP+/hpqIiAg9/fTTeuSRR2zhIi0tTXfddZdatWolSWrYsKGtf1pamtq1a6fIyEhJf94sDpQXLosCAAB/W4ZhFHu/xP79+9W6dWv5+vra2q6//npTxk1NTVW3bt1K3X/Tpk3q3r276tWrp2rVqmngwIE6deqUzp07J0kaO3asZsyYoQ4dOmjKlCl2gemRRx7RihUr1LZtWz322GPaunWrKa8BcIRwAQAA/rb27duniIgIhz9zFDwMwzBlXD8/v1L3PXLkiHr27KmWLVvq3XffVUpKiubNmydJunDhgiQpNjZWBw8e1IABA7R7925FRkbq5ZdfliTFxMTYLuk6duyYunXrpkcffdSU1wFcjHABAAD+ljZu3Kjdu3frrrvucvjzwkumcnJybG07d+4scZ0+Pj7Kz8+/5NitW7fWp59+Wqo6d+7cqby8PL3wwgu68cYb1aRJEx07dqxIv7CwMI0YMULvvfee/vnPf+rVV1+1/axOnToaPHiw3nrrLSUmJmrRokWlGhtwFuECAABc8XJycpSZmamjR4/qm2++0cyZM3X77berd+/eGjhwoMNl+vfvr4KCAj300EPat2+fNmzYoOeff16Sir2UKjw8XGfPntWnn36qkydP6vz58w77TZkyRcuXL9eUKVO0b98+7d69W88++6zDvo0aNVJeXp5efvllHTx4UG+++aYWLlxo1ycuLk4bNmzQoUOH9M0332jjxo1q3ry5JGny5Ml6//339eOPP2rPnj368MMPbT8DzEa4AAAAV7z169crJCRE4eHhuu2227Rp0ya99NJLev/99+Xl5eVwmerVq+uDDz5Qamqq2rZtq0mTJmny5MmSZHcfxl9FR0drxIgR6tevn+rUqVNsYOjSpYveeecdrVmzRm3bttXNN9+sr776ymHftm3bas6cOZo9e7ZatmypZcuWKSEhwa5Pfn6+Ro0apebNm+u2225T06ZNbTd7+/j4aOLEiWrdurVuuukmeXl5acWKFaXaboCzLIZZFw8CAABc4ZYtW2b7Lgtn7psA/i54FC0AAEAxli5dqoYNG6pevXr69ttv9fjjj+vee+8lWADFIFwAAAAUIzMzU5MnT1ZmZqZCQkJ0zz336JlnnnF3WYDH4rIoAAAAAKbghm4AAAAApiBcAAAAADAF4QIAAACAKQgXAAAAAExBuAAAAABgCsIFAAAAAFMQLgAAAACYgnABAAAAwBT/D5U1CL5TigE8AAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for idx, _ in worst_errors[:5]: # Show top 5 worst errors\n", + " plot_prediction(model, sample_idx=idx)" ] }, { @@ -812,6 +1293,238 @@ "# Your code here" ] }, + { + "cell_type": "code", + "execution_count": 112, + "metadata": {}, + "outputs": [], + "source": [ + "# 1. Hyperparameter Grid\n", + "\n", + "learning_rates = [0.001, 0.005, 0.01]\n", + "hidden_sizes = [10, 32, 64]\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 113, + "metadata": {}, + "outputs": [], + "source": [ + "# 2. Two-Layer NeuralNet Class Implementation\n", + "\n", + "class NeuralNet():\n", + " \"\"\"MLP with 1 hidden layer with a sigmoid activation\"\"\"\n", + "\n", + " def __init__(self, input_size, hidden_size, output_size):\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", + " 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", + " self.Z_h = np.dot(X, self.W_h) + self.b_h\n", + " return sigmoid(self.Z_h)\n", + "\n", + " def forward_output(self, H):\n", + " self.Z_o = np.dot(H, self.W_o) + self.b_o\n", + " return sigmoid(self.Z_o)\n", + "\n", + " def forward(self, X):\n", + " self.H = self.forward_hidden(X)\n", + " self.Y = self.forward_output(self.H)\n", + " return self.Y\n", + "\n", + " def loss(self, X, y):\n", + " y = y.astype(int)\n", + " y_onehot = one_hot(self.output_size, y)\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)\n", + "\n", + " def grad_loss(self, X, y_true):\n", + " y_true = one_hot(self.output_size, y_true)\n", + " y_pred = self.forward(X)\n", + "\n", + " # Output layer error\n", + " error_o = y_pred - y_true # shape: (batch_size, output_size)\n", + " grad_W_o = np.dot(self.H.T, error_o)\n", + " grad_b_o = np.sum(error_o, axis=0)\n", + "\n", + " # Hidden layer error\n", + " error_h = np.dot(error_o, self.W_o.T) * dsigmoid(self.Z_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", + " if x.ndim == 1:\n", + " x = x[np.newaxis, :]\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 X.ndim == 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 = self.predict(X)\n", + " return np.mean(y_preds == y)" + ] + }, + { + "cell_type": "code", + "execution_count": 114, + "metadata": {}, + "outputs": [], + "source": [ + "class TwoLayerNet():\n", + " def __init__(self, input_size, hidden1_size, hidden2_size, output_size):\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", + "\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", + "\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", + " def forward(self, X):\n", + " self.Z1 = np.dot(X, self.W1) + self.b1\n", + " self.A1 = sigmoid(self.Z1)\n", + "\n", + " self.Z2 = np.dot(self.A1, self.W2) + self.b2\n", + " self.A2 = sigmoid(self.Z2)\n", + " \n", + " self.Z3 = np.dot(self.A2, self.W3) + self.b3\n", + " return sigmoid(self.Z3)\n", + "\n", + " def loss(self, X, y):\n", + " y = y.astype(int)\n", + " y_onehot = one_hot(self.b3.shape[0], y)\n", + " y_pred = self.forward(X)\n", + " return nll(y_onehot, y_pred)\n", + "\n", + " def accuracy(self, X, y):\n", + " y_pred = np.argmax(self.forward(X), axis=1)\n", + " return np.mean(y_pred == y)\n", + "\n", + " def train(self, x, y, lr):\n", + " x = x[np.newaxis, :]\n", + " y_onehot = one_hot(self.b3.shape[0], y)\n", + " y_pred = self.forward(x)\n", + "\n", + " error3 = y_pred - y_onehot\n", + " grad_W3 = np.dot(self.A2.T, error3)\n", + " grad_b3 = np.sum(error3, axis=0)\n", + "\n", + " error2 = np.dot(error3, self.W3.T) * dsigmoid(self.Z2)\n", + " grad_W2 = np.dot(self.A1.T, error2)\n", + " grad_b2 = np.sum(error2, axis=0)\n", + "\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", + " self.W3 -= lr * grad_W3\n", + " self.b3 -= lr * grad_b3\n", + " self.W2 -= lr * grad_W2\n", + " self.b2 -= lr * grad_b2\n", + " self.W1 -= lr * grad_W1\n", + " self.b1 -= lr * grad_b1" + ] + }, + { + "cell_type": "code", + "execution_count": 116, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "LR=0.001, H1=32, H2=32 → Test Acc: 0.2481\n", + "LR=0.001, H1=32, H2=64 → Test Acc: 0.2185\n", + "LR=0.001, H1=32, H2=128 → Test Acc: 0.3556\n", + "LR=0.001, H1=64, H2=32 → Test Acc: 0.4148\n", + "LR=0.001, H1=64, H2=64 → Test Acc: 0.4556\n", + "LR=0.001, H1=64, H2=128 → Test Acc: 0.7481\n", + "LR=0.001, H1=128, H2=32 → Test Acc: 0.5926\n", + "LR=0.001, H1=128, H2=64 → Test Acc: 0.7074\n", + "LR=0.001, H1=128, H2=128 → Test Acc: 0.8593\n", + "LR=0.005, H1=32, H2=32 → Test Acc: 0.8889\n", + "LR=0.005, H1=32, H2=64 → Test Acc: 0.9222\n", + "LR=0.005, H1=32, H2=128 → Test Acc: 0.9444\n", + "LR=0.005, H1=64, H2=32 → Test Acc: 0.9407\n", + "LR=0.005, H1=64, H2=64 → Test Acc: 0.9593\n", + "LR=0.005, H1=64, H2=128 → Test Acc: 0.9593\n", + "LR=0.005, H1=128, H2=32 → Test Acc: 0.9704\n", + "LR=0.005, H1=128, H2=64 → Test Acc: 0.9667\n", + "LR=0.005, H1=128, H2=128 → Test Acc: 0.9704\n", + "LR=0.01, H1=32, H2=32 → Test Acc: 0.9185\n", + "LR=0.01, H1=32, H2=64 → Test Acc: 0.9407\n", + "LR=0.01, H1=32, H2=128 → Test Acc: 0.9481\n", + "LR=0.01, H1=64, H2=32 → Test Acc: 0.9667\n", + "LR=0.01, H1=64, H2=64 → Test Acc: 0.9741\n", + "LR=0.01, H1=64, H2=128 → Test Acc: 0.9593\n", + "LR=0.01, H1=128, H2=32 → Test Acc: 0.9667\n", + "LR=0.01, H1=128, H2=64 → Test Acc: 0.9704\n", + "LR=0.01, H1=128, H2=128 → Test Acc: 0.9741\n", + "\n", + " Best Test Accuracy: 0.9741 with LR=0.01, H1=64, H2=64\n" + ] + } + ], + "source": [ + "best_acc = 0\n", + "best_config = None\n", + "\n", + "for lr in [0.001, 0.005, 0.01]:\n", + " for h1 in [32, 64, 128]:\n", + " for h2 in [32, 64, 128]:\n", + " model = TwoLayerNet(input_size=n_features, hidden1_size=h1, hidden2_size=h2, output_size=n_classes)\n", + " for epoch in range(15):\n", + " for x, y in zip(X_train, y_train):\n", + " model.train(x, y, lr)\n", + " acc = model.accuracy(X_test, y_test)\n", + " print(f\"LR={lr}, H1={h1}, H2={h2} → Test Acc: {acc:.4f}\")\n", + " if acc > best_acc:\n", + " best_acc = acc\n", + " best_config = (lr, h1, h2)\n", + "\n", + "print(f\"\\n Best Test Accuracy: {best_acc:.4f} with LR={best_config[0]}, H1={best_config[1]}, H2={best_config[2]}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + " # Best Test Accuracy: 0.9741 with LR=0.01, H1=64, H2=64" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "code", "execution_count": null, @@ -822,7 +1535,7 @@ ], "metadata": { "kernelspec": { - "display_name": ".venv", + "display_name": "dsi_participant", "language": "python", "name": "python3" }, @@ -836,7 +1549,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.12" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/01_materials/labs/lab_3.ipynb b/01_materials/labs/lab_3.ipynb index 7ac8da00..4bd8f4ee 100644 --- a/01_materials/labs/lab_3.ipynb +++ b/01_materials/labs/lab_3.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -52,9 +52,141 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
user_iditem_idratingtimestamp
01962423881250949
11863023891717742
2223771878887116
3244512880606923
41663461886397596
...............
999958804763880175444
999967162045879795543
9999727610901874795795
99998132252882399156
99999122033879959583
\n", + "

100000 rows × 4 columns

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

1682 rows × 5 columns

\n", + "
" + ], + "text/plain": [ + " item_id title release_date \\\n", + "0 1 Toy Story (1995) 01-Jan-1995 \n", + "1 2 GoldenEye (1995) 01-Jan-1995 \n", + "2 3 Four Rooms (1995) 01-Jan-1995 \n", + "3 4 Get Shorty (1995) 01-Jan-1995 \n", + "4 5 Copycat (1995) 01-Jan-1995 \n", + "... ... ... ... \n", + "1677 1678 Mat' i syn (1997) 06-Feb-1998 \n", + "1678 1679 B. Monkey (1998) 06-Feb-1998 \n", + "1679 1680 Sliding Doors (1998) 01-Jan-1998 \n", + "1680 1681 You So Crazy (1994) 01-Jan-1994 \n", + "1681 1682 Scream of Stone (Schrei aus Stein) (1991) 08-Mar-1996 \n", + "\n", + " video_release_date imdb_url \n", + "0 NaN http://us.imdb.com/M/title-exact?Toy%20Story%2... \n", + "1 NaN http://us.imdb.com/M/title-exact?GoldenEye%20(... \n", + "2 NaN http://us.imdb.com/M/title-exact?Four%20Rooms%... \n", + "3 NaN http://us.imdb.com/M/title-exact?Get%20Shorty%... \n", + "4 NaN http://us.imdb.com/M/title-exact?Copycat%20(1995) \n", + "... ... ... \n", + "1677 NaN http://us.imdb.com/M/title-exact?Mat%27+i+syn+... \n", + "1678 NaN http://us.imdb.com/M/title-exact?B%2E+Monkey+(... \n", + "1679 NaN http://us.imdb.com/Title?Sliding+Doors+(1998) \n", + "1680 NaN http://us.imdb.com/M/title-exact?You%20So%20Cr... \n", + "1681 NaN http://us.imdb.com/M/title-exact?Schrei%20aus%... \n", + "\n", + "[1682 rows x 5 columns]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "columns_to_keep = ['item_id', 'title', 'release_date', 'video_release_date', 'imdb_url']\n", "items = pd.read_csv(ML_100K_FOLDER / \"u.item\", sep='|', names=columns_to_keep,\n", @@ -97,7 +386,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -114,7 +403,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -123,9 +412,134 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idtitlerelease_datevideo_release_dateimdb_urlrelease_yearuser_idratingtimestamp
01Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.03084887736532
11Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02875875334088
21Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.01484877019411
31Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02804891700426
41Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.0663883601324
\n", + "
" + ], + "text/plain": [ + " item_id title release_date video_release_date \\\n", + "0 1 Toy Story (1995) 1995-01-01 NaN \n", + "1 1 Toy Story (1995) 1995-01-01 NaN \n", + "2 1 Toy Story (1995) 1995-01-01 NaN \n", + "3 1 Toy Story (1995) 1995-01-01 NaN \n", + "4 1 Toy Story (1995) 1995-01-01 NaN \n", + "\n", + " imdb_url release_year user_id \\\n", + "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 308 \n", + "1 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 287 \n", + "2 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 148 \n", + "3 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 280 \n", + "4 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 66 \n", + "\n", + " rating timestamp \n", + "0 4 887736532 \n", + "1 5 875334088 \n", + "2 4 877019411 \n", + "3 4 891700426 \n", + "4 3 883601324 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings.head()" ] @@ -141,9 +555,151 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idrelease_datevideo_release_daterelease_yearuser_idratingtimestamp
count100000.000000999910.099991.000000100000.00000100000.0000001.000000e+05
mean425.5301301988-02-09 00:43:11.369223296NaN1987.956216462.484753.5298608.835289e+08
min1.0000001922-01-01 00:00:00NaN1922.0000001.000001.0000008.747247e+08
25%175.0000001986-01-01 00:00:00NaN1986.000000254.000003.0000008.794487e+08
50%322.0000001994-01-01 00:00:00NaN1994.000000447.000004.0000008.828269e+08
75%631.0000001996-09-28 00:00:00NaN1996.000000682.000004.0000008.882600e+08
max1682.0000001998-10-23 00:00:00NaN1998.000000943.000005.0000008.932866e+08
std330.798356NaNNaN14.155523266.614421.1256745.343856e+06
\n", + "
" + ], + "text/plain": [ + " item_id release_date video_release_date \\\n", + "count 100000.000000 99991 0.0 \n", + "mean 425.530130 1988-02-09 00:43:11.369223296 NaN \n", + "min 1.000000 1922-01-01 00:00:00 NaN \n", + "25% 175.000000 1986-01-01 00:00:00 NaN \n", + "50% 322.000000 1994-01-01 00:00:00 NaN \n", + "75% 631.000000 1996-09-28 00:00:00 NaN \n", + "max 1682.000000 1998-10-23 00:00:00 NaN \n", + "std 330.798356 NaN NaN \n", + "\n", + " release_year user_id rating timestamp \n", + "count 99991.000000 100000.00000 100000.000000 1.000000e+05 \n", + "mean 1987.956216 462.48475 3.529860 8.835289e+08 \n", + "min 1922.000000 1.00000 1.000000 8.747247e+08 \n", + "25% 1986.000000 254.00000 3.000000 8.794487e+08 \n", + "50% 1994.000000 447.00000 4.000000 8.828269e+08 \n", + "75% 1996.000000 682.00000 4.000000 8.882600e+08 \n", + "max 1998.000000 943.00000 5.000000 8.932866e+08 \n", + "std 14.155523 266.61442 1.125674 5.343856e+06 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings.describe()" ] @@ -157,7 +713,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -167,36 +723,240 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "items['popularity'].plot.hist(bins=30);" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "np.int64(141)" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "(items['popularity'] == 1).sum() # Number of movies with only one rating" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 11, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "49 Star Wars (1977)\n", + "257 Contact (1997)\n", + "99 Fargo (1996)\n", + "180 Return of the Jedi (1983)\n", + "293 Liar Liar (1997)\n", + "285 English Patient, The (1996)\n", + "287 Scream (1996)\n", + "0 Toy Story (1995)\n", + "299 Air Force One (1997)\n", + "120 Independence Day (ID4) (1996)\n", + "Name: title, dtype: object" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "items.nlargest(10, 'popularity')['title'] # Get the 10 most popular movies" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idpopularityrelease_datevideo_release_daterelease_yearuser_idratingtimestamp
count100000.000000100000.000000999910.099991.000000100000.00000100000.0000001.000000e+05
mean425.530130168.0719001988-02-09 00:43:11.369223296NaN1987.956216462.484753.5298608.835289e+08
min1.0000001.0000001922-01-01 00:00:00NaN1922.0000001.000001.0000008.747247e+08
25%175.00000071.0000001986-01-01 00:00:00NaN1986.000000254.000003.0000008.794487e+08
50%322.000000145.0000001994-01-01 00:00:00NaN1994.000000447.000004.0000008.828269e+08
75%631.000000239.0000001996-09-28 00:00:00NaN1996.000000682.000004.0000008.882600e+08
max1682.000000583.0000001998-10-23 00:00:00NaN1998.000000943.000005.0000008.932866e+08
std330.798356121.784558NaNNaN14.155523266.614421.1256745.343856e+06
\n", + "
" + ], + "text/plain": [ + " item_id popularity release_date \\\n", + "count 100000.000000 100000.000000 99991 \n", + "mean 425.530130 168.071900 1988-02-09 00:43:11.369223296 \n", + "min 1.000000 1.000000 1922-01-01 00:00:00 \n", + "25% 175.000000 71.000000 1986-01-01 00:00:00 \n", + "50% 322.000000 145.000000 1994-01-01 00:00:00 \n", + "75% 631.000000 239.000000 1996-09-28 00:00:00 \n", + "max 1682.000000 583.000000 1998-10-23 00:00:00 \n", + "std 330.798356 121.784558 NaN \n", + "\n", + " video_release_date release_year user_id rating \\\n", + "count 0.0 99991.000000 100000.00000 100000.000000 \n", + "mean NaN 1987.956216 462.48475 3.529860 \n", + "min NaN 1922.000000 1.00000 1.000000 \n", + "25% NaN 1986.000000 254.00000 3.000000 \n", + "50% NaN 1994.000000 447.00000 4.000000 \n", + "75% NaN 1996.000000 682.00000 4.000000 \n", + "max NaN 1998.000000 943.00000 5.000000 \n", + "std NaN 14.155523 266.61442 1.125674 \n", + "\n", + " timestamp \n", + "count 1.000000e+05 \n", + "mean 8.835289e+08 \n", + "min 8.747247e+08 \n", + "25% 8.794487e+08 \n", + "50% 8.828269e+08 \n", + "75% 8.882600e+08 \n", + "max 8.932866e+08 \n", + "std 5.343856e+06 " + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings = pd.merge(popularity, all_ratings)\n", "all_ratings.describe()" @@ -204,7 +964,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "metadata": { "collapsed": false }, @@ -215,9 +975,140 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
item_idpopularitytitlerelease_datevideo_release_dateimdb_urlrelease_yearuser_idratingtimestamp
01452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.03084887736532
11452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02875875334088
21452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.01484877019411
31452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.02804891700426
41452Toy Story (1995)1995-01-01NaNhttp://us.imdb.com/M/title-exact?Toy%20Story%2...1995.0663883601324
\n", + "
" + ], + "text/plain": [ + " item_id popularity title release_date video_release_date \\\n", + "0 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "1 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "2 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "3 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "4 1 452 Toy Story (1995) 1995-01-01 NaN \n", + "\n", + " imdb_url release_year user_id \\\n", + "0 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 308 \n", + "1 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 287 \n", + "2 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 148 \n", + "3 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 280 \n", + "4 http://us.imdb.com/M/title-exact?Toy%20Story%2... 1995.0 66 \n", + "\n", + " rating timestamp \n", + "0 4 887736532 \n", + "1 5 875334088 \n", + "2 4 877019411 \n", + "3 4 891700426 \n", + "4 3 883601324 " + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "all_ratings.head()" ] @@ -246,6 +1137,85 @@ "raise NotImplementedError(\"Please calculate the average rating for each movie\")" ] }, + { + "cell_type": "code", + "execution_count": 16, + "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", + "
item_idaverage_rating
013.878319
123.206107
233.033333
343.550239
453.302326
\n", + "
" + ], + "text/plain": [ + " item_id average_rating\n", + "0 1 3.878319\n", + "1 2 3.206107\n", + "2 3 3.033333\n", + "3 4 3.550239\n", + "4 5 3.302326" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "average_ratings = all_ratings.groupby('item_id')['rating'].mean().reset_index(name='average_rating')\n", + "average_ratings.head()" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -255,7 +1225,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "metadata": {}, "outputs": [], "source": [ @@ -295,18 +1265,37 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ + "# Importing necessary TensorFlow components \n", "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": "markdown", + "metadata": {}, + "source": [ + "# Notes: Layer Breakdown\n", + "• Embedding: Transforms user and item IDs into dense vector representations (latent features)\n", + "\n", + "• Flatten: Converts the embedding output into a flat vector for further operations\n", + "\n", + "• Dot: Computes the dot product between user and item embeddings — this models the interaction score\n", + "\n", + "• Dense: Adds fully connected layers (optional, for hybrid models or bias terms)\n", + "\n", + "• Dropout: Regularizes the model to prevent overfitting\n", + "\n", + "•Model: Combines inputs and outputs into a trainable Keras model\n" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -353,9 +1342,38 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 21, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 6ms/step - loss: 3.3062 - val_loss: 1.0508\n", + "Epoch 2/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - loss: 0.9139 - val_loss: 0.7991\n", + "Epoch 3/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.7555 - val_loss: 0.7650\n", + "Epoch 4/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.7246 - val_loss: 0.7553\n", + "Epoch 5/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 6ms/step - loss: 0.7040 - val_loss: 0.7466\n", + "Epoch 6/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.6754 - val_loss: 0.7419\n", + "Epoch 7/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - loss: 0.6547 - val_loss: 0.7389\n", + "Epoch 8/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 5ms/step - loss: 0.6326 - val_loss: 0.7368\n", + "Epoch 9/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.6086 - val_loss: 0.7391\n", + "Epoch 10/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.5828 - val_loss: 0.7387\n", + "CPU times: total: 1min 10s\n", + "Wall time: 1min 11s\n" + ] + } + ], "source": [ "%%time\n", "\n", @@ -367,9 +1385,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 22, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGxCAYAAABBZ+3pAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABK6ElEQVR4nO3de1xUdeI//teZgZnhOggooKKCmopXBFMw+1QmpuVqa0k3ytbdPn7XSuNna3bX2vjYbdVMy08WuSVRH9Ss9KN0UewjWRrYtqmZoiBCCAojtxlm5vz+GObAcJ1BYM7MvJ6Px3nAec97zryPtMuL93lfBFEURRARERHJmMLZDSAiIiLqDAMLERERyR4DCxEREckeAwsRERHJHgMLERERyR4DCxEREckeAwsRERHJHgMLERERyR4DCxEREckeAwsR9bj09HQIgoAjR444uylE5KIYWIiIiEj2GFiIiIhI9hhYiEgWvv32W0yfPh0BAQHw9fVFYmIivvjiC5s6tbW1WL58OaKioqDRaBAcHIz4+HhkZGRIdc6cOYO77roL/fv3h1qtRlhYGKZPn478/PxeviMi6k5ezm4AEdGBAwcwY8YMjBs3Dlu2bIFarcbGjRsxZ84cZGRkIDk5GQCQmpqKf/7zn3jxxRcRGxuLmpoa/Pzzz6ioqJCuNXv2bJhMJrz88ssYNGgQysvLcejQIVRWVjrp7oioOwiiKIrObgQRubf09HQ8+OCD+OGHHxAfH9/q9YSEBJw5cwanT5+Gv78/AMBkMmHChAmorKxEYWEhBEHA2LFjMWzYMOzYsaPNz6moqEBoaCjWrl2LpUuX9ug9EVHv4iMhInKqmpoaHD58GHfccYcUVgBAqVQiJSUF58+fx8mTJwEA1157Lfbs2YMnnngC+/fvR11dnc21goODMXToULzyyit4/fXXkZeXB7PZ3Kv3Q0Q9g4GFiJzq8uXLEEURERERrV7r378/AEiPfNavX48VK1Zg586duPHGGxEcHIx58+bh1KlTAABBEPDVV19h5syZePnllzFx4kT07dsXjz76KK5cudJ7N0VE3Y6BhYicqk+fPlAoFCgpKWn12oULFwAAoaGhAAA/Pz+sWrUKJ06cQGlpKTZt2oTvvvsOc+bMkd4zePBgbNmyBaWlpTh58iQee+wxbNy4EY8//njv3BAR9QgGFiJyKj8/P0yePBnbt2+3ecRjNpvxwQcfYODAgbjmmmtavS8sLAwLFy7E3XffjZMnT6K2trZVnWuuuQZPP/00xo4dix9//LFH74OIehZnCRFRr/n6669x9uzZVuVpaWmYMWMGbrzxRixfvhwqlQobN27Ezz//jIyMDAiCAACYPHkybrvtNowbNw59+vTB8ePH8c9//hMJCQnw9fXFTz/9hIcffhh33nknhg8fDpVKha+//ho//fQTnnjiiV6+WyLqTgwsRNRrVqxY0WZ5QUEBvv76azz33HNYuHAhzGYzxo8fj127duG2226T6t10003YtWsX/vGPf6C2thYDBgzA/fffj6eeegoAEB4ejqFDh2Ljxo0oKiqCIAiIjo7Ga6+9hkceeaRX7pGIeganNRMREZHscQwLERERyR4DCxEREckeAwsRERHJnkOBJS0tDZMmTUJAQAD69euHefPmSStQduTAgQOIi4uDRqNBdHQ03nrrrVZ1srKyEBMTA7VajZiYmHaX3iYiIiLP41BgOXDgAJYsWYLvvvsO2dnZMBqNSEpKQk1NTbvvKSgowOzZszFt2jTk5eXhySefxKOPPoqsrCypTm5uLpKTk5GSkoJjx44hJSUFCxYswOHDh7t+Z0REROQ2rmqW0MWLF9GvXz8cOHAA119/fZt1VqxYgV27duH48eNS2eLFi3Hs2DHk5uYCAJKTk6HT6bBnzx6pzi233II+ffrYbBtPREREnumq1mGpqqoCYNlwrD25ublISkqyKZs5cya2bNmChoYGeHt7Izc3F4899lirOmvXrm33unq9Hnq9Xjo3m824dOkSQkJCpEWmiIiISN5EUcSVK1fQv39/KBTtP/jpcmARRRGpqam47rrrMGbMmHbrlZaWIiwszKYsLCwMRqMR5eXliIiIaLdOaWlpu9dNS0vDqlWrutp8IiIikpGioiIMHDiw3de7HFgefvhh/PTTT/j22287rduyx8P6FKp5eVt1OuopWblyJVJTU6XzqqoqDBo0CEVFRQgMDLTrHnrT2uxf8c63BUieNBDP3Dba2c0hIiKSBZ1Oh8jISAQEBHRYr0uB5ZFHHsGuXbuQk5PTYRoCLEtlt+wpKSsrg5eXF0JCQjqs07LXpTm1Wg21Wt2qPDAwUJaBJWZIOBQ//I7iGkGW7SMiInKmzoZzODRLSBRFPPzww9i+fTu+/vprREVFdfqehIQEZGdn25Tt27cP8fHx8Pb27rBOYmKiI82Ttei+fgCAMxfbn1FFREREbXMosCxZsgQffPABtm3bhoCAAJSWlqK0tNRmS/iVK1fi/vvvl84XL16Mc+fOITU1FcePH8e7776LLVu2YPny5VKdpUuXYt++fVizZg1OnDiBNWvW4Msvv8SyZcuu/g5lYmioPwCgVFePGr3Rya0hIiJyLQ4Flk2bNqGqqgo33HADIiIipCMzM1OqU1JSgsLCQuk8KioKu3fvxv79+zFhwgS88MILWL9+PebPny/VSUxMxEcffYT33nsP48aNQ3p6OjIzMzF58uRuuEV50Pp6I8RPBQAoKGcvCxERkSPcZrdmnU4HrVaLqqoq2Y4RuWPTIRw5dxnr747FH8b3d3ZziIhkSRRFGI1GmEwmZzeFuoFSqYSXl1e7Y1Ts/f19VeuwkGOi+/rhyLnLOHOx2tlNISKSJYPBgJKSEtTW1jq7KdSNfH19ERERAZVK1eVrMLD0oui+lnEsHHhLRNSa2WxGQUEBlEol+vfvD5VKxYVAXZwoijAYDLh48SIKCgowfPjwDheH6wgDSy+KDm2cKVTOHhYiopYMBgPMZjMiIyPh6+vr7OZQN/Hx8YG3tzfOnTsHg8EAjUbTpet0LeZQl1h7WAou1sBNhg4REXW7rv4FTvLVHT9T/lfRiwYF+0KpEFBjMKHsir7zNxAREREABpZepfJSILKPDwDgNAfeEhER2Y2BpZdx4C0REXVkyJAhWLt2rbObITscdNvLokP98DUYWIiI3MkNN9yACRMmdEvQ+OGHH+Dn53f1jXIzDCy9TOph4UwhIiKPIYoiTCYTvLw6/7Xbt2/fXmiR6+EjoV7GTRCJiOwniiJqDcZePxyZyblw4UIcOHAA69atgyAIEAQB6enpEAQBe/fuRXx8PNRqNQ4ePIjTp09j7ty5CAsLg7+/PyZNmoQvv/zS5notHwkJgoB33nkHt99+O3x9fTF8+HDs2rWru/6JXQZ7WHqZNbCcv1wLvdEEtZfSyS0iIpKvugYTYp7d2+uf+8vqmfBV2fcrct26dfj1118xZswYrF69GgDw73//GwDwt7/9Da+++iqio6MRFBSE8+fPY/bs2XjxxReh0Wjw/vvvY86cOTh58iQGDRrU7mesWrUKL7/8Ml555RW88cYbuPfee3Hu3DkEBwdf/c26CPaw9LK+/mr4q71gFoHCCi49TUTk6rRaLVQqFXx9fREeHo7w8HAolZY/RlevXo0ZM2Zg6NChCAkJwfjx4/Gf//mfGDt2LIYPH44XX3wR0dHRnfaYLFy4EHfffTeGDRuGl156CTU1Nfj+++974/Zkgz0svUwQBET39cNP56tw+mINhocFOLtJRESy5eOtxC+rZzrlc7tDfHy8zXlNTQ1WrVqFzz//HBcuXIDRaERdXR0KCws7vM64ceOk7/38/BAQEICysrJuaaOrYGBxguhQS2DhwFsioo4JgmD3oxk5ajnb5/HHH8fevXvx6quvYtiwYfDx8cEdd9wBg8HQ4XW8vb1tzgVBgNls7vb2ypnr/lfgwrgWCxGRe1GpVDCZTJ3WO3jwIBYuXIjbb78dAFBdXY2zZ8/2cOvcA8ewOEHTTCH2sBARuYMhQ4bg8OHDOHv2LMrLy9vt/Rg2bBi2b9+O/Px8HDt2DPfcc4/H9ZR0FQOLE0SHNm6CWM4eFiIid7B8+XIolUrExMSgb9++7Y5J+cc//oE+ffogMTERc+bMwcyZMzFx4sRebq1rEkQ32TZYp9NBq9WiqqoKgYGBzm5Oh2oNRmmaXt4zM9DHT+XkFhEROV99fT0KCgoQFRUFjUbj7OZQN+roZ2vv72/2sDiBr8oL/bWWHxgH3hIREXWOgcVJrANvT3PgLRERUacYWJyES/QTERHZj4HFSaJDOVOIiIjIXgwsTmJ9JMSZQkRERJ1jYHGSqMYelnMVtTCZ3WKiFhERUY9hYHGSAUE+UHspYDCZcf4yN0EkIiLqCAOLkygUgtTLwoG3REREHWNgcSLrTKHTHHhLRETUIQYWJ7Iu0X+GA2+JiDzakCFDsHbtWulcEATs3Lmz3fpnz56FIAjIz8+/qs/truv0Bu7W7ETWHpYCPhIiIqJmSkpK0KdPn2695sKFC1FZWWkThCIjI1FSUoLQ0NBu/ayewMDiRNIYFi7PT0REzYSHh/fK5yiVyl77rKvFR0JOZF2L5XedHtV6o5NbQ0QkQ6IIGGp6/3BgX+C3334bAwYMgNlstin/wx/+gAceeACnT5/G3LlzERYWBn9/f0yaNAlffvllh9ds+Ujo+++/R2xsLDQaDeLj45GXl2dT32QyYdGiRYiKioKPjw9GjBiBdevWSa8///zzeP/99/Hpp59CEAQIgoD9+/e3+UjowIEDuPbaa6FWqxEREYEnnngCRmPT76gbbrgBjz76KP72t78hODgY4eHheP755+3+9+oq9rA4kdbHG6H+KpRXG1BwsQZjB2qd3SQiInlpqAVe6t/7n/vkBUDlZ1fVO++8E48++ii++eYbTJ8+HQBw+fJl7N27F5999hmqq6sxe/ZsvPjii9BoNHj//fcxZ84cnDx5EoMGDer0+jU1Nbjttttw00034YMPPkBBQQGWLl1qU8dsNmPgwIH4+OOPERoaikOHDuGhhx5CREQEFixYgOXLl+P48ePQ6XR47733AADBwcG4cOGCzXWKi4sxe/ZsLFy4EFu3bsWJEyfwl7/8BRqNxiaUvP/++0hNTcXhw4eRm5uLhQsXYurUqZgxY4Zd/2ZdwcDiZNGh/iivvoQz5dUMLERELig4OBi33HILtm3bJgWWTz75BMHBwZg+fTqUSiXGjx8v1X/xxRexY8cO7Nq1Cw8//HCn1//www9hMpnw7rvvwtfXF6NHj8b58+fx//7f/5PqeHt7Y9WqVdJ5VFQUDh06hI8//hgLFiyAv78/fHx8oNfrO3wEtHHjRkRGRmLDhg0QBAEjR47EhQsXsGLFCjz77LNQKCwPZsaNG4fnnnsOADB8+HBs2LABX331FQOLO4vu64fvz17irs1ERG3x9rX0djjjcx1w77334qGHHsLGjRuhVqvx4Ycf4q677oJSqURNTQ1WrVqFzz//HBcuXIDRaERdXR0KCwvtuvbx48cxfvx4+Po2tSkhIaFVvbfeegvvvPMOzp07h7q6OhgMBkyYMMGh+zh+/DgSEhIgCIJUNnXqVFRXV+P8+fNSj9C4ceNs3hcREYGysjKHPstRDCxOJs0U4tRmIqLWBMHuRzPONGfOHJjNZnzxxReYNGkSDh48iNdffx0A8Pjjj2Pv3r149dVXMWzYMPj4+OCOO+6AwWCw69qiHeNpPv74Yzz22GN47bXXkJCQgICAALzyyis4fPiwQ/chiqJNWGn++c3Lvb29beoIgtBqDE93c3jQbU5ODubMmYP+/ft3Ok8csEyjsg7waX6MHj1aqpOent5mnfr6eodvyNVEWddi4eJxREQuy8fHB3/84x/x4YcfIiMjA9dccw3i4uIAAAcPHsTChQtx++23Y+zYsQgPD8fZs2ftvnZMTAyOHTuGuro6qey7776zqXPw4EEkJibir3/9K2JjYzFs2DCcPn3apo5KpYLJZOr0sw4dOmQTkg4dOoSAgAAMGDDA7jb3BIcDS01NDcaPH48NGzbYVX/dunUoKSmRjqKiIgQHB+POO++0qRcYGGhTr6SkBBqNxtHmuZzmPSz2pGgiIpKne++9F1988QXeffdd3HfffVL5sGHDsH37duTn5+PYsWO45557HOqNuOeee6BQKLBo0SL88ssv2L17N1599VWbOsOGDcORI0ewd+9e/Prrr3jmmWfwww8/2NQZMmQIfvrpJ5w8eRLl5eVoaGho9Vl//etfUVRUhEceeQQnTpzAp59+iueeew6pqanS+BVncfiR0KxZszBr1iy762u1Wmi1TYNJd+7cicuXL+PBBx+0qScIgsvMBe9Og4J94aUQUGswoVRXjwitj7ObREREXXDTTTchODgYJ0+exD333COV/+Mf/8Cf/vQnJCYmIjQ0FCtWrIBOp7P7uv7+/vjss8+wePFixMbGIiYmBmvWrMH8+fOlOosXL0Z+fj6Sk5MhCALuvvtu/PWvf8WePXukOn/5y1+wf/9+xMfHo7q6Gt988w2GDBli81kDBgzA7t278fjjj2P8+PEIDg7GokWL8PTTT3f9H6abCOJV/FkvCAJ27NiBefPm2f2eOXPmQK/XY9++fVJZeno6/vznP2PAgAEwmUyYMGECXnjhBcTGxrZ7Hb1eD71eL53rdDpERkaiqqoKgYGBXbofZ7np1f04U16DD/88GVOHyX+1QSKinlBfX4+CggJERUV5RA+7J+noZ6vT6aDVajv9/d2r/TslJSXYs2cP/vznP9uUjxw5Eunp6di1axcyMjKg0WgwdepUnDp1qt1rpaWlSb03Wq0WkZGRPd38HmN9LMRxLERERG3r1cCSnp6OoKCgVj0yU6ZMwX333Yfx48dj2rRp+Pjjj3HNNdfgjTfeaPdaK1euRFVVlXQUFRX1cOt7jnXFW26CSERE1LZem9YsiiLeffddpKSkQKVSdVhXoVBg0qRJHfawqNVqqNXq7m6mU0h7CnEtFiIiojb1Wg/LgQMH8Ntvv2HRokWd1hVFEfn5+YiIiOiFljlfNDdBJCIi6pDDPSzV1dX47bffpPOCggLk5+cjODgYgwYNwsqVK1FcXIytW7favG/Lli2YPHkyxowZ0+qaq1atwpQpUzB8+HDodDqsX78e+fn5ePPNN7twS67H+kjo/OU61DeYoPFWOrlFRETOwyUe3E93/EwdDixHjhzBjTfeKJ2npqYCAB544AGkp6ejpKSk1XLDVVVVyMrKstk5srnKyko89NBDKC0thVarRWxsLHJycnDttdc62jyXFOqvQoDGC1fqjThXUYsR4QHObhIRUa+zrp5aW1sLHx8u8eBOamtrAbReIdcRVzWtWU7snRYlV3Pf/D8cK6rEpnsnYtZYz3gURkTUUklJCSorK9GvXz/4+vq2WiaeXIsoiqitrUVZWRmCgoLaHOph7+9v7iUkE0ND/XCsqJIzhYjIo1kXEO3pjfSodwUFBV314rAMLDLBmUJERJYFSSMiItCvX782l44n1+Pt7Q2l8urHZjKwyETTWiycKUREpFQqu+WXHLkP5+5kRJKm1W65CSIREVFLDCwyERXqB0EAquoacKnG4OzmEBERyQoDi0xovJXo37hTMwfeEhER2WJgkRHrY6ECDrwlIiKywcAiI9Yl+k9z4C0REZENBhYZkWYKsYeFiIjIBgOLjDTNFGIPCxERUXMMLDJi7WEpvFQLo8ns5NYQERHJBwOLjEQEaqDxVqDBJKLocp2zm0NERCQbDCwyolAIiAq19LIUcOAtERGRhIFFZqK5pxAREVErDCwyYx14e5qBhYiISMLAIjOcKURERNQaA4vMRIdad21mDwsREZEVA4vMWHtYLl7R40p9g5NbQ0REJA8MLDIToPFG3wA1AKCAvSxEREQAGFhkKYozhYiIiGwwsMjQUA68JSIissHAIkPWgben+UiIiIgIAAOLLDVNbWZgISIiAhhYZMm6CWJBeTXMZtHJrSEiInI+BhYZiuzjAy+FgPoGM0p19c5uDhERkdMxsMiQl1KBQSG+APhYiIiICGBgka2mFW85U4iIiIiBRaaGcuAtERGRhIFFppp2bWYPCxEREQOLTFlnCrGHhYiIiIFFtqIbl+e/UFWH+gaTk1tDRETkXAwsMhXsp0KgxguiCJytYC8LERF5NgYWmRIEgY+FiIiIGjGwyFg0N0EkIiICwMAia0PZw0JERASgC4ElJycHc+bMQf/+/SEIAnbu3Nlh/f3790MQhFbHiRMnbOplZWUhJiYGarUaMTEx2LFjh6NNczvWgbfctZmIiDydw4GlpqYG48ePx4YNGxx638mTJ1FSUiIdw4cPl17Lzc1FcnIyUlJScOzYMaSkpGDBggU4fPiwo81zK9ImiBerIYrcBJGIiDyXl6NvmDVrFmbNmuXwB/Xr1w9BQUFtvrZ27VrMmDEDK1euBACsXLkSBw4cwNq1a5GRkeHwZ7mLwSG+EARAV29ERY0Bof5qZzeJiIjIKXptDEtsbCwiIiIwffp0fPPNNzav5ebmIikpyaZs5syZOHToULvX0+v10Ol0Noe70XgrMSDIBwDHsRARkWfr8cASERGBzZs3IysrC9u3b8eIESMwffp05OTkSHVKS0sRFhZm876wsDCUlpa2e920tDRotVrpiIyM7LF7cKamqc2cKURERJ7L4UdCjhoxYgRGjBghnSckJKCoqAivvvoqrr/+eqlcEASb94mi2KqsuZUrVyI1NVU61+l0bhlaokP9kPPrRZzhwFsiIvJgTpnWPGXKFJw6dUo6Dw8Pb9WbUlZW1qrXpTm1Wo3AwECbwx0N5VosREREzgkseXl5iIiIkM4TEhKQnZ1tU2ffvn1ITEzs7abJjvRIiD0sRETkwRx+JFRdXY3ffvtNOi8oKEB+fj6Cg4MxaNAgrFy5EsXFxdi6dSsAywygIUOGYPTo0TAYDPjggw+QlZWFrKws6RpLly7F9ddfjzVr1mDu3Ln49NNP8eWXX+Lbb7/thlt0bVGNa7EUVtSiwWSGt5Jr/RERkedxOLAcOXIEN954o3RuHUfywAMPID09HSUlJSgsLJReNxgMWL58OYqLi+Hj44PRo0fjiy++wOzZs6U6iYmJ+Oijj/D000/jmWeewdChQ5GZmYnJkydfzb25hfBADXy8lahrMKHoUq3U40JERORJBNFNViTT6XTQarWoqqpyu/Ess9cdxC8lOrxzfzxujml/XA8REZGrsff3N58vuABpE8RyDrwlIiLPxMDiAqQl+jnwloiIPBQDiwuwTm0+zdVuiYjIQzGwuADrTCEuz09ERJ6KgcUFWANLebUeuvoGJ7eGiIio9zGwuIAAjTf6BVh2amYvCxEReSIGFhcRzSX6iYjIgzGwuAjOFCIiIk/GwOIiojnwloiIPBgDi4uIlqY285EQERF5HgYWFxEdankkdLaiBmazW+ymQEREZDcGFhcxsI8PvJUC6hvMuFBV5+zmEBER9SoGFhfhpVRgcAjHsRARkWdiYHEh1oG3nClERESehoHFhVinNnMtFiIi8jQMLC5EmtrMHhYiIvIwDCwupGm1WwYWIiLyLAwsLsT6SKi4sg51BpOTW0NERNR7GFhcSLCfCkG+3gA48JaIiDwLA4uL4UwhIiLyRAwsLoYzhYiIyBMxsLiYKM4UIiIiD8TA4mKGSjOF2MNCRESeg4HFxTQ9EqqBKHITRCIi8gwMLC5mcIgvFAJwRW/ExWq9s5tDRETUKxhYXIzaS4mBfXwBAAVcQI6IiDwEA4sLkla85cBbIiLyEAwsLkiaKcSBt0RE5CEYWFxQ84G3REREnoCBxQUN5VosRETkYRhYXJC1h6XwUi0MRrOTW0NERNTzGFhcUFigGn4qJUxmEUWXa53dHCIioh7HwOKCBEFAlLTiLR8LERGR+2NgcVFRodwEkYiIPAcDi4uKDmUPCxEReQ6HA0tOTg7mzJmD/v37QxAE7Ny5s8P627dvx4wZM9C3b18EBgYiISEBe/futamTnp4OQRBaHfX19Y42z2M0LR7HHhYiInJ/DgeWmpoajB8/Hhs2bLCrfk5ODmbMmIHdu3fj6NGjuPHGGzFnzhzk5eXZ1AsMDERJSYnNodFoHG2exxjKtViIiMiDeDn6hlmzZmHWrFl211+7dq3N+UsvvYRPP/0Un332GWJjY6VyQRAQHh7uaHM8lnW124oaA6pqG6D19XZyi4iIiHpOr49hMZvNuHLlCoKDg23Kq6urMXjwYAwcOBC33XZbqx6YlvR6PXQ6nc3hSfzUXggPtPRA8bEQERG5u14PLK+99hpqamqwYMECqWzkyJFIT0/Hrl27kJGRAY1Gg6lTp+LUqVPtXictLQ1arVY6IiMje6P5shLFgbdEROQhejWwZGRk4Pnnn0dmZib69esnlU+ZMgX33Xcfxo8fj2nTpuHjjz/GNddcgzfeeKPda61cuRJVVVXSUVRU1Bu3ICsceEtERJ7C4TEsXZWZmYlFixbhk08+wc0339xhXYVCgUmTJnXYw6JWq6FWq7u7mS6FmyASEZGn6JUeloyMDCxcuBDbtm3Drbfe2ml9URSRn5+PiIiIXmid64rmardEROQhHO5hqa6uxm+//SadFxQUID8/H8HBwRg0aBBWrlyJ4uJibN26FYAlrNx///1Yt24dpkyZgtLSUgCAj48PtFotAGDVqlWYMmUKhg8fDp1Oh/Xr1yM/Px9vvvlmd9yj2xrauNptQUUNzGYRCoXg5BYRERH1DId7WI4cOYLY2FhpSnJqaipiY2Px7LPPAgBKSkpQWFgo1X/77bdhNBqxZMkSRERESMfSpUulOpWVlXjooYcwatQoJCUlobi4GDk5Obj22muv9v7c2oA+PlApFTAYzSiurHN2c4iIiHqMIIqi6OxGdAedTgetVouqqioEBgY6uzm9ZsbrB3CqrBrv/+la/Mc1fZ3dHCIiIofY+/ubewm5uKZxLJwpRERE7ouBxcVxphAREXkCBhYXJ+3azLVYiIjIjTGwuDhrD0sBe1iIiMiNMbC4uKGNY1guVNWj1mB0cmuIiIh6BgOLiwvyVaFP407NBeXsZSEiIvfEwOIGOPCWiIjcHQOLG4jmrs1EROTmGFjcgNTDwplCRETkphhY3IB18TiOYSEiInfFwOIGhjbbtdlNdlogIiKywcDiBiKDfaEQgGq9ERev6J3dHCIiom7HwOIG1F5KRAb7AgBOc+AtERG5IQYWN8El+omIyJ0xsLgJrsVCRETujIHFTXCmEBERuTMGFjcRHWrtYeEjISIicj8MLG7C2sNSdLkOBqPZya0hIiLqXgwsbqJfgBp+KiVMZhGFl/hYiIiI3AsDi5sQBEEaeMupzURE5G4YWNxIdF9ugkhERO6JgcWNWAfeFnAtFiIicjMMLG6EPSxEROSuGFjcSJS02i0DCxERuRcGFjdi7WG5VGNAZa3Bya0hIiLqPgwsbsRX5YUIrQYAZwoREZF7YWBxM03jWDjwloiI3AcDi5tpminEHhYiInIfDCydMZuASwXOboXdOFOIiIjcEQNLR0QR+PwxYPN/AIWHnd0auzTNFOIjISIich8MLB1pqAUungDqq4Ctc4HfvnR2izo1tHF5/rMVtTCZRSe3hoiIqHswsHRE5Qek7ACG3QwY64BtdwE/b3d2qzrUP8gHKi8FDEYzii/XObs5RERE3YKBpTMqP+CuDGD0HwFzA/A/fwKOvOfsVrVLqRAQFWJ5LHSaj4WIiMhNMLDYw0sFzH8HiP8TABH4fBlw8HXLGBcZsg68LeDAWyIichMMLPZSKIFbXwem/X+W869WAdnPyDK0SDOF2MNCRERugoHFEYIATH8WSHrRcn7oDWDXI5apzzIS1bgWC6c2ExGRu3A4sOTk5GDOnDno378/BEHAzp07O33PgQMHEBcXB41Gg+joaLz11lut6mRlZSEmJgZqtRoxMTHYsWOHo03rPYmPAH/YAAgKIO+fwCcLAaPe2a2ScC0WIiJyNw4HlpqaGowfPx4bNmywq35BQQFmz56NadOmIS8vD08++SQeffRRZGVlSXVyc3ORnJyMlJQUHDt2DCkpKViwYAEOH5bx2icTU4A73weUKuD4LmDbAkAvj0cwQxt7WEp19ajRG53cGiIioqsniGLXB2EIgoAdO3Zg3rx57dZZsWIFdu3ahePHj0tlixcvxrFjx5CbmwsASE5Ohk6nw549e6Q6t9xyC/r06YOMjIw2r6vX66HXN/Vq6HQ6REZGoqqqCoGBgV29Jced2Q9k3AM01AAD4oF7PwF8g3vv89sR90I2KmoM+PyR6zBmgNbZzSEiImqTTqeDVqvt9Pd3j49hyc3NRVJSkk3ZzJkzceTIETQ0NHRY59ChQ+1eNy0tDVqtVjoiIyO7v/H2iL4BeGAX4NMHKD4CvDcb0JU4py3NmyUNvOVjISIicn09HlhKS0sRFhZmUxYWFgaj0Yjy8vIO65SWlrZ73ZUrV6Kqqko6ioqKur/x9hoYDzy4BwiIAC4eB95NAipOO689aNoEkbs2ExGRO+iVWUKCINicW59CNS9vq07LsubUajUCAwNtDqfqNwr4014gOBqoLATevQUo/dlpzYniwFsiInIjPR5YwsPDW/WUlJWVwcvLCyEhIR3WadnrInt9BgMP/i8QNgaoKbM8Hir8zilNieYmiERE5EZ6PLAkJCQgOzvbpmzfvn2Ij4+Ht7d3h3USExN7unndLyAMWPgFEDkF0FcBW+cBp3p/08Toxk0QCy7W4CrGVRMREcmCw4Gluroa+fn5yM/PB2CZtpyfn4/CwkIAlrEl999/v1R/8eLFOHfuHFJTU3H8+HG8++672LJlC5YvXy7VWbp0Kfbt24c1a9bgxIkTWLNmDb788kssW7bs6u7OWXyCGjdNnGHZNDHjLuDnrE7f1p0GBftCqRBQYzDhd5181oghIiLqCocDy5EjRxAbG4vY2FgAQGpqKmJjY/Hss88CAEpKSqTwAgBRUVHYvXs39u/fjwkTJuCFF17A+vXrMX/+fKlOYmIiPvroI7z33nsYN24c0tPTkZmZicmTJ1/t/TmPyhe4axswZn7jpomLgCPv9t7HeykwKNgXAB8LERGR67uqdVjkxN553L3ObAJ2L28KK9OfBa5LtSzz38MWpf+Ar06U4cV5Y3DflME9/nlERESOks06LB5P2jSx8RHYV6uBfU/3yqaJUaGcKURERO6BgaU3CAIw/Rkg6e+W89wNwK6HAVPPLptvHXjLR0JEROTqGFh6U+LDwNw3GzdN/AD4n4U9umkiN0EkIiJ3wcDS22LvAxZsbdw08TPgwzsB/ZUe+ShrYDl/uRZ6o6lHPoOIiKg3MLA4w6g5lk0Svf2AggPA1rlA7aVu/5i+/moEqL1gFoHCitpuvz4REVFvYWBxlugbgAc+a9w08Sjw3ixAd6FbP0IQBKmX5TQfCxERkQtjYHGmgXGWpfwD+gMXTwDvzuz2TROjuEQ/ERG5AQYWZ+s3EvjT/7bYNPFf3XZ5aaYQe1iIiMiFMbDIQZ/Blp2ew8Y2bpp4a7dtmtg0U4g9LERE5LoYWOTCvx+w8PMWmyZmd/q2zkSHNm6CWM4eFiIicl0MLHLS1qaJ//qfq7qkdQzL5doGXK4xdEMjiYiIeh8Di9xImybeAZiNQNafgR+2dPlyPiolBgT5AODAWyIicl0MLHLkpQL++N9A/CIAIvBFKpDzapf3H7L2snBqMxERuSoGFrlSKIBbXwOuf9xy/vULXd40kUv0ExGRq2NgkTNBAG56Gpj5kuU8dwPwqeObJkaHcqYQERG5NgYWV5CwBJi70bJpYv4HwCcPAA31dr/duhYLZwoREZGrYmBxFbH3Agv+adk08cTnwDb7N020PhI6V1ELk7lr42CIiIiciYHFlYy6zbJposofKMgB3v+DXZsm9tf6QO2lgMFkxvnL3ASRiIhcDwOLq4m+AXhgF+ATDFz40a5NExUKQZoptPtfpdAbTb3QUCIiou7DwOKKBsQBD+5p2jRxS+ebJsZEBAIA1vzvCVz796/w1I5/4cfCyxC7OFWaiIioNwmim/zG0ul00Gq1qKqqQmBgoLOb0zsqC4Gtc4FLZwC/vsB924GIcW1WvVRjwDsHz2BnXjEuVDUN2I0O9cMfJw7A7RMHSgvMERER9RZ7f38zsLi66jLggz9adnhWa4F7MoHBCe1WN5tF5J6pQNbR89jzcynqGpoeDyVEh2B+3EDMGhMOP7VXb7SeiIg8HAOLJ6mrtOw7VJgLePkAC7YC1yR1+rYavRF7fi5F1tHzyD1TIZX7eCsxa0w45scNxJToECgVQg82noiIPBkDi6cx1FrWZzm1D1B4Abe/DYy9w+63n79ci515xcj6sdhmvZYIrQa3xw7A/LiBGNq4ngsREVF3YWDxRKYGYMdi4Of/ASAAt74KTPqzQ5cQRRF5RZXIOnoenx27AF1906q64yODcMfEAZgzvj+CfFXd3HgiIvJEDCyeymwG9jwO/PCO5fymp4Fpyy3L/DuovsGEr0+UIevoeez/9aK06Jy3UsD0kWGYHzcQN4zoC28lJ5sREVHXMLB4MlEEvvk7kPOK5XzKEiDpRcuGil1UXq3Hp/kXkHX0PH4p0UnlwX4q/GF8f9wRNxCj+wdC6EIwIiIiz8XAQkDuRmDvSsv3E+4F5qwHlFc/++d4iQ7bfzyPnfkXcPGKXiq/Jswf8ycOxLzYAQgL1Fz15xARkftjYCGLvA+BXQ8Dohm4ZhYw8X4gaJDl0Fzdv5PRZMbB38qRdfQ89v3yOwxGMwBAIQDXDe+L+RMHICkmHD4qZXfcCRERuSEGFmpy/HPgfx4ETAbbck0Q0GdwY4AZ3BRkrIc6wO6PqKprwO5/lSDr6HkcOXdZKg9Qe2H22AjMjxuISUP68JERERHZYGAhW4XfAd9tAi6ftayQW9f5ponwCW4RYgY3BRxtJKBue5rz2fIabM8rxvYfz+P85TqpPDLYB3+MHYj5EwdiUIhvN90YERG5MgYW6li9DqgqsoQX6Thn+Xr5HFBf2fk1fENaBxqppyYSZi9f/HD2ErJ+PI/d/ypFtb5pivSkIX0wf+JAzB4XgUCNd8/dJxERyRoDC12d+iqgsq1A0xhq6qs6v4ZvqCW89BmMhoBI/FIXhH3FKuy7oEaRORT1UEPtpUDS6HDMnzgA1w0LhRenSBMReRQGFupZdZVNPTSXz7UONnpdp5e4JAThnCkU58VQnBf7okoVgSHDRmFybCyiho0EvLkZIxGRu2NgIeeqq7R9zNT8uHwOMFzp9BK1qlB4hwyGd8gQ28dO2oGAyt8SaLw0luMq1pghIiLnsff3d5cW5di4cSNeeeUVlJSUYPTo0Vi7di2mTZvWZt2FCxfi/fffb1UeExODf//73wCA9PR0PPjgg63q1NXVQaPheh4uySfIckSMa/2aKFrGyDTrmTFdPoeK86dgqDiLIH0J/IV6+BrKgZJyoORo55+nVFsCjDXENP/abpkP4K1p8dXOa3C2ExFRr3I4sGRmZmLZsmXYuHEjpk6dirfffhuzZs3CL7/8gkGDBrWqv27dOvzXf/2XdG40GjF+/HjceeedNvUCAwNx8uRJmzKGFTclCIBPH8vRfwIAQAmgX+PLl6r1+OjIcXyfn4fasrMYKFzEQOEiorwqMFJzCSHmciiNdRDMTYN4YdJbDnsGC3cHa8+Ot28boUfjWCDy0gBe6sayFufNX2dIIiIP5vAjocmTJ2PixInYtGmTVDZq1CjMmzcPaWlpnb5/586d+OMf/4iCggIMHjwYgKWHZdmyZaisrHSs9c3wkZB7OvX7FWzPK8aOH4tRqqu3eS1ABQwKEDDQX4EBAUCEr4gwHxH9fESEqs0IVpuh9TJCadYDDbVAQz1grGv8Wg801FkOqaz51zbKmgckZ1A2DzXqZsHGp8V58+BjT502wlHz15VqPnIjoh7TI4+EDAYDjh49iieeeMKmPCkpCYcOHbLrGlu2bMHNN98shRWr6upqDB48GCaTCRMmTMALL7yA2NjYdq+j1+uh1zctC6/TdT7Ik1zP8LAArLhlJJYnjcCh0+XY/mMxvj5Rhqq6BlwxAP+uEPHvClMb71QAUEAheCHUX4twrQZhgRqEB2os34dqEBaoRnigBmFaDQLUXp0vamdqaAw49W18bRmIOgk/DY3vMeot75e+1jedN9QBaPb3hLUXSW/HDK3uplR1HGoUXpZD6Q0olIDCu1lZ41drmXRuLVM2vs/L9mhZdtXXbjxnTxWRS3IosJSXl8NkMiEsLMymPCwsDKWlpZ2+v6SkBHv27MG2bdtsykeOHIn09HSMHTsWOp0O69atw9SpU3Hs2DEMHz68zWulpaVh1apVjjSfXJhSIWDa8L6YNrwvAKDWYERpVT1KdfX4XVeP0io9frd+r6vH71X1KLuih9EsouyKHmVX9ADa/0Xvq1Jawos10ARqEB6obvpeq0FffzW8NIEAeqkHTxQtIckm0Ogtgad5wGmobz/0dPX1VmHJYDnsmP0le0IbAcl6LigaQ42y8aui8XtFszJls3pt1W9ZZq3X4hrdXr9Fe6x1pUNoo8zROt1xDWudbgqOomjZesRssny1OUxNrzc/WtUVm9VvWbflNc1t1BU7uLa5g/8Wrf8GwlWUNSvv7jKbbxu/GRBnGZ/oBF0adNvyL1FRFO1acj09PR1BQUGYN2+eTfmUKVMwZcoU6Xzq1KmYOHEi3njjDaxfv77Na61cuRKpqanSuU6nQ2RkpAN3Qa7MV+WF6L7+iO7b9mq7AGA2iyiv0eP3Kj1KmwWZppBj+f5KvRG1BhPOlNfgTHlNu9dTCECov9qmtyYsUC0FGod6a+whCICXynL0NlG0PAJrM9BYQ1OzniCzCTA3WN5jarA9NxsBU+NXs/U1az2j7dHyvaZm9aUyYzvvM7b+3DbvzQQY2+qVo97VTrCx9oIJisYg0DJwmOwLA9QzFn0JRE5yykc7FFhCQ0OhVCpb9aaUlZW16nVpSRRFvPvuu0hJSYFK1fH/ASsUCkyaNAmnTp1qt45arYZarba/8eRxFAoB/QI06BegwVho261n7a35XaeXemgs5z3cWyPnRfIEwdLroPR2aE8pWRHFDsJOs4AjhZ2Gxr+mTY1/JZts/2K2ltm81qK+9JrYuqz5X96tXjO3+DxTi89t+TnmFtdsq37Lo42ehu58HY6ukCE23nNvhUehjWDUVq9QG71TivZ6ipRos0ep5bWlbopm/0ZtDR+Vytqq1957xZ4pa++znbg+lkOBRaVSIS4uDtnZ2bj99tul8uzsbMydO7fD9x44cAC//fYbFi1a1OnniKKI/Px8jB071pHmEXVJd/XW/K6rh87B3poQfzVC/VUI9lMhxE+NEH8VQvxUCPG3/d5PpeTGkY4SBMuYFqUXAM447HFt9oZ0JRhZ65g6eMzUMlQIbQSFlqGC//txdQ4/EkpNTUVKSgri4+ORkJCAzZs3o7CwEIsXLwZgeVRTXFyMrVu32rxvy5YtmDx5MsaMGdPqmqtWrcKUKVMwfPhw6HQ6rF+/Hvn5+XjzzTe7eFtE3cuR3prfdXqbHprOe2s6p/JSILQxvAT7qWyDjXRueS3UXw0flbK7bp3IPlIokHHPIbk0hwNLcnIyKioqsHr1apSUlGDMmDHYvXu3NOunpKQEhYWFNu+pqqpCVlYW1q1b1+Y1Kysr8dBDD6G0tBRarRaxsbHIycnBtdde24VbInIeX5UXokK9EBXq124da29NmU6P8mo9KqoNuFRjQHmNHpeqDaioMaCiWt/41YC6BhMMRjMuVNXjQlV9u9e1bYeyMdg0BpoW4cYabKzfq70YcIhI3rg0P5HM1RqMqGgMMpdq9ChvDDgVjWGnosaAipqm7w1GxwciBqi9ENxGr02wn+WRVVPvjQp9/FTwlvP4GyJyKT26ND8R9R5flRd8g70QGezbaV1RFFGtN1p6bKotoeZSjUHqrWkebKyvGc0iruiNuKI34lxFrV1t0vp4Nz2W8lNLYSfYr6n3JrixZ4cBh4i6AwMLkRsRBAEBGm8EaLwxOKT9x1JWoihCV2e0PI5qDDE2PTjNgs6lGku5WQSq6hpQVdeAMxfbH1jcXKDGS+q5CW72WMrag2MNOtaeHJUXAw4R2WJgIfJggiBA6+sNra83hvbtvL7JLKKqrsE22NQ0jcNp/v2lGgMu11oCjq7eCF29EQUdzJxqLkDtZRNqQvxUzR5ZNStrPDTeHIND5O4YWIjIbkqFIIWE4R0vvQTANuBU1Bikx1OXqi3jcaw9ONbyy7UGmJo9ojpr5yMqP5WyaQaVNcj4qxDa2GPT/JFViB9nURG5IgYWIuoxNgHHjvpmswhdfUOzIKOXAk5T4LHtxTGaRdQYTKi5VIvCS/YFHGkWlV+zXpzmoaZFL44v18EhcjoGFiKSDYVCQJCvCkG+KrseUYmiCF290WbMjTXIVLTRi3OpxgCDyYxagwm1hjqcv1xnV7vUXgrpsVTzINMUcpr17virum97BiKSMLAQkcsSBAFaH29ofbw7XPvGqvksqrZ6caRHVo1HebUeeqMZegfXwVEpFejj591qrI112njzgcchfioEaryhUDDgEHWEgYWIPEZXZlHVGkzNgozt46jm43Ks08RrDSYYTObGvansW8lYqRDQx9d2/E1IWyGnsSzIVwUlAw55GAYWIqJ2CIIAP7UX/NT2rYMDAPUNpmbjbvS24ca6Fo61F6fagCt6I0xmEeXVlpWP7WsX0MfXtufG5qt/85lVavTx9Zb3ZptEdmBgISLqRhpvJQYE+WBAkH272uqNJlyuabANN83CTssenaq6BogipDJ7CAIQ5ONts8lmW7031u8ZcEiOGFiIiJxI7aVEuFaJcK19O0o3mMy4XNvUQ9P8cVRFy0dV1XpUNgacy7UNuFzbgNN2LPbXbsDxbzngmAGHeg8DCxGRC/FWKqSdw+1hNJlRWdfQqtem+Zicbg04NqHGdsNNa/jpwzE41AUMLEREbsxLqUCovxqh/moAAZ3W782AY/s4qmnKePMdxUP91Qjy4SwqYmAhIqJmuhJwLtc2tLFNQ8vNNy3ftww49rAuQGhplwp9/dUIDbCEm9DG763l3GzTfTGwEBFRl3kpFegboEbfgO4POBU1BlTWNsBkFnHxih4Xr9g3i6qPr7cUuqzBpm9jqLGWhzR+z32oXAcDCxER9RpHA47BaJYW8Stv3HSzvFovbcBZXm0JMuWNiwCam/XenCqr7vT6AWqvFr01TaGmecAJDVDDj1s0OBUDCxERyZbKS4FwrcauWVRms4jLtQYpyDQPOOVXms6tYcdgMksbbdqzk7jGW4EQP0t46dtGb02ovxp9AyyDi4N8vRluuhkDCxERuQWFQrDMTPJXY0QnvTfWfaisYaaipinYXGyjF6fWYEJ9gxnFlXUorux8DyovhWATZPo19ipZvmrQL1CNvv5q9AtUw1fFX8X24L8SERF5nOb7UA3t699p/VqDEeVXDCivsfbWNPXiVFQbcNHao3NFD129EUazaPf2DH4qJfoFatDXX42+zYKM5atGOg/2VXn0bCkGFiIiok74qrwwKMQLg0I636JBb7TsP1V+pXGMTeM4m4tX9Ci7Ut/4VY8ynR51DSbUGEwoKK/p9LGUUiFYZkMFNIaZAI2l18Ym5Fh6b9xxMDEDCxERUTdSeykRofVBhLbz7Rmq9UZLgNHV42K1JcTYfq239OLUGGByoNcmQO3VrLdG06LXxvp4SuNSa9wwsBARETmJv9oL/movRIV2vHt4g8kyW8oSZOotXxt7aqSem8agozc2Dia+aMSZThby81II0qwt6zibvtaeG+u5v+Wrs3ttGFiIiIhkzlupQFigBmGBGgDaduuJoogremOzQFMvPY5qHnAuNq55YzSLKKmqR0lVfadtCNR44Z0HJuHaqOBuvDP7MbAQERG5CUEQEKjxRqDGG8P6dTyY2GA0o6JG33ZvTfNwc0UPg8kMXb0R/mrnxQYGFiIiIg+k8lLYNdZGFEXo6owou1Jv16DjnsLAQkRERO0SBAFaX29ofb2d2g7uEEVERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLHwEJERESyx8BCREREssfAQkRERLLXpcCyceNGREVFQaPRIC4uDgcPHmy37v79+yEIQqvjxIkTNvWysrIQExMDtVqNmJgY7NixoytNIyIiIjfkcGDJzMzEsmXL8NRTTyEvLw/Tpk3DrFmzUFhY2OH7Tp48iZKSEukYPny49Fpubi6Sk5ORkpKCY8eOISUlBQsWLMDhw4cdvyMiIiJyO4IoiqIjb5g8eTImTpyITZs2SWWjRo3CvHnzkJaW1qr+/v37ceONN+Ly5csICgpq85rJycnQ6XTYs2ePVHbLLbegT58+yMjIsKtdOp0OWq0WVVVVCAwMdOSWiIiIyEns/f3tUA+LwWDA0aNHkZSUZFOelJSEQ4cOdfje2NhYREREYPr06fjmm29sXsvNzW11zZkzZ3Z4Tb1eD51OZ3MQERGRe3IosJSXl8NkMiEsLMymPCwsDKWlpW2+JyIiAps3b0ZWVha2b9+OESNGYPr06cjJyZHqlJaWOnRNAEhLS4NWq5WOyMhIR26FiIiIXIhXV94kCILNuSiKrcqsRowYgREjRkjnCQkJKCoqwquvvorrr7++S9cEgJUrVyI1NVU61+l0DC1ERERuyqEeltDQUCiVylY9H2VlZa16SDoyZcoUnDp1SjoPDw93+JpqtRqBgYE2BxEREbknhwKLSqVCXFwcsrOzbcqzs7ORmJho93Xy8vIQEREhnSckJLS65r59+xy6JhEREbkvhx8JpaamIiUlBfHx8UhISMDmzZtRWFiIxYsXA7A8qikuLsbWrVsBAGvXrsWQIUMwevRoGAwGfPDBB8jKykJWVpZ0zaVLl+L666/HmjVrMHfuXHz66af48ssv8e2333bTbRIREZErcziwJCcno6KiAqtXr0ZJSQnGjBmD3bt3Y/DgwQCAkpISmzVZDAYDli9fjuLiYvj4+GD06NH44osvMHv2bKlOYmIiPvroIzz99NN45plnMHToUGRmZmLy5MndcItERETk6hxeh0WuuA4LERGR6+mRdViIiIiInIGBhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSvS4Fl48aNiIqKgkajQVxcHA4ePNhu3e3bt2PGjBno27cvAgMDkZCQgL1799rUSU9PhyAIrY76+vquNI+IiIjcjMOBJTMzE8uWLcNTTz2FvLw8TJs2DbNmzUJhYWGb9XNycjBjxgzs3r0bR48exY033og5c+YgLy/Ppl5gYCBKSkpsDo1G07W7IiIiIrciiKIoOvKGyZMnY+LEidi0aZNUNmrUKMybNw9paWl2XWP06NFITk7Gs88+C8DSw7Js2TJUVlY60hQbOp0OWq0WVVVVCAwM7PJ1iIiIqPfY+/vboR4Wg8GAo0ePIikpyaY8KSkJhw4dsusaZrMZV65cQXBwsE15dXU1Bg8ejIEDB+K2225r1QPTkl6vh06nszmIiIjIPTkUWMrLy2EymRAWFmZTHhYWhtLSUruu8dprr6GmpgYLFiyQykaOHIn09HTs2rULGRkZ0Gg0mDp1Kk6dOtXuddLS0qDVaqUjMjLSkVshIiIiF9KlQbeCINici6LYqqwtGRkZeP7555GZmYl+/fpJ5VOmTMF9992H8ePHY9q0afj4449xzTXX4I033mj3WitXrkRVVZV0FBUVdeVWiIiIyAV4OVI5NDQUSqWyVW9KWVlZq16XljIzM7Fo0SJ88sknuPnmmzusq1AoMGnSpA57WNRqNdRqtf2NJyIiIpflUA+LSqVCXFwcsrOzbcqzs7ORmJjY7vsyMjKwcOFCbNu2DbfeemunnyOKIvLz8xEREeFI84iIiMhNOdTDAgCpqalISUlBfHw8EhISsHnzZhQWFmLx4sUALI9qiouLsXXrVgCWsHL//fdj3bp1mDJlitQ74+PjA61WCwBYtWoVpkyZguHDh0On02H9+vXIz8/Hm2++2V33SURERC7M4cCSnJyMiooKrF69GiUlJRgzZgx2796NwYMHAwBKSkps1mR5++23YTQasWTJEixZskQqf+CBB5Ceng4AqKysxEMPPYTS0lJotVrExsYiJycH11577VXeHhEREbkDh9dhkSuuw0JEROR6emQdFiIiIiJnYGAhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2WNgISIiItljYCEiIiLZY2AhIiIi2etSYNm4cSOioqKg0WgQFxeHgwcPdlj/wIEDiIuLg0ajQXR0NN56661WdbKyshATEwO1Wo2YmBjs2LGjK00jIiIiN+RwYMnMzMSyZcvw1FNPIS8vD9OmTcOsWbNQWFjYZv2CggLMnj0b06ZNQ15eHp588kk8+uijyMrKkurk5uYiOTkZKSkpOHbsGFJSUrBgwQIcPny463dGREREbkMQRVF05A2TJ0/GxIkTsWnTJqls1KhRmDdvHtLS0lrVX7FiBXbt2oXjx49LZYsXL8axY8eQm5sLAEhOToZOp8OePXukOrfccgv69OmDjIwMu9ql0+mg1WpRVVWFwMBAR26JiIiInMTe399ejlzUYDDg6NGjeOKJJ2zKk5KScOjQoTbfk5ubi6SkJJuymTNnYsuWLWhoaIC3tzdyc3Px2GOPtaqzdu3adtui1+uh1+ul86qqKgCWGyciIiLXYP293Vn/iUOBpby8HCaTCWFhYTblYWFhKC0tbfM9paWlbdY3Go0oLy9HREREu3XauyYApKWlYdWqVa3KIyMj7b0dIiIikokrV65Aq9W2+7pDgcVKEASbc1EUW5V1Vr9luaPXXLlyJVJTU6Vzs9mMS5cuISQkpMP3OUqn0yEyMhJFRUV81CQD/HnID38m8sKfh7zw59E5URRx5coV9O/fv8N6DgWW0NBQKJXKVj0fZWVlrXpIrMLDw9us7+XlhZCQkA7rtHdNAFCr1VCr1TZlQUFB9t6KwwIDA/kfm4zw5yE//JnIC38e8sKfR8c66lmxcmiWkEqlQlxcHLKzs23Ks7OzkZiY2OZ7EhISWtXft28f4uPj4e3t3WGd9q5JREREnsXhR0KpqalISUlBfHw8EhISsHnzZhQWFmLx4sUALI9qiouLsXXrVgCWGUEbNmxAamoq/vKXvyA3Nxdbtmyxmf2zdOlSXH/99VizZg3mzp2LTz/9FF9++SW+/fbbbrpNIiIicmUOB5bk5GRUVFRg9erVKCkpwZgxY7B7924MHjwYAFBSUmKzJktUVBR2796Nxx57DG+++Sb69++P9evXY/78+VKdxMREfPTRR3j66afxzDPPYOjQocjMzMTkyZO74RavjlqtxnPPPdfq8RM5B38e8sOfibzw5yEv/Hl0H4fXYSEiIiLqbdxLiIiIiGSPgYWIiIhkj4GFiIiIZI+BhYiIiGSPgYWIiIhkj4GlExs3bkRUVBQ0Gg3i4uJw8OBBZzfJI6WlpWHSpEkICAhAv379MG/ePJw8edLZzaJGaWlpEAQBy5Ytc3ZTPFZxcTHuu+8+hISEwNfXFxMmTMDRo0ed3SyPZTQa8fTTTyMqKgo+Pj6Ijo7G6tWrYTabnd00l8XA0oHMzEwsW7YMTz31FPLy8jBt2jTMmjXLZp0Z6h0HDhzAkiVL8N133yE7OxtGoxFJSUmoqalxdtM83g8//IDNmzdj3Lhxzm6Kx7p8+TKmTp0Kb29v7NmzB7/88gtee+21Ht2uhDq2Zs0avPXWW9iwYQOOHz+Ol19+Ga+88greeOMNZzfNZXEdlg5MnjwZEydOxKZNm6SyUaNGYd68eUhLS3Niy+jixYvo168fDhw4gOuvv97ZzfFY1dXVmDhxIjZu3IgXX3wREyZMwNq1a53dLI/zxBNP4P/+7//YAywjt912G8LCwrBlyxapbP78+fD19cU///lPJ7bMdbGHpR0GgwFHjx5FUlKSTXlSUhIOHTrkpFaRVVVVFQAgODjYyS3xbEuWLMGtt96Km2++2dlN8Wi7du1CfHw87rzzTvTr1w+xsbH47//+b2c3y6Ndd911+Oqrr/Drr78CAI4dO4Zvv/0Ws2fPdnLLXJfDS/N7ivLycphMplY7RoeFhbXaWZp6lyiKSE1NxXXXXYcxY8Y4uzke66OPPsKPP/6IH374wdlN8XhnzpzBpk2bkJqaiieffBLff/89Hn30UajVatx///3Obp5HWrFiBaqqqjBy5EgolUqYTCb8/e9/x9133+3sprksBpZOCIJgcy6KYqsy6l0PP/wwfvrpJ26O6URFRUVYunQp9u3bB41G4+zmeDyz2Yz4+Hi89NJLAIDY2Fj8+9//xqZNmxhYnCQzMxMffPABtm3bhtGjRyM/Px/Lli1D//798cADDzi7eS6JgaUdoaGhUCqVrXpTysrKWvW6UO955JFHsGvXLuTk5GDgwIHObo7HOnr0KMrKyhAXFyeVmUwm5OTkYMOGDdDr9VAqlU5soWeJiIhATEyMTdmoUaOQlZXlpBbR448/jieeeAJ33XUXAGDs2LE4d+4c0tLSGFi6iGNY2qFSqRAXF4fs7Gyb8uzsbCQmJjqpVZ5LFEU8/PDD2L59O77++mtERUU5u0kebfr06fjXv/6F/Px86YiPj8e9996L/Px8hpVeNnXq1FbT/H/99VcMHjzYSS2i2tpaKBS2v2KVSiWnNV8F9rB0IDU1FSkpKYiPj0dCQgI2b96MwsJCLF682NlN8zhLlizBtm3b8OmnnyIgIEDq+dJqtfDx8XFy6zxPQEBAq/FDfn5+CAkJ4bgiJ3jssceQmJiIl156CQsWLMD333+PzZs3Y/Pmzc5umseaM2cO/v73v2PQoEEYPXo08vLy8Prrr+NPf/qTs5vmukTq0JtvvikOHjxYVKlU4sSJE8UDBw44u0keCUCbx3vvvefsplGj//iP/xCXLl3q7GZ4rM8++0wcM2aMqFarxZEjR4qbN292dpM8mk6nE5cuXSoOGjRI1Gg0YnR0tPjUU0+Jer3e2U1zWVyHhYiIiGSPY1iIiIhI9hhYiIiISPYYWIiIiEj2GFiIiIhI9hhYiIiISPYYWIiIiEj2GFiIiIhI9hhYiIiISPYYWIiIiEj2GFiIiIhI9hhYiIiISPb+f3Kx+79veDW7AAAAAElFTkSuQmCC", + "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", @@ -392,9 +1421,22 @@ "Now that the model is trained, let's check out the quality of predictions:" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1:No, the model does not appear to have overfit. Both the training loss and validation loss are decreasing steadily over the epochs, and the validation loss plateaued without increasing. \n", + "This suggests that the model is generalizing well to unseen data rather than memorizing the training set.\n", + "\n", + "2: To further prevent overfitting, we could add regularization techniques such as:\n", + "• \tDropout layers to randomly deactivate parts of the network during training\n", + "• \tL2 regularization on the embedding layers to penalize large weights\n", + "• \tEarly stopping to halt training when validation loss stops improvin-" + ] + }, { "cell_type": "code", - "execution_count": null, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -409,9 +1451,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 24, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m625/625\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m3s\u001b[0m 4ms/step\n", + "Final test MSE: 0.894\n", + "Final test MAE: 0.728\n" + ] + }, + { + "data": { + "image/png": "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F1+MEGLV4573vGdstQ7LD37wA57znOdw9NFH0+12efCDH8y111471vfYtgZg0ttL/83f/A0vf/nLufDCC/nqV7/Kox/9aM466yxuuumm2KodwNLSEg960IN4xzveEVuVNfHpT3+a8847jy9+8YtcffXVGGN44hOfyNLSUmzVDsl97nMffv/3f58vf/nLfPnLX+Zxj3scT3nKU/j6178eW7XDcs0113DZZZdx2mmnxVblLvmpn/opbr755tHj+uuvj63SIbnzzjt55CMfSZZlfOxjH+Mb3/gGf/zHfzz+ZtZvc6644go/Pz8fW40DePjDH+7PPffcVddOPvlk/5rXvCaSRmsD8FdddVVsNcbi1ltv9YD/9Kc/HVuVsTjyyCP95ZdfHluNQ7Jv3z5///vf31999dX+MY95jH/Zy14WW6VDctFFF/kHPehBsdVYM69+9av9ox71qB/5+2zbE8AkU9c11157LU984hNXXX/iE5/IF77whUhabV2GbcLX00wrBtZaPvCBD7C0tMQZZ5wRW51Dct555/ELv/ALPOEJT4itypq44YYbOP744znxxBN55jOfyXe/+93YKh2Sj3zkI5x++un88i//MscddxwPechDePe73z3290kGYAK57bbbsNZyj3vcY9X1e9zjHtxyyy2RtNqaeO85//zzedSjHsWpp54aW53Dcv311zM7O0tRFJx77rlcddVVPOABD4it1kH5wAc+wFe+8hV27doVW5U18YhHPIL3vve9fOITn+Dd7343t9xyC2eeeSa33357bNUOyne/+10uvfRS7n//+/OJT3yCc889l5e+9KW8973vHev7bCkDcLBAzv6PL3/5y7HVXDNCiFWvvfcHXEv8aLz4xS/ma1/7Gn/9138dW5W75Cd/8ie57rrr+OIXv8gLX/hCzjnnHL7xjW/EVusAdu/ezcte9jLe9773UZZlbHXWxFlnncXTnvY0HvjAB/KEJzyBj370owCr2s9MEs45fvqnf5o3v/nNPOQhD+G3fuu3eMELXsCll1461veZml5Aa2Gz20vfXRxzzDEopQ7Y7d96660HnAoS6+clL3kJH/nIR/jMZz7Dfe5zn9jq3CV5nnPSSScBcPrpp3PNNdfwtre9jXe9612RNVvNtddey6233spDH/rQ0TVrLZ/5zGd4xzveQVVVKKUianjXzMzM8MAHPpAbbrghtioH5V73utcBp79TTjmFD33oQ2N9ny1lALZKe+k8z3noQx/K1VdfzS/+4i+Orl999dU85SlPiajZ1sB7z0te8hKuuuoqPvWpT3HiiSfGVmldeO9XjTydFB7/+McfkEHzvOc9j5NPPplXv/rVE7/4Qxgn+81vfpNHP/rRsVU5KI985CMPSF3+9re/zQknnDDW99lSBmAcJr299Pnnn8+v/uqvcvrpp3PGGWdw2WWXcdNNN3HuuefGVu0AFhcX+c53vjN6feONN3Lddddx1FFHcd/73jeiZgfnvPPO4/3vfz9///d/z9zc3OikNT8/T6fTiazdwfmd3/kdzjrrLHbu3Mm+ffv4wAc+wKc+9Sk+/vGPx1btAObm5g6Ip8zMzHD00UdPbJzlla98JU9+8pO5733vy6233sob3/hGFhYWOOecc2KrdlB++7d/mzPPPJM3v/nNPP3pT+dLX/oSl112GZdddtl43+hHziOaUs455xwPHPD45Cc/GVu1EX/2Z3/mTzjhBJ/nuf/pn/7piU1T/OQnP3nQv+U555wTW7WDcjBdAX/FFVfEVu2Q/Pqv//rovXDsscf6xz/+8f6f/umfYqu1ZiY9DfQZz3iGv9e97uWzLPPHH3+8f+pTn+q//vWvx1brsPzDP/yDP/XUU31RFP7kk0/2l1122djfI7WDTiQSiW3KlsoCSiQSicTaSQYgkUgktinJACQSicQ2JRmARCKR2KYkA5BIJBLblGQAEolEYpuSDEAikUhsU5IBSCQSiW1KMgCJxARzv/vdj7e+9a2x1UhsUZIBSEw9d9UC/LnPfW5sFe+SK6+88qDj/K655hp+8zd/8+5XKLEt2LbN4BJbh5tvvnn09d/8zd/wute9blWnxP0bvDVNQ5Zld4tudV2T5/m6//2xxx67gdokEqtJJ4DE1HPPe95z9Jifn0cIMXo9GAw44ogj+OAHP8hjH/tYyrLkfe97HxdffDEPfvCDV32ft771rQfMi7jiiis45ZRTKMuSk08+mUsuueSwujz2sY/lxS9+Meeffz7HHHMMP/dzPwfAW97yFh74wAcyMzPDzp07edGLXsTi4iIAn/rUp3je857H3r17R6eWiy++GDjQBSSE4PLLL+cXf/EX6Xa73P/+9+cjH/nIKh0+8pGPcP/7359Op8PP/uzP8p73vAchBHv27Bn7b5vY2iQDkNgWvPrVr+alL30p3/zmN/n5n//5Nf2bd7/73Vx44YW86U1v4pvf/CZvfvObee1rX3uXU6Le8573oLXm85///GhYi5SSt7/97fzf//t/ec973sO//Mu/8KpXvQqAM888k7e+9a3s2LGDm2++mZtvvplXvvKVh/z+r3/963n605/O1772NZ70pCfx7Gc/mzvuuAOAf//3f+eXfumXOPvss7nuuuv4rd/6LS688MI1/b6JbciG9yhNJCJyxRVX+Pn5+dHrG2+80QP+rW996yq5iy66yD/oQQ9ade1P/uRP/AknnDB6vXPnTv/+979/lcwb3vAGf8YZZxzy5z/mMY/xD37wg+9Szw9+8IP+6KOPPqTeQ0444QT/J3/yJ6PXgP/d3/3d0evFxUUvhPAf+9jHvPfev/rVr/annnrqqu9x4YUXesDfeeedd6lXYnuRYgCJbcHpp58+lvwPf/hDdu/ezW/8xm/wghe8YHTdGMP8/PzYP+uTn/wkb37zm/nGN77BwsICxhgGgwFLS0vMzMyMpdtpp502+npmZoa5uTluvfVWAL71rW/xsIc9bJX8wx/+8LG+f2L7kAxAYluw/yIrpcTvNwqjaZrR1845ILiBHvGIR6ySu6uRhvv/rO9973s86UlP4txzz+UNb3gDRx11FJ/73Of4jd/4jVU/c63sH8AWQoz09d4jhFh1f//fM5EYkgxAYlty7LHHcsstt6xaMIdjQQHucY97cO9735vvfve7PPvZz/6RftaXv/xljDH88R//MVKGsNsHP/jBVTJ5nmOt/ZF+DsDJJ5/MP/7jPx7w8xOJg5GCwIltyWMf+1h++MMf8od/+If827/9G3/2Z3/Gxz72sVUyF198Mbt27eJtb3sb3/72t7n++uu54ooreMtb3jLWz/rxH/9xjDH86Z/+Kd/97nf5y7/8S975zneukrnf/e7H4uIi//zP/8xtt91Gr9db1+/1W7/1W/zrv/4rr371q/n2t7/NBz/4Qa688kqAA04GiUQyAIltySmnnMIll1zCn/3Zn/GgBz2IL33pSwdk3jz/+c/n8ssv58orr+SBD3wgj3nMY7jyyis58cQTx/pZD37wg3nLW97CH/zBH3DqqafyV3/1V+zatWuVzJlnnsm5557LM57xDI499lj+8A//cF2/14knnsjf/u3f8uEPf5jTTjuNSy+9dJQFVBTFur5nYuuSZgInElucN73pTbzzne9k9+7dsVVJTBgpBpBIbDEuueQSHvawh3H00Ufz+c9/nv/23/4bL37xi2OrlZhAkgFIJLYYN9xwA2984xu54447uO9978srXvEKLrjggthqJSaQ5AJKJBKJbUoKAicSicQ2JRmARCKR2KYkA5BIJBLblGQAEolEYpuSDEAikUhsU5IBSCQSiW1KMgCJRCKxTUkGIJFIJLYp/z8k7dOBzP1pwwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "from sklearn.metrics import mean_squared_error\n", "from sklearn.metrics import mean_absolute_error\n", @@ -446,7 +1508,18 @@ "cell_type": "code", "execution_count": null, "metadata": {}, - "outputs": [], + "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", @@ -455,7 +1528,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 27, "metadata": {}, "outputs": [], "source": [ @@ -465,9 +1538,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 29, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Title for item_id=181: Return of the Jedi (1983)\n" + ] + } + ], "source": [ "item_id = 181\n", "print(f\"Title for item_id={item_id}: {indexed_items['title'][item_id]}\")" @@ -475,9 +1556,29 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 30, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Embedding vector for item_id=181\n", + "[ 0.19666427 0.12614135 -0.4329485 -0.33436355 -0.05360564 0.24535777\n", + " -0.5473587 -0.31980675 0.44726893 -0.59421456 -0.48498863 -0.60437524\n", + " -0.5434049 0.47909215 -0.2198356 0.25199366 -0.28920415 0.43634734\n", + " -0.14678705 0.22963442 0.21084853 0.27421823 -0.510294 -0.31393963\n", + " -0.40492627 -0.00210726 -0.33506495 0.11470788 0.39729762 -0.25094807\n", + " 0.2500808 -0.40917754 0.3819835 0.28949803 0.2814056 -0.22811536\n", + " 0.05227163 -0.1946421 0.45404553 -0.09843884 0.19859931 -0.35464317\n", + " -0.54850507 -0.47827658 0.21085681 -0.15111978 -0.2580843 0.02373043\n", + " 0.34989685 -0.04339815 0.3949081 -0.3585068 -0.35795847 -0.11493172\n", + " -0.18053831 0.51789916 -0.05528196 -0.35233542 -0.31712422 -0.03231258\n", + " 0.03062071 -0.5321736 -0.32209283 0.2928794 ]\n", + "shape: (64,)\n" + ] + } + ], "source": [ "print(f\"Embedding vector for item_id={item_id}\")\n", "print(item_embeddings[item_id])\n", @@ -504,7 +1605,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 32, "metadata": { "collapsed": false }, @@ -521,9 +1622,19 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 33, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Star Wars (1977)\n", + "Return of the Jedi (1983)\n", + "Cosine similarity: 0.905\n" + ] + } + ], "source": [ "def print_similarity(item_a, item_b, item_embeddings, titles):\n", " print(titles[item_a])\n", @@ -546,27 +1657,57 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 34, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Scream (1996)\n", + "Cosine similarity: 0.68\n" + ] + } + ], "source": [ "print_similarity(181, 288, item_embeddings, indexed_items[\"title\"])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 35, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Toy Story (1995)\n", + "Cosine similarity: 0.817\n" + ] + } + ], "source": [ "print_similarity(181, 1, item_embeddings, indexed_items[\"title\"])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 36, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Return of the Jedi (1983)\n", + "Return of the Jedi (1983)\n", + "Cosine similarity: 1.0\n" + ] + } + ], "source": [ "print_similarity(181, 181, item_embeddings, indexed_items[\"title\"])" ] @@ -579,7 +1720,9 @@ "source": [ "*Quick Exercise*:\n", "\n", - "- 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_?" + "- Find some other films and compare their similarity. \n", + "Do the results make sense to you? \n", + "Can you find a pair of films that are very _dissimilar_?" ] }, { @@ -597,6 +1740,40 @@ "raise NotImplementedError(\"Please implement the next steps yourself\")" ] }, + { + "cell_type": "code", + "execution_count": 50, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1. 181: Return of the Jedi (1983) (score: 1.000)\n", + "2. 50: Star Wars (1977) (score: 0.905)\n", + "3. 172: Empire Strikes Back, The (1980) (score: 0.903)\n", + "4. 96: Terminator 2: Judgment Day (1991) (score: 0.885)\n", + "5. 174: Raiders of the Lost Ark (1981) (score: 0.873)\n", + "6. 228: Star Trek: The Wrath of Khan (1982) (score: 0.871)\n", + "7. 230: Star Trek IV: The Voyage Home (1986) (score: 0.861)\n", + "8. 85: Ref, The (1994) (score: 0.857)\n", + "9. 210: Indiana Jones and the Last Crusade (1989) (score: 0.856)\n", + "10. 222: Star Trek: First Contact (1996) (score: 0.849)\n" + ] + } + ], + "source": [ + "# 3. Find Most Similar Movies to One Match\n", + "\n", + "target_id = ids[0]\n", + "sims = cosine_similarity(item_embeddings[target_id].reshape(1, -1), item_embeddings).ravel()\n", + "top_n = 10\n", + "top_idxs = np.argsort(sims)[::-1][:top_n]\n", + "\n", + "for rank, idx in enumerate(top_idxs, start=1):\n", + " print(f\"{rank}. {idx}: {indexed_items.loc[idx, 'title']} (score: {sims[idx]:.3f})\")" + ] + }, { "cell_type": "markdown", "metadata": { @@ -608,9 +1785,31 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 51, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[(np.int64(50), 'Star Wars (1977)', np.float32(1.0)),\n", + " (np.int64(172), 'Empire Strikes Back, The (1980)', np.float32(0.91552556)),\n", + " (np.int64(181), 'Return of the Jedi (1983)', np.float32(0.9051323)),\n", + " (np.int64(96), 'Terminator 2: Judgment Day (1991)', np.float32(0.8817884)),\n", + " (np.int64(432), 'Fantasia (1940)', np.float32(0.8609283)),\n", + " (np.int64(12), 'Usual Suspects, The (1995)', np.float32(0.8534709)),\n", + " (np.int64(194), 'Sting, The (1973)', np.float32(0.8452879)),\n", + " (np.int64(56), 'Pulp Fiction (1994)', np.float32(0.84500945)),\n", + " (np.int64(174), 'Raiders of the Lost Ark (1981)', np.float32(0.8444904)),\n", + " (np.int64(228),\n", + " 'Star Trek: The Wrath of Khan (1982)',\n", + " np.float32(0.84265536))]" + ] + }, + "execution_count": 51, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "def most_similar(item_id, item_embeddings, titles,\n", " top_n=30):\n", @@ -657,7 +1856,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 52, "metadata": {}, "outputs": [], "source": [ @@ -668,9 +1867,20 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 53, "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", @@ -682,11 +1892,9316 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 54, "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "customdata": [ + [ + 1, + "Toy Story (1995)", + 452 + ], + [ + 2, + "GoldenEye (1995)", + 131 + ], + [ + 3, + "Four Rooms (1995)", + 90 + ], + [ + 4, + "Get Shorty (1995)", + 209 + ], + [ + 5, + "Copycat (1995)", + 86 + ], + [ + 6, + "Shanghai Triad (Yao a yao yao dao waipo qiao) (1995)", + 26 + ], + [ + 7, + "Twelve Monkeys (1995)", + 392 + ], + [ + 8, + "Babe (1995)", + 219 + ], + [ + 9, + "Dead Man Walking (1995)", + 299 + ], + [ + 10, + "Richard III (1995)", + 89 + ], + [ + 11, + "Seven (Se7en) (1995)", + 236 + ], + [ + 12, + "Usual Suspects, The (1995)", + 267 + ], + [ + 13, + "Mighty Aphrodite (1995)", + 184 + ], + [ + 14, + "Postino, Il (1994)", + 183 + ], + [ + 15, + "Mr. Holland's Opus (1995)", + 293 + ], + [ + 16, + "French Twist (Gazon maudit) (1995)", + 39 + ], + [ + 17, + "From Dusk Till Dawn (1996)", + 92 + ], + [ + 18, + "White Balloon, The (1995)", + 10 + ], + [ + 19, + "Antonia's Line (1995)", + 69 + ], + [ + 20, + "Angels and Insects (1995)", + 72 + ], + [ + 21, + "Muppet Treasure Island (1996)", + 84 + ], + [ + 22, + "Braveheart (1995)", + 297 + ], + [ + 23, + "Taxi Driver (1976)", + 182 + ], + [ + 24, + "Rumble in the Bronx (1995)", + 174 + ], + [ + 25, + "Birdcage, The (1996)", + 293 + ], + [ + 26, + "Brothers McMullen, The (1995)", + 73 + ], + [ + 27, + "Bad Boys (1995)", + 57 + ], + [ + 28, + "Apollo 13 (1995)", + 276 + ], + [ + 29, + "Batman Forever (1995)", + 114 + ], + [ + 30, + "Belle de jour (1967)", + 37 + ], + [ + 31, + "Crimson Tide (1995)", + 154 + ], + [ + 32, + "Crumb (1994)", + 81 + ], + [ + 33, + "Desperado (1995)", + 97 + ], + [ + 34, + "Doom Generation, The (1995)", + 7 + ], + [ + 35, + "Free Willy 2: The Adventure Home (1995)", + 11 + ], + [ + 36, + "Mad Love (1995)", + 13 + ], + [ + 37, + "Nadja (1994)", + 8 + ], + [ + 38, + "Net, The (1995)", + 120 + ], + [ + 39, + "Strange Days (1995)", + 87 + ], + [ + 40, + "To Wong Foo, Thanks for Everything! Julie Newmar (1995)", + 57 + ], + [ + 41, + "Billy Madison (1995)", + 37 + ], + [ + 42, + "Clerks (1994)", + 148 + ], + [ + 43, + "Disclosure (1994)", + 40 + ], + [ + 44, + "Dolores Claiborne (1994)", + 79 + ], + [ + 45, + "Eat Drink Man Woman (1994)", + 80 + ], + [ + 46, + "Exotica (1994)", + 27 + ], + [ + 47, + "Ed Wood (1994)", + 133 + ], + [ + 48, + "Hoop Dreams (1994)", + 117 + ], + [ + 49, + "I.Q. (1994)", + 81 + ], + [ + 50, + "Star Wars (1977)", + 583 + ], + [ + 51, + "Legends of the Fall (1994)", + 81 + ], + [ + 52, + "Madness of King George, The (1994)", + 91 + ], + [ + 53, + "Natural Born Killers (1994)", + 128 + ], + [ + 54, + "Outbreak (1995)", + 104 + ], + [ + 55, + "Professional, The (1994)", + 149 + ], + [ + 56, + "Pulp Fiction (1994)", + 394 + ], + [ + 57, + "Priest (1994)", + 40 + ], + [ + 58, + "Quiz Show (1994)", + 175 + ], + [ + 59, + "Three Colors: Red (1994)", + 83 + ], + [ + 60, + "Three Colors: Blue (1993)", + 64 + ], + [ + 61, + "Three Colors: White (1994)", + 59 + ], + [ + 62, + "Stargate (1994)", + 127 + ], + [ + 63, + "Santa Clause, The (1994)", + 82 + ], + [ + 64, + "Shawshank Redemption, The (1994)", + 283 + ], + [ + 65, + "What's Eating Gilbert Grape (1993)", + 115 + ], + [ + 66, + "While You Were Sleeping (1995)", + 162 + ], + [ + 67, + "Ace Ventura: Pet Detective (1994)", + 103 + ], + [ + 68, + "Crow, The (1994)", + 134 + ], + [ + 69, + "Forrest Gump (1994)", + 321 + ], + [ + 70, + "Four Weddings and a Funeral (1994)", + 251 + ], + [ + 71, + "Lion King, The (1994)", + 220 + ], + [ + 72, + "Mask, The (1994)", + 129 + ], + [ + 73, + "Maverick (1994)", + 128 + ], + [ + 74, + "Faster Pussycat! Kill! Kill! (1965)", + 7 + ], + [ + 75, + "Brother Minister: The Assassination of Malcolm X (1994)", + 5 + ], + [ + 76, + "Carlito's Way (1993)", + 54 + ], + [ + 77, + "Firm, The (1993)", + 151 + ], + [ + 78, + "Free Willy (1993)", + 33 + ], + [ + 79, + "Fugitive, The (1993)", + 336 + ], + [ + 80, + "Hot Shots! Part Deux (1993)", + 68 + ], + [ + 81, + "Hudsucker Proxy, The (1994)", + 110 + ], + [ + 82, + "Jurassic Park (1993)", + 261 + ], + [ + 83, + "Much Ado About Nothing (1993)", + 176 + ], + [ + 84, + "Robert A. Heinlein's The Puppet Masters (1994)", + 18 + ], + [ + 85, + "Ref, The (1994)", + 58 + ], + [ + 86, + "Remains of the Day, The (1993)", + 150 + ], + [ + 87, + "Searching for Bobby Fischer (1993)", + 138 + ], + [ + 88, + "Sleepless in Seattle (1993)", + 213 + ], + [ + 89, + "Blade Runner (1982)", + 275 + ], + [ + 90, + "So I Married an Axe Murderer (1993)", + 95 + ], + [ + 91, + "Nightmare Before Christmas, The (1993)", + 143 + ], + [ + 92, + "True Romance (1993)", + 104 + ], + [ + 93, + "Welcome to the Dollhouse (1995)", + 112 + ], + [ + 94, + "Home Alone (1990)", + 137 + ], + [ + 95, + "Aladdin (1992)", + 219 + ], + [ + 96, + "Terminator 2: Judgment Day (1991)", + 295 + ], + [ + 97, + "Dances with Wolves (1990)", + 256 + ], + [ + 98, + "Silence of the Lambs, The (1991)", + 390 + ], + [ + 99, + "Snow White and the Seven Dwarfs (1937)", + 172 + ], + [ + 100, + "Fargo (1996)", + 508 + ], + [ + 101, + "Heavy Metal (1981)", + 73 + ], + [ + 102, + "Aristocats, The (1970)", + 54 + ], + [ + 103, + "All Dogs Go to Heaven 2 (1996)", + 15 + ], + [ + 104, + "Theodore Rex (1995)", + 5 + ], + [ + 105, + "Sgt. Bilko (1996)", + 74 + ], + [ + 106, + "Diabolique (1996)", + 71 + ], + [ + 107, + "Moll Flanders (1996)", + 42 + ], + [ + 108, + "Kids in the Hall: Brain Candy (1996)", + 65 + ], + [ + 109, + "Mystery Science Theater 3000: The Movie (1996)", + 130 + ], + [ + 110, + "Operation Dumbo Drop (1995)", + 31 + ], + [ + 111, + "Truth About Cats & Dogs, The (1996)", + 272 + ], + [ + 112, + "Flipper (1996)", + 20 + ], + [ + 113, + "Horseman on the Roof, The (Hussard sur le toit, Le) (1995)", + 9 + ], + [ + 114, + "Wallace & Gromit: The Best of Aardman Animation (1996)", + 67 + ], + [ + 115, + "Haunted World of Edward D. Wood Jr., The (1995)", + 15 + ], + [ + 116, + "Cold Comfort Farm (1995)", + 125 + ], + [ + 117, + "Rock, The (1996)", + 378 + ], + [ + 118, + "Twister (1996)", + 293 + ], + [ + 119, + "Maya Lin: A Strong Clear Vision (1994)", + 4 + ], + [ + 120, + "Striptease (1996)", + 67 + ], + [ + 121, + "Independence Day (ID4) (1996)", + 429 + ], + [ + 122, + "Cable Guy, The (1996)", + 106 + ], + [ + 123, + "Frighteners, The (1996)", + 115 + ], + [ + 124, + "Lone Star (1996)", + 187 + ], + [ + 125, + "Phenomenon (1996)", + 244 + ], + [ + 126, + "Spitfire Grill, The (1996)", + 97 + ], + [ + 127, + "Godfather, The (1972)", + 413 + ], + [ + 128, + "Supercop (1992)", + 65 + ], + [ + 129, + "Bound (1996)", + 129 + ], + [ + 130, + "Kansas City (1996)", + 23 + ], + [ + 131, + "Breakfast at Tiffany's (1961)", + 95 + ], + [ + 132, + "Wizard of Oz, The (1939)", + 246 + ], + [ + 133, + "Gone with the Wind (1939)", + 171 + ], + [ + 134, + "Citizen Kane (1941)", + 198 + ], + [ + 135, + "2001: A Space Odyssey (1968)", + 259 + ], + [ + 136, + "Mr. Smith Goes to Washington (1939)", + 105 + ], + [ + 137, + "Big Night (1996)", + 171 + ], + [ + 138, + "D3: The Mighty Ducks (1996)", + 19 + ], + [ + 139, + "Love Bug, The (1969)", + 50 + ], + [ + 140, + "Homeward Bound: The Incredible Journey (1993)", + 61 + ], + [ + 141, + "20,000 Leagues Under the Sea (1954)", + 72 + ], + [ + 142, + "Bedknobs and Broomsticks (1971)", + 57 + ], + [ + 143, + "Sound of Music, The (1965)", + 222 + ], + [ + 144, + "Die Hard (1988)", + 243 + ], + [ + 145, + "Lawnmower Man, The (1992)", + 65 + ], + [ + 146, + "Unhook the Stars (1996)", + 10 + ], + [ + 147, + "Long Kiss Goodnight, The (1996)", + 185 + ], + [ + 148, + "Ghost and the Darkness, The (1996)", + 128 + ], + [ + 149, + "Jude (1996)", + 23 + ], + [ + 150, + "Swingers (1996)", + 157 + ], + [ + 151, + "Willy Wonka and the Chocolate Factory (1971)", + 326 + ], + [ + 152, + "Sleeper (1973)", + 82 + ], + [ + 153, + "Fish Called Wanda, A (1988)", + 247 + ], + [ + 154, + "Monty Python's Life of Brian (1979)", + 174 + ], + [ + 155, + "Dirty Dancing (1987)", + 98 + ], + [ + 156, + "Reservoir Dogs (1992)", + 148 + ], + [ + 157, + "Platoon (1986)", + 127 + ], + [ + 158, + "Weekend at Bernie's (1989)", + 60 + ], + [ + 159, + "Basic Instinct (1992)", + 101 + ], + [ + 160, + "Glengarry Glen Ross (1992)", + 69 + ], + [ + 161, + "Top Gun (1986)", + 220 + ], + [ + 162, + "On Golden Pond (1981)", + 106 + ], + [ + 163, + "Return of the Pink Panther, The (1974)", + 92 + ], + [ + 164, + "Abyss, The (1989)", + 151 + ], + [ + 165, + "Jean de Florette (1986)", + 64 + ], + [ + 166, + "Manon of the Spring (Manon des sources) (1986)", + 58 + ], + [ + 167, + "Private Benjamin (1980)", + 67 + ], + [ + 168, + "Monty Python and the Holy Grail (1974)", + 316 + ], + [ + 169, + "Wrong Trousers, The (1993)", + 118 + ], + [ + 170, + "Cinema Paradiso (1988)", + 121 + ], + [ + 171, + "Delicatessen (1991)", + 65 + ], + [ + 172, + "Empire Strikes Back, The (1980)", + 367 + ], + [ + 173, + "Princess Bride, The (1987)", + 324 + ], + [ + 174, + "Raiders of the Lost Ark (1981)", + 420 + ], + [ + 175, + "Brazil (1985)", + 208 + ], + [ + 176, + "Aliens (1986)", + 284 + ], + [ + 177, + "Good, The Bad and The Ugly, The (1966)", + 137 + ], + [ + 178, + "12 Angry Men (1957)", + 125 + ], + [ + 179, + "Clockwork Orange, A (1971)", + 221 + ], + [ + 180, + "Apocalypse Now (1979)", + 221 + ], + [ + 181, + "Return of the Jedi (1983)", + 507 + ], + [ + 182, + "GoodFellas (1990)", + 226 + ], + [ + 183, + "Alien (1979)", + 291 + ], + [ + 184, + "Army of Darkness (1993)", + 116 + ], + [ + 185, + "Psycho (1960)", + 239 + ], + [ + 186, + "Blues Brothers, The (1980)", + 251 + ], + [ + 187, + "Godfather: Part II, The (1974)", + 209 + ], + [ + 188, + "Full Metal Jacket (1987)", + 170 + ], + [ + 189, + "Grand Day Out, A (1992)", + 66 + ], + [ + 190, + "Henry V (1989)", + 124 + ], + [ + 191, + "Amadeus (1984)", + 276 + ], + [ + 192, + "Raging Bull (1980)", + 116 + ], + [ + 193, + "Right Stuff, The (1983)", + 157 + ], + [ + 194, + "Sting, The (1973)", + 241 + ], + [ + 195, + "Terminator, The (1984)", + 301 + ], + [ + 196, + "Dead Poets Society (1989)", + 251 + ], + [ + 197, + "Graduate, The (1967)", + 239 + ], + [ + 198, + "Nikita (La Femme Nikita) (1990)", + 127 + ], + [ + 199, + "Bridge on the River Kwai, The (1957)", + 165 + ], + [ + 200, + "Shining, The (1980)", + 206 + ], + [ + 201, + "Evil Dead II (1987)", + 89 + ], + [ + 202, + "Groundhog Day (1993)", + 280 + ], + [ + 203, + "Unforgiven (1992)", + 182 + ], + [ + 204, + "Back to the Future (1985)", + 350 + ], + [ + 205, + "Patton (1970)", + 136 + ], + [ + 206, + "Akira (1988)", + 50 + ], + [ + 207, + "Cyrano de Bergerac (1990)", + 66 + ], + [ + 208, + "Young Frankenstein (1974)", + 200 + ], + [ + 209, + "This Is Spinal Tap (1984)", + 191 + ], + [ + 210, + "Indiana Jones and the Last Crusade (1989)", + 331 + ], + [ + 211, + "M*A*S*H (1970)", + 206 + ], + [ + 212, + "Unbearable Lightness of Being, The (1988)", + 92 + ], + [ + 213, + "Room with a View, A (1986)", + 134 + ], + [ + 214, + "Pink Floyd - The Wall (1982)", + 114 + ], + [ + 215, + "Field of Dreams (1989)", + 212 + ], + [ + 216, + "When Harry Met Sally... (1989)", + 290 + ], + [ + 217, + "Bram Stoker's Dracula (1992)", + 120 + ], + [ + 218, + "Cape Fear (1991)", + 171 + ], + [ + 219, + "Nightmare on Elm Street, A (1984)", + 111 + ], + [ + 220, + "Mirror Has Two Faces, The (1996)", + 66 + ], + [ + 221, + "Breaking the Waves (1996)", + 74 + ], + [ + 222, + "Star Trek: First Contact (1996)", + 365 + ], + [ + 223, + "Sling Blade (1996)", + 136 + ], + [ + 224, + "Ridicule (1996)", + 44 + ], + [ + 225, + "101 Dalmatians (1996)", + 109 + ], + [ + 226, + "Die Hard 2 (1990)", + 166 + ], + [ + 227, + "Star Trek VI: The Undiscovered Country (1991)", + 161 + ], + [ + 228, + "Star Trek: The Wrath of Khan (1982)", + 244 + ], + [ + 229, + "Star Trek III: The Search for Spock (1984)", + 171 + ], + [ + 230, + "Star Trek IV: The Voyage Home (1986)", + 199 + ], + [ + 231, + "Batman Returns (1992)", + 142 + ], + [ + 232, + "Young Guns (1988)", + 101 + ], + [ + 233, + "Under Siege (1992)", + 124 + ], + [ + 234, + "Jaws (1975)", + 280 + ], + [ + 235, + "Mars Attacks! (1996)", + 217 + ], + [ + 236, + "Citizen Ruth (1996)", + 45 + ], + [ + 237, + "Jerry Maguire (1996)", + 384 + ], + [ + 238, + "Raising Arizona (1987)", + 256 + ], + [ + 239, + "Sneakers (1992)", + 150 + ], + [ + 240, + "Beavis and Butt-head Do America (1996)", + 156 + ], + [ + 241, + "Last of the Mohicans, The (1992)", + 128 + ], + [ + 242, + "Kolya (1996)", + 117 + ], + [ + 243, + "Jungle2Jungle (1997)", + 132 + ], + [ + 244, + "Smilla's Sense of Snow (1997)", + 48 + ], + [ + 245, + "Devil's Own, The (1997)", + 240 + ], + [ + 246, + "Chasing Amy (1997)", + 124 + ], + [ + 247, + "Turbo: A Power Rangers Movie (1997)", + 5 + ], + [ + 248, + "Grosse Pointe Blank (1997)", + 160 + ], + [ + 249, + "Austin Powers: International Man of Mystery (1997)", + 130 + ], + [ + 250, + "Fifth Element, The (1997)", + 197 + ], + [ + 251, + "Shall We Dance? (1996)", + 46 + ], + [ + 252, + "Lost World: Jurassic Park, The (1997)", + 158 + ], + [ + 253, + "Pillow Book, The (1995)", + 26 + ], + [ + 254, + "Batman & Robin (1997)", + 62 + ], + [ + 255, + "My Best Friend's Wedding (1997)", + 172 + ], + [ + 256, + "When the Cats Away (Chacun cherche son chat) (1996)", + 16 + ], + [ + 257, + "Men in Black (1997)", + 303 + ], + [ + 258, + "Contact (1997)", + 509 + ], + [ + 259, + "George of the Jungle (1997)", + 162 + ], + [ + 260, + "Event Horizon (1997)", + 127 + ], + [ + 261, + "Air Bud (1997)", + 43 + ], + [ + 262, + "In the Company of Men (1997)", + 66 + ], + [ + 263, + "Steel (1997)", + 19 + ], + [ + 264, + "Mimic (1997)", + 101 + ], + [ + 265, + "Hunt for Red October, The (1990)", + 227 + ], + [ + 266, + "Kull the Conqueror (1997)", + 35 + ], + [ + 267, + "unknown", + 9 + ], + [ + 268, + "Chasing Amy (1997)", + 255 + ], + [ + 269, + "Full Monty, The (1997)", + 315 + ], + [ + 270, + "Gattaca (1997)", + 136 + ], + [ + 271, + "Starship Troopers (1997)", + 211 + ], + [ + 272, + "Good Will Hunting (1997)", + 198 + ], + [ + 273, + "Heat (1995)", + 223 + ], + [ + 274, + "Sabrina (1995)", + 190 + ], + [ + 275, + "Sense and Sensibility (1995)", + 268 + ], + [ + 276, + "Leaving Las Vegas (1995)", + 298 + ], + [ + 277, + "Restoration (1995)", + 71 + ], + [ + 278, + "Bed of Roses (1996)", + 60 + ], + [ + 279, + "Once Upon a Time... When We Were Colored (1995)", + 28 + ], + [ + 280, + "Up Close and Personal (1996)", + 85 + ], + [ + 281, + "River Wild, The (1994)", + 146 + ], + [ + 282, + "Time to Kill, A (1996)", + 232 + ], + [ + 283, + "Emma (1996)", + 177 + ], + [ + 284, + "Tin Cup (1996)", + 193 + ], + [ + 285, + "Secrets & Lies (1996)", + 162 + ], + [ + 286, + "English Patient, The (1996)", + 481 + ], + [ + 287, + "Marvin's Room (1996)", + 78 + ], + [ + 288, + "Scream (1996)", + 478 + ], + [ + 289, + "Evita (1996)", + 259 + ], + [ + 290, + "Fierce Creatures (1997)", + 96 + ], + [ + 291, + "Absolute Power (1997)", + 127 + ], + [ + 292, + "Rosewood (1997)", + 114 + ], + [ + 293, + "Donnie Brasco (1997)", + 147 + ], + [ + 294, + "Liar Liar (1997)", + 485 + ], + [ + 295, + "Breakdown (1997)", + 77 + ], + [ + 296, + "Promesse, La (1996)", + 6 + ], + [ + 297, + "Ulee's Gold (1997)", + 50 + ], + [ + 298, + "Face/Off (1997)", + 194 + ], + [ + 299, + "Hoodlum (1997)", + 73 + ], + [ + 300, + "Air Force One (1997)", + 431 + ], + [ + 301, + "In & Out (1997)", + 230 + ], + [ + 302, + "L.A. Confidential (1997)", + 297 + ], + [ + 303, + "Ulee's Gold (1997)", + 134 + ], + [ + 304, + "Fly Away Home (1996)", + 149 + ], + [ + 305, + "Ice Storm, The (1997)", + 87 + ], + [ + 306, + "Mrs. Brown (Her Majesty, Mrs. Brown) (1997)", + 96 + ], + [ + 307, + "Devil's Advocate, The (1997)", + 188 + ], + [ + 308, + "FairyTale: A True Story (1997)", + 30 + ], + [ + 309, + "Deceiver (1997)", + 28 + ], + [ + 310, + "Rainmaker, The (1997)", + 145 + ], + [ + 311, + "Wings of the Dove, The (1997)", + 75 + ], + [ + 312, + "Midnight in the Garden of Good and Evil (1997)", + 80 + ], + [ + 313, + "Titanic (1997)", + 350 + ], + [ + 314, + "3 Ninjas: High Noon At Mega Mountain (1998)", + 5 + ], + [ + 315, + "Apt Pupil (1998)", + 160 + ], + [ + 316, + "As Good As It Gets (1997)", + 112 + ], + [ + 317, + "In the Name of the Father (1993)", + 102 + ], + [ + 318, + "Schindler's List (1993)", + 298 + ], + [ + 319, + "Everyone Says I Love You (1996)", + 168 + ], + [ + 320, + "Paradise Lost: The Child Murders at Robin Hood Hills (1996)", + 20 + ], + [ + 321, + "Mother (1996)", + 169 + ], + [ + 322, + "Murder at 1600 (1997)", + 218 + ], + [ + 323, + "Dante's Peak (1997)", + 240 + ], + [ + 324, + "Lost Highway (1997)", + 125 + ], + [ + 325, + "Crash (1996)", + 128 + ], + [ + 326, + "G.I. Jane (1997)", + 175 + ], + [ + 327, + "Cop Land (1997)", + 175 + ], + [ + 328, + "Conspiracy Theory (1997)", + 295 + ], + [ + 329, + "Desperate Measures (1998)", + 45 + ], + [ + 330, + "187 (1997)", + 41 + ], + [ + 331, + "Edge, The (1997)", + 113 + ], + [ + 332, + "Kiss the Girls (1997)", + 143 + ], + [ + 333, + "Game, The (1997)", + 251 + ], + [ + 334, + "U Turn (1997)", + 64 + ], + [ + 335, + "How to Be a Player (1997)", + 21 + ], + [ + 336, + "Playing God (1997)", + 43 + ], + [ + 337, + "House of Yes, The (1997)", + 18 + ], + [ + 338, + "Bean (1997)", + 91 + ], + [ + 339, + "Mad City (1997)", + 47 + ], + [ + 340, + "Boogie Nights (1997)", + 189 + ], + [ + 341, + "Critical Care (1997)", + 11 + ], + [ + 342, + "Man Who Knew Too Little, The (1997)", + 52 + ], + [ + 343, + "Alien: Resurrection (1997)", + 124 + ], + [ + 344, + "Apostle, The (1997)", + 55 + ], + [ + 345, + "Deconstructing Harry (1997)", + 65 + ], + [ + 346, + "Jackie Brown (1997)", + 126 + ], + [ + 347, + "Wag the Dog (1997)", + 137 + ], + [ + 348, + "Desperate Measures (1998)", + 27 + ], + [ + 349, + "Hard Rain (1998)", + 31 + ], + [ + 350, + "Fallen (1998)", + 41 + ], + [ + 351, + "Prophecy II, The (1998)", + 20 + ], + [ + 352, + "Spice World (1997)", + 26 + ], + [ + 353, + "Deep Rising (1998)", + 14 + ], + [ + 354, + "Wedding Singer, The (1998)", + 72 + ], + [ + 355, + "Sphere (1998)", + 41 + ], + [ + 356, + "Client, The (1994)", + 97 + ], + [ + 357, + "One Flew Over the Cuckoo's Nest (1975)", + 264 + ], + [ + 358, + "Spawn (1997)", + 143 + ], + [ + 359, + "Assignment, The (1997)", + 18 + ], + [ + 360, + "Wonderland (1997)", + 10 + ], + [ + 361, + "Incognito (1997)", + 10 + ], + [ + 362, + "Blues Brothers 2000 (1998)", + 28 + ], + [ + 363, + "Sudden Death (1995)", + 47 + ], + [ + 364, + "Ace Ventura: When Nature Calls (1995)", + 37 + ], + [ + 365, + "Powder (1995)", + 48 + ], + [ + 366, + "Dangerous Minds (1995)", + 47 + ], + [ + 367, + "Clueless (1995)", + 170 + ], + [ + 368, + "Bio-Dome (1996)", + 31 + ], + [ + 369, + "Black Sheep (1996)", + 55 + ], + [ + 370, + "Mary Reilly (1996)", + 39 + ], + [ + 371, + "Bridges of Madison County, The (1995)", + 67 + ], + [ + 372, + "Jeffrey (1995)", + 34 + ], + [ + 373, + "Judge Dredd (1995)", + 39 + ], + [ + 374, + "Mighty Morphin Power Rangers: The Movie (1995)", + 11 + ], + [ + 375, + "Showgirls (1995)", + 23 + ], + [ + 376, + "Houseguest (1994)", + 24 + ], + [ + 377, + "Heavyweights (1994)", + 13 + ], + [ + 378, + "Miracle on 34th Street (1994)", + 101 + ], + [ + 379, + "Tales From the Crypt Presents: Demon Knight (1995)", + 43 + ], + [ + 380, + "Star Trek: Generations (1994)", + 116 + ], + [ + 381, + "Muriel's Wedding (1994)", + 100 + ], + [ + 382, + "Adventures of Priscilla, Queen of the Desert, The (1994)", + 111 + ], + [ + 383, + "Flintstones, The (1994)", + 31 + ], + [ + 384, + "Naked Gun 33 1/3: The Final Insult (1994)", + 69 + ], + [ + 385, + "True Lies (1994)", + 208 + ], + [ + 386, + "Addams Family Values (1993)", + 87 + ], + [ + 387, + "Age of Innocence, The (1993)", + 65 + ], + [ + 388, + "Beverly Hills Cop III (1994)", + 28 + ], + [ + 389, + "Black Beauty (1994)", + 27 + ], + [ + 390, + "Fear of a Black Hat (1993)", + 10 + ], + [ + 391, + "Last Action Hero (1993)", + 59 + ], + [ + 392, + "Man Without a Face, The (1993)", + 68 + ], + [ + 393, + "Mrs. Doubtfire (1993)", + 192 + ], + [ + 394, + "Radioland Murders (1994)", + 12 + ], + [ + 395, + "Robin Hood: Men in Tights (1993)", + 56 + ], + [ + 396, + "Serial Mom (1994)", + 54 + ], + [ + 397, + "Striking Distance (1993)", + 12 + ], + [ + 398, + "Super Mario Bros. (1993)", + 26 + ], + [ + 399, + "Three Musketeers, The (1993)", + 89 + ], + [ + 400, + "Little Rascals, The (1994)", + 18 + ], + [ + 401, + "Brady Bunch Movie, The (1995)", + 76 + ], + [ + 402, + "Ghost (1990)", + 170 + ], + [ + 403, + "Batman (1989)", + 201 + ], + [ + 404, + "Pinocchio (1940)", + 101 + ], + [ + 405, + "Mission: Impossible (1996)", + 344 + ], + [ + 406, + "Thinner (1996)", + 49 + ], + [ + 407, + "Spy Hard (1996)", + 43 + ], + [ + 408, + "Close Shave, A (1995)", + 112 + ], + [ + 409, + "Jack (1996)", + 70 + ], + [ + 410, + "Kingpin (1996)", + 162 + ], + [ + 411, + "Nutty Professor, The (1996)", + 163 + ], + [ + 412, + "Very Brady Sequel, A (1996)", + 93 + ], + [ + 413, + "Tales from the Crypt Presents: Bordello of Blood (1996)", + 55 + ], + [ + 414, + "My Favorite Year (1982)", + 62 + ], + [ + 415, + "Apple Dumpling Gang, The (1975)", + 25 + ], + [ + 416, + "Old Yeller (1957)", + 64 + ], + [ + 417, + "Parent Trap, The (1961)", + 73 + ], + [ + 418, + "Cinderella (1950)", + 129 + ], + [ + 419, + "Mary Poppins (1964)", + 178 + ], + [ + 420, + "Alice in Wonderland (1951)", + 81 + ], + [ + 421, + "William Shakespeare's Romeo and Juliet (1996)", + 106 + ], + [ + 422, + "Aladdin and the King of Thieves (1996)", + 26 + ], + [ + 423, + "E.T. the Extra-Terrestrial (1982)", + 300 + ], + [ + 424, + "Children of the Corn: The Gathering (1996)", + 19 + ], + [ + 425, + "Bob Roberts (1992)", + 85 + ], + [ + 426, + "Transformers: The Movie, The (1986)", + 32 + ], + [ + 427, + "To Kill a Mockingbird (1962)", + 219 + ], + [ + 428, + "Harold and Maude (1971)", + 121 + ], + [ + 429, + "Day the Earth Stood Still, The (1951)", + 97 + ], + [ + 430, + "Duck Soup (1933)", + 93 + ], + [ + 431, + "Highlander (1986)", + 153 + ], + [ + 432, + "Fantasia (1940)", + 174 + ], + [ + 433, + "Heathers (1989)", + 171 + ], + [ + 434, + "Forbidden Planet (1956)", + 67 + ], + [ + 435, + "Butch Cassidy and the Sundance Kid (1969)", + 216 + ], + [ + 436, + "American Werewolf in London, An (1981)", + 99 + ], + [ + 437, + "Amityville 1992: It's About Time (1992)", + 5 + ], + [ + 438, + "Amityville 3-D (1983)", + 6 + ], + [ + 439, + "Amityville: A New Generation (1993)", + 5 + ], + [ + 440, + "Amityville II: The Possession (1982)", + 14 + ], + [ + 441, + "Amityville Horror, The (1979)", + 53 + ], + [ + 442, + "Amityville Curse, The (1990)", + 4 + ], + [ + 443, + "Birds, The (1963)", + 162 + ], + [ + 444, + "Blob, The (1958)", + 46 + ], + [ + 445, + "Body Snatcher, The (1945)", + 22 + ], + [ + 446, + "Burnt Offerings (1976)", + 9 + ], + [ + 447, + "Carrie (1976)", + 121 + ], + [ + 448, + "Omen, The (1976)", + 85 + ], + [ + 449, + "Star Trek: The Motion Picture (1979)", + 117 + ], + [ + 450, + "Star Trek V: The Final Frontier (1989)", + 63 + ], + [ + 451, + "Grease (1978)", + 170 + ], + [ + 452, + "Jaws 2 (1978)", + 66 + ], + [ + 453, + "Jaws 3-D (1983)", + 16 + ], + [ + 454, + "Bastard Out of Carolina (1996)", + 16 + ], + [ + 455, + "Jackie Chan's First Strike (1996)", + 145 + ], + [ + 456, + "Beverly Hills Ninja (1997)", + 48 + ], + [ + 457, + "Free Willy 3: The Rescue (1997)", + 27 + ], + [ + 458, + "Nixon (1995)", + 90 + ], + [ + 459, + "Cry, the Beloved Country (1995)", + 24 + ], + [ + 460, + "Crossing Guard, The (1995)", + 28 + ], + [ + 461, + "Smoke (1995)", + 74 + ], + [ + 462, + "Like Water For Chocolate (Como agua para chocolate) (1992)", + 148 + ], + [ + 463, + "Secret of Roan Inish, The (1994)", + 71 + ], + [ + 464, + "Vanya on 42nd Street (1994)", + 27 + ], + [ + 465, + "Jungle Book, The (1994)", + 85 + ], + [ + 466, + "Red Rock West (1992)", + 52 + ], + [ + 467, + "Bronx Tale, A (1993)", + 48 + ], + [ + 468, + "Rudy (1993)", + 64 + ], + [ + 469, + "Short Cuts (1993)", + 67 + ], + [ + 470, + "Tombstone (1993)", + 108 + ], + [ + 471, + "Courage Under Fire (1996)", + 221 + ], + [ + 472, + "Dragonheart (1996)", + 158 + ], + [ + 473, + "James and the Giant Peach (1996)", + 126 + ], + [ + 474, + "Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb (1963)", + 194 + ], + [ + 475, + "Trainspotting (1996)", + 250 + ], + [ + 476, + "First Wives Club, The (1996)", + 160 + ], + [ + 477, + "Matilda (1996)", + 95 + ], + [ + 478, + "Philadelphia Story, The (1940)", + 104 + ], + [ + 479, + "Vertigo (1958)", + 179 + ], + [ + 480, + "North by Northwest (1959)", + 179 + ], + [ + 481, + "Apartment, The (1960)", + 63 + ], + [ + 482, + "Some Like It Hot (1959)", + 128 + ], + [ + 483, + "Casablanca (1942)", + 243 + ], + [ + 484, + "Maltese Falcon, The (1941)", + 138 + ], + [ + 485, + "My Fair Lady (1964)", + 125 + ], + [ + 486, + "Sabrina (1954)", + 64 + ], + [ + 487, + "Roman Holiday (1953)", + 68 + ], + [ + 488, + "Sunset Blvd. (1950)", + 65 + ], + [ + 489, + "Notorious (1946)", + 52 + ], + [ + 490, + "To Catch a Thief (1955)", + 50 + ], + [ + 491, + "Adventures of Robin Hood, The (1938)", + 67 + ], + [ + 492, + "East of Eden (1955)", + 59 + ], + [ + 493, + "Thin Man, The (1934)", + 60 + ], + [ + 494, + "His Girl Friday (1940)", + 56 + ], + [ + 495, + "Around the World in 80 Days (1956)", + 59 + ], + [ + 496, + "It's a Wonderful Life (1946)", + 231 + ], + [ + 497, + "Bringing Up Baby (1938)", + 68 + ], + [ + 498, + "African Queen, The (1951)", + 152 + ], + [ + 499, + "Cat on a Hot Tin Roof (1958)", + 62 + ], + [ + 500, + "Fly Away Home (1996)", + 31 + ], + [ + 501, + "Dumbo (1941)", + 123 + ], + [ + 502, + "Bananas (1971)", + 57 + ], + [ + 503, + "Candidate, The (1972)", + 39 + ], + [ + 504, + "Bonnie and Clyde (1967)", + 122 + ], + [ + 505, + "Dial M for Murder (1954)", + 68 + ], + [ + 506, + "Rebel Without a Cause (1955)", + 90 + ], + [ + 507, + "Streetcar Named Desire, A (1951)", + 98 + ], + [ + 508, + "People vs. Larry Flynt, The (1996)", + 215 + ], + [ + 509, + "My Left Foot (1989)", + 121 + ], + [ + 510, + "Magnificent Seven, The (1954)", + 121 + ], + [ + 511, + "Lawrence of Arabia (1962)", + 173 + ], + [ + 512, + "Wings of Desire (1987)", + 57 + ], + [ + 513, + "Third Man, The (1949)", + 72 + ], + [ + 514, + "Annie Hall (1977)", + 180 + ], + [ + 515, + "Boot, Das (1981)", + 201 + ], + [ + 516, + "Local Hero (1983)", + 63 + ], + [ + 517, + "Manhattan (1979)", + 91 + ], + [ + 518, + "Miller's Crossing (1990)", + 89 + ], + [ + 519, + "Treasure of the Sierra Madre, The (1948)", + 80 + ], + [ + 520, + "Great Escape, The (1963)", + 124 + ], + [ + 521, + "Deer Hunter, The (1978)", + 120 + ], + [ + 522, + "Down by Law (1986)", + 35 + ], + [ + 523, + "Cool Hand Luke (1967)", + 164 + ], + [ + 524, + "Great Dictator, The (1940)", + 46 + ], + [ + 525, + "Big Sleep, The (1946)", + 73 + ], + [ + 526, + "Ben-Hur (1959)", + 124 + ], + [ + 527, + "Gandhi (1982)", + 195 + ], + [ + 528, + "Killing Fields, The (1984)", + 121 + ], + [ + 529, + "My Life as a Dog (Mitt liv som hund) (1985)", + 93 + ], + [ + 530, + "Man Who Would Be King, The (1975)", + 80 + ], + [ + 531, + "Shine (1996)", + 129 + ], + [ + 532, + "Kama Sutra: A Tale of Love (1996)", + 22 + ], + [ + 533, + "Daytrippers, The (1996)", + 15 + ], + [ + 534, + "Traveller (1997)", + 13 + ], + [ + 535, + "Addicted to Love (1997)", + 54 + ], + [ + 536, + "Ponette (1996)", + 10 + ], + [ + 537, + "My Own Private Idaho (1991)", + 30 + ], + [ + 538, + "Anastasia (1997)", + 66 + ], + [ + 539, + "Mouse Hunt (1997)", + 44 + ], + [ + 540, + "Money Train (1995)", + 43 + ], + [ + 541, + "Mortal Kombat (1995)", + 49 + ], + [ + 542, + "Pocahontas (1995)", + 51 + ], + [ + 543, + "Misérables, Les (1995)", + 21 + ], + [ + 544, + "Things to Do in Denver when You're Dead (1995)", + 71 + ], + [ + 545, + "Vampire in Brooklyn (1995)", + 12 + ], + [ + 546, + "Broken Arrow (1996)", + 254 + ], + [ + 547, + "Young Poisoner's Handbook, The (1995)", + 41 + ], + [ + 548, + "NeverEnding Story III, The (1994)", + 12 + ], + [ + 549, + "Rob Roy (1995)", + 92 + ], + [ + 550, + "Die Hard: With a Vengeance (1995)", + 151 + ], + [ + 551, + "Lord of Illusions (1995)", + 24 + ], + [ + 552, + "Species (1995)", + 45 + ], + [ + 553, + "Walk in the Clouds, A (1995)", + 63 + ], + [ + 554, + "Waterworld (1995)", + 102 + ], + [ + 555, + "White Man's Burden (1995)", + 10 + ], + [ + 556, + "Wild Bill (1995)", + 12 + ], + [ + 557, + "Farinelli: il castrato (1994)", + 17 + ], + [ + 558, + "Heavenly Creatures (1994)", + 70 + ], + [ + 559, + "Interview with the Vampire (1994)", + 137 + ], + [ + 560, + "Kid in King Arthur's Court, A (1995)", + 22 + ], + [ + 561, + "Mary Shelley's Frankenstein (1994)", + 59 + ], + [ + 562, + "Quick and the Dead, The (1995)", + 48 + ], + [ + 563, + "Stephen King's The Langoliers (1995)", + 29 + ], + [ + 564, + "Tales from the Hood (1995)", + 27 + ], + [ + 565, + "Village of the Damned (1995)", + 22 + ], + [ + 566, + "Clear and Present Danger (1994)", + 179 + ], + [ + 567, + "Wes Craven's New Nightmare (1994)", + 35 + ], + [ + 568, + "Speed (1994)", + 230 + ], + [ + 569, + "Wolf (1994)", + 67 + ], + [ + 570, + "Wyatt Earp (1994)", + 50 + ], + [ + 571, + "Another Stakeout (1993)", + 28 + ], + [ + 572, + "Blown Away (1994)", + 29 + ], + [ + 573, + "Body Snatchers (1993)", + 33 + ], + [ + 574, + "Boxing Helena (1993)", + 15 + ], + [ + 575, + "City Slickers II: The Legend of Curly's Gold (1994)", + 44 + ], + [ + 576, + "Cliffhanger (1993)", + 93 + ], + [ + 577, + "Coneheads (1993)", + 41 + ], + [ + 578, + "Demolition Man (1993)", + 92 + ], + [ + 579, + "Fatal Instinct (1993)", + 19 + ], + [ + 580, + "Englishman Who Went Up a Hill, But Came Down a Mountain, The (1995)", + 32 + ], + [ + 581, + "Kalifornia (1993)", + 59 + ], + [ + 582, + "Piano, The (1993)", + 168 + ], + [ + 583, + "Romeo Is Bleeding (1993)", + 37 + ], + [ + 584, + "Secret Garden, The (1993)", + 79 + ], + [ + 585, + "Son in Law (1993)", + 39 + ], + [ + 586, + "Terminal Velocity (1994)", + 34 + ], + [ + 587, + "Hour of the Pig, The (1993)", + 14 + ], + [ + 588, + "Beauty and the Beast (1991)", + 202 + ], + [ + 589, + "Wild Bunch, The (1969)", + 43 + ], + [ + 590, + "Hellraiser: Bloodline (1996)", + 18 + ], + [ + 591, + "Primal Fear (1996)", + 178 + ], + [ + 592, + "True Crime (1995)", + 9 + ], + [ + 593, + "Stalingrad (1993)", + 12 + ], + [ + 594, + "Heavy (1995)", + 5 + ], + [ + 595, + "Fan, The (1996)", + 64 + ], + [ + 596, + "Hunchback of Notre Dame, The (1996)", + 127 + ], + [ + 597, + "Eraser (1996)", + 206 + ], + [ + 598, + "Big Squeeze, The (1996)", + 4 + ], + [ + 599, + "Police Story 4: Project S (Chao ji ji hua) (1993)", + 1 + ], + [ + 600, + "Daniel Defoe's Robinson Crusoe (1996)", + 2 + ], + [ + 601, + "For Whom the Bell Tolls (1943)", + 20 + ], + [ + 602, + "American in Paris, An (1951)", + 50 + ], + [ + 603, + "Rear Window (1954)", + 209 + ], + [ + 604, + "It Happened One Night (1934)", + 81 + ], + [ + 605, + "Meet Me in St. Louis (1944)", + 31 + ], + [ + 606, + "All About Eve (1950)", + 66 + ], + [ + 607, + "Rebecca (1940)", + 66 + ], + [ + 608, + "Spellbound (1945)", + 30 + ], + [ + 609, + "Father of the Bride (1950)", + 60 + ], + [ + 610, + "Gigi (1958)", + 41 + ], + [ + 611, + "Laura (1944)", + 40 + ], + [ + 612, + "Lost Horizon (1937)", + 34 + ], + [ + 613, + "My Man Godfrey (1936)", + 27 + ], + [ + 614, + "Giant (1956)", + 51 + ], + [ + 615, + "39 Steps, The (1935)", + 59 + ], + [ + 616, + "Night of the Living Dead (1968)", + 64 + ], + [ + 617, + "Blue Angel, The (Blaue Engel, Der) (1930)", + 18 + ], + [ + 618, + "Picnic (1955)", + 18 + ], + [ + 619, + "Extreme Measures (1996)", + 64 + ], + [ + 620, + "Chamber, The (1996)", + 43 + ], + [ + 621, + "Davy Crockett, King of the Wild Frontier (1955)", + 11 + ], + [ + 622, + "Swiss Family Robinson (1960)", + 39 + ], + [ + 623, + "Angels in the Outfield (1994)", + 39 + ], + [ + 624, + "Three Caballeros, The (1945)", + 22 + ], + [ + 625, + "Sword in the Stone, The (1963)", + 82 + ], + [ + 626, + "So Dear to My Heart (1949)", + 4 + ], + [ + 627, + "Robin Hood: Prince of Thieves (1991)", + 75 + ], + [ + 628, + "Sleepers (1996)", + 169 + ], + [ + 629, + "Victor/Victoria (1982)", + 77 + ], + [ + 630, + "Great Race, The (1965)", + 31 + ], + [ + 631, + "Crying Game, The (1992)", + 119 + ], + [ + 632, + "Sophie's Choice (1982)", + 58 + ], + [ + 633, + "Christmas Carol, A (1938)", + 69 + ], + [ + 634, + "Microcosmos: Le peuple de l'herbe (1996)", + 24 + ], + [ + 635, + "Fog, The (1980)", + 23 + ], + [ + 636, + "Escape from New York (1981)", + 91 + ], + [ + 637, + "Howling, The (1981)", + 38 + ], + [ + 638, + "Return of Martin Guerre, The (Retour de Martin Guerre, Le) (1982)", + 44 + ], + [ + 639, + "Tin Drum, The (Blechtrommel, Die) (1979)", + 40 + ], + [ + 640, + "Cook the Thief His Wife & Her Lover, The (1989)", + 82 + ], + [ + 641, + "Paths of Glory (1957)", + 33 + ], + [ + 642, + "Grifters, The (1990)", + 89 + ], + [ + 643, + "The Innocent (1994)", + 4 + ], + [ + 644, + "Thin Blue Line, The (1988)", + 35 + ], + [ + 645, + "Paris Is Burning (1990)", + 27 + ], + [ + 646, + "Once Upon a Time in the West (1969)", + 38 + ], + [ + 647, + "Ran (1985)", + 70 + ], + [ + 648, + "Quiet Man, The (1952)", + 67 + ], + [ + 649, + "Once Upon a Time in America (1984)", + 50 + ], + [ + 650, + "Seventh Seal, The (Sjunde inseglet, Det) (1957)", + 72 + ], + [ + 651, + "Glory (1989)", + 171 + ], + [ + 652, + "Rosencrantz and Guildenstern Are Dead (1990)", + 90 + ], + [ + 653, + "Touch of Evil (1958)", + 34 + ], + [ + 654, + "Chinatown (1974)", + 147 + ], + [ + 655, + "Stand by Me (1986)", + 227 + ], + [ + 656, + "M (1931)", + 44 + ], + [ + 657, + "Manchurian Candidate, The (1962)", + 131 + ], + [ + 658, + "Pump Up the Volume (1990)", + 79 + ], + [ + 659, + "Arsenic and Old Lace (1944)", + 115 + ], + [ + 660, + "Fried Green Tomatoes (1991)", + 153 + ], + [ + 661, + "High Noon (1952)", + 88 + ], + [ + 662, + "Somewhere in Time (1980)", + 82 + ], + [ + 663, + "Being There (1979)", + 116 + ], + [ + 664, + "Paris, Texas (1984)", + 46 + ], + [ + 665, + "Alien 3 (1992)", + 100 + ], + [ + 666, + "Blood For Dracula (Andy Warhol's Dracula) (1974)", + 5 + ], + [ + 667, + "Audrey Rose (1977)", + 12 + ], + [ + 668, + "Blood Beach (1981)", + 6 + ], + [ + 669, + "Body Parts (1991)", + 13 + ], + [ + 670, + "Body Snatchers (1993)", + 36 + ], + [ + 671, + "Bride of Frankenstein (1935)", + 46 + ], + [ + 672, + "Candyman (1992)", + 65 + ], + [ + 673, + "Cape Fear (1962)", + 86 + ], + [ + 674, + "Cat People (1982)", + 48 + ], + [ + 675, + "Nosferatu (Nosferatu, eine Symphonie des Grauens) (1922)", + 54 + ], + [ + 676, + "Crucible, The (1996)", + 77 + ], + [ + 677, + "Fire on the Mountain (1996)", + 1 + ], + [ + 678, + "Volcano (1997)", + 219 + ], + [ + 679, + "Conan the Barbarian (1981)", + 107 + ], + [ + 680, + "Kull the Conqueror (1997)", + 34 + ], + [ + 681, + "Wishmaster (1997)", + 27 + ], + [ + 682, + "I Know What You Did Last Summer (1997)", + 100 + ], + [ + 683, + "Rocket Man (1997)", + 49 + ], + [ + 684, + "In the Line of Fire (1993)", + 169 + ], + [ + 685, + "Executive Decision (1996)", + 157 + ], + [ + 686, + "Perfect World, A (1993)", + 50 + ], + [ + 687, + "McHale's Navy (1997)", + 69 + ], + [ + 688, + "Leave It to Beaver (1997)", + 44 + ], + [ + 689, + "Jackal, The (1997)", + 87 + ], + [ + 690, + "Seven Years in Tibet (1997)", + 155 + ], + [ + 691, + "Dark City (1998)", + 16 + ], + [ + 692, + "American President, The (1995)", + 164 + ], + [ + 693, + "Casino (1995)", + 91 + ], + [ + 694, + "Persuasion (1995)", + 44 + ], + [ + 695, + "Kicking and Screaming (1995)", + 13 + ], + [ + 696, + "City Hall (1996)", + 79 + ], + [ + 697, + "Basketball Diaries, The (1995)", + 40 + ], + [ + 698, + "Browning Version, The (1994)", + 10 + ], + [ + 699, + "Little Women (1994)", + 102 + ], + [ + 700, + "Miami Rhapsody (1995)", + 15 + ], + [ + 701, + "Wonderful, Horrible Life of Leni Riefenstahl, The (1993)", + 10 + ], + [ + 702, + "Barcelona (1994)", + 53 + ], + [ + 703, + "Widows' Peak (1994)", + 19 + ], + [ + 704, + "House of the Spirits, The (1993)", + 24 + ], + [ + 705, + "Singin' in the Rain (1952)", + 137 + ], + [ + 706, + "Bad Moon (1996)", + 6 + ], + [ + 707, + "Enchanted April (1991)", + 70 + ], + [ + 708, + "Sex, Lies, and Videotape (1989)", + 101 + ], + [ + 709, + "Strictly Ballroom (1992)", + 104 + ], + [ + 710, + "Better Off Dead... (1985)", + 79 + ], + [ + 711, + "Substance of Fire, The (1996)", + 1 + ], + [ + 712, + "Tin Men (1987)", + 51 + ], + [ + 713, + "Othello (1995)", + 72 + ], + [ + 714, + "Carrington (1995)", + 13 + ], + [ + 715, + "To Die For (1995)", + 87 + ], + [ + 716, + "Home for the Holidays (1995)", + 58 + ], + [ + 717, + "Juror, The (1996)", + 82 + ], + [ + 718, + "In the Bleak Midwinter (1995)", + 16 + ], + [ + 719, + "Canadian Bacon (1994)", + 29 + ], + [ + 720, + "First Knight (1995)", + 86 + ], + [ + 721, + "Mallrats (1995)", + 54 + ], + [ + 722, + "Nine Months (1995)", + 58 + ], + [ + 723, + "Boys on the Side (1995)", + 34 + ], + [ + 724, + "Circle of Friends (1995)", + 76 + ], + [ + 725, + "Exit to Eden (1994)", + 16 + ], + [ + 726, + "Fluke (1995)", + 14 + ], + [ + 727, + "Immortal Beloved (1994)", + 63 + ], + [ + 728, + "Junior (1994)", + 45 + ], + [ + 729, + "Nell (1994)", + 81 + ], + [ + 730, + "Queen Margot (Reine Margot, La) (1994)", + 24 + ], + [ + 731, + "Corrina, Corrina (1994)", + 39 + ], + [ + 732, + "Dave (1993)", + 180 + ], + [ + 733, + "Go Fish (1994)", + 15 + ], + [ + 734, + "Made in America (1993)", + 27 + ], + [ + 735, + "Philadelphia (1993)", + 137 + ], + [ + 736, + "Shadowlands (1993)", + 78 + ], + [ + 737, + "Sirens (1994)", + 59 + ], + [ + 738, + "Threesome (1994)", + 31 + ], + [ + 739, + "Pretty Woman (1990)", + 164 + ], + [ + 740, + "Jane Eyre (1996)", + 63 + ], + [ + 741, + "Last Supper, The (1995)", + 58 + ], + [ + 742, + "Ransom (1996)", + 267 + ], + [ + 743, + "Crow: City of Angels, The (1996)", + 39 + ], + [ + 744, + "Michael Collins (1996)", + 92 + ], + [ + 745, + "Ruling Class, The (1972)", + 16 + ], + [ + 746, + "Real Genius (1985)", + 119 + ], + [ + 747, + "Benny & Joon (1993)", + 102 + ], + [ + 748, + "Saint, The (1997)", + 316 + ], + [ + 749, + "MatchMaker, The (1997)", + 51 + ], + [ + 750, + "Amistad (1997)", + 124 + ], + [ + 751, + "Tomorrow Never Dies (1997)", + 180 + ], + [ + 752, + "Replacement Killers, The (1998)", + 39 + ], + [ + 753, + "Burnt By the Sun (1994)", + 24 + ], + [ + 754, + "Red Corner (1997)", + 57 + ], + [ + 755, + "Jumanji (1995)", + 96 + ], + [ + 756, + "Father of the Bride Part II (1995)", + 128 + ], + [ + 757, + "Across the Sea of Time (1995)", + 4 + ], + [ + 758, + "Lawnmower Man 2: Beyond Cyberspace (1996)", + 21 + ], + [ + 759, + "Fair Game (1995)", + 11 + ], + [ + 760, + "Screamers (1995)", + 46 + ], + [ + 761, + "Nick of Time (1995)", + 44 + ], + [ + 762, + "Beautiful Girls (1996)", + 115 + ], + [ + 763, + "Happy Gilmore (1996)", + 149 + ], + [ + 764, + "If Lucy Fell (1996)", + 29 + ], + [ + 765, + "Boomerang (1992)", + 32 + ], + [ + 766, + "Man of the Year (1995)", + 9 + ], + [ + 767, + "Addiction, The (1995)", + 11 + ], + [ + 768, + "Casper (1995)", + 52 + ], + [ + 769, + "Congo (1995)", + 42 + ], + [ + 770, + "Devil in a Blue Dress (1995)", + 57 + ], + [ + 771, + "Johnny Mnemonic (1995)", + 41 + ], + [ + 772, + "Kids (1995)", + 49 + ], + [ + 773, + "Mute Witness (1994)", + 17 + ], + [ + 774, + "Prophecy, The (1995)", + 32 + ], + [ + 775, + "Something to Talk About (1995)", + 26 + ], + [ + 776, + "Three Wishes (1995)", + 9 + ], + [ + 777, + "Castle Freak (1995)", + 4 + ], + [ + 778, + "Don Juan DeMarco (1995)", + 76 + ], + [ + 779, + "Drop Zone (1994)", + 31 + ], + [ + 780, + "Dumb & Dumber (1994)", + 69 + ], + [ + 781, + "French Kiss (1995)", + 84 + ], + [ + 782, + "Little Odessa (1994)", + 10 + ], + [ + 783, + "Milk Money (1994)", + 37 + ], + [ + 784, + "Beyond Bedlam (1993)", + 2 + ], + [ + 785, + "Only You (1994)", + 39 + ], + [ + 786, + "Perez Family, The (1995)", + 14 + ], + [ + 787, + "Roommates (1995)", + 13 + ], + [ + 788, + "Relative Fear (1994)", + 3 + ], + [ + 789, + "Swimming with Sharks (1995)", + 47 + ], + [ + 790, + "Tommy Boy (1995)", + 66 + ], + [ + 791, + "Baby-Sitters Club, The (1995)", + 10 + ], + [ + 792, + "Bullets Over Broadway (1994)", + 86 + ], + [ + 793, + "Crooklyn (1994)", + 10 + ], + [ + 794, + "It Could Happen to You (1994)", + 46 + ], + [ + 795, + "Richie Rich (1994)", + 21 + ], + [ + 796, + "Speechless (1994)", + 36 + ], + [ + 797, + "Timecop (1994)", + 31 + ], + [ + 798, + "Bad Company (1995)", + 9 + ], + [ + 799, + "Boys Life (1995)", + 5 + ], + [ + 800, + "In the Mouth of Madness (1995)", + 26 + ], + [ + 801, + "Air Up There, The (1994)", + 16 + ], + [ + 802, + "Hard Target (1993)", + 40 + ], + [ + 803, + "Heaven & Earth (1993)", + 9 + ], + [ + 804, + "Jimmy Hollywood (1994)", + 8 + ], + [ + 805, + "Manhattan Murder Mystery (1993)", + 27 + ], + [ + 806, + "Menace II Society (1993)", + 50 + ], + [ + 807, + "Poetic Justice (1993)", + 9 + ], + [ + 808, + "Program, The (1993)", + 31 + ], + [ + 809, + "Rising Sun (1993)", + 43 + ], + [ + 810, + "Shadow, The (1994)", + 45 + ], + [ + 811, + "Thirty-Two Short Films About Glenn Gould (1993)", + 18 + ], + [ + 812, + "Andre (1994)", + 18 + ], + [ + 813, + "Celluloid Closet, The (1995)", + 56 + ], + [ + 814, + "Great Day in Harlem, A (1994)", + 1 + ], + [ + 815, + "One Fine Day (1996)", + 112 + ], + [ + 816, + "Candyman: Farewell to the Flesh (1995)", + 21 + ], + [ + 817, + "Frisk (1995)", + 3 + ], + [ + 818, + "Girl 6 (1996)", + 25 + ], + [ + 819, + "Eddie (1996)", + 40 + ], + [ + 820, + "Space Jam (1996)", + 93 + ], + [ + 821, + "Mrs. Winterbourne (1996)", + 22 + ], + [ + 822, + "Faces (1968)", + 4 + ], + [ + 823, + "Mulholland Falls (1996)", + 82 + ], + [ + 824, + "Great White Hype, The (1996)", + 49 + ], + [ + 825, + "Arrival, The (1996)", + 83 + ], + [ + 826, + "Phantom, The (1996)", + 80 + ], + [ + 827, + "Daylight (1996)", + 57 + ], + [ + 828, + "Alaska (1996)", + 13 + ], + [ + 829, + "Fled (1996)", + 34 + ], + [ + 830, + "Power 98 (1995)", + 1 + ], + [ + 831, + "Escape from L.A. (1996)", + 91 + ], + [ + 832, + "Bogus (1996)", + 22 + ], + [ + 833, + "Bulletproof (1996)", + 49 + ], + [ + 834, + "Halloween: The Curse of Michael Myers (1995)", + 25 + ], + [ + 835, + "Gay Divorcee, The (1934)", + 15 + ], + [ + 836, + "Ninotchka (1939)", + 26 + ], + [ + 837, + "Meet John Doe (1941)", + 25 + ], + [ + 838, + "In the Line of Duty 2 (1987)", + 4 + ], + [ + 839, + "Loch Ness (1995)", + 4 + ], + [ + 840, + "Last Man Standing (1996)", + 53 + ], + [ + 841, + "Glimmer Man, The (1996)", + 48 + ], + [ + 842, + "Pollyanna (1960)", + 27 + ], + [ + 843, + "Shaggy Dog, The (1959)", + 30 + ], + [ + 844, + "Freeway (1996)", + 42 + ], + [ + 845, + "That Thing You Do! (1996)", + 176 + ], + [ + 846, + "To Gillian on Her 37th Birthday (1996)", + 44 + ], + [ + 847, + "Looking for Richard (1996)", + 55 + ], + [ + 848, + "Murder, My Sweet (1944)", + 9 + ], + [ + 849, + "Days of Thunder (1990)", + 53 + ], + [ + 850, + "Perfect Candidate, A (1996)", + 4 + ], + [ + 851, + "Two or Three Things I Know About Her (1966)", + 4 + ], + [ + 852, + "Bloody Child, The (1996)", + 1 + ], + [ + 853, + "Braindead (1992)", + 14 + ], + [ + 854, + "Bad Taste (1987)", + 16 + ], + [ + 855, + "Diva (1981)", + 66 + ], + [ + 856, + "Night on Earth (1991)", + 36 + ], + [ + 857, + "Paris Was a Woman (1995)", + 1 + ], + [ + 858, + "Amityville: Dollhouse (1996)", + 3 + ], + [ + 859, + "April Fool's Day (1986)", + 15 + ], + [ + 860, + "Believers, The (1987)", + 16 + ], + [ + 861, + "Nosferatu a Venezia (1986)", + 3 + ], + [ + 862, + "Jingle All the Way (1996)", + 18 + ], + [ + 863, + "Garden of Finzi-Contini, The (Giardino dei Finzi-Contini, Il) (1970)", + 24 + ], + [ + 864, + "My Fellow Americans (1996)", + 86 + ], + [ + 865, + "Ice Storm, The (1997)", + 21 + ], + [ + 866, + "Michael (1996)", + 119 + ], + [ + 867, + "Whole Wide World, The (1996)", + 6 + ], + [ + 868, + "Hearts and Minds (1996)", + 5 + ], + [ + 869, + "Fools Rush In (1997)", + 24 + ], + [ + 870, + "Touch (1997)", + 9 + ], + [ + 871, + "Vegas Vacation (1997)", + 75 + ], + [ + 872, + "Love Jones (1997)", + 42 + ], + [ + 873, + "Picture Perfect (1997)", + 81 + ], + [ + 874, + "Career Girls (1997)", + 39 + ], + [ + 875, + "She's So Lovely (1997)", + 53 + ], + [ + 876, + "Money Talks (1997)", + 47 + ], + [ + 877, + "Excess Baggage (1997)", + 52 + ], + [ + 878, + "That Darn Cat! (1997)", + 33 + ], + [ + 879, + "Peacemaker, The (1997)", + 136 + ], + [ + 880, + "Soul Food (1997)", + 59 + ], + [ + 881, + "Money Talks (1997)", + 45 + ], + [ + 882, + "Washington Square (1997)", + 34 + ], + [ + 883, + "Telling Lies in America (1997)", + 13 + ], + [ + 884, + "Year of the Horse (1997)", + 7 + ], + [ + 885, + "Phantoms (1998)", + 13 + ], + [ + 886, + "Life Less Ordinary, A (1997)", + 53 + ], + [ + 887, + "Eve's Bayou (1997)", + 64 + ], + [ + 888, + "One Night Stand (1997)", + 15 + ], + [ + 889, + "Tango Lesson, The (1997)", + 13 + ], + [ + 890, + "Mortal Kombat: Annihilation (1997)", + 43 + ], + [ + 891, + "Bent (1997)", + 6 + ], + [ + 892, + "Flubber (1997)", + 53 + ], + [ + 893, + "For Richer or Poorer (1997)", + 14 + ], + [ + 894, + "Home Alone 3 (1997)", + 19 + ], + [ + 895, + "Scream 2 (1997)", + 106 + ], + [ + 896, + "Sweet Hereafter, The (1997)", + 44 + ], + [ + 897, + "Time Tracers (1995)", + 2 + ], + [ + 898, + "Postman, The (1997)", + 58 + ], + [ + 899, + "Winter Guest, The (1997)", + 9 + ], + [ + 900, + "Kundun (1997)", + 42 + ], + [ + 901, + "Mr. Magoo (1997)", + 12 + ], + [ + 902, + "Big Lebowski, The (1998)", + 42 + ], + [ + 903, + "Afterglow (1997)", + 18 + ], + [ + 904, + "Ma vie en rose (My Life in Pink) (1997)", + 20 + ], + [ + 905, + "Great Expectations (1998)", + 27 + ], + [ + 906, + "Oscar & Lucinda (1997)", + 21 + ], + [ + 907, + "Vermin (1998)", + 2 + ], + [ + 908, + "Half Baked (1998)", + 20 + ], + [ + 909, + "Dangerous Beauty (1998)", + 13 + ], + [ + 910, + "Nil By Mouth (1997)", + 4 + ], + [ + 911, + "Twilight (1998)", + 4 + ], + [ + 912, + "U.S. Marshalls (1998)", + 9 + ], + [ + 913, + "Love and Death on Long Island (1997)", + 2 + ], + [ + 914, + "Wild Things (1998)", + 11 + ], + [ + 915, + "Primary Colors (1998)", + 13 + ], + [ + 916, + "Lost in Space (1998)", + 18 + ], + [ + 917, + "Mercury Rising (1998)", + 7 + ], + [ + 918, + "City of Angels (1998)", + 8 + ], + [ + 919, + "City of Lost Children, The (1995)", + 96 + ], + [ + 920, + "Two Bits (1995)", + 5 + ], + [ + 921, + "Farewell My Concubine (1993)", + 46 + ], + [ + 922, + "Dead Man (1995)", + 34 + ], + [ + 923, + "Raise the Red Lantern (1991)", + 58 + ], + [ + 924, + "White Squall (1996)", + 85 + ], + [ + 925, + "Unforgettable (1996)", + 34 + ], + [ + 926, + "Down Periscope (1996)", + 101 + ], + [ + 927, + "Flower of My Secret, The (Flor de mi secreto, La) (1995)", + 6 + ], + [ + 928, + "Craft, The (1996)", + 104 + ], + [ + 929, + "Harriet the Spy (1996)", + 40 + ], + [ + 930, + "Chain Reaction (1996)", + 80 + ], + [ + 931, + "Island of Dr. Moreau, The (1996)", + 57 + ], + [ + 932, + "First Kid (1996)", + 40 + ], + [ + 933, + "Funeral, The (1996)", + 21 + ], + [ + 934, + "Preacher's Wife, The (1996)", + 68 + ], + [ + 935, + "Paradise Road (1997)", + 7 + ], + [ + 936, + "Brassed Off (1996)", + 32 + ], + [ + 937, + "Thousand Acres, A (1997)", + 37 + ], + [ + 938, + "Smile Like Yours, A (1997)", + 25 + ], + [ + 939, + "Murder in the First (1995)", + 60 + ], + [ + 940, + "Airheads (1994)", + 32 + ], + [ + 941, + "With Honors (1994)", + 46 + ], + [ + 942, + "What's Love Got to Do with It (1993)", + 45 + ], + [ + 943, + "Killing Zoe (1994)", + 40 + ], + [ + 944, + "Renaissance Man (1994)", + 43 + ], + [ + 945, + "Charade (1963)", + 40 + ], + [ + 946, + "Fox and the Hound, The (1981)", + 61 + ], + [ + 947, + "Big Blue, The (Grand bleu, Le) (1988)", + 17 + ], + [ + 948, + "Booty Call (1997)", + 48 + ], + [ + 949, + "How to Make an American Quilt (1995)", + 71 + ], + [ + 950, + "Georgia (1995)", + 30 + ], + [ + 951, + "Indian in the Cupboard, The (1995)", + 39 + ], + [ + 952, + "Blue in the Face (1995)", + 45 + ], + [ + 953, + "Unstrung Heroes (1995)", + 22 + ], + [ + 954, + "Unzipped (1995)", + 11 + ], + [ + 955, + "Before Sunrise (1995)", + 49 + ], + [ + 956, + "Nobody's Fool (1994)", + 46 + ], + [ + 957, + "Pushing Hands (1992)", + 2 + ], + [ + 958, + "To Live (Huozhe) (1994)", + 14 + ], + [ + 959, + "Dazed and Confused (1993)", + 64 + ], + [ + 960, + "Naked (1993)", + 25 + ], + [ + 961, + "Orlando (1993)", + 34 + ], + [ + 962, + "Ruby in Paradise (1993)", + 23 + ], + [ + 963, + "Some Folks Call It a Sling Blade (1993)", + 41 + ], + [ + 964, + "Month by the Lake, A (1995)", + 9 + ], + [ + 965, + "Funny Face (1957)", + 21 + ], + [ + 966, + "Affair to Remember, An (1957)", + 26 + ], + [ + 967, + "Little Lord Fauntleroy (1936)", + 12 + ], + [ + 968, + "Inspector General, The (1949)", + 18 + ], + [ + 969, + "Winnie the Pooh and the Blustery Day (1968)", + 75 + ], + [ + 970, + "Hear My Song (1991)", + 8 + ], + [ + 971, + "Mediterraneo (1991)", + 34 + ], + [ + 972, + "Passion Fish (1992)", + 28 + ], + [ + 973, + "Grateful Dead (1995)", + 4 + ], + [ + 974, + "Eye for an Eye (1996)", + 32 + ], + [ + 975, + "Fear (1996)", + 44 + ], + [ + 976, + "Solo (1996)", + 12 + ], + [ + 977, + "Substitute, The (1996)", + 49 + ], + [ + 978, + "Heaven's Prisoners (1996)", + 27 + ], + [ + 979, + "Trigger Effect, The (1996)", + 35 + ], + [ + 980, + "Mother Night (1996)", + 22 + ], + [ + 981, + "Dangerous Ground (1997)", + 8 + ], + [ + 982, + "Maximum Risk (1996)", + 20 + ], + [ + 983, + "Rich Man's Wife, The (1996)", + 15 + ], + [ + 984, + "Shadow Conspiracy (1997)", + 44 + ], + [ + 985, + "Blood & Wine (1997)", + 22 + ], + [ + 986, + "Turbulence (1997)", + 23 + ], + [ + 987, + "Underworld (1997)", + 4 + ], + [ + 988, + "Beautician and the Beast, The (1997)", + 86 + ], + [ + 989, + "Cats Don't Dance (1997)", + 32 + ], + [ + 990, + "Anna Karenina (1997)", + 33 + ], + [ + 991, + "Keys to Tulsa (1997)", + 25 + ], + [ + 992, + "Head Above Water (1996)", + 4 + ], + [ + 993, + "Hercules (1997)", + 66 + ], + [ + 994, + "Last Time I Committed Suicide, The (1997)", + 7 + ], + [ + 995, + "Kiss Me, Guido (1997)", + 31 + ], + [ + 996, + "Big Green, The (1995)", + 14 + ], + [ + 997, + "Stuart Saves His Family (1995)", + 16 + ], + [ + 998, + "Cabin Boy (1994)", + 16 + ], + [ + 999, + "Clean Slate (1994)", + 10 + ], + [ + 1000, + "Lightning Jack (1994)", + 10 + ], + [ + 1001, + "Stupids, The (1996)", + 17 + ], + [ + 1002, + "Pest, The (1997)", + 8 + ], + [ + 1003, + "That Darn Cat! (1997)", + 8 + ], + [ + 1004, + "Geronimo: An American Legend (1993)", + 9 + ], + [ + 1005, + "Double vie de Véronique, La (Double Life of Veronique, The) (1991)", + 22 + ], + [ + 1006, + "Until the End of the World (Bis ans Ende der Welt) (1991)", + 23 + ], + [ + 1007, + "Waiting for Guffman (1996)", + 47 + ], + [ + 1008, + "I Shot Andy Warhol (1996)", + 37 + ], + [ + 1009, + "Stealing Beauty (1996)", + 64 + ], + [ + 1010, + "Basquiat (1996)", + 44 + ], + [ + 1011, + "2 Days in the Valley (1996)", + 93 + ], + [ + 1012, + "Private Parts (1997)", + 100 + ], + [ + 1013, + "Anaconda (1997)", + 38 + ], + [ + 1014, + "Romy and Michele's High School Reunion (1997)", + 98 + ], + [ + 1015, + "Shiloh (1997)", + 12 + ], + [ + 1016, + "Con Air (1997)", + 137 + ], + [ + 1017, + "Trees Lounge (1996)", + 50 + ], + [ + 1018, + "Tie Me Up! Tie Me Down! (1990)", + 32 + ], + [ + 1019, + "Die xue shuang xiong (Killer, The) (1989)", + 31 + ], + [ + 1020, + "Gaslight (1944)", + 35 + ], + [ + 1021, + "8 1/2 (1963)", + 38 + ], + [ + 1022, + "Fast, Cheap & Out of Control (1997)", + 32 + ], + [ + 1023, + "Fathers' Day (1997)", + 31 + ], + [ + 1024, + "Mrs. Dalloway (1997)", + 15 + ], + [ + 1025, + "Fire Down Below (1997)", + 44 + ], + [ + 1026, + "Lay of the Land, The (1997)", + 4 + ], + [ + 1027, + "Shooter, The (1995)", + 3 + ], + [ + 1028, + "Grumpier Old Men (1995)", + 148 + ], + [ + 1029, + "Jury Duty (1995)", + 14 + ], + [ + 1030, + "Beverly Hillbillies, The (1993)", + 20 + ], + [ + 1031, + "Lassie (1994)", + 7 + ], + [ + 1032, + "Little Big League (1994)", + 16 + ], + [ + 1033, + "Homeward Bound II: Lost in San Francisco (1996)", + 32 + ], + [ + 1034, + "Quest, The (1996)", + 27 + ], + [ + 1035, + "Cool Runnings (1993)", + 68 + ], + [ + 1036, + "Drop Dead Fred (1991)", + 24 + ], + [ + 1037, + "Grease 2 (1982)", + 24 + ], + [ + 1038, + "Switchback (1997)", + 17 + ], + [ + 1039, + "Hamlet (1996)", + 90 + ], + [ + 1040, + "Two if by Sea (1996)", + 25 + ], + [ + 1041, + "Forget Paris (1995)", + 62 + ], + [ + 1042, + "Just Cause (1995)", + 28 + ], + [ + 1043, + "Rent-a-Kid (1995)", + 8 + ], + [ + 1044, + "Paper, The (1994)", + 40 + ], + [ + 1045, + "Fearless (1993)", + 25 + ], + [ + 1046, + "Malice (1993)", + 46 + ], + [ + 1047, + "Multiplicity (1996)", + 134 + ], + [ + 1048, + "She's the One (1996)", + 73 + ], + [ + 1049, + "House Arrest (1996)", + 25 + ], + [ + 1050, + "Ghost and Mrs. Muir, The (1947)", + 43 + ], + [ + 1051, + "Associate, The (1996)", + 41 + ], + [ + 1052, + "Dracula: Dead and Loving It (1995)", + 25 + ], + [ + 1053, + "Now and Then (1995)", + 24 + ], + [ + 1054, + "Mr. Wrong (1996)", + 23 + ], + [ + 1055, + "Simple Twist of Fate, A (1994)", + 10 + ], + [ + 1056, + "Cronos (1992)", + 10 + ], + [ + 1057, + "Pallbearer, The (1996)", + 22 + ], + [ + 1058, + "War, The (1994)", + 15 + ], + [ + 1059, + "Don't Be a Menace to South Central While Drinking Your Juice in the Hood (1996)", + 35 + ], + [ + 1060, + "Adventures of Pinocchio, The (1996)", + 39 + ], + [ + 1061, + "Evening Star, The (1996)", + 29 + ], + [ + 1062, + "Four Days in September (1997)", + 12 + ], + [ + 1063, + "Little Princess, A (1995)", + 41 + ], + [ + 1064, + "Crossfire (1947)", + 4 + ], + [ + 1065, + "Koyaanisqatsi (1983)", + 53 + ], + [ + 1066, + "Balto (1995)", + 16 + ], + [ + 1067, + "Bottle Rocket (1996)", + 44 + ], + [ + 1068, + "Star Maker, The (Uomo delle stelle, L') (1995)", + 12 + ], + [ + 1069, + "Amateur (1994)", + 18 + ], + [ + 1070, + "Living in Oblivion (1995)", + 27 + ], + [ + 1071, + "Party Girl (1995)", + 16 + ], + [ + 1072, + "Pyromaniac's Love Story, A (1995)", + 7 + ], + [ + 1073, + "Shallow Grave (1994)", + 66 + ], + [ + 1074, + "Reality Bites (1994)", + 77 + ], + [ + 1075, + "Man of No Importance, A (1994)", + 7 + ], + [ + 1076, + "Pagemaster, The (1994)", + 12 + ], + [ + 1077, + "Love and a .45 (1994)", + 8 + ], + [ + 1078, + "Oliver & Company (1988)", + 22 + ], + [ + 1079, + "Joe's Apartment (1996)", + 45 + ], + [ + 1080, + "Celestial Clockwork (1994)", + 2 + ], + [ + 1081, + "Curdled (1996)", + 8 + ], + [ + 1082, + "Female Perversions (1996)", + 8 + ], + [ + 1083, + "Albino Alligator (1996)", + 6 + ], + [ + 1084, + "Anne Frank Remembered (1995)", + 21 + ], + [ + 1085, + "Carried Away (1996)", + 11 + ], + [ + 1086, + "It's My Party (1995)", + 21 + ], + [ + 1087, + "Bloodsport 2 (1995)", + 10 + ], + [ + 1088, + "Double Team (1997)", + 13 + ], + [ + 1089, + "Speed 2: Cruise Control (1997)", + 38 + ], + [ + 1090, + "Sliver (1993)", + 37 + ], + [ + 1091, + "Pete's Dragon (1977)", + 43 + ], + [ + 1092, + "Dear God (1996)", + 12 + ], + [ + 1093, + "Live Nude Girls (1995)", + 23 + ], + [ + 1094, + "Thin Line Between Love and Hate, A (1996)", + 12 + ], + [ + 1095, + "High School High (1996)", + 29 + ], + [ + 1096, + "Commandments (1997)", + 3 + ], + [ + 1097, + "Hate (Haine, La) (1995)", + 18 + ], + [ + 1098, + "Flirting With Disaster (1996)", + 42 + ], + [ + 1099, + "Red Firecracker, Green Firecracker (1994)", + 13 + ], + [ + 1100, + "What Happened Was... (1994)", + 8 + ], + [ + 1101, + "Six Degrees of Separation (1993)", + 74 + ], + [ + 1102, + "Two Much (1996)", + 7 + ], + [ + 1103, + "Trust (1990)", + 19 + ], + [ + 1104, + "C'est arrivé près de chez vous (1992)", + 4 + ], + [ + 1105, + "Firestorm (1998)", + 18 + ], + [ + 1106, + "Newton Boys, The (1998)", + 4 + ], + [ + 1107, + "Beyond Rangoon (1995)", + 18 + ], + [ + 1108, + "Feast of July (1995)", + 5 + ], + [ + 1109, + "Death and the Maiden (1994)", + 28 + ], + [ + 1110, + "Tank Girl (1995)", + 41 + ], + [ + 1111, + "Double Happiness (1994)", + 7 + ], + [ + 1112, + "Cobb (1994)", + 15 + ], + [ + 1113, + "Mrs. Parker and the Vicious Circle (1994)", + 22 + ], + [ + 1114, + "Faithful (1996)", + 10 + ], + [ + 1115, + "Twelfth Night (1996)", + 29 + ], + [ + 1116, + "Mark of Zorro, The (1940)", + 13 + ], + [ + 1117, + "Surviving Picasso (1996)", + 19 + ], + [ + 1118, + "Up in Smoke (1978)", + 47 + ], + [ + 1119, + "Some Kind of Wonderful (1987)", + 59 + ], + [ + 1120, + "I'm Not Rappaport (1996)", + 17 + ], + [ + 1121, + "Umbrellas of Cherbourg, The (Parapluies de Cherbourg, Les) (1964)", + 21 + ], + [ + 1122, + "They Made Me a Criminal (1939)", + 1 + ], + [ + 1123, + "Last Time I Saw Paris, The (1954)", + 3 + ], + [ + 1124, + "Farewell to Arms, A (1932)", + 12 + ], + [ + 1125, + "Innocents, The (1961)", + 4 + ], + [ + 1126, + "Old Man and the Sea, The (1958)", + 32 + ], + [ + 1127, + "Truman Show, The (1998)", + 11 + ], + [ + 1128, + "Heidi Fleiss: Hollywood Madam (1995) ", + 13 + ], + [ + 1129, + "Chungking Express (1994)", + 28 + ], + [ + 1130, + "Jupiter's Wife (1994)", + 1 + ], + [ + 1131, + "Safe (1995)", + 13 + ], + [ + 1132, + "Feeling Minnesota (1996)", + 32 + ], + [ + 1133, + "Escape to Witch Mountain (1975)", + 30 + ], + [ + 1134, + "Get on the Bus (1996)", + 38 + ], + [ + 1135, + "Doors, The (1991)", + 46 + ], + [ + 1136, + "Ghosts of Mississippi (1996)", + 29 + ], + [ + 1137, + "Beautiful Thing (1996)", + 29 + ], + [ + 1138, + "Best Men (1997)", + 5 + ], + [ + 1139, + "Hackers (1995)", + 33 + ], + [ + 1140, + "Road to Wellville, The (1994)", + 17 + ], + [ + 1141, + "War Room, The (1993)", + 9 + ], + [ + 1142, + "When We Were Kings (1996)", + 44 + ], + [ + 1143, + "Hard Eight (1996)", + 15 + ], + [ + 1144, + "Quiet Room, The (1996)", + 3 + ], + [ + 1145, + "Blue Chips (1994)", + 9 + ], + [ + 1146, + "Calendar Girl (1993)", + 3 + ], + [ + 1147, + "My Family (1995)", + 21 + ], + [ + 1148, + "Tom & Viv (1994)", + 9 + ], + [ + 1149, + "Walkabout (1971)", + 26 + ], + [ + 1150, + "Last Dance (1996)", + 9 + ], + [ + 1151, + "Original Gangstas (1996)", + 7 + ], + [ + 1152, + "In Love and War (1996)", + 28 + ], + [ + 1153, + "Backbeat (1993)", + 19 + ], + [ + 1154, + "Alphaville (1965)", + 12 + ], + [ + 1155, + "Rendezvous in Paris (Rendez-vous de Paris, Les) (1995)", + 3 + ], + [ + 1156, + "Cyclo (1995)", + 1 + ], + [ + 1157, + "Relic, The (1997)", + 25 + ], + [ + 1158, + "Fille seule, La (A Single Girl) (1995)", + 4 + ], + [ + 1159, + "Stalker (1979)", + 11 + ], + [ + 1160, + "Love! Valour! Compassion! (1997)", + 26 + ], + [ + 1161, + "Palookaville (1996)", + 13 + ], + [ + 1162, + "Phat Beach (1996)", + 5 + ], + [ + 1163, + "Portrait of a Lady, The (1996)", + 25 + ], + [ + 1164, + "Zeus and Roxanne (1997)", + 6 + ], + [ + 1165, + "Big Bully (1996)", + 14 + ], + [ + 1166, + "Love & Human Remains (1993)", + 12 + ], + [ + 1167, + "Sum of Us, The (1994)", + 11 + ], + [ + 1168, + "Little Buddha (1993)", + 22 + ], + [ + 1169, + "Fresh (1994)", + 10 + ], + [ + 1170, + "Spanking the Monkey (1994)", + 27 + ], + [ + 1171, + "Wild Reeds (1994)", + 14 + ], + [ + 1172, + "Women, The (1939)", + 15 + ], + [ + 1173, + "Bliss (1997)", + 7 + ], + [ + 1174, + "Caught (1996)", + 8 + ], + [ + 1175, + "Hugo Pool (1997)", + 5 + ], + [ + 1176, + "Welcome To Sarajevo (1997)", + 22 + ], + [ + 1177, + "Dunston Checks In (1996)", + 7 + ], + [ + 1178, + "Major Payne (1994)", + 19 + ], + [ + 1179, + "Man of the House (1995)", + 9 + ], + [ + 1180, + "I Love Trouble (1994)", + 10 + ], + [ + 1181, + "Low Down Dirty Shame, A (1994)", + 10 + ], + [ + 1182, + "Cops and Robbersons (1994)", + 13 + ], + [ + 1183, + "Cowboy Way, The (1994)", + 19 + ], + [ + 1184, + "Endless Summer 2, The (1994)", + 10 + ], + [ + 1185, + "In the Army Now (1994)", + 18 + ], + [ + 1186, + "Inkwell, The (1994)", + 3 + ], + [ + 1187, + "Switchblade Sisters (1975)", + 13 + ], + [ + 1188, + "Young Guns II (1990)", + 44 + ], + [ + 1189, + "Prefontaine (1997)", + 3 + ], + [ + 1190, + "That Old Feeling (1997)", + 11 + ], + [ + 1191, + "Letter From Death Row, A (1998)", + 3 + ], + [ + 1192, + "Boys of St. Vincent, The (1993)", + 13 + ], + [ + 1193, + "Before the Rain (Pred dozhdot) (1994)", + 10 + ], + [ + 1194, + "Once Were Warriors (1994)", + 31 + ], + [ + 1195, + "Strawberry and Chocolate (Fresa y chocolate) (1993)", + 11 + ], + [ + 1196, + "Savage Nights (Nuits fauves, Les) (1992)", + 3 + ], + [ + 1197, + "Family Thing, A (1996)", + 45 + ], + [ + 1198, + "Purple Noon (1960)", + 7 + ], + [ + 1199, + "Cemetery Man (Dellamorte Dellamore) (1994)", + 23 + ], + [ + 1200, + "Kim (1950)", + 7 + ], + [ + 1201, + "Marlene Dietrich: Shadow and Light (1996) ", + 1 + ], + [ + 1202, + "Maybe, Maybe Not (Bewegte Mann, Der) (1994)", + 8 + ], + [ + 1203, + "Top Hat (1935)", + 21 + ], + [ + 1204, + "To Be or Not to Be (1942)", + 18 + ], + [ + 1205, + "Secret Agent, The (1996)", + 6 + ], + [ + 1206, + "Amos & Andrew (1993)", + 19 + ], + [ + 1207, + "Jade (1995)", + 17 + ], + [ + 1208, + "Kiss of Death (1995)", + 20 + ], + [ + 1209, + "Mixed Nuts (1994)", + 15 + ], + [ + 1210, + "Virtuosity (1995)", + 38 + ], + [ + 1211, + "Blue Sky (1994)", + 12 + ], + [ + 1212, + "Flesh and Bone (1993)", + 6 + ], + [ + 1213, + "Guilty as Sin (1993)", + 6 + ], + [ + 1214, + "In the Realm of the Senses (Ai no corrida) (1976)", + 9 + ], + [ + 1215, + "Barb Wire (1996)", + 30 + ], + [ + 1216, + "Kissed (1996)", + 6 + ], + [ + 1217, + "Assassins (1995)", + 39 + ], + [ + 1218, + "Friday (1995)", + 26 + ], + [ + 1219, + "Goofy Movie, A (1995)", + 20 + ], + [ + 1220, + "Higher Learning (1995)", + 30 + ], + [ + 1221, + "When a Man Loves a Woman (1994)", + 39 + ], + [ + 1222, + "Judgment Night (1993)", + 25 + ], + [ + 1223, + "King of the Hill (1993)", + 4 + ], + [ + 1224, + "Scout, The (1994)", + 12 + ], + [ + 1225, + "Angus (1995)", + 14 + ], + [ + 1226, + "Night Falls on Manhattan (1997)", + 32 + ], + [ + 1227, + "Awfully Big Adventure, An (1995)", + 8 + ], + [ + 1228, + "Under Siege 2: Dark Territory (1995)", + 48 + ], + [ + 1229, + "Poison Ivy II (1995)", + 13 + ], + [ + 1230, + "Ready to Wear (Pret-A-Porter) (1994)", + 18 + ], + [ + 1231, + "Marked for Death (1990)", + 22 + ], + [ + 1232, + "Madonna: Truth or Dare (1991)", + 17 + ], + [ + 1233, + "Nénette et Boni (1996)", + 6 + ], + [ + 1234, + "Chairman of the Board (1998)", + 8 + ], + [ + 1235, + "Big Bang Theory, The (1994)", + 1 + ], + [ + 1236, + "Other Voices, Other Rooms (1997)", + 1 + ], + [ + 1237, + "Twisted (1996)", + 6 + ], + [ + 1238, + "Full Speed (1996)", + 8 + ], + [ + 1239, + "Cutthroat Island (1995)", + 18 + ], + [ + 1240, + "Ghost in the Shell (Kokaku kidotai) (1995)", + 26 + ], + [ + 1241, + "Van, The (1996)", + 6 + ], + [ + 1242, + "Old Lady Who Walked in the Sea, The (Vieille qui marchait dans la mer, La) (1991)", + 5 + ], + [ + 1243, + "Night Flier (1997)", + 7 + ], + [ + 1244, + "Metro (1997)", + 36 + ], + [ + 1245, + "Gridlock'd (1997)", + 19 + ], + [ + 1246, + "Bushwhacked (1995)", + 7 + ], + [ + 1247, + "Bad Girls (1994)", + 6 + ], + [ + 1248, + "Blink (1994)", + 19 + ], + [ + 1249, + "For Love or Money (1993)", + 12 + ], + [ + 1250, + "Best of the Best 3: No Turning Back (1995)", + 6 + ], + [ + 1251, + "A Chef in Love (1996)", + 8 + ], + [ + 1252, + "Contempt (Mépris, Le) (1963)", + 9 + ], + [ + 1253, + "Tie That Binds, The (1995)", + 7 + ], + [ + 1254, + "Gone Fishin' (1997)", + 11 + ], + [ + 1255, + "Broken English (1996)", + 8 + ], + [ + 1256, + "Designated Mourner, The (1997)", + 3 + ], + [ + 1257, + "Designated Mourner, The (1997)", + 4 + ], + [ + 1258, + "Trial and Error (1997)", + 23 + ], + [ + 1259, + "Pie in the Sky (1995)", + 4 + ], + [ + 1260, + "Total Eclipse (1995)", + 4 + ], + [ + 1261, + "Run of the Country, The (1995)", + 4 + ], + [ + 1262, + "Walking and Talking (1996)", + 8 + ], + [ + 1263, + "Foxfire (1996)", + 15 + ], + [ + 1264, + "Nothing to Lose (1994)", + 7 + ], + [ + 1265, + "Star Maps (1997)", + 19 + ], + [ + 1266, + "Bread and Chocolate (Pane e cioccolata) (1973)", + 12 + ], + [ + 1267, + "Clockers (1995)", + 33 + ], + [ + 1268, + "Bitter Moon (1992)", + 10 + ], + [ + 1269, + "Love in the Afternoon (1957)", + 10 + ], + [ + 1270, + "Life with Mikey (1993)", + 7 + ], + [ + 1271, + "North (1994)", + 7 + ], + [ + 1272, + "Talking About Sex (1994)", + 5 + ], + [ + 1273, + "Color of Night (1994)", + 15 + ], + [ + 1274, + "Robocop 3 (1993)", + 11 + ], + [ + 1275, + "Killer (Bulletproof Heart) (1994)", + 4 + ], + [ + 1276, + "Sunset Park (1996)", + 8 + ], + [ + 1277, + "Set It Off (1996)", + 19 + ], + [ + 1278, + "Selena (1997)", + 16 + ], + [ + 1279, + "Wild America (1997)", + 9 + ], + [ + 1280, + "Gang Related (1997)", + 16 + ], + [ + 1281, + "Manny & Lo (1996)", + 13 + ], + [ + 1282, + "Grass Harp, The (1995)", + 9 + ], + [ + 1283, + "Out to Sea (1997)", + 19 + ], + [ + 1284, + "Before and After (1996)", + 26 + ], + [ + 1285, + "Princess Caraboo (1994)", + 15 + ], + [ + 1286, + "Shall We Dance? (1937)", + 17 + ], + [ + 1287, + "Ed (1996)", + 6 + ], + [ + 1288, + "Denise Calls Up (1995)", + 7 + ], + [ + 1289, + "Jack and Sarah (1995)", + 7 + ], + [ + 1290, + "Country Life (1994)", + 2 + ], + [ + 1291, + "Celtic Pride (1996)", + 15 + ], + [ + 1292, + "Simple Wish, A (1997)", + 3 + ], + [ + 1293, + "Star Kid (1997)", + 3 + ], + [ + 1294, + "Ayn Rand: A Sense of Life (1997)", + 7 + ], + [ + 1295, + "Kicked in the Head (1997)", + 7 + ], + [ + 1296, + "Indian Summer (1996)", + 20 + ], + [ + 1297, + "Love Affair (1994)", + 12 + ], + [ + 1298, + "Band Wagon, The (1953)", + 9 + ], + [ + 1299, + "Penny Serenade (1941)", + 8 + ], + [ + 1300, + "'Til There Was You (1997)", + 9 + ], + [ + 1301, + "Stripes (1981)", + 5 + ], + [ + 1302, + "Late Bloomers (1996)", + 5 + ], + [ + 1303, + "Getaway, The (1994)", + 18 + ], + [ + 1304, + "New York Cop (1996)", + 2 + ], + [ + 1305, + "National Lampoon's Senior Trip (1995)", + 7 + ], + [ + 1306, + "Delta of Venus (1994)", + 2 + ], + [ + 1307, + "Carmen Miranda: Bananas Is My Business (1994)", + 2 + ], + [ + 1308, + "Babyfever (1994)", + 2 + ], + [ + 1309, + "Very Natural Thing, A (1974)", + 1 + ], + [ + 1310, + "Walk in the Sun, A (1945)", + 1 + ], + [ + 1311, + "Waiting to Exhale (1995)", + 16 + ], + [ + 1312, + "Pompatus of Love, The (1996)", + 7 + ], + [ + 1313, + "Palmetto (1998)", + 14 + ], + [ + 1314, + "Surviving the Game (1994)", + 11 + ], + [ + 1315, + "Inventing the Abbotts (1997)", + 23 + ], + [ + 1316, + "Horse Whisperer, The (1998)", + 7 + ], + [ + 1317, + "Journey of August King, The (1995)", + 4 + ], + [ + 1318, + "Catwalk (1995)", + 3 + ], + [ + 1319, + "Neon Bible, The (1995)", + 4 + ], + [ + 1320, + "Homage (1995)", + 1 + ], + [ + 1321, + "Open Season (1996)", + 2 + ], + [ + 1322, + "Metisse (Café au Lait) (1993)", + 6 + ], + [ + 1323, + "Wooden Man's Bride, The (Wu Kui) (1994)", + 3 + ], + [ + 1324, + "Loaded (1994)", + 5 + ], + [ + 1325, + "August (1996)", + 1 + ], + [ + 1326, + "Boys (1996)", + 6 + ], + [ + 1327, + "Captives (1994)", + 3 + ], + [ + 1328, + "Of Love and Shadows (1994)", + 6 + ], + [ + 1329, + "Low Life, The (1994)", + 1 + ], + [ + 1330, + "An Unforgettable Summer (1994)", + 4 + ], + [ + 1331, + "Last Klezmer: Leopold Kozlowski, His Life and Music, The (1995)", + 4 + ], + [ + 1332, + "My Life and Times With Antonin Artaud (En compagnie d'Antonin Artaud) (1993)", + 2 + ], + [ + 1333, + "Midnight Dancers (Sibak) (1994)", + 5 + ], + [ + 1334, + "Somebody to Love (1994)", + 2 + ], + [ + 1335, + "American Buffalo (1996)", + 11 + ], + [ + 1336, + "Kazaam (1996)", + 10 + ], + [ + 1337, + "Larger Than Life (1996)", + 9 + ], + [ + 1338, + "Two Deaths (1995)", + 4 + ], + [ + 1339, + "Stefano Quantestorie (1993)", + 1 + ], + [ + 1340, + "Crude Oasis, The (1995)", + 1 + ], + [ + 1341, + "Hedd Wyn (1992)", + 1 + ], + [ + 1342, + "Convent, The (Convento, O) (1995)", + 2 + ], + [ + 1343, + "Lotto Land (1995)", + 1 + ], + [ + 1344, + "Story of Xinghua, The (1993)", + 5 + ], + [ + 1345, + "Day the Sun Turned Cold, The (Tianguo niezi) (1994)", + 2 + ], + [ + 1346, + "Dingo (1992)", + 5 + ], + [ + 1347, + "Ballad of Narayama, The (Narayama Bushiko) (1958)", + 4 + ], + [ + 1348, + "Every Other Weekend (1990)", + 1 + ], + [ + 1349, + "Mille bolle blu (1993)", + 1 + ], + [ + 1350, + "Crows and Sparrows (1949)", + 2 + ], + [ + 1351, + "Lover's Knot (1996)", + 3 + ], + [ + 1352, + "Shadow of Angels (Schatten der Engel) (1976)", + 1 + ], + [ + 1353, + "1-900 (1994)", + 5 + ], + [ + 1354, + "Venice/Venice (1992)", + 2 + ], + [ + 1355, + "Infinity (1996)", + 6 + ], + [ + 1356, + "Ed's Next Move (1996)", + 3 + ], + [ + 1357, + "For the Moment (1994)", + 3 + ], + [ + 1358, + "The Deadly Cure (1996)", + 2 + ], + [ + 1359, + "Boys in Venice (1996)", + 2 + ], + [ + 1360, + "Sexual Life of the Belgians, The (1994)", + 2 + ], + [ + 1361, + "Search for One-eye Jimmy, The (1996)", + 3 + ], + [ + 1362, + "American Strays (1996)", + 2 + ], + [ + 1363, + "Leopard Son, The (1996)", + 1 + ], + [ + 1364, + "Bird of Prey (1996)", + 1 + ], + [ + 1365, + "Johnny 100 Pesos (1993)", + 2 + ], + [ + 1366, + "JLG/JLG - autoportrait de décembre (1994)", + 1 + ], + [ + 1367, + "Faust (1994)", + 5 + ], + [ + 1368, + "Mina Tannenbaum (1994)", + 6 + ], + [ + 1369, + "Forbidden Christ, The (Cristo proibito, Il) (1950)", + 4 + ], + [ + 1370, + "I Can't Sleep (J'ai pas sommeil) (1994)", + 3 + ], + [ + 1371, + "Machine, The (1994)", + 2 + ], + [ + 1372, + "Stranger, The (1994)", + 3 + ], + [ + 1373, + "Good Morning (1971)", + 1 + ], + [ + 1374, + "Falling in Love Again (1980)", + 2 + ], + [ + 1375, + "Cement Garden, The (1993)", + 10 + ], + [ + 1376, + "Meet Wally Sparks (1997)", + 7 + ], + [ + 1377, + "Hotel de Love (1996)", + 4 + ], + [ + 1378, + "Rhyme & Reason (1997)", + 5 + ], + [ + 1379, + "Love and Other Catastrophes (1996)", + 7 + ], + [ + 1380, + "Hollow Reed (1996)", + 6 + ], + [ + 1381, + "Losing Chase (1996)", + 8 + ], + [ + 1382, + "Bonheur, Le (1965)", + 4 + ], + [ + 1383, + "Second Jungle Book: Mowgli & Baloo, The (1997)", + 6 + ], + [ + 1384, + "Squeeze (1996)", + 3 + ], + [ + 1385, + "Roseanna's Grave (For Roseanna) (1997)", + 5 + ], + [ + 1386, + "Tetsuo II: Body Hammer (1992)", + 6 + ], + [ + 1387, + "Fall (1997)", + 3 + ], + [ + 1388, + "Gabbeh (1996)", + 6 + ], + [ + 1389, + "Mondo (1996)", + 3 + ], + [ + 1390, + "Innocent Sleep, The (1995)", + 2 + ], + [ + 1391, + "For Ever Mozart (1996)", + 3 + ], + [ + 1392, + "Locusts, The (1997)", + 5 + ], + [ + 1393, + "Stag (1997)", + 9 + ], + [ + 1394, + "Swept from the Sea (1997)", + 7 + ], + [ + 1395, + "Hurricane Streets (1998)", + 6 + ], + [ + 1396, + "Stonewall (1995)", + 5 + ], + [ + 1397, + "Of Human Bondage (1934)", + 5 + ], + [ + 1398, + "Anna (1996)", + 2 + ], + [ + 1399, + "Stranger in the House (1997)", + 7 + ], + [ + 1400, + "Picture Bride (1995)", + 10 + ], + [ + 1401, + "M. Butterfly (1993)", + 18 + ], + [ + 1402, + "Ciao, Professore! (1993)", + 4 + ], + [ + 1403, + "Caro Diario (Dear Diary) (1994)", + 4 + ], + [ + 1404, + "Withnail and I (1987)", + 13 + ], + [ + 1405, + "Boy's Life 2 (1997)", + 6 + ], + [ + 1406, + "When Night Is Falling (1995)", + 5 + ], + [ + 1407, + "Specialist, The (1994)", + 20 + ], + [ + 1408, + "Gordy (1995)", + 3 + ], + [ + 1409, + "Swan Princess, The (1994)", + 7 + ], + [ + 1410, + "Harlem (1993)", + 4 + ], + [ + 1411, + "Barbarella (1968)", + 28 + ], + [ + 1412, + "Land Before Time III: The Time of the Great Giving (1995) (V)", + 6 + ], + [ + 1413, + "Street Fighter (1994)", + 8 + ], + [ + 1414, + "Coldblooded (1995)", + 1 + ], + [ + 1415, + "Next Karate Kid, The (1994)", + 9 + ], + [ + 1416, + "No Escape (1994)", + 5 + ], + [ + 1417, + "Turning, The (1992)", + 2 + ], + [ + 1418, + "Joy Luck Club, The (1993)", + 3 + ], + [ + 1419, + "Highlander III: The Sorcerer (1994)", + 16 + ], + [ + 1420, + "Gilligan's Island: The Movie (1998)", + 3 + ], + [ + 1421, + "My Crazy Life (Mi vida loca) (1993)", + 11 + ], + [ + 1422, + "Suture (1993)", + 4 + ], + [ + 1423, + "Walking Dead, The (1995)", + 4 + ], + [ + 1424, + "I Like It Like That (1994)", + 3 + ], + [ + 1425, + "I'll Do Anything (1994)", + 10 + ], + [ + 1426, + "Grace of My Heart (1996)", + 8 + ], + [ + 1427, + "Drunks (1995)", + 5 + ], + [ + 1428, + "SubUrbia (1997)", + 12 + ], + [ + 1429, + "Sliding Doors (1998)", + 4 + ], + [ + 1430, + "Ill Gotten Gains (1997)", + 3 + ], + [ + 1431, + "Legal Deceit (1997)", + 5 + ], + [ + 1432, + "Mighty, The (1998)", + 3 + ], + [ + 1433, + "Men of Means (1998)", + 2 + ], + [ + 1434, + "Shooting Fish (1997)", + 10 + ], + [ + 1435, + "Steal Big, Steal Little (1995)", + 7 + ], + [ + 1436, + "Mr. Jones (1993)", + 2 + ], + [ + 1437, + "House Party 3 (1994)", + 9 + ], + [ + 1438, + "Panther (1995)", + 5 + ], + [ + 1439, + "Jason's Lyric (1994)", + 8 + ], + [ + 1440, + "Above the Rim (1994)", + 5 + ], + [ + 1441, + "Moonlight and Valentino (1995)", + 7 + ], + [ + 1442, + "Scarlet Letter, The (1995)", + 5 + ], + [ + 1443, + "8 Seconds (1994)", + 4 + ], + [ + 1444, + "That Darn Cat! (1965)", + 19 + ], + [ + 1445, + "Ladybird Ladybird (1994)", + 4 + ], + [ + 1446, + "Bye Bye, Love (1995)", + 15 + ], + [ + 1447, + "Century (1993)", + 1 + ], + [ + 1448, + "My Favorite Season (1993)", + 3 + ], + [ + 1449, + "Pather Panchali (1955)", + 8 + ], + [ + 1450, + "Golden Earrings (1947)", + 2 + ], + [ + 1451, + "Foreign Correspondent (1940)", + 15 + ], + [ + 1452, + "Lady of Burlesque (1943)", + 1 + ], + [ + 1453, + "Angel on My Shoulder (1946)", + 1 + ], + [ + 1454, + "Angel and the Badman (1947)", + 6 + ], + [ + 1455, + "Outlaw, The (1943)", + 2 + ], + [ + 1456, + "Beat the Devil (1954)", + 7 + ], + [ + 1457, + "Love Is All There Is (1996)", + 1 + ], + [ + 1458, + "Damsel in Distress, A (1937)", + 1 + ], + [ + 1459, + "Madame Butterfly (1995)", + 7 + ], + [ + 1460, + "Sleepover (1995)", + 1 + ], + [ + 1461, + "Here Comes Cookie (1935)", + 1 + ], + [ + 1462, + "Thieves (Voleurs, Les) (1996)", + 7 + ], + [ + 1463, + "Boys, Les (1997)", + 3 + ], + [ + 1464, + "Stars Fell on Henrietta, The (1995)", + 3 + ], + [ + 1465, + "Last Summer in the Hamptons (1995)", + 3 + ], + [ + 1466, + "Margaret's Museum (1995)", + 6 + ], + [ + 1467, + "Saint of Fort Washington, The (1993)", + 2 + ], + [ + 1468, + "Cure, The (1995)", + 6 + ], + [ + 1469, + "Tom and Huck (1995)", + 12 + ], + [ + 1470, + "Gumby: The Movie (1995)", + 5 + ], + [ + 1471, + "Hideaway (1995)", + 9 + ], + [ + 1472, + "Visitors, The (Visiteurs, Les) (1993)", + 2 + ], + [ + 1473, + "Little Princess, The (1939)", + 9 + ], + [ + 1474, + "Nina Takes a Lover (1994)", + 6 + ], + [ + 1475, + "Bhaji on the Beach (1993)", + 8 + ], + [ + 1476, + "Raw Deal (1948)", + 1 + ], + [ + 1477, + "Nightwatch (1997)", + 2 + ], + [ + 1478, + "Dead Presidents (1995)", + 18 + ], + [ + 1479, + "Reckless (1995)", + 8 + ], + [ + 1480, + "Herbie Rides Again (1974)", + 11 + ], + [ + 1481, + "S.F.W. (1994)", + 2 + ], + [ + 1482, + "Gate of Heavenly Peace, The (1995)", + 1 + ], + [ + 1483, + "Man in the Iron Mask, The (1998)", + 12 + ], + [ + 1484, + "Jerky Boys, The (1994)", + 3 + ], + [ + 1485, + "Colonel Chabert, Le (1994)", + 4 + ], + [ + 1486, + "Girl in the Cadillac (1995)", + 1 + ], + [ + 1487, + "Even Cowgirls Get the Blues (1993)", + 5 + ], + [ + 1488, + "Germinal (1993)", + 4 + ], + [ + 1489, + "Chasers (1994)", + 5 + ], + [ + 1490, + "Fausto (1993)", + 3 + ], + [ + 1491, + "Tough and Deadly (1995)", + 2 + ], + [ + 1492, + "Window to Paris (1994)", + 1 + ], + [ + 1493, + "Modern Affair, A (1995)", + 1 + ], + [ + 1494, + "Mostro, Il (1994)", + 1 + ], + [ + 1495, + "Flirt (1995)", + 5 + ], + [ + 1496, + "Carpool (1996)", + 5 + ], + [ + 1497, + "Line King: Al Hirschfeld, The (1996)", + 2 + ], + [ + 1498, + "Farmer & Chase (1995)", + 1 + ], + [ + 1499, + "Grosse Fatigue (1994)", + 4 + ], + [ + 1500, + "Santa with Muscles (1996)", + 2 + ], + [ + 1501, + "Prisoner of the Mountains (Kavkazsky Plennik) (1996)", + 5 + ], + [ + 1502, + "Naked in New York (1994)", + 2 + ], + [ + 1503, + "Gold Diggers: The Secret of Bear Mountain (1995)", + 10 + ], + [ + 1504, + "Bewegte Mann, Der (1994)", + 3 + ], + [ + 1505, + "Killer: A Journal of Murder (1995)", + 1 + ], + [ + 1506, + "Nelly & Monsieur Arnaud (1995)", + 3 + ], + [ + 1507, + "Three Lives and Only One Death (1996)", + 1 + ], + [ + 1508, + "Babysitter, The (1995)", + 3 + ], + [ + 1509, + "Getting Even with Dad (1994)", + 5 + ], + [ + 1510, + "Mad Dog Time (1996)", + 1 + ], + [ + 1511, + "Children of the Revolution (1996)", + 5 + ], + [ + 1512, + "World of Apu, The (Apur Sansar) (1959)", + 6 + ], + [ + 1513, + "Sprung (1997)", + 3 + ], + [ + 1514, + "Dream With the Fishes (1997)", + 7 + ], + [ + 1515, + "Wings of Courage (1995)", + 1 + ], + [ + 1516, + "Wedding Gift, The (1994)", + 3 + ], + [ + 1517, + "Race the Sun (1996)", + 5 + ], + [ + 1518, + "Losing Isaiah (1995)", + 12 + ], + [ + 1519, + "New Jersey Drive (1995)", + 2 + ], + [ + 1520, + "Fear, The (1995)", + 1 + ], + [ + 1521, + "Mr. Wonderful (1993)", + 4 + ], + [ + 1522, + "Trial by Jury (1994)", + 7 + ], + [ + 1523, + "Good Man in Africa, A (1994)", + 2 + ], + [ + 1524, + "Kaspar Hauser (1993)", + 8 + ], + [ + 1525, + "Object of My Affection, The (1998)", + 1 + ], + [ + 1526, + "Witness (1985)", + 1 + ], + [ + 1527, + "Senseless (1998)", + 7 + ], + [ + 1528, + "Nowhere (1997)", + 3 + ], + [ + 1529, + "Underground (1995)", + 5 + ], + [ + 1530, + "Jefferson in Paris (1995)", + 5 + ], + [ + 1531, + "Far From Home: The Adventures of Yellow Dog (1995)", + 7 + ], + [ + 1532, + "Foreign Student (1994)", + 2 + ], + [ + 1533, + "I Don't Want to Talk About It (De eso no se habla) (1993)", + 1 + ], + [ + 1534, + "Twin Town (1997)", + 6 + ], + [ + 1535, + "Enfer, L' (1994)", + 4 + ], + [ + 1536, + "Aiqing wansui (1994)", + 1 + ], + [ + 1537, + "Cosi (1996)", + 4 + ], + [ + 1538, + "All Over Me (1997)", + 3 + ], + [ + 1539, + "Being Human (1993)", + 4 + ], + [ + 1540, + "Amazing Panda Adventure, The (1995)", + 10 + ], + [ + 1541, + "Beans of Egypt, Maine, The (1994)", + 2 + ], + [ + 1542, + "Scarlet Letter, The (1926)", + 2 + ], + [ + 1543, + "Johns (1996)", + 1 + ], + [ + 1544, + "It Takes Two (1995)", + 3 + ], + [ + 1545, + "Frankie Starlight (1995)", + 4 + ], + [ + 1546, + "Shadows (Cienie) (1988)", + 1 + ], + [ + 1547, + "Show, The (1995)", + 2 + ], + [ + 1548, + "The Courtyard (1995)", + 1 + ], + [ + 1549, + "Dream Man (1995)", + 2 + ], + [ + 1550, + "Destiny Turns on the Radio (1995)", + 2 + ], + [ + 1551, + "Glass Shield, The (1994)", + 2 + ], + [ + 1552, + "Hunted, The (1995)", + 3 + ], + [ + 1553, + "Underneath, The (1995)", + 4 + ], + [ + 1554, + "Safe Passage (1994)", + 2 + ], + [ + 1555, + "Secret Adventures of Tom Thumb, The (1993)", + 5 + ], + [ + 1556, + "Condition Red (1995)", + 2 + ], + [ + 1557, + "Yankee Zulu (1994)", + 1 + ], + [ + 1558, + "Aparajito (1956)", + 7 + ], + [ + 1559, + "Hostile Intentions (1994)", + 1 + ], + [ + 1560, + "Clean Slate (Coup de Torchon) (1981)", + 4 + ], + [ + 1561, + "Tigrero: A Film That Was Never Made (1994)", + 1 + ], + [ + 1562, + "Eye of Vichy, The (Oeil de Vichy, L') (1993)", + 1 + ], + [ + 1563, + "Promise, The (Versprechen, Das) (1994)", + 1 + ], + [ + 1564, + "To Cross the Rubicon (1991)", + 1 + ], + [ + 1565, + "Daens (1992)", + 1 + ], + [ + 1566, + "Man from Down Under, The (1943)", + 1 + ], + [ + 1567, + "Careful (1992)", + 1 + ], + [ + 1568, + "Vermont Is For Lovers (1992)", + 1 + ], + [ + 1569, + "Vie est belle, La (Life is Rosey) (1987)", + 1 + ], + [ + 1570, + "Quartier Mozart (1992)", + 1 + ], + [ + 1571, + "Touki Bouki (Journey of the Hyena) (1973)", + 1 + ], + [ + 1572, + "Wend Kuuni (God's Gift) (1982)", + 1 + ], + [ + 1573, + "Spirits of the Dead (Tre passi nel delirio) (1968)", + 2 + ], + [ + 1574, + "Pharaoh's Army (1995)", + 1 + ], + [ + 1575, + "I, Worst of All (Yo, la peor de todas) (1990)", + 1 + ], + [ + 1576, + "Hungarian Fairy Tale, A (1987)", + 1 + ], + [ + 1577, + "Death in the Garden (Mort en ce jardin, La) (1956)", + 1 + ], + [ + 1578, + "Collectionneuse, La (1967)", + 2 + ], + [ + 1579, + "Baton Rouge (1988)", + 1 + ], + [ + 1580, + "Liebelei (1933)", + 1 + ], + [ + 1581, + "Woman in Question, The (1950)", + 1 + ], + [ + 1582, + "T-Men (1947)", + 1 + ], + [ + 1583, + "Invitation, The (Zaproszenie) (1986)", + 1 + ], + [ + 1584, + "Symphonie pastorale, La (1946)", + 1 + ], + [ + 1585, + "American Dream (1990)", + 2 + ], + [ + 1586, + "Lashou shentan (1992)", + 1 + ], + [ + 1587, + "Terror in a Texas Town (1958)", + 1 + ], + [ + 1588, + "Salut cousin! (1996)", + 2 + ], + [ + 1589, + "Schizopolis (1996)", + 4 + ], + [ + 1590, + "To Have, or Not (1995)", + 2 + ], + [ + 1591, + "Duoluo tianshi (1995)", + 6 + ], + [ + 1592, + "Magic Hour, The (1998)", + 5 + ], + [ + 1593, + "Death in Brunswick (1991)", + 1 + ], + [ + 1594, + "Everest (1998)", + 2 + ], + [ + 1595, + "Shopping (1994)", + 1 + ], + [ + 1596, + "Nemesis 2: Nebula (1995)", + 1 + ], + [ + 1597, + "Romper Stomper (1992)", + 5 + ], + [ + 1598, + "City of Industry (1997)", + 6 + ], + [ + 1599, + "Someone Else's America (1995)", + 1 + ], + [ + 1600, + "Guantanamera (1994)", + 4 + ], + [ + 1601, + "Office Killer (1997)", + 1 + ], + [ + 1602, + "Price Above Rubies, A (1998)", + 3 + ], + [ + 1603, + "Angela (1995)", + 1 + ], + [ + 1604, + "He Walked by Night (1948)", + 1 + ], + [ + 1605, + "Love Serenade (1996)", + 4 + ], + [ + 1606, + "Deceiver (1997)", + 1 + ], + [ + 1607, + "Hurricane Streets (1998)", + 3 + ], + [ + 1608, + "Buddy (1997)", + 4 + ], + [ + 1609, + "B*A*P*S (1997)", + 3 + ], + [ + 1610, + "Truth or Consequences, N.M. (1997)", + 3 + ], + [ + 1611, + "Intimate Relations (1996)", + 2 + ], + [ + 1612, + "Leading Man, The (1996)", + 4 + ], + [ + 1613, + "Tokyo Fist (1995)", + 1 + ], + [ + 1614, + "Reluctant Debutante, The (1958)", + 1 + ], + [ + 1615, + "Warriors of Virtue (1997)", + 10 + ], + [ + 1616, + "Desert Winds (1995)", + 1 + ], + [ + 1617, + "Hugo Pool (1997)", + 2 + ], + [ + 1618, + "King of New York (1990)", + 1 + ], + [ + 1619, + "All Things Fair (1996)", + 1 + ], + [ + 1620, + "Sixth Man, The (1997)", + 9 + ], + [ + 1621, + "Butterfly Kiss (1995)", + 1 + ], + [ + 1622, + "Paris, France (1993)", + 3 + ], + [ + 1623, + "Cérémonie, La (1995)", + 3 + ], + [ + 1624, + "Hush (1998)", + 1 + ], + [ + 1625, + "Nightwatch (1997)", + 1 + ], + [ + 1626, + "Nobody Loves Me (Keiner liebt mich) (1994)", + 1 + ], + [ + 1627, + "Wife, The (1995)", + 1 + ], + [ + 1628, + "Lamerica (1994)", + 4 + ], + [ + 1629, + "Nico Icon (1995)", + 2 + ], + [ + 1630, + "Silence of the Palace, The (Saimt el Qusur) (1994)", + 1 + ], + [ + 1631, + "Slingshot, The (1993)", + 2 + ], + [ + 1632, + "Land and Freedom (Tierra y libertad) (1995)", + 1 + ], + [ + 1633, + "Á köldum klaka (Cold Fever) (1994)", + 1 + ], + [ + 1634, + "Etz Hadomim Tafus (Under the Domin Tree) (1994)", + 1 + ], + [ + 1635, + "Two Friends (1986) ", + 1 + ], + [ + 1636, + "Brothers in Trouble (1995)", + 1 + ], + [ + 1637, + "Girls Town (1996)", + 1 + ], + [ + 1638, + "Normal Life (1996)", + 1 + ], + [ + 1639, + "Bitter Sugar (Azucar Amargo) (1996)", + 3 + ], + [ + 1640, + "Eighth Day, The (1996)", + 1 + ], + [ + 1641, + "Dadetown (1995)", + 1 + ], + [ + 1642, + "Some Mother's Son (1996)", + 2 + ], + [ + 1643, + "Angel Baby (1995)", + 4 + ], + [ + 1644, + "Sudden Manhattan (1996)", + 2 + ], + [ + 1645, + "Butcher Boy, The (1998)", + 1 + ], + [ + 1646, + "Men With Guns (1997)", + 2 + ], + [ + 1647, + "Hana-bi (1997)", + 1 + ], + [ + 1648, + "Niagara, Niagara (1997)", + 1 + ], + [ + 1649, + "Big One, The (1997)", + 1 + ], + [ + 1650, + "Butcher Boy, The (1998)", + 1 + ], + [ + 1651, + "Spanish Prisoner, The (1997)", + 1 + ], + [ + 1652, + "Temptress Moon (Feng Yue) (1996)", + 3 + ], + [ + 1653, + "Entertaining Angels: The Dorothy Day Story (1996)", + 1 + ], + [ + 1654, + "Chairman of the Board (1998)", + 1 + ], + [ + 1655, + "Favor, The (1994)", + 1 + ], + [ + 1656, + "Little City (1998)", + 2 + ], + [ + 1657, + "Target (1995)", + 1 + ], + [ + 1658, + "Substance of Fire, The (1996)", + 3 + ], + [ + 1659, + "Getting Away With Murder (1996)", + 1 + ], + [ + 1660, + "Small Faces (1995)", + 1 + ], + [ + 1661, + "New Age, The (1994)", + 1 + ], + [ + 1662, + "Rough Magic (1995)", + 2 + ], + [ + 1663, + "Nothing Personal (1995)", + 1 + ], + [ + 1664, + "8 Heads in a Duffel Bag (1997)", + 4 + ], + [ + 1665, + "Brother's Kiss, A (1997)", + 1 + ], + [ + 1666, + "Ripe (1996)", + 1 + ], + [ + 1667, + "Next Step, The (1995)", + 1 + ], + [ + 1668, + "Wedding Bell Blues (1996)", + 1 + ], + [ + 1669, + "MURDER and murder (1996)", + 1 + ], + [ + 1670, + "Tainted (1998)", + 1 + ], + [ + 1671, + "Further Gesture, A (1996)", + 1 + ], + [ + 1672, + "Kika (1993)", + 2 + ], + [ + 1673, + "Mirage (1995)", + 1 + ], + [ + 1674, + "Mamma Roma (1962)", + 1 + ], + [ + 1675, + "Sunchaser, The (1996)", + 1 + ], + [ + 1676, + "War at Home, The (1996)", + 1 + ], + [ + 1677, + "Sweet Nothing (1995)", + 1 + ], + [ + 1678, + "Mat' i syn (1997)", + 1 + ], + [ + 1679, + "B. Monkey (1998)", + 1 + ], + [ + 1680, + "Sliding Doors (1998)", + 1 + ], + [ + 1681, + "You So Crazy (1994)", + 1 + ], + [ + 1682, + "Scream of Stone (Schrei aus Stein) (1991)", + 1 + ] + ], + "hovertemplate": "tsne_1=%{x}
tsne_2=%{y}
item_id=%{customdata[0]}
title=%{customdata[1]}
popularity=%{marker.color}", + "legendgroup": "", + "marker": { + "color": { + "bdata": "xAGDAFoA0QBWABoAiAHbACsBWQDsAAsBuAC3ACUBJwBcAAoARQBIAFQAKQG2AK4AJQFJADkAFAFyACUAmgBRAGEABwALAA0ACAB4AFcAOQAlAJQAKABPAFAAGwCFAHUAUQBHAlEAWwCAAGgAlQCKASgArwBTAEAAOwB/AFIAGwFzAKIAZwCGAEEB+wDcAIEAgAAHAAUANgCXACEAUAFEAG4ABQGwABIAOgCWAIoA1QATAV8AjwBoAHAAiQDbACcBAAGGAawA/AFJADYADwAFAEoARwAqAEEAggAfABABFAAJAEMADwB9AHoBJQEEAEMArQFqAHMAuwD0AGEAnQFBAIEAFwBfAPYAqwDGAAMBaQCrABMAMgA9AEgAOQDeAPMAQQAKALkAgAAXAJ0ARgFSAPcArgBiAJQAfwA8AGUARQDcAGoAXACXAEAAOgBDADwBdgB5AEEAbwFEAaQB0AAcAYkAfQDdAN0A+wHiACMBdADvAPsA0QCqAEIAfAAUAXQAnQDxAC0B+wDvAH8ApQDOAFkAGAG2AF4BiAAyAEIAyAC/AEsBzgBcAIYAcgDUACIBeACrAG8AQgBKAG0BiAAsAG0ApgChAPQAqwDHAI4AZQB8ABgB2QAtAIABAAGWAJwAgAB1AIQAMADwAHwABQCgAIIAxQAuAJ4AGgA+AKwAEAAvAf0BogB/ACsAQgATAGUA4wAjAAkA/wA7AYgA0wDGAN8AvgAMASoBRwA8ABwAVQCSAOgAsQDBAKIA4QFOAN4BAwFgAH8AcgCTAOUBTQAGADIAwgBJAK8B5gApAYYAlQBXAGAAvAAeABwAkQBLAFAAXgEFAKAAcABmACoBqAAUAKkA2gDwAH0AgACvAK8AJwEtACkAcQCPAPsAQAAVACsAEgBbAC8AvQALADQAfAA3AEEAfgCJABsAHwApABQAGgAOAEgAKQBhAAgBjwASAAoACgAcAC8AJQAwAC8AqgAfADcAJwBDACIAJwALABcAGAANAGUAKwB0AGQAbwAfAEUA0ABXAEEAHAAbAAoAOwBEAMAADAA4ADYADAAaAFkAEgBMAKoAyQBlAFgBMQArAHAARgCiAKMAXQA3AD4AGQBAAEkAgQCyAFEAagAaACwBEwBVACAA2wB5AGEAXQCZAK4AqwBDANgAYwAFAAYABQAOADUABACiAC4AFgAJAHkAVQB1AD8AqgBCABAAEACRADAAGwBaABgAHABKAJQARwAbAFUANAAwAEAAQwBsAN0AngB+AMIA+gCgAF8AaACzALMAPwCAAPMAigB9AEAARABBADQAMgBDADsAPAA4ADsA5wBEAJgAPgAfAHsAOQAnAHoARABaAGIA1wB5AHkArQA5AEgAtADJAD8AWwBZAFAAfAB4ACMApAAuAEkAfADDAHkAXQBQAIEAFgAPAA0ANgAKAB4AQgAsACsAMQAzABUARwAMAP4AKQAMAFwAlwAYAC0APwBmAAoADAARAEYAiQAWADsAMAAdABsAFgCzACMA5gBDADIAHAAdACEADwAsAF0AKQBcABMAIAA7AKgAJQBPACcAIgAOAMoAKwASALIACQAMAAUAQAB/AM4ABAABAAIAFAAyANEAUQAfAEIAQgAeADwAKQAoACIAGwAzADsAQAASABIAQAArAAsAJwAnABYAUgAEAEsAqQBNAB8AdwA6AEUAGAAXAFsAJgAsACgAUgAhAFkABAAjABsAJgBGAEMAMgBIAKsAWgAiAJMA4wAsAIMATwBzAJkAWABSAHQALgBkAAUADAAGAA0AJAAuAEEAVgAwADYATQABANsAawAiABsAZAAxAKkAnQAyAEUALABXAJsAEACkAFsALAANAE8AKAAKAGYADwAKADUAEwAYAIkABgBGAGUAaABPAAEAMwBIAA0AVwA6AFIAEAAdAFYANgA6ACIATAAQAA4APwAtAFEAGAAnALQADwAbAIkATgA7AB8ApAA/ADoACwEnAFwAEAB3AGYAPAEzAHwAtAAnABgAOQBgAIAABAAVAAsALgAsAHMAlQAdACAACQALADQAKgA5ACkAMQARACAAGgAJAAQATAAfAEUAVAAKACUAAgAnAA4ADQADAC8AQgAKAFYACgAuABUAJAAfAAkABQAaABAAKAAJAAgAGwAyAAkAHwArAC0AEgASADgAAQBwABUAAwAZACgAXQAWAAQAUgAxAFMAUAA5AA0AIgABAFsAFgAxABkADwAaABkABAAEADUAMAAbAB4AKgCwACwANwAJADUABAAEAAEADgAQAEIAJAABAAMADwAQAAMAEgAYAFYAFQB3AAYABQAYAAkASwAqAFEAJwA1AC8ANAAhAIgAOwAtACIADQAHAA0ANQBAAA8ADQArAAYANQAOABMAagAsAAIAOgAJACoADAAqABIAFAAbABUAAgAUAA0ABAAEAAkAAgALAA0AEgAHAAgAYAAFAC4AIgA6AFUAIgBlAAYAaAAoAFAAOQAoABUARAAHACAAJQAZADwAIAAuAC0AKAArACgAPQARADAARwAeACcALQAWAAsAMQAuAAIADgBAABkAIgAXACkACQAVABoADAASAEsACAAiABwABAAgACwADAAxABsAIwAWAAgAFAAPACwAFgAXAAQAVgAgACEAGQAEAEIABwAfAA4AEAAQAAoACgARAAgACAAJABYAFwAvACUAQAAsAF0AZAAmAGIADACJADIAIAAfACMAJgAgAB8ADwAsAAQAAwCUAA4AFAAHABAAIAAbAEQAGAAYABEAWgAZAD4AHAAIACgAGQAuAIYASQAZACsAKQAZABgAFwAKAAoAFgAPACMAJwAdAAwAKQAEADUAEAAsAAwAEgAbABAABwBCAE0ABwAMAAgAFgAtAAIACAAIAAYAFQALABUACgANACYAJQArAAwAFwAMAB0AAwASACoADQAIAEoABwATAAQAEgAEABIABQAcACkABwAPABYACgAdAA0AEwAvADsAEQAVAAEAAwAMAAQAIAALAA0AHAABAA0AIAAeACYALgAdAB0ABQAhABEACQAsAA8AAwAJAAMAFQAJABoACQAHABwAEwAMAAMAAQAZAAQACwAaAA0ABQAZAAYADgAMAAsAFgAKABsADgAPAAcACAAFABYABwATAAkACgAKAA0AEwAKABIAAwANACwAAwALAAMADQAKAB8ACwADAC0ABwAXAAcAAQAIABUAEgAGABMAEQAUAA8AJgAMAAYABgAJAB4ABgAnABoAFAAeACcAGQAEAAwADgAgAAgAMAANABIAFgARAAYACAABAAEABgAIABIAGgAGAAUABwAkABMABwAGABMADAAGAAgACQAHAAsACAADAAQAFwAEAAQABAAIAA8ABwATAAwAIQAKAAoABwAHAAUADwALAAQACAATABAACQAQAA0ACQATABoADwARAAYABwAHAAIADwADAAMABwAHABQADAAJAAgACQAFAAUAEgACAAcAAgACAAIAAQABABAABwAOAAsAFwAHAAQAAwAEAAEAAgAGAAMABQABAAYAAwAGAAEABAAEAAIABQACAAsACgAJAAQAAQABAAEAAgABAAUAAgAFAAQAAQABAAIAAwABAAUAAgAGAAMAAwACAAIAAgADAAIAAQABAAIAAQAFAAYABAADAAIAAwABAAIACgAHAAQABQAHAAYACAAEAAYAAwAFAAYAAwAGAAMAAgADAAUACQAHAAYABQAFAAIABwAKABIABAAEAA0ABgAFABQAAwAHAAQAHAAGAAgAAQAJAAUAAgADABAAAwALAAQABAADAAoACAAFAAwABAADAAUAAwACAAoABwACAAkABQAIAAUABwAFAAQAEwAEAA8AAQADAAgAAgAPAAEAAQAGAAIABwABAAEABwABAAEABwADAAMAAwAGAAIABgAMAAUACQACAAkABgAIAAEAAgASAAgACwACAAEADAADAAQAAQAFAAQABQADAAIAAQABAAEABQAFAAIAAQAEAAIABQACAAoAAwABAAMAAQADAAUAAQAFAAYAAwAHAAEAAwAFAAwAAgABAAQABwACAAgAAQABAAcAAwAFAAUABwACAAEABgAEAAEABAADAAQACgACAAIAAQADAAQAAQACAAEAAgACAAIAAwAEAAIABQACAAEABwABAAQAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAgABAAEAAQABAAIAAQABAAEAAQABAAEAAgABAAEAAgAEAAIABgAFAAEAAgABAAEABQAGAAEABAABAAMAAQABAAQAAQADAAQAAwADAAIABAABAAEACgABAAIAAQABAAkAAQADAAMAAQABAAEAAQAEAAIAAQACAAEAAQABAAEAAQABAAEAAwABAAEAAgAEAAIAAQACAAEAAQABAAEAAQADAAEAAQABAAIAAQADAAEAAQABAAIAAQAEAAEAAQABAAEAAQABAAEAAgABAAEAAQABAAEAAQABAAEAAQABAA==", + "dtype": "i2" + }, + "coloraxis": "coloraxis", + "symbol": "circle" + }, + "mode": "markers", + "name": "", + "showlegend": false, + "type": "scattergl", + "x": { + "bdata": "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", + "dtype": "f4" + }, + "xaxis": "x", + "y": { + "bdata": "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", + "dtype": "f4" + }, + "yaxis": "y" + } + ], + "layout": { + "coloraxis": { + "colorbar": { + "title": { + "text": "popularity" + } + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "legend": { + "tracegroupgap": 0 + }, + "margin": { + "t": 60 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermap": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermap" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "xaxis": { + "anchor": "y", + "domain": [ + 0, + 1 + ], + "title": { + "text": "tsne_1" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "tsne_2" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import plotly.express as px\n", "\n", @@ -723,7 +11238,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 58, "metadata": { "scrolled": true }, @@ -745,9 +11260,27 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 59, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m48/48\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m0s\u001b[0m 7ms/step\n", + " 4.5: 20,000 Leagues Under the Sea (1954)\n", + " 4.4: Eat Drink Man Woman (1994)\n", + " 4.4: Amadeus (1984)\n", + " 4.3: Young Guns (1988)\n", + " 4.3: Dead Man Walking (1995)\n", + " 4.3: Get Shorty (1995)\n", + " 4.3: Faster Pussycat! Kill! Kill! (1965)\n", + " 4.2: Breaking the Waves (1996)\n", + " 4.1: Terminator 2: Judgment Day (1991)\n", + " 4.1: Jerry Maguire (1996)\n" + ] + } + ], "source": [ "for title, pred_rating in recommend(5):\n", " print(\" %0.1f: %s\" % (pred_rating, title))" @@ -767,7 +11300,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 61, "metadata": { "collapsed": false }, @@ -806,11 +11339,109 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 65, + "metadata": {}, + "outputs": [], + "source": [ + "from tensorflow.keras.layers import Concatenate\n", + "\n", + "# 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", + " # Added layers for improvement\n", + " self.concat = Concatenate()\n", + " self.dense1 = Dense(128, activation='relu')\n", + " self.dropout = Dropout(0.3)\n", + " self.dense2 = Dense(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", + " # Original dot product (can be used for comparison or removed)\n", + " # y = self.dot([user_vecs, item_vecs])\n", + "\n", + " # Improved logic: concatenate and pass through dense layers\n", + " x = self.concat([user_vecs, item_vecs])\n", + " x = self.dense1(x)\n", + " x = self.dropout(x)\n", + " y = self.dense2(x)\n", + "\n", + " return y\n", + "\n", + "model = RegressionModel(embedding_size=64,\n", + " max_user_id=all_ratings['user_id'].max(),\n", + " max_item_id=all_ratings['item_id'].max())\n", + "\n", + "model.compile(optimizer=\"adam\", loss='mae')" + ] + }, + { + "cell_type": "code", + "execution_count": 64, "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\NEWPC\\miniconda3\\envs\\dsi_participant\\lib\\site-packages\\keras\\src\\layers\\layer.py:421: UserWarning:\n", + "\n", + "`build()` was called on layer 'regression_model_4', however the layer does not have a `build()` method implemented and it looks like it has unbuilt state. This will cause the layer to be marked as built, despite not being actually built, which may cause failures down the line. Make sure to implement a proper `build()` method.\n", + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 7ms/step - loss: 1.3014 - val_loss: 0.7591\n", + "Epoch 2/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.7420 - val_loss: 0.7514\n", + "Epoch 3/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.7238 - val_loss: 0.7409\n", + "Epoch 4/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m5s\u001b[0m 5ms/step - loss: 0.7088 - val_loss: 0.7332\n", + "Epoch 5/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.6995 - val_loss: 0.7276\n", + "Epoch 6/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.6843 - val_loss: 0.7328\n", + "Epoch 7/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.6777 - val_loss: 0.7404\n", + "Epoch 8/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.6666 - val_loss: 0.7287\n", + "Epoch 9/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 5ms/step - loss: 0.6576 - val_loss: 0.7268\n", + "Epoch 10/10\n", + "\u001b[1m1125/1125\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 8ms/step - loss: 0.6469 - val_loss: 0.7350\n" + ] + } + ], "source": [ "# Training the model\n", "history = model.fit([user_id_train, item_id_train], rating_train,\n", @@ -828,7 +11459,7 @@ ], "metadata": { "kernelspec": { - "display_name": "lab_1", + "display_name": "dsi_participant", "language": "python", "name": "python3" }, @@ -842,7 +11473,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.9" + "version": "3.9.19" } }, "nbformat": 4, diff --git a/02_activities/assignments/assignment_1.ipynb b/02_activities/assignments/assignment_1.ipynb index 6a1f0581..62f49cbb 100644 --- a/02_activities/assignments/assignment_1.ipynb +++ b/02_activities/assignments/assignment_1.ipynb @@ -29,7 +29,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "id": "420c7178", "metadata": {}, "outputs": [], @@ -47,28 +47,92 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "id": "a6c89fe7", "metadata": {}, - "outputs": [], + "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": [ "# Inspect the shapes of the datasets\n", + "# Inspect the shapes\n", "\n", - "\n", + "print(\"X_train shape:\", X_train.shape) # (60000, 28, 28)\n", + "print(\"y_train shape:\", y_train.shape) # (60000,)\n", + "print(\"X_test shape:\", X_test.shape) # (10000, 28, 28)\n", + "print(\"y_test shape:\", y_test.shape) # (10000,)" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "867dbb3a", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "y_train_onehot shape: (60000, 10)\n", + "y_test_onehot shape: (10000, 10)\n" + ] + } + ], + "source": [ "# Convert labels to one-hot encoding\n", "from tensorflow.keras.utils import to_categorical\n", - "\n" + "\n", + "# Convert labels to one-hot format\n", + "y_train_onehot = to_categorical(y_train, num_classes=10)\n", + "y_test_onehot = to_categorical(y_test, num_classes=10)\n", + "\n", + "# Optional: check shape\n", + "print(\"y_train_onehot shape:\", y_train_onehot.shape) # (60000, 10)\n", + "print(\"y_test_onehot shape:\", y_test_onehot.shape) # (10000, 10)" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "13e100db", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAA94AAAHGCAYAAACCd1P0AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8ekN5oAAAACXBIWXMAAA9hAAAPYQGoP6dpAABlBklEQVR4nO3dd3gVZfbA8RMgpBdSKKEkSIsIiAgWEAFRUAELYMOCuiLrqtjYtewquuqi6K667v7EVQQsYEPBBtgAdUGKDVEUBUEghBIIkAIEmN8fPsSNec8hd7iTQr6f59lnH87cM/Pee+edmZeL50R4nucJAAAAAAAIRJ2qHgAAAAAAAIczFt4AAAAAAASIhTcAAAAAAAFi4Q0AAAAAQIBYeAMAAAAAECAW3gAAAAAABIiFNwAAAAAAAWLhDQAAAABAgFh4AwAAAAAQoFq38P7nP/8pERER0qFDh0Pe1+WXXy7x8fEHfV3v3r2ld+/eh3y8UI8bhClTpsijjz5aJcdGeEVERFTof3PnzvV9jKysLBk4cOBBXzd37tyQjlWR8/Dmm2+Wo48+WkRE5s+fL3fffbfk5+dXaP+onZgTQPAmTZpUZj5FR0dL48aNpU+fPjJ27FjZtGlTVQ8RUHGfwKGoV9UDqGzPPPOMiIh88803snDhQjn++OOreEQ1y5QpU2TZsmVy4403VvVQcIgWLFhQ5s/33nuvzJkzRz788MMy8fbt2wc+li5dusiCBQsqfKyKnIevvfaaXHnllSLyy83jnnvukcsvv1ySk5PDMGIcjpgTQOWZOHGiZGdnS0lJiWzatEk++eQTefDBB+Xhhx+Wl156SU499dSqHiJQDvcJHIpatfBesmSJfPXVVzJgwAB5++23ZcKECSy8UWudcMIJZf6cnp4uderUKRevDImJiRU6blFRkcTGxh70dYsXL5Y1a9bIkCFDwjE81BLMCaDydOjQQbp27Vr65yFDhshNN90kJ510kgwePFh++OEHadSokTO3ouc9EG7cJ3AoatU/NZ8wYYKIiDzwwAPSvXt3efHFF6WoqKjMa1avXi0RERHy8MMPyz/+8Q9p2bKlxMfHy4knniiffvrpQY/x3//+V9LS0mTgwIFSWFiovm7Pnj1y3333SXZ2tkRFRUl6erpcccUVsnnz5gq/n2+++Ub69u0rcXFxkp6eLtddd12597Nr1y65/fbbpWXLllK/fn1p2rSpXHvtteX+2cj+/ftl3LhxpeNp2LChXHbZZbJu3brS1/Tu3VvefvttWbNmTZl/ToPaadWqVXLhhRdKRkaGREVFSaNGjaRv377y5ZdflnvtrFmzpEuXLhITEyPZ2dml//LkANc/lzrwn1R8/fXX0q9fP0lISJC+fftW6DycNm2atGvXTo466ii5++675Y9//KOIiLRs2bLcPwOryLkv8sv536FDB/n444/lhBNOkJiYGGnatKnceeedsm/fvkP/QFHjMSeYEzg0LVq0kL///e+yc+dOefLJJ0VEP+9FKv4s9eGHH0rv3r0lNTVVYmJipEWLFjJkyJAyz0xPPPGEHH300RIfHy8JCQmSnZ0td9xxR+W9edQK3Cdq+X3CqyWKioq8pKQkr1u3bp7ned7TTz/tiYg3adKkMq/76aefPBHxsrKyvNNPP92bPn26N336dK9jx45egwYNvPz8/NLXDh8+3IuLiyv980svveRFRUV511xzjbd3797SeK9evbxevXqV/nnfvn3e6aef7sXFxXn33HOP995773lPP/2017RpU699+/ZeUVGR+V6GDx/u1a9f32vRooV3//33e++++6539913e/Xq1fMGDhxY+rr9+/d7/fv39+rVq+fdeeed3rvvvus9/PDDXlxcnHfMMcd4u3btKn3t1Vdf7YmId91113mzZs3yxo8f76Wnp3vNmzf3Nm/e7Hme533zzTdejx49vMaNG3sLFiwo/R8OD789nw+mXbt2XuvWrb3nnnvOmzdvnjdt2jTvlltu8ebMmVP6mszMTK9Zs2Ze+/btvWeffdabPXu2d95553ki4s2bN6/0dXPmzPFEpEzu8OHDvcjISC8rK8sbO3as98EHH3izZ8+u0HnYunVr74477vA8z/PWrl3rXX/99Z6IeK+99lrp67dv3+55XsXOfc/7ZR6npqZ6GRkZ3j//+U9v9uzZ3qhRozwR8a699tpQPmrUEMwJ5gTCb+LEiZ6IeIsXL3ZuLygo8OrWrev17dvX8zz9vK/os9RPP/3kRUdHe6eddpo3ffp0b+7cud4LL7zgXXrppd62bds8z/O8qVOneiLiXX/99d67777rvf/++9748eO9UaNGVcpngpqL+wT3iVDUmoX3s88+64mIN378eM/zPG/nzp1efHy817NnzzKvO7Dw7tixY5nF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Xy6Td+CfS7777rty5ZVXSnp6usTGxsru3bt9vQccfvLy8iQtLa3MDeKAOnV+vYQc+Ofes2bNki5dukhMTIxkZ2fLM888Uy4vNzdXRo4cKc2aNZP69etLy5Yt5Z577pG9e/eWed0999wjxx9/vKSkpEhiYqJ06dJFJkyYIJ7nHXTc//d//yf16tWTMWPGlMbef/996du3ryQmJkpsbKz06NGj3Hy6++67JSIiQj7//HMZOnSoNGjQQFq1anXQ4wEi3CeA/1XR+8dLL70k/fr1kyZNmkhMTIwceeSRctttt5X7lyOXX365xMfHy48//ihnnnmmxMfHS/PmzeWWW24pdz7m5OTI+eefLwkJCZKUlCQXXHCB5ObmlhvHkiVL5MILL5SsrCyJiYmRrKwsueiii2TNmjVh+hSAXzEnajcW3iH48ccfRUQkPT097PueMmWKnH322ZKYmChTp06VCRMmyLZt26R3797yySefiIjIwIEDpWHDhjJx4sRy+ZMmTZIuXbpIp06dRERkzpw50qNHD8nPz5fx48fLjBkzpHPnznLBBRc4/zuOK6+8UiIjI+W5556TV199VSIjI8P+HlEznXjiibJw4UIZNWqULFy4UEpKStTXfvXVV3LLLbfITTfdJDNmzJBOnTrJ7373O/noo49KX5ObmyvHHXeczJ49W+666y6ZOXOm/O53v5OxY8fKiBEjyuxv9erVMnLkSHn55Zfltddek8GDB8v1118v9957rzoGz/Nk9OjRcuONN8rTTz8t99xzj4iIPP/889KvXz9JTEyUyZMny8svvywpKSnSv39/5yJl8ODB0rp1a3nllVdk/PjxoX5sqKW4TwC/quj944cffpAzzzxTJkyYILNmzZIbb7xRXn75ZRk0aFC515aUlMhZZ50lffv2lRkzZsiVV14pjzzyiDz44IOlrykuLpZTTz1V3n33XRk7dqy88sor0rhxY7ngggvK7W/16tXSrl07efTRR2X27Nny4IMPyoYNG6Rbt26yZcuW8H0YgDAnaj0P5UycONETEe/TTz/1SkpKvJ07d3pvvfWWl56e7iUkJHi5ubler169vF69epXLHT58uJeZmVkmJiLemDFjSv88Z84cT0S8OXPmeJ7nefv27fMyMjK8jh07evv27St93c6dO72GDRt63bt3L43dfPPNXkxMjJefn18a+/bbbz0R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9u2dcautS25urjP+6aefqjk9evRwxjt06KDmaF+qn4uw9dCkHcfPBLLGpo1B+zxF9JYUVpuvVatWOeNr165Vc1asWKFuOxz5WUjUr19fzQl3SyNNcnKyM37//ferORdccIEzbrUu0S50ixYtUnO0llNayyIRke+++84Zb9asmZpz7733qts0WttC7bMREfnHP/7hjGdnZ6s5xx57rDP+2WefGaMDAABAuPFPzQEAAAAACBALbwAAAAAAAsTCGwAAAACAALHwBgAAAAAgQCy8AQAAAAAIULWran7EEUc441pLFRG94rBVnVuroGy1Ldm5c6czblWk1vZnVRv303ZCY7Vu0crop6enqzna56a1BBDRvx+tIraISOPGjZ1xrUJ6TaFVn7cq1mv8VC639O3b1xkfMmSImjNs2DBnPC8vT8359ttvnXFr7iUmJjrjqampao7WCcGqnq61YrGuJdpn8Mc//jHksX399ddqjtY2KTo6Ws3Rrlk1hZ/xa9dja75o10JrXvpp2eWnPVp1oH0+1n05nC3IrM9n9+7dzrg1L2CrLS3D/ArnM1rnzp3VbV999ZUz/uKLL6o5AwcOdMb79++v5mgdUqzOMwhOZc0/q7tSOB199NHqtqVLlzrjGRkZas6FF17ojGvPiSIi99xzjzNurZHee+89dduhqN53ewAAAAAAajgW3gAAAAAABIiFNwAAAAAAAWLhDQAAAABAgFh4AwAAAAAQoGpX1RwAABGRO+64wxnXqmyL6NXxrWraKSkpzviWLVvUHD+dCKozq9OGVhHeqoqrfd6RkZFqjlbFPiYmRs3ROgScc845ao723VHNGweEu/PMrbfe6oxr1x4RkSeeeMIZv/TSS9UcraPIO++8o+ZkZmY64+HunILg+LmmWV0ptHPc2p82Bq3zhIjIjh07QtqXX3/+85+dcWuev/LKK2EdwwHVbuGttQ3ZtWuXmqOdIFYrmtjYWGfcepDQviDri/PTPkbbZp2I2rit42gtJKz3Yz2IarQbizXptVYCNb2dmHbRCmd7EhGRUaNGOeO///3v1ZxGjRo54+vWrVNztPZX1vvRjmPRzm/rJqCd+9Yc37x5szNutanQzJ8/X9127rnnhry/v/zlL874H/7wBzXn559/dsYvueSSkI8PAAAA//in5gAAAAAABIiFNwAAAAAAAWLhDQAAAABAgFh4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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", - "# Verify the data looks as expected\n" + "# Verify the data looks as expected\n", + "# let check the data visually \n", + "\n", + "import matplotlib.pyplot as plt\n", + "\n", + "plt.figure(figsize=(10, 5))\n", + "for i in range(10): # 10 classes/ categories\n", + " plt.subplot(2, 5, i+1)\n", + " plt.imshow(X_train[i], cmap='gray')\n", + " plt.title(class_names[y_train[i]])\n", + " plt.axis('off')\n", + "plt.tight_layout()\n", + "plt.show()\n", + "\n" ] }, { @@ -101,23 +165,76 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "8563a7aa", + "execution_count": 17, + "id": "ac553cce", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\NEWPC\\miniconda3\\envs\\dsi_participant\\lib\\site-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[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m16s\u001b[0m 7ms/step - accuracy: 0.2091 - loss: 9.9438 - val_accuracy: 0.2099 - val_loss: 9.9988\n", + "Epoch 2/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m19s\u001b[0m 5ms/step - accuracy: 0.2062 - loss: 9.0123 - val_accuracy: 0.1776 - val_loss: 9.9528\n", + "Epoch 3/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m20s\u001b[0m 5ms/step - accuracy: 0.2259 - loss: 8.5040 - val_accuracy: 0.1945 - val_loss: 8.7223\n", + "Epoch 4/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m9s\u001b[0m 4ms/step - accuracy: 0.1634 - loss: 8.2695 - val_accuracy: 0.1323 - val_loss: 8.8945\n", + "Epoch 5/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.1481 - loss: 8.8425 - val_accuracy: 0.1995 - val_loss: 9.3076\n", + "Epoch 6/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.1988 - loss: 8.1463 - val_accuracy: 0.1950 - val_loss: 7.3930\n", + "Epoch 7/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m10s\u001b[0m 4ms/step - accuracy: 0.1947 - loss: 7.9567 - val_accuracy: 0.1946 - val_loss: 8.1673\n", + "Epoch 8/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.1907 - loss: 8.1622 - val_accuracy: 0.1963 - val_loss: 7.7392\n", + "Epoch 9/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m8s\u001b[0m 4ms/step - accuracy: 0.1953 - loss: 8.1949 - val_accuracy: 0.1927 - val_loss: 9.3766\n", + "Epoch 10/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 4ms/step - accuracy: 0.1915 - loss: 9.2034 - val_accuracy: 0.1868 - val_loss: 7.4190\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 6ms/step - accuracy: 0.1863 - loss: 7.4673\n", + "Test Loss: 7.4190, Test Accuracy: 0.1868\n" + ] + } + ], "source": [ "from keras.models import Sequential\n", "from keras.layers import Dense, Flatten\n", + "from keras.optimizers import Adam\n", + "from keras.utils import to_categorical\n", + "\n", + "# One-hot encode labels\n", + "y_train_onehot = to_categorical(y_train, num_classes=10)\n", + "y_test_onehot = to_categorical(y_test, num_classes=10)\n", "\n", "# Create a simple linear regression model\n", "model = Sequential()\n", - "# You can use `model.add()` to add layers to the model\n", + "model.add(Flatten(input_shape=(28, 28))) # Flatten 2D image to 1D vector\n", + "model.add(Dense(10)) # Linear output layer with 10 units (no activation)\n", "\n", "# Compile the model using `model.compile()`\n", + "model.compile(optimizer=Adam(),\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy'])\n", "\n", "# Train the model with `model.fit()`\n", - "\n", - "# Evaluate the model with `model.evaluate()`" + "model.fit(X_train, y_train_onehot,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_onehot))\n", + "\n", + "# # Evaluate the model with `model.evaluate()`\n", + "test_loss, test_accuracy = model.evaluate(X_test, y_test_onehot)\n", + "print(f\"Test Loss: {test_loss:.4f}, Test Accuracy: {test_accuracy:.4f}\")" ] }, { @@ -127,7 +244,11 @@ "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**" + "**Your answer here**\n", + "\n", + "We can see that our test accuracy is 18.68%, very low and Test Loss is 7.41, which is very high. \n", + "We are using a single Dense layer with no activation, which is equivalent to linear regression.\n", + "Maybe Fashion MNIST dataset contains complex patterns (textures, shapes, edges) that require nonlinear modeling.\n" ] }, { @@ -154,9 +275,50 @@ "execution_count": null, "id": "3513cf3d", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\Users\\NEWPC\\miniconda3\\envs\\dsi_participant\\lib\\site-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/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m102s\u001b[0m 52ms/step - accuracy: 0.8189 - loss: 0.5071 - val_accuracy: 0.8858 - val_loss: 0.3101\n", + "Epoch 2/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m106s\u001b[0m 57ms/step - accuracy: 0.9090 - loss: 0.2546 - val_accuracy: 0.8943 - val_loss: 0.2839\n", + "Epoch 3/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m110s\u001b[0m 58ms/step - accuracy: 0.9283 - loss: 0.1937 - val_accuracy: 0.8968 - val_loss: 0.2996\n", + "Epoch 4/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m170s\u001b[0m 73ms/step - accuracy: 0.9453 - loss: 0.1483 - val_accuracy: 0.8957 - val_loss: 0.3067\n", + "Epoch 5/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m131s\u001b[0m 67ms/step - accuracy: 0.9569 - loss: 0.1155 - val_accuracy: 0.9063 - val_loss: 0.3063\n", + "Epoch 6/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m142s\u001b[0m 76ms/step - accuracy: 0.9686 - loss: 0.0892 - val_accuracy: 0.9034 - val_loss: 0.3328\n", + "Epoch 7/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m120s\u001b[0m 64ms/step - accuracy: 0.9741 - loss: 0.0701 - val_accuracy: 0.9029 - val_loss: 0.3725\n", + "Epoch 8/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m133s\u001b[0m 71ms/step - accuracy: 0.9807 - loss: 0.0530 - val_accuracy: 0.9034 - val_loss: 0.3910\n", + "Epoch 9/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m155s\u001b[0m 78ms/step - accuracy: 0.9849 - loss: 0.0434 - val_accuracy: 0.9044 - val_loss: 0.4385\n", + "Epoch 10/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m197s\u001b[0m 75ms/step - accuracy: 0.9882 - loss: 0.0340 - val_accuracy: 0.9045 - val_loss: 0.4570\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m7s\u001b[0m 22ms/step - accuracy: 0.9051 - loss: 0.4669\n", + "Test Loss: 0.4570, Test Accuracy: 0.9045\n" + ] + } + ], "source": [ "from keras.layers import Conv2D\n", + "from keras.models import Sequential\n", + "from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense\n", + "from keras.optimizers import Adam\n", + "from keras.utils import to_categorical\n", "\n", "# Reshape the data to include the channel dimension\n", "X_train = X_train.reshape(-1, 28, 28, 1)\n", @@ -164,10 +326,27 @@ "\n", "# Create a simple CNN model\n", "model = Sequential()\n", + "model.add(Conv2D(32, kernel_size=(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(128, activation='relu'))\n", + "model.add(Dense(10, activation='softmax')) # Output layer for 10 classes\n", + "\n", + "# Compile the model\n", + "model.compile(optimizer=Adam(),\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy'])\n", "\n", - "# Train the model\n", "\n", - "# Evaluate the model" + "# Train the model\n", + "model.fit(X_train, y_train_onehot,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_onehot))\n", + "\n", + "# Evaluate the model\n", + "test_loss, test_accuracy = model.evaluate(X_test, y_test_onehot)\n", + "print(f\"Test Loss: {test_loss:.4f}, Test Accuracy: {test_accuracy:.4f}\")" ] }, { @@ -175,11 +354,35 @@ "id": "fabe379c", "metadata": {}, "source": [ - "Reflection: Did the CNN model perform better than the baseline model? If so, by how much? What do you think contributed to this improvement?\n", + "Reflection: We can see that our test accuracy is 18.68%, very low and Test Loss is 7.41, which is very high.\n", + "\n", + "1 : Did the CNN model perform better than the baseline model? \n", + "\n", + "Yes, significantly. Our CNN model achieved a test accuracy of 90.45%, while the baseline linear model only reached 18.68%. And the CNN model has Test Loss of 0.45 compare to the baseline model with a Test Loss of 7.41. That’s a dramatic improvement in classification performance.\n", + "\n", + "2: If so, by how much? \n", + "\n", + " Improvement: 71.77% percentage points\n", + " Baseline Accuracy: ~18.68%\n", + " CNN Accuracy: ~90.45%\n", + " Difference: 90.45% − 18.68% = 68.7% ( 90.45/18.68 = 4.84 )\n", + "This shows that the CNN model is over 4 times more accurate than the baseline.\n", + "\n", + "3: What do you think contributed to this improvement?\n", + "\n", + "CNN model has more power to deal with the complexity of relationship and partens in the datset between the data point , also with the help of activation functions than the base model. \n", "\n", "**Your answer here**" ] }, + { + "cell_type": "code", + "execution_count": null, + "id": "561fefd4", + "metadata": {}, + "outputs": [], + "source": [] + }, { "cell_type": "markdown", "id": "1a5e2463", @@ -211,14 +414,168 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "dc43ac81", + "execution_count": 18, + "id": "da1bbd68", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training model with 32 filters, Dropout=False\n", + "\n", + "Training model with 32 filters, Dropout=True\n", + "\n", + "Training model with 64 filters, Dropout=False\n", + "\n", + "Training model with 64 filters, Dropout=True\n", + "\n", + "Training model with 128 filters, Dropout=False\n", + "\n", + "Training model with 128 filters, Dropout=True\n" + ] + } + ], + "source": [ + "from keras.models import Sequential\n", + "from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n", + "from keras.optimizers import Adam\n", + "from keras.utils import to_categorical\n", + "import matplotlib.pyplot as plt\n", + "\n", + "# Prepare data\n", + "X_train = X_train.reshape(-1, 28, 28, 1)\n", + "X_test = X_test.reshape(-1, 28, 28, 1)\n", + "y_train_onehot = to_categorical(y_train, num_classes=10)\n", + "y_test_onehot = to_categorical(y_test, num_classes=10)\n", + "\n", + "# Experiment settings\n", + "filter_options = [32, 64, 128]\n", + "use_dropout_options = [False, True]\n", + "results = []\n", + "\n", + "# Run experiments\n", + "for filters in filter_options:\n", + " for use_dropout in use_dropout_options:\n", + " print(f\"\\nTraining model with {filters} filters, Dropout={use_dropout}\")\n", + " \n", + " # Build model\n", + " model = Sequential()\n", + " model.add(Conv2D(filters, kernel_size=(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(128, activation='relu'))\n", + " if use_dropout:\n", + " model.add(Dropout(0.3))\n", + " model.add(Dense(10, activation='softmax'))\n", + "\n", + " # Compile and train\n", + " model.compile(optimizer=Adam(),\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy'])\n", + " \n", + " model.fit(X_train, y_train_onehot,\n", + " epochs=5,\n", + " batch_size=32,\n", + " verbose=0,\n", + " validation_data=(X_test, y_test_onehot))\n", + "\n", + " # Evaluate\n", + " test_loss, test_accuracy = model.evaluate(X_test, y_test_onehot, verbose=0)\n", + " results.append({\n", + " 'filters': filters,\n", + " 'dropout': use_dropout,\n", + " 'accuracy': test_accuracy,\n", + " 'loss': test_loss\n", + " })\n", + "\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "5d5af3b7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Filters Dropout Test Accuracy Test Loss \n", + "--------------------------------------------------\n", + "32 False 90.68% 0.2602 \n", + "32 True 91.17% 0.2455 \n", + "64 False 91.57% 0.2456 \n", + "64 True 91.02% 0.2487 \n", + "128 False 90.76% 0.2941 \n", + "128 True 91.47% 0.2446 \n" + ] + } + ], + "source": [ + "print(f\"{'Filters':<10} {'Dropout':<10} {'Test Accuracy':<15} {'Test Loss':<10}\")\n", + "print(\"-\" * 50)\n", + "\n", + "# Print each result\n", + "for r in results:\n", + " print(f\"{r['filters']:<10} {str(r['dropout']):<10} {r['accuracy']*100:>12.2f}% {r['loss']:<10.4f}\")\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "6bbd921b", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Plot accuracy comparison\n", + "plt.figure(figsize=(8, 5))\n", + "for use_dropout in use_dropout_options:\n", + " accs = [r['accuracy'] for r in results if r['dropout'] == use_dropout]\n", + " plt.plot(filter_options, accs, marker='o', label=f'Dropout={use_dropout}')\n", + "plt.title('Test Accuracy vs Number of Filters')\n", + "plt.xlabel('Number of Filters')\n", + "plt.ylabel('Test Accuracy')\n", + "plt.legend()\n", + "plt.grid(True)\n", + "plt.show()\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "54a6a413", "metadata": {}, "outputs": [], "source": [ "# B. Test presence or absence of regularization" ] }, + { + "cell_type": "markdown", + "id": "bf82f12e", + "metadata": {}, + "source": [ + "Dropout proved to be beneficial in improving model performance and preventing overfitting in general.\n", + "Dropout proved to be an effective regularization technique our CNN. \n", + "It helped reduce overfitting and improved test performance. To summaryze, we think the dropout in our final model is recommended for better generalization." + ] + }, { "cell_type": "markdown", "id": "cb426f26", @@ -229,6 +586,15 @@ "**Your answer here**" ] }, + { + "cell_type": "markdown", + "id": "7dce1859", + "metadata": {}, + "source": [ + "We see that increasing the number of filters from 32 to 128 improved the test accuracy. \n", + "Dropout enabled the the Test Accuracy increased from around 90.76% to 91.57%. This indicates that a higher model capacity allows the CNN to learn more complex features from the Fashion MNIST dataset, leading to better performance. However, it's important to balance model complexity with regularization techniques like dropout to prevent overfitting." + ] + }, { "cell_type": "markdown", "id": "46c43a3d", @@ -247,8 +613,77 @@ "execution_count": null, "id": "31f926d1", "metadata": {}, - "outputs": [], - "source": [] + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m163s\u001b[0m 83ms/step - accuracy: 0.8023 - loss: 0.5604 - val_accuracy: 0.8806 - val_loss: 0.3285\n", + "Epoch 2/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m155s\u001b[0m 82ms/step - accuracy: 0.8931 - loss: 0.2919 - val_accuracy: 0.8985 - val_loss: 0.2780\n", + "Epoch 3/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m157s\u001b[0m 84ms/step - accuracy: 0.9071 - loss: 0.2514 - val_accuracy: 0.9060 - val_loss: 0.2595\n", + "Epoch 4/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m205s\u001b[0m 85ms/step - accuracy: 0.9212 - loss: 0.2156 - val_accuracy: 0.9066 - val_loss: 0.2555\n", + "Epoch 5/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m177s\u001b[0m 94ms/step - accuracy: 0.9306 - loss: 0.1860 - val_accuracy: 0.9152 - val_loss: 0.2498\n", + "Epoch 6/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m202s\u001b[0m 94ms/step - accuracy: 0.9340 - loss: 0.1738 - val_accuracy: 0.9014 - val_loss: 0.2803\n", + "Epoch 7/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m164s\u001b[0m 87ms/step - accuracy: 0.9430 - loss: 0.1538 - val_accuracy: 0.9129 - val_loss: 0.2639\n", + "Epoch 8/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m154s\u001b[0m 82ms/step - accuracy: 0.9441 - loss: 0.1436 - val_accuracy: 0.9162 - val_loss: 0.2605\n", + "Epoch 9/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m208s\u001b[0m 85ms/step - accuracy: 0.9555 - loss: 0.1194 - val_accuracy: 0.9168 - val_loss: 0.2646\n", + "Epoch 10/10\n", + "\u001b[1m1875/1875\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m163s\u001b[0m 87ms/step - accuracy: 0.9576 - loss: 0.1107 - val_accuracy: 0.9215 - val_loss: 0.2805\n", + "\u001b[1m313/313\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m6s\u001b[0m 19ms/step - accuracy: 0.9214 - loss: 0.2904\n", + "\n", + "Final Test Loss: 0.2805\n", + "Final Test Accuracy: 0.9215\n" + ] + } + ], + "source": [ + "# Create final model with best hyperparameters\n", + "from keras.models import Sequential\n", + "from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout\n", + "from keras.optimizers import Adam\n", + "from keras.utils import to_categorical\n", + "\n", + "# Prepare data\n", + "X_train = X_train.reshape(-1, 28, 28, 1)\n", + "X_test = X_test.reshape(-1, 28, 28, 1)\n", + "y_train_onehot = to_categorical(y_train, num_classes=10)\n", + "y_test_onehot = to_categorical(y_test, num_classes=10)\n", + "\n", + "# Build final model\n", + "model = Sequential()\n", + "model.add(Conv2D(128, kernel_size=(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(128, activation='relu'))\n", + "model.add(Dropout(0.3)) # Dropout enabled\n", + "model.add(Dense(10, activation='softmax'))\n", + "\n", + "# Compile the model\n", + "model.compile(optimizer=Adam(),\n", + " loss='categorical_crossentropy',\n", + " metrics=['accuracy']) \n", + "\n", + "# Train the final model\n", + "history = model.fit(X_train, y_train_onehot,\n", + " epochs=10,\n", + " batch_size=32,\n", + " validation_data=(X_test, y_test_onehot))\n", + "\n", + "# Evaluate final model\n", + "test_loss, test_accuracy = model.evaluate(X_test, y_test_onehot)\n", + "print(f\"\\nFinal Test Loss: {test_loss:.4f}\")\n", + "print(f\"Final Test Accuracy: {test_accuracy:.4f}\") \n", + "\n" + ] }, { "cell_type": "markdown", @@ -257,7 +692,12 @@ "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", + "**Your answer here**\n", + "\n", + "The final model has a Test Accuracy of 92.15%, which is a substantial improvement over the baseline( ~ 20%) and the initial CNN(90.45%).\n", + "Several factors and training choices let to this improvement, such as rich feature extraction, dimensionality reduction, regularization and optimization. " ] }, { @@ -287,7 +727,7 @@ ], "metadata": { "kernelspec": { - "display_name": "deep_learning", + "display_name": "dsi_participant", "language": "python", "name": "python3" }, @@ -301,7 +741,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.11" + "version": "3.9.19" } }, "nbformat": 4,