From c617633820739ac439fb2b2fbc3e5ee7a651ee56 Mon Sep 17 00:00:00 2001 From: Dayaram Khadka Date: Fri, 6 Dec 2024 19:04:28 -0500 Subject: [PATCH] Assignment_2 --- 02_activities/assignments/assignment_2.ipynb | 543 ++++++++++++++++--- 1 file changed, 463 insertions(+), 80 deletions(-) diff --git a/02_activities/assignments/assignment_2.ipynb b/02_activities/assignments/assignment_2.ipynb index df7d7710..8f263802 100644 --- a/02_activities/assignments/assignment_2.ipynb +++ b/02_activities/assignments/assignment_2.ipynb @@ -25,7 +25,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 72, "id": "2d0bfedcfe52aedc", "metadata": { "colab": { @@ -54,7 +54,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 73, "id": "9c28c497f620b775", "metadata": { "ExecuteTime": { @@ -103,7 +103,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 74, "id": "BunkZmdkl0Wn", "metadata": { "colab": { @@ -112,9 +112,62 @@ "id": "BunkZmdkl0Wn", "outputId": "e429a49a-9334-4484-bd6b-2ce40c8298c1" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + " ', 1), ('github', 2), ('com', 3), ('script', 4), ('https', 5), ('defer', 6), ('js', 7), ('1', 8), ('assets', 9), ('githubassets', 10)]\n" ] } ], @@ -212,22 +277,38 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 77, "id": "4ff5fc8d0273709c", "metadata": { "id": "4ff5fc8d0273709c" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Shape of X: (3788, 40)\n", + "Shape of y: (3788,)\n" + ] + } + ], "source": [ - "SEQ_LENGTH = None # Choose an appropriate sequence length\n", - "\n", - "# Convert the text to a list of sequences of numbers\n", - "sequences = None\n", - "\n", - "# Generate the training sequences\n", + "SEQ_LENGTH = 40 \n", + "sequences = tokenizer.texts_to_sequences([text])[0] \n", "X = []\n", "y = []\n", - "# Your code here" + "# Your code here\n", + "for i in range(SEQ_LENGTH, len(sequences)):\n", + "\n", + " input_seq = sequences[i-SEQ_LENGTH:i]\n", + " target_seq = sequences[i] \n", + " \n", + " X.append(input_seq)\n", + " y.append(target_seq)\n", + "X = np.array(X)\n", + "y = np.array(y)\n", + "print(f\"Shape of X: {X.shape}\")\n", + "print(f\"Shape of y: {y.shape}\")\n" ] }, { @@ -243,7 +324,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 78, "id": "a495cab04001ce92", "metadata": { "colab": { @@ -257,7 +338,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "Training sequences have not been generated. Possible issue: Complete the relevant section of the assignment to initialize it.\n" + "Sequence: [ 1 1 1 1 1 16 38 1 93 16 54 56 54 16 51 56 51 16 1 1 1 1 16 1\n", + " 20 1 43 1 15 1 1 1 20 29 1 1 25 5 2 10]\n", + "Target: 3\n", + "Translated back to words: ['', '', '', '', '', 'data', 'color', '', 'auto', 'data', 'light', 'theme', 'light', 'data', 'dark', 'theme', 'dark', 'data', '', '', '', '', 'data', '', 'link', '', 'true', '', 'meta', '', '', '', 'link', 'rel', '', '', 'href', 'https', 'github', 'githubassets'] -> com\n" ] } ], @@ -282,7 +366,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 79, "id": "3a929b2e6c2cc921", "metadata": { "colab": { @@ -296,7 +380,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "Tokenizer has not been initialized. Please initialize it and load the vocabulary before continuing.\n" + "X_train shape: (2040, 40)\n", + "y_train shape: (2040, 100)\n" ] } ], @@ -304,7 +389,7 @@ "from sklearn.model_selection import train_test_split\n", "from keras.utils import to_categorical\n", "import numpy as np\n", - "\n", + "OOV_TOKEN = \"\"\n", "# Ensure that tokenizer has been initialized\n", "if tokenizer is not None:\n", " # Convert X and y to numpy arrays\n", @@ -318,7 +403,7 @@ " y = y[mask]\n", "\n", " # One-hot encode the target token\n", - " y = to_categorical(y, num_classes=VOCAB_SIZE)\n", + " y = to_categorical(y, num_classes=vocabulary_size)\n", "\n", " # Split the data into training and validation sets\n", " X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42)\n", @@ -352,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 80, "id": "9fdfaad93818fc8d", "metadata": { "colab": { @@ -363,11 +448,85 @@ }, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "No layers have been added to the model. Please complete the assignment by adding the required layers.\n" - ] + "data": { + "text/html": [ + "
Model: \"sequential_17\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_17\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ embedding_21 (Embedding)        │ ?                      │   0 (unbuilt) │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ lstm_17 (LSTM)                  │ ?                      │   0 (unbuilt) │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_17 (Dense)                │ ?                      │   0 (unbuilt) │\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", + "│ embedding_21 (\u001b[38;5;33mEmbedding\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ lstm_17 (\u001b[38;5;33mLSTM\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_17 (\u001b[38;5;33mDense\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\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": [ @@ -377,8 +536,18 @@ "model = Sequential([\n", " # Your code here\n", "])\n", + "#VOCAB_SIZE = len(tokenizer.word_index) + 1 # Size of the vocabulary (includes padding token)\n", + "EMBEDDING_DIM = 100 # The dimensionality of the embedding space\n", + "SEQ_LENGTH = 40\n", + "model.add(Embedding(input_dim=vocabulary_size, \n", + " output_dim=EMBEDDING_DIM, \n", + " input_length=SEQ_LENGTH))\n", "\n", - "# Check if the model has layers before trying to print the summary\n", + "# 2. LSTM Layer\n", + "model.add(LSTM(units=128, return_sequences=False))\n", + "\n", + "# 3. Dense Layer with Softmax Activation\n", + "model.add(Dense(units=vocabulary_size, activation='softmax'))\n", "if len(model.layers) > 0:\n", " model.summary()\n", "else:\n", @@ -404,14 +573,18 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 81, "id": "ae4ca7a12051b1fd", "metadata": { "id": "ae4ca7a12051b1fd" }, "outputs": [], "source": [ - "# Your code here" + "# Your code here\n", + "# Compile the model with the chosen loss function, optimizer, and metrics\n", + "model.compile(optimizer='adam', \n", + " loss='categorical_crossentropy', \n", + " metrics=['accuracy'])\n" ] }, { @@ -432,7 +605,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 82, "id": "256b1ea138c67ef7", "metadata": { "colab": { @@ -441,9 +614,38 @@ "id": "256b1ea138c67ef7", "outputId": "fba36993-0bf3-472e-f1c3-1da548c12ead" }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 84ms/step - accuracy: 0.0666 - loss: 4.5639 - val_accuracy: 0.0490 - val_loss: 4.2490\n", + "Epoch 2/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 66ms/step - accuracy: 0.0585 - loss: 4.2327 - val_accuracy: 0.1000 - val_loss: 4.0308\n", + "Epoch 3/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 70ms/step - accuracy: 0.1262 - loss: 3.8848 - val_accuracy: 0.1824 - val_loss: 3.6327\n", + "Epoch 4/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 69ms/step - accuracy: 0.1889 - loss: 3.4276 - val_accuracy: 0.2686 - val_loss: 3.1956\n", + "Epoch 5/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 68ms/step - accuracy: 0.2830 - loss: 3.0706 - val_accuracy: 0.3275 - val_loss: 2.9279\n", + "Training History:\n", + "{'accuracy': [0.07450980693101883, 0.0784313753247261, 0.136274516582489, 0.20686274766921997, 0.30441176891326904], 'loss': [4.482909679412842, 4.157512664794922, 3.811149835586548, 3.3574681282043457, 2.981534242630005], 'val_accuracy': [0.04901960864663124, 0.10000000149011612, 0.1823529452085495, 0.26862746477127075, 0.3274509906768799], 'val_loss': [4.248978614807129, 4.030797004699707, 3.6326887607574463, 3.195636034011841, 2.927873134613037]}\n" + ] + } + ], "source": [ - "# Your code here" + "# Your code here\n", + "# Train the model for 5 epochs with a batch size of 128\n", + "\n", + "history = model.fit(X_train, y_train, \n", + " epochs=5, \n", + " batch_size=128, \n", + " validation_data=(X_val, y_val))\n", + "\n", + "# Print the training history (optional, just to check)\n", + "print(\"Training History:\")\n", + "print(history.history)\n" ] }, { @@ -458,16 +660,39 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 83, "id": "9e8cacec70d8f313", "metadata": { "id": "9e8cacec70d8f313" }, - "outputs": [], + "outputs": [ + { + "data": { + "image/png": "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v349DRo0uOnnfQ3DoGPHjnz33Xe89NJL/Prrr9x33320adMm07HHjh0jMDCQd955h3nz5vHpp5/i5ubGvffey549ewD7IwOX63399ddZu3Yta9eupU+fPg5reOaZZxg0aBAtWrTg999/580332TevHnUq1cv0wcJJ06coFu3bjz22GP8/vvvtGnThsGDB/P999/f1Pd9vZ/Fe++9x+OPP87s2bN58cUX+eabb2jatGn6hz6HDh2iXbt2eHh4MGnSJObNm8c777yDr68vKSkpgP1xgGeffZbIyEh+/fVXZs2axQsvvJAp3F5t4cKFAHTs2NHhMR07diQtLY1ly5bh7u7OY489xowZM4iLi8tw3NSpU0lKSqJnz56AfRZLZGQk33zzDQMGDGDu3LkMGjSIKVOmcP/992MYRobzZ82axYQJExg+fDjz58+nYcOGN/wZpqWlZfq61gcivXv3xsXFhR9//JEPP/yQDRs20Lhx4wwfbowZM4bevXtTqVIlZs6cyUcffcS2bduoW7cu+/btSz/ucm0xMTF88MEHzJ07l9dff52TJ09met0uXbpQrlw5ZsyYwWuvvcaPP/7ICy+8kL5/7dq1PPzww4SEhDBt2jRmz57N8OHDSUtLu+H3LiJiOkNEREzVo0cPw9fXN8NYZGSkARiLFy++7rk2m81ITU01li9fbgDG1q1b0/eNGDHCuPqv+eDgYMPLy8uIjo5OH0tMTDQKFixoPP300+ljS5cuNQBj6dKlGeoEjJ9//jnDNdu2bWuUL18+ffvTTz81AGPu3LkZjnv66acNwJg8efJ1v6erpaWlGampqUazZs2MTp06pY8fPHjQAIwqVaoYaWlp6eMbNmwwAGPq1KmGYRiG1Wo1SpQoYdSsWdOw2Wzpxx06dMhwd3c3goODb1hDVFSUYbFYjAEDBqSPpaamGsWKFTPq169/zXMu/26io6MNwPjtt9/S902ePNkAjIMHD6aP9ejRI0Mtc+fONQDjo48+ynDdt956ywCMESNGOKw3LS3NSElJMcLDw40XXnghfXzjxo0OfwdXv1927dplAMazzz6b4bj169cbgDFkyJD0scvv1/Xr12c4tmLFikarVq0c1nlZcHCw0a5dO4f7582bZwDG//73vwzjP/30kwEYX3zxhWEYhjF9+nQDMLZs2eLwWv379zcKFChww5qu1rp1awMw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3sBx8+bNd/T6IiJ3mu50i4g4kXr16hEQEEDfvn0ZMWIE7u7u/PDDD5m6apupR48ejBs3jscee4zRo0cTFhbG3LlzmT9/PmDvBn497du3580332TEiBFERkayZ88e3njjDcqWLXtLnYpdXFx488036dOnD506deLJJ58kNjaWkSNH3tT0crBPMf/000/54IMPiIiIyPBMeEREBKGhobz22msYhkHBggX5448/bjht2ZGWLVvSqFEjXn31VeLj46lduzarV6/mu+++y3Rs+/btmTJlChEREVStWpW///6bd999N9Md6tDQULy9vfnhhx+oUKECfn5+lChRghIlSmS6Zvny5Xnqqaf45JNPcHFxoU2bNhw6dIhhw4YRFBSUobP0nXDixAmmT5+eabxMmTK0aNGCVq1aMWjQIOLi4qhfvz7btm1jxIgR1KhRI31ZrokTJ7JkyRLatWtH6dKlSUpKSr973Lx5cwCefPJJvL29qV+/PsWLF+fEiROMGTMGf3//DHfMr+bq6sqMGTNo0aIFdevW5aWXXqJu3bokJyfzxx9/8MUXXxAZGcn777+f6dxevXrx008/0b9/f0qVKpVey2UDBw5kxowZNGrUiBdeeIGqVatis9mIiYlhwYIFvPTSS9x77723/LNNTEy85jJ6QKb1u//66y/69OnDgw8+yOHDhxk6dCglS5ZMXz2hQIECDBs2jCFDhtC9e3ceffRRzp49y6hRo/Dy8mLEiBHp1/r000/p0KED9913Hy+88AKlS5cmJiaG+fPnZwr3NzJ8+HCOHDlCs2bNKFWqFLGxsXz00UcZelqIiORYprZxExERh93LK1WqdM3j16xZY9StW9fw8fExChcubPTp08fYtGlTpq7UjrqXX6tLdGRkpBEZGZm+7ah7+dV1OnqdmJgYo3Pnzoafn5+RL18+o0uXLsacOXMydfG+luTkZOPll182SpYsaXh5eRk1a9Y0Zs2alam79+Xu5e+++26ma3CN7t5fffWVER4ebnh4eBjlypUzJk2alOmaWVGjRo1rdls2DMPYuXOn0aJFCyNfvnxGQECA8eCDDxoxMTGZ6slK93LDMIzY2FijV69eRoECBQwfHx+jRYsWxu7duzNd7/z580bv3r2NIkWKGD4+PkaDBg2MlStXZvq9GoZhTJ061YiIiDDc3d0zXOdav0er1WqMHTvWKFeunOHu7m4UKlTIeOyxx4zDhw9nOM7R+zWrP9/g4GCHHbZ79OhhGIa9y/6gQYOM4OBgw93d3ShevLjxzDPPGOfPn0+/ztq1a41OnToZwcHBhqenpxEYGGhERkYav//+e/ox33zzjdGkSROjaNGihoeHh1GiRAnjoYceMrZt23bDOg3DMM6cOWO89tprRkREhOHl5WX4+fkZderUMcaPH2+kpKRc8xyr1WoEBQUZgDF06NBrHnPp0iXj9ddfN8qXL294eHgY/v7+RpUqVYwXXnjBOHHiRPpxgNGvX78s1WoY1+9eDhipqamGYVx5Ty5YsMB4/PHHjQIFCqR3Kd+3b1+m63711VdG1apV02t94IEHjH/++SfTcWvXrjXatGlj+Pv7G56enkZoaGiGjvqX33enT5/OcN7Vf0b+/PNPo02bNkbJkiUNDw8Po0iRIkbbtm2NlStXZvlnISJiFothXLX4o4iISDZ4++23ef3114mJiclycyURuTsur2W/ceNGateubXY5IiK5iqaXi4jIHTd+/HjAPuU6NTWVJUuW8PHHH/PYY48pcIuIiEieotAtIiJ3nI+PD+PGjePQoUMkJydTunRpBg0axOuvv252aSIiIiJ3laaXi4iIiIiIiGQTLRkmIiIiIiIikk0UukVERERERESyiUK3iIiIiIiISDbJc43UbDYbx44dI1++fFgsFrPLERERERERESdkGAYXL16kRIkSuLg4vp+d50L3sWPHCAoKMrsMERERERERyQUOHz583SVR81zozpcvH2D/weTPn9/kakRERERERMQZxcXFERQUlJ4xHclzofvylPL8+fMrdIuIiIiIiMhtudFjy2qkJiIiIiIiIpJNFLpFREREREREsolCt4iIiIiIiEg2yXPPdIuIiIiISO5is9lISUkxuwzJZdzd3XF1db3t6yh0i4iIiIiI00pJSeHgwYPYbDazS5FcqECBAhQrVuyGzdKuR6FbRERERESckmEYHD9+HFdXV4KCgnBx0dOzcmcYhkFCQgKnTp0CoHjx4rd8LYVuERERERFxSmlpaSQkJFCiRAl8fHzMLkdyGW9vbwBOnTpFkSJFbnmquT4KEhERERERp2S1WgHw8PAwuRLJrS5/mJOamnrL11DoFhERERERp3Y7z9uKXM+deG8pdIuIiIiIiIhkE4VuERERERERJ9e4cWMGDhyY5eMPHTqExWJhy5Yt2VaT2Cl0i4iIiIiI3CUWi+W6X0888cQtXXfmzJm8+eabWT4+KCiI48ePU7ly5Vt6vaxSuFf3chERERERkbvm+PHj6f/9008/MXz4cPbs2ZM+drlj9mWpqam4u7vf8LoFCxa8qTpcXV0pVqzYTZ0jt0Z3ukVERERERO6SYsWKpX/5+/tjsVjSt5OSkihQoAA///wzjRs3xsvLi++//56zZ8/y6KOPUqpUKXx8fKhSpQpTp07NcN2rp5eXKVOGt99+m169epEvXz5Kly7NF198kb7/6jvQy5Ytw2KxsHjxYmrXro2Pjw/16tXL8IEAwOjRoylSpAj58uWjT58+vPbaa1SvXv2Wfx7JyckMGDCAIkWK4OXlRYMGDdi4cWP6/vPnz9OtWzcKFy6Mt7c34eHhTJ48GYCUlBT69+9P8eLF8fLyokyZMowZM+aWa8kuCt0iIiIiIpIrGIZBQkqaKV+GYdyx72PQoEEMGDCAXbt20apVK5KSkqhVqxZ//vknO3bs4KmnnuLxxx9n/fr1173O+++/T+3atdm8eTPPPvsszzzzDLt3777uOUOHDuX999/nr7/+ws3NjV69eqXv++GHH3jrrbcYO3Ysf//9N6VLl2bChAm39b2++uqrzJgxg2+++YZNmzYRFhZGq1atOHfuHADDhg1j586dzJ07l127djFhwgQKFSoEwMcff8zvv//Ozz//zJ49e/j+++8pU6bMbdWTHTS9XEREREREcoXEVCsVh8835bV3vtEKH487E68GDhxI586dM4y9/PLL6f/93HPPMW/ePH755Rfuvfdeh9dp27Ytzz77LGAP8uPGjWPZsmVEREQ4POett94iMjISgNdee4127dqRlJSEl5cXn3zyCb1796Znz54ADB8+nAULFnDp0qVb+j7j4+OZMGECU6ZMoU2bNgB8+eWXLFy4kK+//ppXXnmFmJgYatSoQe3atQEyhOqYmBjCw8Np0KABFouF4ODgW6oju+lOt4iIiIiISA5yOWBeZrVaeeutt6hatSqBgYH4+fmxYMECYmJirnudqlWrpv/35Wnsp06dyvI5xYsXB0g/Z8+ePdSpUyfD8Vdv34wDBw6QmppK/fr108fc3d2pU6cOu3btAuCZZ55h2rRpVK9enVdffZU1a9akH/vEE0+wZcsWypcvz4ABA1iwYMEt15KddKdbRERERERyBW93V3a+0cq0175TfH19M2y///77jBs3jg8//JAqVarg6+vLwIEDSUlJue51rm7AZrFYsNlsWT7HYrEAZDjn8thltzOt/vK517rm5bE2bdoQHR3N7NmzWbRoEc2aNaNfv36899571KxZk4MHDzJ37lwWLVrEQw89RPPmzZk+ffot15QddKc7h7qTz4SIiIiIiOQFFosFHw83U76uDo530sqVK3nggQd47LHHqFatGiEhIezbty/bXs+R8uXLs2HDhgxjf/311y1fLywsDA8PD1atWpU+lpqayl9//UWFChXSxwoXLswTTzzB999/z4cffpihIVz+/Pl5+OGH+fLLL/npp5+YMWNG+vPgOYXudOdQw3/7h4tJqTzVKJSKJfKbXY6IiIiIiJgkLCyMGTNmsGbNGgICAvjggw84ceJEhmB6Nzz33HM8+eST1K5dm3r16vHTTz+xbds2QkJCbnju1V3QASpWrMgzzzzDK6+8QsGCBSldujT/+9//SEhIoHfv3oD9ufFatWpRqVIlkpOT+fPPP9O/73HjxlG8eHGqV6+Oi4sLv/zyC8WKFaNAgQJ39Pu+XQrdOVBsQgo//XWYlDQbs7Yco1G5wvSNDKFuSGC2foImIiIiIiI5z7Bhwzh48CCtWrXCx8eHp556io4dO3LhwoW7Wke3bt2Iiori5ZdfJikpiYceeognnngi093va3nkkUcyjR08eJB33nkHm83G448/zsWLF6lduzbz588nICAAAA8PDwYPHsyhQ4fw9vamYcOGTJs2DQA/Pz/Gjh3Lvn37cHV15Z577mHOnDm4uOSsCd0WI4/NY46Li8Pf358LFy6QP3/OvYO8/cgFPl9xgDnbj2P79zdUtZQ/TzcKpXXlYri6KHyLiIiISN6WlJTEwYMHKVu2LF5eXmaXkye1aNGCYsWK8d1335ldSra43nssq9lSd7pzqCql/BnftSYxZxP4alUUP/91mG1HLtDvx00EB/rQp2EID9YqhdcdbNggIiIiIiLiSEJCAhMnTqRVq1a4uroydepUFi1axMKFC80uLUfLWffdJZPSgT688UBlVg9qyvPNwing40702QSGzdpB/XeW8PHifZyPv37XQhERERERkdtlsViYM2cODRs2pFatWvzxxx/MmDGD5s2bm11ajqbp5U4mISWNX/46wpcrozhyPhGw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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ "import matplotlib.pyplot as plt\n", "\n", - "# Your code here" + "# Your code here\n", + "# Extract the loss and validation loss from the history object\n", + "train_loss = history.history['loss']\n", + "val_loss = history.history['val_loss']\n", + "plt.figure(figsize=(10, 6))\n", + "plt.plot(train_loss, label='Training Loss')\n", + "plt.plot(val_loss, label='Validation Loss')\n", + "plt.xlabel('Epochs')\n", + "plt.ylabel('Loss')\n", + "plt.title('Training and Validation Loss Over Epochs')\n", + "plt.legend()\n", + "plt.tight_layout()\n", + "plt.show()\n" ] }, { @@ -503,7 +728,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 84, "id": "d73dbf278a1265ef", "metadata": { "collapsed": false @@ -523,7 +748,7 @@ " yhat = model.predict(sequence, verbose=0)\n", "\n", " # Get the index of the predicted word, according to the probabilities\n", - " yhat = np.random.choice(range(VOCAB_SIZE), p=yhat.ravel())\n", + " yhat = np.random.choice(range(vocabulary_size), p=yhat.ravel())\n", "\n", " return yhat\n", "\n", @@ -538,7 +763,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 85, "id": "f463b0c3df49e2c", "metadata": { "collapsed": false @@ -571,12 +796,29 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 86, "id": "dda8b0f845c20862", "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "--2024-12-05 18:50:25-- https://downloads.cs.stanford.edu/nlp/data/glove.6B.zip\n", + "Resolving downloads.cs.stanford.edu (downloads.cs.stanford.edu)... 171.64.64.22\n", + "Connecting to downloads.cs.stanford.edu (downloads.cs.stanford.edu)|171.64.64.22|:443... connected.\n", + "HTTP request sent, awaiting response... 200 OK\n", + "Length: 862182613 (822M) [application/zip]\n", + "Saving to: ‘glove.6B.zip.6’\n", + "\n", + "glove.6B.zip.6 4%[ ] 36.66M 7.10MB/s eta 97s ^C\n", + "Archive: glove.6B.zip\n", + "replace glove.6B.50d.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename: ^C\n" + ] + } + ], "source": [ "!wget https://downloads.cs.stanford.edu/nlp/data/glove.6B.zip\n", "!unzip glove.6B.zip" @@ -584,7 +826,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 87, "id": "e8b777220505635", "metadata": { "collapsed": false @@ -615,29 +857,21 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 88, "id": "d3e48ff004757cf2", "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You need to complete the previous parts of your assignment in order for this to work.\n" - ] - } - ], + "outputs": [], "source": [ "# Check if VOCAB_SIZE is set\n", - "if VOCAB_SIZE is None:\n", + "if vocabulary_size is None:\n", " print(\"You need to complete the previous parts of your assignment in order for this to work.\")\n", "else:\n", " # Create an embedding matrix\n", - " embedding_matrix = np.zeros((VOCAB_SIZE, 100))\n", + " embedding_matrix = np.zeros((vocabulary_size, 100))\n", " for word, i in tokenizer.word_index.items():\n", - " if i < VOCAB_SIZE:\n", + " if i < vocabulary_size:\n", " embedding_vector = embeddings_index.get(word)\n", " if embedding_vector is not None:\n", " embedding_matrix[i] = embedding_vector" @@ -645,42 +879,191 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 89, "id": "e3d21d5dbbbcf9f9", "metadata": { "collapsed": false }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "You need to complete the previous parts of your assignment in order for this to work.\n" - ] - } - ], + "outputs": [], "source": [ "# Check if VOCAB_SIZE is set\n", - "if VOCAB_SIZE is None:\n", + "if vocabulary_size is None:\n", " print(\"You need to complete the previous parts of your assignment in order for this to work.\")\n", "else:\n", " embedding_layer = Embedding(\n", - " VOCAB_SIZE, 100, weights=[embedding_matrix], input_length=SEQ_LENGTH, trainable=False\n", + " vocabulary_size, 100, weights=[embedding_matrix], input_length=SEQ_LENGTH, trainable=False\n", " )" ] }, { "cell_type": "code", - "execution_count": 19, + "execution_count": null, "id": "236cb723e4e5b3fc", "metadata": { "collapsed": false }, - "outputs": [], + "outputs": [ + { + "data": { + "text/html": [ + "
Model: \"sequential_18\"\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1mModel: \"sequential_18\"\u001b[0m\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
+       "┃ Layer (type)                     Output Shape                  Param # ┃\n",
+       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
+       "│ embedding_23 (Embedding)        │ ?                      │   0 (unbuilt) │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ lstm_18 (LSTM)                  │ ?                      │   0 (unbuilt) │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dropout_12 (Dropout)            │ ?                      │   0 (unbuilt) │\n",
+       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
+       "│ dense_18 (Dense)                │ ?                      │   0 (unbuilt) │\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", + "│ embedding_23 (\u001b[38;5;33mEmbedding\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ lstm_18 (\u001b[38;5;33mLSTM\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dropout_12 (\u001b[38;5;33mDropout\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "├─────────────────────────────────┼────────────────────────┼───────────────┤\n", + "│ dense_18 (\u001b[38;5;33mDense\u001b[0m) │ ? │ \u001b[38;5;34m0\u001b[0m (unbuilt) │\n", + "└─────────────────────────────────┴────────────────────────┴───────────────┘\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Total params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
 Non-trainable params: 0 (0.00 B)\n",
+       "
\n" + ], + "text/plain": [ + "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m2s\u001b[0m 71ms/step - accuracy: 0.0748 - loss: 4.5700 - val_accuracy: 0.0569 - val_loss: 4.2633\n", + "Epoch 2/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 61ms/step - accuracy: 0.0705 - loss: 4.1765 - val_accuracy: 0.1294 - val_loss: 3.9172\n", + "Epoch 3/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 63ms/step - accuracy: 0.1228 - loss: 3.7802 - val_accuracy: 0.1510 - val_loss: 3.5545\n", + "Epoch 4/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 69ms/step - accuracy: 0.1821 - loss: 3.4448 - val_accuracy: 0.2373 - val_loss: 3.2299\n", + "Epoch 5/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 71ms/step - accuracy: 0.2357 - loss: 3.0576 - val_accuracy: 0.3431 - val_loss: 2.9636\n", + "Training History:\n", + "{'accuracy': [0.08235294371843338, 0.0882352963089943, 0.13431373238563538, 0.19411765038967133, 0.24754901230335236], 'loss': [4.517307281494141, 4.095880031585693, 3.7107129096984863, 3.3449506759643555, 3.036912441253662], 'val_accuracy': [0.05686274543404579, 0.12941177189350128, 0.1509803980588913, 0.23725490272045135, 0.343137264251709], 'val_loss': [4.263265609741211, 3.9171946048736572, 3.5544724464416504, 3.2298743724823, 2.963573932647705]}\n" + ] + } + ], "source": [ "# Define a new model and train it\n", + "# Your code here\n", + "y_train = np.argmax(y_train, axis=-1) \n", + "y_val = np.argmax(y_val, axis=-1) \n", + "new_model = Sequential()\n", + "new_model.add(Embedding(input_dim=vocabulary_size, \n", + " output_dim=100, \n", + " input_length=SEQ_LENGTH)) \n", + "\n", + "new_model.add(LSTM(units=128, return_sequences=False)) \n", + "new_model.add(Dense(units=vocabulary_size, activation='softmax')) \n", + "new_model.compile(optimizer=Adam(), \n", + " loss='sparse_categorical_crossentropy', \n", + " metrics=['accuracy'])\n", + "new_model.summary()\n", + "history = new_model.fit(X_train, y_train, \n", + " epochs=5, \n", + " batch_size=128, \n", + " validation_data=(X_val, y_val)) \n", "\n", - "# Your code here" + "print(\"Training History:\")\n", + "print(history.history)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "45c49a56", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Epoch 1/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 79ms/step - accuracy: 0.3164 - loss: 2.8496 - val_accuracy: 0.4196 - val_loss: 2.7434\n", + "Epoch 2/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 80ms/step - accuracy: 0.3665 - loss: 2.6562 - val_accuracy: 0.4588 - val_loss: 2.5829\n", + "Epoch 3/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 87ms/step - accuracy: 0.4230 - loss: 2.4173 - val_accuracy: 0.4804 - val_loss: 2.4383\n", + "Epoch 4/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 82ms/step - accuracy: 0.4729 - loss: 2.2718 - val_accuracy: 0.4941 - val_loss: 2.3552\n", + "Epoch 5/5\n", + "\u001b[1m16/16\u001b[0m \u001b[32m━━━━━━━━━━━━━━━━━━━━\u001b[0m\u001b[37m\u001b[0m \u001b[1m1s\u001b[0m 83ms/step - accuracy: 0.4948 - loss: 2.1135 - val_accuracy: 0.5039 - val_loss: 2.2384\n", + "Training History:\n", + "{'accuracy': [0.32450979948043823, 0.37696078419685364, 0.42352941632270813, 0.4691176414489746, 0.4960784316062927], 'loss': [2.811549425125122, 2.573559045791626, 2.4031660556793213, 2.25211763381958, 2.131981372833252], 'val_accuracy': [0.41960784792900085, 0.4588235318660736, 0.4803921580314636, 0.4941176474094391, 0.5039215683937073], 'val_loss': [2.7433860301971436, 2.58290433883667, 2.438264846801758, 2.355194330215454, 2.2383956909179688]}\n" + ] + } + ], + "source": [ + "history = new_model.fit(X_train, y_train, \n", + " epochs=5, \n", + " batch_size=128, \n", + " validation_data=(X_val, y_val)) \n", + "print(\"Training History:\")\n", + "print(history.history)" ] }, { @@ -732,7 +1115,7 @@ "provenance": [] }, "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "dsi_participant", "language": "python", "name": "python3" },