├── Course_4_Week_2_BBC_text_classification.ipynb ├── Data ├── readme └── sarcasm.json ├── Exploring Overfitting in NLP.ipynb ├── IMDB Reviews with GRU (and optional LSTM and Conv1D).ipynb ├── IMDB Subwords 8K with 1D Convolutional Layer.ipynb ├── IMDB Subwords 8K with Multi Layer LSTM.ipynb ├── IMDB Subwords 8K with Single Layer LSTM.ipynb ├── Irish Lyrics generated poetry.ipynb ├── Irish Song Lyrics Auto Generation.ipynb ├── README.md ├── Sarcasm with 1D Convolutional Layer.ipynb ├── Sarcasm with Bidirectional LSTM.ipynb └── Write Shakespeare LSTM.ipynb /Data/readme: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /IMDB Subwords 8K with 1D Convolutional Layer.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "2.0.0-rc0\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "import tensorflow as tf\n", 18 | "import tensorflow_datasets as tfds\n", 19 | "\n", 20 | "print(tf.__version__)" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 2, 26 | "metadata": {}, 27 | "outputs": [], 28 | "source": [ 29 | "dataset, info = tfds.load('imdb_reviews/subwords8k', with_info=True, as_supervised=True, shuffle_files=True)\n", 30 | "train_data, test_data = dataset['train'], dataset['test'] " 31 | ] 32 | }, 33 | { 34 | "cell_type": "code", 35 | "execution_count": 5, 36 | "metadata": {}, 37 | "outputs": [ 38 | { 39 | "data": { 40 | "text/plain": [ 41 | "tfds.core.DatasetInfo(\n", 42 | " name='imdb_reviews',\n", 43 | " version=0.1.0,\n", 44 | " description='Large Movie Review Dataset.\n", 45 | "This is a dataset for binary sentiment classification containing substantially more data than previous benchmark datasets. We provide a set of 25,000 highly polar movie reviews for training, and 25,000 for testing. There is additional unlabeled data for use as well.',\n", 46 | " urls=['http://ai.stanford.edu/~amaas/data/sentiment/'],\n", 47 | " features=FeaturesDict({\n", 48 | " 'label': ClassLabel(shape=(), dtype=tf.int64, num_classes=2),\n", 49 | " 'text': Text(shape=(None,), dtype=tf.int64, encoder=),\n", 50 | " }),\n", 51 | " total_num_examples=100000,\n", 52 | " splits={\n", 53 | " 'test': 25000,\n", 54 | " 'train': 25000,\n", 55 | " 'unsupervised': 50000,\n", 56 | " },\n", 57 | " supervised_keys=('text', 'label'),\n", 58 | " citation=\"\"\"@InProceedings{maas-EtAl:2011:ACL-HLT2011,\n", 59 | " author = {Maas, Andrew L. and Daly, Raymond E. and Pham, Peter T. and Huang, Dan and Ng, Andrew Y. and Potts, Christopher},\n", 60 | " title = {Learning Word Vectors for Sentiment Analysis},\n", 61 | " booktitle = {Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies},\n", 62 | " month = {June},\n", 63 | " year = {2011},\n", 64 | " address = {Portland, Oregon, USA},\n", 65 | " publisher = {Association for Computational Linguistics},\n", 66 | " pages = {142--150},\n", 67 | " url = {http://www.aclweb.org/anthology/P11-1015}\n", 68 | " }\"\"\",\n", 69 | " redistribution_info=,\n", 70 | ")" 71 | ] 72 | }, 73 | "execution_count": 5, 74 | "metadata": {}, 75 | "output_type": "execute_result" 76 | } 77 | ], 78 | "source": [ 79 | "info" 80 | ] 81 | }, 82 | { 83 | "cell_type": "code", 84 | "execution_count": 8, 85 | "metadata": {}, 86 | "outputs": [], 87 | "source": [ 88 | "tokenizer = info.features['text'].encoder" 89 | ] 90 | }, 91 | { 92 | "cell_type": "code", 93 | "execution_count": 9, 94 | "metadata": {}, 95 | "outputs": [], 96 | "source": [ 97 | "BUFFER_SIZE = 10000\n", 98 | "BATCH_SIZE = 64\n", 99 | "\n", 100 | "train_data = train_data.shuffle(BUFFER_SIZE)\n", 101 | "train_data = train_data.padded_batch(BATCH_SIZE, train_data.output_shapes)\n", 102 | "test_data = test_data.padded_batch(BATCH_SIZE, test_data.output_shapes)" 103 | ] 104 | }, 105 | { 106 | "cell_type": "code", 107 | "execution_count": 12, 108 | "metadata": {}, 109 | "outputs": [ 110 | { 111 | "name": "stdout", 112 | "output_type": "stream", 113 | "text": [ 114 | "Model: \"sequential\"\n", 115 | "_________________________________________________________________\n", 116 | "Layer (type) Output Shape Param # \n", 117 | "=================================================================\n", 118 | "embedding (Embedding) (None, None, 64) 523840 \n", 119 | "_________________________________________________________________\n", 120 | "conv1d (Conv1D) (None, None, 128) 41088 \n", 121 | "_________________________________________________________________\n", 122 | "global_average_pooling1d (Gl (None, 128) 0 \n", 123 | "_________________________________________________________________\n", 124 | "dense (Dense) (None, 64) 8256 \n", 125 | "_________________________________________________________________\n", 126 | "dense_1 (Dense) (None, 1) 65 \n", 127 | "=================================================================\n", 128 | "Total params: 573,249\n", 129 | "Trainable params: 573,249\n", 130 | "Non-trainable params: 0\n", 131 | "_________________________________________________________________\n" 132 | ] 133 | } 134 | ], 135 | "source": [ 136 | "model = tf.keras.Sequential([\n", 137 | " tf.keras.layers.Embedding(tokenizer.vocab_size, 64),\n", 138 | " tf.keras.layers.Conv1D(128, 5, activation='relu'),\n", 139 | " tf.keras.layers.GlobalAveragePooling1D(),\n", 140 | " tf.keras.layers.Dense(64, activation='relu'),\n", 141 | " tf.keras.layers.Dense(1, activation='sigmoid')\n", 142 | "])\n", 143 | "model.summary()" 144 | ] 145 | }, 146 | { 147 | "cell_type": "code", 148 | "execution_count": 13, 149 | "metadata": {}, 150 | "outputs": [], 151 | "source": [ 152 | "model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 17, 158 | "metadata": {}, 159 | "outputs": [ 160 | { 161 | "name": "stdout", 162 | "output_type": "stream", 163 | "text": [ 164 | "Epoch 1/10\n", 165 | "391/391 [==============================] - 101s 259ms/step - loss: 0.0257 - accuracy: 0.9926 - val_loss: 0.0000e+00 - val_accuracy: 0.0000e+00\n", 166 | "Epoch 2/10\n", 167 | "391/391 [==============================] - 101s 257ms/step - loss: 0.0256 - accuracy: 0.9927 - val_loss: 0.9512 - val_accuracy: 0.8451\n", 168 | "Epoch 3/10\n", 169 | "391/391 [==============================] - 101s 258ms/step - loss: 0.0234 - accuracy: 0.9929 - val_loss: 0.9677 - val_accuracy: 0.8465\n", 170 | "Epoch 4/10\n", 171 | "391/391 [==============================] - 101s 258ms/step - loss: 0.0170 - accuracy: 0.9958 - val_loss: 1.1006 - val_accuracy: 0.8453\n", 172 | "Epoch 5/10\n", 173 | "391/391 [==============================] - 101s 258ms/step - loss: 0.0215 - accuracy: 0.9942 - val_loss: 1.0256 - val_accuracy: 0.8470\n", 174 | "Epoch 6/10\n", 175 | "391/391 [==============================] - 104s 265ms/step - loss: 0.0103 - accuracy: 0.9978 - val_loss: 1.2494 - val_accuracy: 0.8480\n", 176 | "Epoch 7/10\n", 177 | "391/391 [==============================] - 101s 258ms/step - loss: 0.0065 - accuracy: 0.9988 - val_loss: 1.3551 - val_accuracy: 0.8471\n", 178 | "Epoch 8/10\n", 179 | "391/391 [==============================] - 101s 259ms/step - loss: 0.0086 - accuracy: 0.9981 - val_loss: 1.3146 - val_accuracy: 0.8396\n", 180 | "Epoch 9/10\n", 181 | "391/391 [==============================] - 101s 258ms/step - loss: 0.0158 - accuracy: 0.9948 - val_loss: 1.3046 - val_accuracy: 0.8459\n", 182 | "Epoch 10/10\n", 183 | "391/391 [==============================] - 102s 261ms/step - loss: 0.0175 - accuracy: 0.9942 - val_loss: 1.4010 - val_accuracy: 0.8486\n" 184 | ] 185 | } 186 | ], 187 | "source": [ 188 | "NUM_EPOCHS = 10\n", 189 | "history = model.fit(train_data, epochs=NUM_EPOCHS, validation_data=test_data)" 190 | ] 191 | }, 192 | { 193 | "cell_type": "code", 194 | "execution_count": 18, 195 | "metadata": {}, 196 | "outputs": [], 197 | "source": [ 198 | "import matplotlib.pyplot as plt\n", 199 | "\n", 200 | "def plot_graphs(history, string):\n", 201 | " plt.plot(history.history[string])\n", 202 | " plt.plot(history.history['val_'+string])\n", 203 | " plt.xlabel('Epochs')\n", 204 | " plt.ylabel(string)\n", 205 | " plt.legend([string, 'val_'+string])\n", 206 | " plt.show()" 207 | ] 208 | }, 209 | { 210 | "cell_type": "code", 211 | "execution_count": 19, 212 | "metadata": {}, 213 | "outputs": [ 214 | { 215 | "data": { 216 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEGCAYAAAB/+QKOAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deZxdZZ3v+8+3plRlnorMIUGxJZDEQBEQW4OksdFGIvSJkUaOpFUObQdtlEuDQ8NFOPpSaFu6OVyil0nRSMfGw6FpEEho9DKYSjNJwhAjJJUECJmLVKWm3/1jraraVVk1JNTOrqS+7xf7tdd61vTsTeX57rWevdejiMDMzKyzokJXwMzM+icHhJmZZXJAmJlZJgeEmZllckCYmVmmkkJXoK+MHTs2pk2bVuhqmJkdVlavXv12RFRmLTtiAmLatGlUV1cXuhpmZocVSa93tcyXmMzMLJMDwszMMjkgzMwskwPCzMwy5S0gJN0m6S1Jv+9iuSTdJGmdpOclnZiz7HOSXk0fn8tXHc3MrGv5PIO4Azirm+UfB45NHxcDtwBIGg1cDZwCzAWuljQqj/U0M7MMeQuIiHgc2N7NKguAuyLxFDBS0gTgz4GHI2J7ROwAHqb7oDEzszwo5O8gJgEbc+Zr0rKuyvcj6WKSsw+mTp2an1qaHaGaW4K6xmbqG5upa0ifG5upb2yhbr+y9mUlRaKspIiy4qKOzznTpenzoJKO8523KS5Sod8G68Zh/UO5iFgKLAWoqqrywBZ2RNpT38jG7XXsrm9MGumGZuqbmqlraMls4DuWtXRq4NvLG5pbCv3SKC5Sh1AZlBM0pSXKCZ9iyorbg6mirIQJI8qZNLKCSaMqmDSygvEjyikt9vdu+lIhA2ITMCVnfnJatgk4vVP5Y4esVmaHWHNLsGVXHRu272Xj9r1s2L6XDdvr2LDtHTZs38uOvY097qNIUFFaTEVZMeWlxVSUtj8Pryhl3PBBHcvLWqeLOpSVl3TcRzLdvs6gkiKaW4KG5hYamlran3OmG5tb2NfUsbwxZ719TS00Nke6rDlnvcjZT3P7Ok0t7KprbNt3Q1ML7+xrYts7Dfu9B+OHlzMxJzTantPpwWWH9WfiQ66Q79Z9wBJJy0g6pHdFxBZJDwH/M6dj+mPAVYWqpFlfqN3XxIZtrY3/O20hsHH7Xmp27KWxuf0EuKRITBpVwdTRg/nEzAlMHT2YKaMHM3JwaXuj3akhLy0W0qG5XFNSLEqKixhcdkgO16X6xmY276xj8856Nu3cy6YdddTsrGPTjjr+a8MO/v35LTS1dLywMGpwaVtoTEyDY/KoCiaNHMykURWMGlx6yN7Hw0HeAkLSz0nOBMZKqiH5ZlIpQET8P8ADwCeAdcBeYHG6bLukbwOr0l1dGxHddXbbYay+sZk3d9fzxq563kift+yq583d9dQ1NjOsvJRh5SUMb3suYXhFblk6XVHKkLLigv3jbm4J3thdz4ZtuWcBe3k9PSvY3unT7sjBpUwdPZgZE4dz1gnjOXr04LYgmDCinBJfKulReWkxx1QO5ZjKoZnLm1uCt/bUs2lHHZt21lGzo47NO5Pp9Vvf4Tevvs3ehuYO21SUFjNxZDmTRg3OCY+KtrOSccMGDaj/NzpSxqSuqqoK36yv/4gIdtc18cbuerbsqktDYB9v7K7rEAJZl0+GDiph/IhyBpcVs6e+iT31jeyua+rxmnmR2C9QhpWXMrwimR+ezg/bL2Ta1xtUUtzl/mv3NbFx+15e7xQCyVlAXYf6FReJSSMrOHpM0uhPzXlMGT2YERWlB//mWp+ICHbubWRTGhqtQbJpRx2bdyXPnS9jFReJ8cPLmTSqgskjK6gcNojS4qT/pKQ46TMpTc+wWvtRSoqK0nXUtm7WdPv2yXTr8nx35EtaHRFVmcscEHagmluCt2v3dWjo25/reHN3sqyusXm/bccOLWP8iHLGDy/Pea5Inwcxbng5w8qzG8/6xmb21Dexu74xea5rbA+QTmW791uvkT37mujpz72spCgnTJIg2VOfBEPnxmJ4eQlHjxnS1uhPHT2Yo8ckzz4LODLUNTS3BcjmTiGyaWcdb9fuo6klaG7JXztaJLoMlpJ0esaE4dz46dkHtf/uAsI9NkeIiCACAmhJp1vS1jB3viWAdDp33ciZ39fYwhu72xv+NzqFwFt79u33D6K0WBw1rJwJI8qZMXE4899/VBIAaQiMSx9lJQffaJanHaWVwwYd1PYtLcE7DU0dQqb17CQJmaS8db51vcFlxXzs+HFMHT2kw5nAiME+CzjSVZQV896jhvLeo7IvY7VqaQkaW5LO98amlg7TTS0tNDQFTS2tnezZ041N6T6aWmhKvwjQmC7Pnc7ax6g8/S0O+IDYtbeRz9+5iqC9kWxtaNmvEaVtvXRxW0Pbui0563Telv2OkTTYkW6Y2cBnNua526aNfh61XvIZP7yc9753bNLgjyhnQutZwIhyRg8uo6iff6e9qEjpJaZSJlJR6OrYEaSoSAwqKmZQCXBwn1/6pQEfECi5rCCBEK19nJIQyeld63SyTOm6UKR0Ot02/S9zW3L237qv1u2z9lmUVqR9Pt1Xup8i5eyD9mWt862NdYftW4+jdPt0vfb6JstLi4t6dcnHzI5sAz4gRlSU8rMvnlroapiZ9TvuRTMzs0wOCDMzy+SAMDOzTA4IMzPL5IAwM7NMDggzM8vkgDAzs0wOCDMzy+SAMDOzTA4IMzPLlNeAkHSWpJclrZN0ZcbyoyU9Kul5SY9Jmpyz7HuSXpS0VtJN8jBPZmaHVN4CQlIxcDPwcWAGcL6kGZ1WuwG4KyJmAdcC30m3PQ34EDALOAE4GZiXr7qamdn+8nkGMRdYFxHrI6IBWAYs6LTODGBFOr0yZ3kA5UAZyc1zS4E381hXMzPrJJ8BMQnYmDNfk5bleg44L50+FxgmaUxEPEkSGFvSx0MRsTaPdTUzs04K3Ul9OTBP0jMkl5A2Ac2S3gscB0wmCZUzJH2488aSLpZULal669ath7LeZmZHvHwGxCZgSs785LSsTURsjojzImIO8I20bCfJ2cRTEVEbEbXAfwAf7HyAiFgaEVURUVVZWZmv12FmNiDlMyBWAcdKmi6pDPgMcF/uCpLGSmqtw1XAben0BpIzixJJpSRnF77EZGZ2COUtICKiCVgCPETSuN8TES9KulbSOelqpwMvS3oFGAdcn5YvB/4AvEDST/FcRPyffNXVzMz2p4g8j3h/iFRVVUV1dXWhq2FmdliRtDoiqrKWFbqT2szM+ikHhJmZZXJAmJlZJgeEmZllckCYmVkmB4SZmWVyQJiZWSYHhJmZZXJAmJlZJgeEmZllckCYmVkmB4SZmWVyQJiZWSYHhJmZZXJAmJlZJgeEmZllymtASDpL0suS1km6MmP50ZIelfS8pMckTc5ZNlXSryWtlbRG0rR81tXMzDrKW0BIKgZuBj4OzADOlzSj02o3AHdFxCzgWuA7OcvuAr4fEccBc4G38lVXMzPbXz7PIOYC6yJifUQ0AMuABZ3WmQGsSKdXti5Pg6QkIh4GiIjaiNibx7qamVkn+QyIScDGnPmatCzXc8B56fS5wDBJY4D3ATsl/ZukZyR9Pz0j6UDSxZKqJVVv3bo1Dy/BzGzgKnQn9eXAPEnPAPOATUAzUAJ8OF1+MnAMcFHnjSNiaURURURVZWXlIau0mdlAkM+A2ARMyZmfnJa1iYjNEXFeRMwBvpGW7SQ523g2vTzVBPwKODGPdTUzs07yGRCrgGMlTZdUBnwGuC93BUljJbXW4SrgtpxtR0pqPS04A1iTx7qamVkneQuI9JP/EuAhYC1wT0S8KOlaSeekq50OvCzpFWAccH26bTPJ5aVHJb0ACPhRvupqZmb7U0QUug59oqqqKqqrqwtdDTOzw4qk1RFRlbWs0J3UZmbWTzkgzMwskwPCzMwyOSDMzCyTA8LMzDI5IMzMLJMDwszMMjkgzMwskwPCzMwyOSDMzCyTA8LMzDI5IMzMLJMDwszMMjkgzMwskwPCzMwyOSDMzCxTXgNC0lmSXpa0TtKVGcuPlvSopOclPSZpcqflwyXVSPqXfNbTzMz2l7eAkFQM3Ax8HJgBnC9pRqfVbgDuiohZwLXAdzot/zbweL7qaGZmXcvnGcRcYF1ErI+IBmAZsKDTOjOAFen0ytzlkk4iGaf613mso5mZdSGfATEJ2JgzX5OW5XoOOC+dPhcYJmmMpCLgRuDy7g4g6WJJ1ZKqt27d2kfVNjMzKHwn9eXAPEnPAPOATUAz8CXggYio6W7jiFgaEVURUVVZWZn/2pqZDSAledz3JmBKzvzktKxNRGwmPYOQNBT4y4jYKemDwIclfQkYCpRJqo2I/Tq6zcwsP/IZEKuAYyVNJwmGzwB/lbuCpLHA9ohoAa4CbgOIiAty1rkIqHI4mJkdWnm7xBQRTcAS4CFgLXBPRLwo6VpJ56SrnQ68LOkVkg7p6/NVHzMzOzCKiELXoU9UVVVFdXV1oathZnZYkbQ6IqqylvXqDELSv0n6i/TbRWZmNgD0tsH/XyT9B69K+q6kP8ljnczMrB/oVUBExCNpx/GJwGvAI5KekLRYUmk+K2hmZoXR628xSRoDfBa4EHgGuBv4U+BzJJ3NZmZtGhsbqampob6+vtBVMaC8vJzJkydTWtr7z/S9CghJ9wJ/AvwE+GREbEkX/UKSe4bNbD81NTUMGzaMadOmIanQ1RnQIoJt27ZRU1PD9OnTe71db88gboqIlV0cOLP328wGtvr6eodDPyGJMWPGcKC3JOptJ/UMSSNzDjYq/ZWzmVmXHA79x8H8v+htQHwxIna2zkTEDuCLB3w0MzM7bPQ2IIqVEz/pWA9l+amSmZn1B73tg3iQpEP61nT+f6RlZmYDXlNTEyUl+by1XWH09gzi70kG9Pmb9PEocEW+KmVm1lc+9alPcdJJJ3H88cezdOlSAB588EFOPPFEZs+ezfz58wGora1l8eLFzJw5k1mzZvHLX/4SgKFDh7bta/ny5Vx00UUAXHTRRVxyySWccsopXHHFFfzud7/jgx/8IHPmzOG0007j5ZdfBqC5uZnLL7+cE044gVmzZvHP//zPrFixgk996lNt+3344Yc599xzD8XbcUB6FXnp3VZvSR9mZgfk//4/L7Jm8+4+3eeMicO5+pPH97jebbfdxujRo6mrq+Pkk09mwYIFfPGLX+Txxx9n+vTpbN++HYBvf/vbjBgxghdeeAGAHTt29LjvmpoannjiCYqLi9m9eze/+c1vKCkp4ZFHHuHrX/86v/zlL1m6dCmvvfYazz77LCUlJWzfvp1Ro0bxpS99ia1bt1JZWcntt9/OX//1X7+7NyQPevs7iGNJxoueAZS3lkfEMXmql5lZn7jpppu49957Adi4cSNLly7lIx/5SNvvAUaPHg3AI488wrJly9q2GzVqVI/7XrhwIcXFxQDs2rWLz33uc7z66qtIorGxsW2/l1xySdslqNbjXXjhhfz0pz9l8eLFPPnkk9x111199Ir7Tm8vmt0OXA38APgosJjCj0ZnZoeJ3nzSz4fHHnuMRx55hCeffJLBgwdz+umn84EPfICXXnqp1/vI/Xpo51+FDxkypG36W9/6Fh/96Ee59957ee211zj99NO73e/ixYv55Cc/SXl5OQsXLuyXfRi9beQrIuJRktuDvx4R1wB/kb9qmZm9e7t27WLUqFEMHjyYl156iaeeeor6+noef/xx/vjHPwK0XWI688wzufnmm9u2bb3ENG7cONauXUtLS0vbmUhXx5o0aRIAd9xxR1v5mWeeya233kpTU1OH402cOJGJEydy3XXXsXjx4r570X2otwGxL73V96uSlkg6l2QoUDOzfuuss86iqamJ4447jiuvvJJTTz2VyspKli5dynnnncfs2bNZtGgRAN/85jfZsWMHJ5xwArNnz2blyuTmEd/97nc5++yz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\n", 217 | "text/plain": [ 218 | "
" 219 | ] 220 | }, 221 | "metadata": { 222 | "needs_background": "light" 223 | }, 224 | "output_type": "display_data" 225 | } 226 | ], 227 | "source": [ 228 | "plot_graphs(history, 'accuracy');" 229 | ] 230 | }, 231 | { 232 | "cell_type": "code", 233 | "execution_count": 20, 234 | "metadata": {}, 235 | "outputs": [ 236 | { 237 | "data": { 238 | "image/png": "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\n", 239 | "text/plain": [ 240 | "
" 241 | ] 242 | }, 243 | "metadata": { 244 | "needs_background": "light" 245 | }, 246 | "output_type": "display_data" 247 | } 248 | ], 249 | "source": [ 250 | "plot_graphs(history, 'loss');" 251 | ] 252 | }, 253 | { 254 | "cell_type": "code", 255 | "execution_count": null, 256 | "metadata": {}, 257 | "outputs": [], 258 | "source": [] 259 | } 260 | ], 261 | "metadata": { 262 | "kernelspec": { 263 | "display_name": "Python 3", 264 | "language": "python", 265 | "name": "python3" 266 | }, 267 | "language_info": { 268 | "codemirror_mode": { 269 | "name": "ipython", 270 | "version": 3 271 | }, 272 | "file_extension": ".py", 273 | "mimetype": "text/x-python", 274 | "name": "python", 275 | "nbconvert_exporter": "python", 276 | "pygments_lexer": "ipython3", 277 | "version": "3.6.7" 278 | } 279 | }, 280 | "nbformat": 4, 281 | "nbformat_minor": 2 282 | } 283 | -------------------------------------------------------------------------------- /IMDB Subwords 8K with Multi Layer LSTM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "2.0.0-rc0\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "from __future__ import absolute_import, division, print_function, unicode_literals\n", 18 | "import tensorflow as tf\n", 19 | "import tensorflow_datasets as tfds\n", 20 | "\n", 21 | "print(tf.__version__)" 22 | ] 23 | }, 24 | { 25 | "cell_type": "code", 26 | "execution_count": 3, 27 | "metadata": {}, 28 | "outputs": [], 29 | "source": [ 30 | "dataset, info = tfds.load('imdb_reviews/subwords8k', with_info=True, as_supervised=True, shuffle_files=True)\n", 31 | "train_data, test_data = dataset['train'], dataset['test']" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 8, 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "tokenizer = info.features['text'].encoder" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 13, 46 | "metadata": {}, 47 | "outputs": [], 48 | "source": [ 49 | "BUFFER_SIZE = 10000\n", 50 | "BATCH_SIZE = 64\n", 51 | "\n", 52 | "train_data = train_data.shuffle(BUFFER_SIZE)\n", 53 | "train_data = train_data.padded_batch(BATCH_SIZE, train_data.output_shapes)\n", 54 | "test_data = test_data.padded_batch(BATCH_SIZE, test_data.output_shapes)" 55 | ] 56 | }, 57 | { 58 | "cell_type": "code", 59 | "execution_count": 16, 60 | "metadata": {}, 61 | "outputs": [ 62 | { 63 | "name": "stdout", 64 | "output_type": "stream", 65 | "text": [ 66 | "Model: \"sequential\"\n", 67 | "_________________________________________________________________\n", 68 | "Layer (type) Output Shape Param # \n", 69 | "=================================================================\n", 70 | "embedding (Embedding) (None, None, 64) 523840 \n", 71 | "_________________________________________________________________\n", 72 | "bidirectional (Bidirectional (None, None, 128) 66048 \n", 73 | "_________________________________________________________________\n", 74 | "bidirectional_1 (Bidirection (None, 64) 41216 \n", 75 | "_________________________________________________________________\n", 76 | "dense (Dense) (None, 64) 4160 \n", 77 | "_________________________________________________________________\n", 78 | "dense_1 (Dense) (None, 1) 65 \n", 79 | "=================================================================\n", 80 | "Total params: 635,329\n", 81 | "Trainable params: 635,329\n", 82 | "Non-trainable params: 0\n", 83 | "_________________________________________________________________\n" 84 | ] 85 | } 86 | ], 87 | "source": [ 88 | "model = tf.keras.Sequential([\n", 89 | " tf.keras.layers.Embedding(tokenizer.vocab_size, 64),\n", 90 | " tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64, return_sequences=True)),\n", 91 | " tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)),\n", 92 | " tf.keras.layers.Dense(64, activation='relu'),\n", 93 | " tf.keras.layers.Dense(1, activation='sigmoid')\n", 94 | "])\n", 95 | "model.summary()" 96 | ] 97 | }, 98 | { 99 | "cell_type": "code", 100 | "execution_count": 17, 101 | "metadata": {}, 102 | "outputs": [], 103 | "source": [ 104 | "model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])" 105 | ] 106 | }, 107 | { 108 | "cell_type": "code", 109 | "execution_count": 18, 110 | "metadata": {}, 111 | "outputs": [ 112 | { 113 | "name": "stdout", 114 | "output_type": "stream", 115 | "text": [ 116 | "Epoch 1/10\n" 117 | ] 118 | }, 119 | { 120 | "name": "stderr", 121 | "output_type": "stream", 122 | "text": [ 123 | "W0904 16:13:41.838235 140068509546304 deprecation.py:323] From /opt/tljh/user/lib/python3.6/site-packages/tensorflow_core/python/ops/nn_impl.py:183: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 124 | "Instructions for updating:\n", 125 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" 126 | ] 127 | }, 128 | { 129 | "name": "stdout", 130 | "output_type": "stream", 131 | "text": [ 132 | "391/391 [==============================] - 796s 2s/step - loss: 0.5039 - accuracy: 0.7485 - val_loss: 0.0000e+00 - val_accuracy: 0.0000e+00\n", 133 | "Epoch 2/10\n", 134 | "391/391 [==============================] - 791s 2s/step - loss: 0.4831 - accuracy: 0.7763 - val_loss: 0.6092 - val_accuracy: 0.6361\n", 135 | "Epoch 3/10\n", 136 | "391/391 [==============================] - 785s 2s/step - loss: 0.4459 - accuracy: 0.8010 - val_loss: 0.4939 - val_accuracy: 0.7680\n", 137 | "Epoch 4/10\n", 138 | "391/391 [==============================] - 786s 2s/step - loss: 0.4741 - accuracy: 0.7696 - val_loss: 0.3851 - val_accuracy: 0.8421\n", 139 | "Epoch 5/10\n", 140 | "391/391 [==============================] - 798s 2s/step - loss: 0.2672 - accuracy: 0.8952 - val_loss: 0.3975 - val_accuracy: 0.8289\n", 141 | "Epoch 6/10\n", 142 | "391/391 [==============================] - 804s 2s/step - loss: 0.2410 - accuracy: 0.9050 - val_loss: 0.3484 - val_accuracy: 0.8583\n", 143 | "Epoch 7/10\n", 144 | "391/391 [==============================] - 805s 2s/step - loss: 0.1923 - accuracy: 0.9285 - val_loss: 0.3324 - val_accuracy: 0.8630\n", 145 | "Epoch 8/10\n", 146 | "391/391 [==============================] - 811s 2s/step - loss: 0.1477 - accuracy: 0.9486 - val_loss: 0.3684 - val_accuracy: 0.8719\n", 147 | "Epoch 9/10\n", 148 | "391/391 [==============================] - 813s 2s/step - loss: 0.1153 - accuracy: 0.9615 - val_loss: 0.4388 - val_accuracy: 0.8676\n", 149 | "Epoch 10/10\n", 150 | "391/391 [==============================] - 797s 2s/step - loss: 0.0921 - accuracy: 0.9712 - val_loss: 0.4375 - val_accuracy: 0.8651\n" 151 | ] 152 | } 153 | ], 154 | "source": [ 155 | "NUM_EPOCHS = 10\n", 156 | "history = model.fit(train_data, epochs=NUM_EPOCHS, validation_data=test_data)" 157 | ] 158 | }, 159 | { 160 | "cell_type": "code", 161 | "execution_count": 19, 162 | "metadata": {}, 163 | "outputs": [], 164 | "source": [ 165 | "import matplotlib.pyplot as plt\n", 166 | "\n", 167 | "def plot_graphs(history, string):\n", 168 | " plt.plot(history.history[string])\n", 169 | " plt.plot(history.history['val_'+string])\n", 170 | " plt.xlabel('Epochs')\n", 171 | " plt.ylabel(string)\n", 172 | " plt.legend([string, 'val_'+string])\n", 173 | " plt.show()" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": 20, 179 | "metadata": {}, 180 | "outputs": [ 181 | { 182 | "data": { 183 | "image/png": "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\n", 184 | "text/plain": [ 185 | "
" 186 | ] 187 | }, 188 | "metadata": { 189 | "needs_background": "light" 190 | }, 191 | "output_type": "display_data" 192 | } 193 | ], 194 | "source": [ 195 | "plot_graphs(history, 'accuracy');" 196 | ] 197 | }, 198 | { 199 | "cell_type": "code", 200 | "execution_count": 21, 201 | "metadata": {}, 202 | "outputs": [ 203 | { 204 | "data": { 205 | "image/png": "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\n", 206 | "text/plain": [ 207 | "
" 208 | ] 209 | }, 210 | "metadata": { 211 | "needs_background": "light" 212 | }, 213 | "output_type": "display_data" 214 | } 215 | ], 216 | "source": [ 217 | "plot_graphs(history, 'loss')" 218 | ] 219 | }, 220 | { 221 | "cell_type": "code", 222 | "execution_count": null, 223 | "metadata": {}, 224 | "outputs": [], 225 | "source": [] 226 | } 227 | ], 228 | "metadata": { 229 | "kernelspec": { 230 | "display_name": "Python 3", 231 | "language": "python", 232 | "name": "python3" 233 | }, 234 | "language_info": { 235 | "codemirror_mode": { 236 | "name": "ipython", 237 | "version": 3 238 | }, 239 | "file_extension": ".py", 240 | "mimetype": "text/x-python", 241 | "name": "python", 242 | "nbconvert_exporter": "python", 243 | "pygments_lexer": "ipython3", 244 | "version": "3.6.7" 245 | } 246 | }, 247 | "nbformat": 4, 248 | "nbformat_minor": 2 249 | } 250 | -------------------------------------------------------------------------------- /IMDB Subwords 8K with Single Layer LSTM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "name": "stdout", 10 | "output_type": "stream", 11 | "text": [ 12 | "2.0.0-rc0\n" 13 | ] 14 | } 15 | ], 16 | "source": [ 17 | "from __future__ import absolute_import, division, print_function, unicode_literals\n", 18 | "import tensorflow as tf\n", 19 | "import tensorflow_datasets as tfds\n", 20 | "print(tf.__version__)" 21 | ] 22 | }, 23 | { 24 | "cell_type": "code", 25 | "execution_count": 2, 26 | "metadata": {}, 27 | "outputs": [ 28 | { 29 | "name": "stderr", 30 | "output_type": "stream", 31 | "text": [ 32 | "WARNING: Logging before flag parsing goes to stderr.\n", 33 | "W0904 13:22:19.050708 140021956069184 dataset_builder.py:439] Warning: Setting shuffle_files=True because split=TRAIN and shuffle_files=None. This behavior will be deprecated on 2019-08-06, at which point shuffle_files=False will be the default for all splits.\n" 34 | ] 35 | } 36 | ], 37 | "source": [ 38 | "dataset, info = tfds.load('imdb_reviews/subwords8k', with_info=True, as_supervised=True)\n", 39 | "train_data, test_data = dataset['train'], dataset['test']" 40 | ] 41 | }, 42 | { 43 | "cell_type": "code", 44 | "execution_count": 4, 45 | "metadata": {}, 46 | "outputs": [], 47 | "source": [ 48 | "tokenizer = info.features['text'].encoder" 49 | ] 50 | }, 51 | { 52 | "cell_type": "code", 53 | "execution_count": 9, 54 | "metadata": {}, 55 | "outputs": [], 56 | "source": [ 57 | "BUFFER_SIZE = 10000\n", 58 | "BATCH_SIZE = 64\n", 59 | "\n", 60 | "train_data = train_data.shuffle(BUFFER_SIZE)" 61 | ] 62 | }, 63 | { 64 | "cell_type": "code", 65 | "execution_count": 12, 66 | "metadata": {}, 67 | "outputs": [], 68 | "source": [ 69 | "train_data = train_data.padded_batch(BATCH_SIZE, train_data.output_shapes)\n", 70 | "test_data = test_data.padded_batch(BATCH_SIZE, test_data.output_shapes)" 71 | ] 72 | }, 73 | { 74 | "cell_type": "code", 75 | "execution_count": 18, 76 | "metadata": {}, 77 | "outputs": [ 78 | { 79 | "name": "stdout", 80 | "output_type": "stream", 81 | "text": [ 82 | "Model: \"sequential\"\n", 83 | "_________________________________________________________________\n", 84 | "Layer (type) Output Shape Param # \n", 85 | "=================================================================\n", 86 | "embedding (Embedding) (None, None, 64) 523840 \n", 87 | "_________________________________________________________________\n", 88 | "bidirectional (Bidirectional (None, 128) 66048 \n", 89 | "_________________________________________________________________\n", 90 | "dense (Dense) (None, 64) 8256 \n", 91 | "_________________________________________________________________\n", 92 | "dense_1 (Dense) (None, 1) 65 \n", 93 | "=================================================================\n", 94 | "Total params: 598,209\n", 95 | "Trainable params: 598,209\n", 96 | "Non-trainable params: 0\n", 97 | "_________________________________________________________________\n" 98 | ] 99 | } 100 | ], 101 | "source": [ 102 | "model = tf.keras.Sequential([\n", 103 | " tf.keras.layers.Embedding(tokenizer.vocab_size, 64),\n", 104 | " tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64)),\n", 105 | " tf.keras.layers.Dense(64, activation='relu'),\n", 106 | " tf.keras.layers.Dense(1, activation='sigmoid')\n", 107 | "])\n", 108 | "model.summary()" 109 | ] 110 | }, 111 | { 112 | "cell_type": "code", 113 | "execution_count": 20, 114 | "metadata": {}, 115 | "outputs": [], 116 | "source": [ 117 | "model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])" 118 | ] 119 | }, 120 | { 121 | "cell_type": "code", 122 | "execution_count": 21, 123 | "metadata": {}, 124 | "outputs": [ 125 | { 126 | "name": "stdout", 127 | "output_type": "stream", 128 | "text": [ 129 | "Epoch 1/10\n" 130 | ] 131 | }, 132 | { 133 | "name": "stderr", 134 | "output_type": "stream", 135 | "text": [ 136 | "W0904 13:56:34.543306 140021956069184 deprecation.py:323] From /opt/tljh/user/lib/python3.6/site-packages/tensorflow_core/python/ops/nn_impl.py:183: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 137 | "Instructions for updating:\n", 138 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" 139 | ] 140 | }, 141 | { 142 | "name": "stdout", 143 | "output_type": "stream", 144 | "text": [ 145 | "391/391 [==============================] - 448s 1s/step - loss: 0.5702 - accuracy: 0.6914 - val_loss: 0.0000e+00 - val_accuracy: 0.0000e+00\n", 146 | "Epoch 2/10\n", 147 | "391/391 [==============================] - 474s 1s/step - loss: 0.4037 - accuracy: 0.8257 - val_loss: 0.4928 - val_accuracy: 0.7763\n", 148 | "Epoch 3/10\n", 149 | "391/391 [==============================] - 468s 1s/step - loss: 0.4522 - accuracy: 0.7988 - val_loss: 0.5138 - val_accuracy: 0.7854\n", 150 | "Epoch 4/10\n", 151 | "391/391 [==============================] - 471s 1s/step - loss: 0.4868 - accuracy: 0.7649 - val_loss: 0.5007 - val_accuracy: 0.7846\n", 152 | "Epoch 5/10\n", 153 | "391/391 [==============================] - 470s 1s/step - loss: 0.5099 - accuracy: 0.7580 - val_loss: 0.5205 - val_accuracy: 0.7729\n", 154 | "Epoch 6/10\n", 155 | "391/391 [==============================] - 467s 1s/step - loss: 0.3473 - accuracy: 0.8574 - val_loss: 0.4866 - val_accuracy: 0.8030\n", 156 | "Epoch 7/10\n", 157 | "391/391 [==============================] - 473s 1s/step - loss: 0.2352 - accuracy: 0.9108 - val_loss: 0.3967 - val_accuracy: 0.8402\n", 158 | "Epoch 8/10\n", 159 | "391/391 [==============================] - 452s 1s/step - loss: 0.1797 - accuracy: 0.9335 - val_loss: 0.4376 - val_accuracy: 0.8338\n", 160 | "Epoch 9/10\n", 161 | "391/391 [==============================] - 440s 1s/step - loss: 0.1387 - accuracy: 0.9513 - val_loss: 0.4628 - val_accuracy: 0.8455\n", 162 | "Epoch 10/10\n", 163 | "391/391 [==============================] - 437s 1s/step - loss: 0.0936 - accuracy: 0.9696 - val_loss: 0.5877 - val_accuracy: 0.8295\n" 164 | ] 165 | } 166 | ], 167 | "source": [ 168 | "NUM_EPOCHS = 10\n", 169 | "history = model.fit(train_data, epochs=NUM_EPOCHS, validation_data=test_data)" 170 | ] 171 | }, 172 | { 173 | "cell_type": "code", 174 | "execution_count": 29, 175 | "metadata": {}, 176 | "outputs": [], 177 | "source": [ 178 | "import matplotlib.pyplot as plt\n", 179 | "\n", 180 | "def plot_graphs(history, string):\n", 181 | " plt.plot(history.history[string])\n", 182 | " plt.plot(history.history['val_'+string])\n", 183 | " plt.xlabel('Epochs')\n", 184 | " plt.ylabel(string)\n", 185 | " plt.legend([string, 'val_'+string])\n", 186 | " plt.show()" 187 | ] 188 | }, 189 | { 190 | "cell_type": "code", 191 | "execution_count": 30, 192 | "metadata": {}, 193 | "outputs": [ 194 | { 195 | "data": { 196 | "image/png": "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\n", 197 | "text/plain": [ 198 | "
" 199 | ] 200 | }, 201 | "metadata": { 202 | "needs_background": "light" 203 | }, 204 | "output_type": "display_data" 205 | } 206 | ], 207 | "source": [ 208 | "plot_graphs(history, 'accuracy');" 209 | ] 210 | }, 211 | { 212 | "cell_type": "code", 213 | "execution_count": 31, 214 | "metadata": {}, 215 | "outputs": [ 216 | { 217 | "data": { 218 | "image/png": "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\n", 219 | "text/plain": [ 220 | "
" 221 | ] 222 | }, 223 | "metadata": { 224 | "needs_background": "light" 225 | }, 226 | "output_type": "display_data" 227 | } 228 | ], 229 | "source": [ 230 | "plot_graphs(history, 'loss');" 231 | ] 232 | }, 233 | { 234 | "cell_type": "code", 235 | "execution_count": null, 236 | "metadata": {}, 237 | "outputs": [], 238 | "source": [] 239 | } 240 | ], 241 | "metadata": { 242 | "kernelspec": { 243 | "display_name": "Python 3", 244 | "language": "python", 245 | "name": "python3" 246 | }, 247 | "language_info": { 248 | "codemirror_mode": { 249 | "name": "ipython", 250 | "version": 3 251 | }, 252 | "file_extension": ".py", 253 | "mimetype": "text/x-python", 254 | "name": "python", 255 | "nbconvert_exporter": "python", 256 | "pygments_lexer": "ipython3", 257 | "version": "3.6.7" 258 | } 259 | }, 260 | "nbformat": 4, 261 | "nbformat_minor": 2 262 | } 263 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Natural-Language-Processing-in-TensorFlow 2 | Notebook for NLP in TensorFlow course offered by Coursera 3 | -------------------------------------------------------------------------------- /Sarcasm with 1D Convolutional Layer.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "import json\n", 10 | "import numpy as np\n", 11 | "import tensorflow as tf\n", 12 | "from tensorflow.keras.preprocessing.text import Tokenizer\n", 13 | "from tensorflow.keras.preprocessing.sequence import pad_sequences" 14 | ] 15 | }, 16 | { 17 | "cell_type": "code", 18 | "execution_count": 2, 19 | "metadata": {}, 20 | "outputs": [], 21 | "source": [ 22 | "vocab_size = 1000\n", 23 | "embedding_dim = 16\n", 24 | "max_length = 120\n", 25 | "trunc_type = 'post'\n", 26 | "padding_type = 'post'\n", 27 | "oov_tok = ''\n", 28 | "training_size = 20000\n", 29 | "\n", 30 | "with open('Data/sarcasm.json', 'r') as f:\n", 31 | " datastore = json.load(f)" 32 | ] 33 | }, 34 | { 35 | "cell_type": "code", 36 | "execution_count": 4, 37 | "metadata": {}, 38 | "outputs": [], 39 | "source": [ 40 | "sentences = []\n", 41 | "labels = []\n", 42 | "\n", 43 | "for item in datastore:\n", 44 | " sentences.append(item['headline'])\n", 45 | " labels.append(item['is_sarcastic'])" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 6, 51 | "metadata": {}, 52 | "outputs": [], 53 | "source": [ 54 | "training_sentences = sentences[0:training_size]\n", 55 | "testing_sentences = sentences[training_size:]\n", 56 | "\n", 57 | "training_labels = labels[0:training_size]\n", 58 | "testing_labels = labels[training_size:]" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 7, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "tokenizer = Tokenizer(num_words=vocab_size, oov_token=oov_tok)\n", 68 | "tokenizer.fit_on_texts(training_sentences)" 69 | ] 70 | }, 71 | { 72 | "cell_type": "code", 73 | "execution_count": 8, 74 | "metadata": {}, 75 | "outputs": [], 76 | "source": [ 77 | "word_index = tokenizer.word_index" 78 | ] 79 | }, 80 | { 81 | "cell_type": "code", 82 | "execution_count": 9, 83 | "metadata": {}, 84 | "outputs": [], 85 | "source": [ 86 | "training_sequences = tokenizer.texts_to_sequences(training_sentences)\n", 87 | "training_padded = pad_sequences(training_sequences, maxlen=max_length, padding=padding_type, truncating=trunc_type)\n", 88 | "\n", 89 | "testing_sequences = tokenizer.texts_to_sequences(testing_sentences)\n", 90 | "testing_padded = pad_sequences(testing_sequences, maxlen=max_length, padding=padding_type, truncating=trunc_type)" 91 | ] 92 | }, 93 | { 94 | "cell_type": "code", 95 | "execution_count": 10, 96 | "metadata": {}, 97 | "outputs": [ 98 | { 99 | "name": "stdout", 100 | "output_type": "stream", 101 | "text": [ 102 | "Model: \"sequential\"\n", 103 | "_________________________________________________________________\n", 104 | "Layer (type) Output Shape Param # \n", 105 | "=================================================================\n", 106 | "embedding (Embedding) (None, 120, 16) 16000 \n", 107 | "_________________________________________________________________\n", 108 | "conv1d (Conv1D) (None, 116, 128) 10368 \n", 109 | "_________________________________________________________________\n", 110 | "global_max_pooling1d (Global (None, 128) 0 \n", 111 | "_________________________________________________________________\n", 112 | "dense (Dense) (None, 24) 3096 \n", 113 | "_________________________________________________________________\n", 114 | "dense_1 (Dense) (None, 1) 25 \n", 115 | "=================================================================\n", 116 | "Total params: 29,489\n", 117 | "Trainable params: 29,489\n", 118 | "Non-trainable params: 0\n", 119 | "_________________________________________________________________\n" 120 | ] 121 | } 122 | ], 123 | "source": [ 124 | "model = tf.keras.Sequential([\n", 125 | " tf.keras.layers.Embedding(vocab_size, embedding_dim, input_length=max_length),\n", 126 | " tf.keras.layers.Conv1D(128, 5, activation='relu'),\n", 127 | " tf.keras.layers.GlobalMaxPooling1D(),\n", 128 | " tf.keras.layers.Dense(24, activation='relu'),\n", 129 | " tf.keras.layers.Dense(1, activation='sigmoid')\n", 130 | "])\n", 131 | "model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 132 | "model.summary()" 133 | ] 134 | }, 135 | { 136 | "cell_type": "code", 137 | "execution_count": 14, 138 | "metadata": { 139 | "scrolled": false 140 | }, 141 | "outputs": [ 142 | { 143 | "name": "stderr", 144 | "output_type": "stream", 145 | "text": [ 146 | "WARNING: Logging before flag parsing goes to stderr.\n", 147 | "W0905 04:59:21.201786 140325819664192 deprecation.py:323] From /opt/tljh/user/lib/python3.6/site-packages/tensorflow_core/python/ops/nn_impl.py:183: where (from tensorflow.python.ops.array_ops) is deprecated and will be removed in a future version.\n", 148 | "Instructions for updating:\n", 149 | "Use tf.where in 2.0, which has the same broadcast rule as np.where\n" 150 | ] 151 | }, 152 | { 153 | "name": "stdout", 154 | "output_type": "stream", 155 | "text": [ 156 | "Train on 20000 samples, validate on 6709 samples\n", 157 | "Epoch 1/50\n", 158 | "20000/20000 [==============================] - 4s 225us/sample - loss: 0.4752 - accuracy: 0.7581 - val_loss: 0.4053 - val_accuracy: 0.8155\n", 159 | "Epoch 2/50\n", 160 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.3615 - accuracy: 0.8389 - val_loss: 0.3932 - val_accuracy: 0.8247\n", 161 | "Epoch 3/50\n", 162 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.3236 - accuracy: 0.8579 - val_loss: 0.3929 - val_accuracy: 0.8250\n", 163 | "Epoch 4/50\n", 164 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.2931 - accuracy: 0.8729 - val_loss: 0.3989 - val_accuracy: 0.8211\n", 165 | "Epoch 5/50\n", 166 | "20000/20000 [==============================] - 4s 190us/sample - loss: 0.2579 - accuracy: 0.8920 - val_loss: 0.4287 - val_accuracy: 0.8147\n", 167 | "Epoch 6/50\n", 168 | "20000/20000 [==============================] - 4s 190us/sample - loss: 0.2246 - accuracy: 0.9094 - val_loss: 0.4557 - val_accuracy: 0.8095\n", 169 | "Epoch 7/50\n", 170 | "20000/20000 [==============================] - 4s 190us/sample - loss: 0.1897 - accuracy: 0.9257 - val_loss: 0.5475 - val_accuracy: 0.7958\n", 171 | "Epoch 8/50\n", 172 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.1596 - accuracy: 0.9396 - val_loss: 0.5397 - val_accuracy: 0.8077\n", 173 | "Epoch 9/50\n", 174 | "20000/20000 [==============================] - 4s 188us/sample - loss: 0.1337 - accuracy: 0.9494 - val_loss: 0.6128 - val_accuracy: 0.8120\n", 175 | "Epoch 10/50\n", 176 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.1081 - accuracy: 0.9616 - val_loss: 0.6905 - val_accuracy: 0.8025\n", 177 | "Epoch 11/50\n", 178 | "20000/20000 [==============================] - 4s 204us/sample - loss: 0.0910 - accuracy: 0.9679 - val_loss: 0.7902 - val_accuracy: 0.8028\n", 179 | "Epoch 12/50\n", 180 | "20000/20000 [==============================] - 4s 196us/sample - loss: 0.0760 - accuracy: 0.9733 - val_loss: 0.8226 - val_accuracy: 0.8022\n", 181 | "Epoch 13/50\n", 182 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.0633 - accuracy: 0.9781 - val_loss: 0.8881 - val_accuracy: 0.7942\n", 183 | "Epoch 14/50\n", 184 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.0537 - accuracy: 0.9816 - val_loss: 0.9991 - val_accuracy: 0.8015\n", 185 | "Epoch 15/50\n", 186 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.0456 - accuracy: 0.9847 - val_loss: 1.0784 - val_accuracy: 0.7977\n", 187 | "Epoch 16/50\n", 188 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0437 - accuracy: 0.9850 - val_loss: 1.1284 - val_accuracy: 0.7988\n", 189 | "Epoch 17/50\n", 190 | "20000/20000 [==============================] - 4s 188us/sample - loss: 0.0401 - accuracy: 0.9846 - val_loss: 1.2899 - val_accuracy: 0.7971\n", 191 | "Epoch 18/50\n", 192 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.0359 - accuracy: 0.9869 - val_loss: 1.2886 - val_accuracy: 0.7940\n", 193 | "Epoch 19/50\n", 194 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0345 - accuracy: 0.9863 - val_loss: 1.3807 - val_accuracy: 0.7948\n", 195 | "Epoch 20/50\n", 196 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0373 - accuracy: 0.9854 - val_loss: 1.4823 - val_accuracy: 0.7864\n", 197 | "Epoch 21/50\n", 198 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0341 - accuracy: 0.9865 - val_loss: 1.4456 - val_accuracy: 0.7903\n", 199 | "Epoch 22/50\n", 200 | "20000/20000 [==============================] - 4s 188us/sample - loss: 0.0331 - accuracy: 0.9873 - val_loss: 1.5075 - val_accuracy: 0.7916\n", 201 | "Epoch 23/50\n", 202 | "20000/20000 [==============================] - 4s 188us/sample - loss: 0.0310 - accuracy: 0.9873 - val_loss: 1.5246 - val_accuracy: 0.7815\n", 203 | "Epoch 24/50\n", 204 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0293 - accuracy: 0.9882 - val_loss: 1.6549 - val_accuracy: 0.7933\n", 205 | "Epoch 25/50\n", 206 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.0245 - accuracy: 0.9900 - val_loss: 1.5973 - val_accuracy: 0.7872\n", 207 | "Epoch 26/50\n", 208 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.0247 - accuracy: 0.9900 - val_loss: 1.6641 - val_accuracy: 0.7870\n", 209 | "Epoch 27/50\n", 210 | "20000/20000 [==============================] - 4s 190us/sample - loss: 0.0275 - accuracy: 0.9887 - val_loss: 1.7469 - val_accuracy: 0.7930\n", 211 | "Epoch 28/50\n", 212 | "20000/20000 [==============================] - 4s 192us/sample - loss: 0.0291 - accuracy: 0.9876 - val_loss: 1.8311 - val_accuracy: 0.7886\n", 213 | "Epoch 29/50\n", 214 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0277 - accuracy: 0.9886 - val_loss: 1.8585 - val_accuracy: 0.7877\n", 215 | "Epoch 30/50\n", 216 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.0237 - accuracy: 0.9901 - val_loss: 1.7855 - val_accuracy: 0.7907\n", 217 | "Epoch 31/50\n", 218 | "20000/20000 [==============================] - 4s 188us/sample - loss: 0.0231 - accuracy: 0.9903 - val_loss: 1.8206 - val_accuracy: 0.7839\n", 219 | "Epoch 32/50\n", 220 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.0240 - accuracy: 0.9906 - val_loss: 1.9281 - val_accuracy: 0.7970\n", 221 | "Epoch 33/50\n", 222 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0238 - accuracy: 0.9903 - val_loss: 2.0460 - val_accuracy: 0.7855\n", 223 | "Epoch 34/50\n", 224 | "20000/20000 [==============================] - 4s 185us/sample - loss: 0.0245 - accuracy: 0.9901 - val_loss: 1.9477 - val_accuracy: 0.7945\n", 225 | "Epoch 35/50\n", 226 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0247 - accuracy: 0.9898 - val_loss: 1.9389 - val_accuracy: 0.7952\n", 227 | "Epoch 36/50\n", 228 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0217 - accuracy: 0.9908 - val_loss: 1.9961 - val_accuracy: 0.7924\n", 229 | "Epoch 37/50\n", 230 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.0210 - accuracy: 0.9911 - val_loss: 2.0282 - val_accuracy: 0.7897\n", 231 | "Epoch 38/50\n", 232 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.0186 - accuracy: 0.9923 - val_loss: 2.2136 - val_accuracy: 0.7936\n", 233 | "Epoch 39/50\n", 234 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.0197 - accuracy: 0.9918 - val_loss: 2.0659 - val_accuracy: 0.7930\n", 235 | "Epoch 40/50\n", 236 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0227 - accuracy: 0.9904 - val_loss: 2.2470 - val_accuracy: 0.7845\n", 237 | "Epoch 41/50\n", 238 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0216 - accuracy: 0.9912 - val_loss: 2.2093 - val_accuracy: 0.7861\n", 239 | "Epoch 42/50\n", 240 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0225 - accuracy: 0.9897 - val_loss: 2.3005 - val_accuracy: 0.7912\n", 241 | "Epoch 43/50\n", 242 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.0230 - accuracy: 0.9901 - val_loss: 2.2488 - val_accuracy: 0.7936\n", 243 | "Epoch 44/50\n", 244 | "20000/20000 [==============================] - 4s 188us/sample - loss: 0.0214 - accuracy: 0.9907 - val_loss: 2.2998 - val_accuracy: 0.7916\n", 245 | "Epoch 45/50\n", 246 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0197 - accuracy: 0.9917 - val_loss: 2.2477 - val_accuracy: 0.7948\n", 247 | "Epoch 46/50\n", 248 | "20000/20000 [==============================] - 4s 185us/sample - loss: 0.0170 - accuracy: 0.9931 - val_loss: 2.3036 - val_accuracy: 0.7921\n", 249 | "Epoch 47/50\n", 250 | "20000/20000 [==============================] - 4s 186us/sample - loss: 0.0180 - accuracy: 0.9923 - val_loss: 2.3247 - val_accuracy: 0.7942\n", 251 | "Epoch 48/50\n", 252 | "20000/20000 [==============================] - 4s 189us/sample - loss: 0.0171 - accuracy: 0.9924 - val_loss: 2.3856 - val_accuracy: 0.7872\n", 253 | "Epoch 49/50\n", 254 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0207 - accuracy: 0.9907 - val_loss: 2.3652 - val_accuracy: 0.7952\n", 255 | "Epoch 50/50\n", 256 | "20000/20000 [==============================] - 4s 187us/sample - loss: 0.0215 - accuracy: 0.9909 - val_loss: 2.3976 - val_accuracy: 0.7866\n" 257 | ] 258 | } 259 | ], 260 | "source": [ 261 | "training_labels = np.array(training_labels)\n", 262 | "testing_labels = np.array(testing_labels)\n", 263 | "\n", 264 | "num_epochs = 50\n", 265 | "history = model.fit(training_padded, training_labels, epochs=num_epochs, validation_data = (testing_padded, testing_labels), verbose=1)" 266 | ] 267 | }, 268 | { 269 | "cell_type": "code", 270 | "execution_count": 15, 271 | "metadata": {}, 272 | "outputs": [], 273 | "source": [ 274 | "import matplotlib.pyplot as plt\n", 275 | "\n", 276 | "def plot_graphs(history, string):\n", 277 | " plt.plot(history.history[string])\n", 278 | " plt.plot(history.history['val_'+string])\n", 279 | " plt.xlabel('Epochs')\n", 280 | " plt.ylabel(string)\n", 281 | " plt.legend([string, 'val_'+string])\n", 282 | " plt.show()" 283 | ] 284 | }, 285 | { 286 | "cell_type": "code", 287 | "execution_count": 16, 288 | "metadata": {}, 289 | "outputs": [ 290 | { 291 | "data": { 292 | "image/png": "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OhK6Uqr187SKaaH7exF5G/jKKxG1Ui+s2EVggDB9TF9fh6KUaqTIyEgKCgp8HUaL0dhBgvoBnZoykNYsNbuIhd+ncf3InjrntFLqlLnfie1LnrZB5HN8G8Qh7BwRCnjx890EiHDXGB3cVqlafTwTDm1q2s/sMhgufbreTWbOnEmPHj245557AHjssccICgpixYoV5OTkUF5ezpNPPsmkSZMa/LqCggImTZpU635z587lmWeeQUQYMmQIb7zxBocPH2b69Ons2bMHgJdeeolu3boxceJENm/eDMAzzzxDQUEBjz32WPVAgl999RVTp07l9NNP58knn6SsrIyOHTvy5ptv0rlzZwoKCrj33ntJTk5GRHj00UfJy8tj48aNPPfccwC88sorbN26lb/97W+N/ucFz6uYok7pW9qw9NxiFqxN5bqze9I1up2vw1FKuZkyZQq//OUvqxPE/Pnz+fTTT7nvvvto3749mZmZjBo1iiuuuKLBnodhYWEsWrTohP22bt3Kk08+yTfffENcXFz1YHz33XcfY8aMYdGiRbhcLgoKChqcY6KsrIyqIYNycnJYvXo1IsKrr77Kn//8Z5599tla560IDg7mqaee4i9/+QvBwcG89tprvPzyy/V9lUc8LUFcBSw3xuQ572OAscaY9085glbupc93ATB9rLY9KFWnBq70vWX48OEcOXKEAwcOkJGRQWxsLF26dOH+++9n5cqVBAQEkJ6ezuHDh+nSpUu9n2WM4Xe/+90J+y1fvpzJkycTFxcHHJvvYfny5dVzPAQGBhIdHd1ggqgaOBDsZERTpkzh4MGDlJWVVc9fUde8FePGjePDDz9kwIABlJeXM3jw4JP81zqRp20Qj1YlBwBjTC52fgi/djCvmPlr0pic1IPuMVp6UKolmjx5MgsWLOCdd95hypQpvPnmm2RkZLB27VrWr19P586dT5jnoTaN3c9dUFAQlZWV1e/rm1/i3nvvZcaMGWzatImXX365we+6/fbbef3113nttdeabPhwTxNEbdu1vNktmtn/fb6bSmP4ufZcUqrFmjJlCvPmzWPBggVMnjyZvLw8OnXqRHBwMCtWrCAlJcWjz6lrv3HjxvHuu++SlZUFHJvvYfz48bz0kp2l2eVykZeXR+fOnTly5AhZWVmUlpby4Ycf1v5lHD+/xJw5c6qX1zVvxTnnnENqaipv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\n", 293 | "text/plain": [ 294 | "
" 295 | ] 296 | }, 297 | "metadata": { 298 | "needs_background": "light" 299 | }, 300 | "output_type": "display_data" 301 | }, 302 | { 303 | "data": { 304 | "image/png": "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\n", 305 | "text/plain": [ 306 | "
" 307 | ] 308 | }, 309 | "metadata": { 310 | "needs_background": "light" 311 | }, 312 | "output_type": "display_data" 313 | } 314 | ], 315 | "source": [ 316 | "plot_graphs(history, 'accuracy');\n", 317 | "plot_graphs(history, 'loss');" 318 | ] 319 | }, 320 | { 321 | "cell_type": "code", 322 | "execution_count": null, 323 | "metadata": {}, 324 | "outputs": [], 325 | "source": [] 326 | } 327 | ], 328 | "metadata": { 329 | "kernelspec": { 330 | "display_name": "Python 3", 331 | "language": "python", 332 | "name": "python3" 333 | }, 334 | "language_info": { 335 | "codemirror_mode": { 336 | "name": "ipython", 337 | "version": 3 338 | }, 339 | "file_extension": ".py", 340 | "mimetype": "text/x-python", 341 | "name": "python", 342 | "nbconvert_exporter": "python", 343 | "pygments_lexer": "ipython3", 344 | "version": "3.6.7" 345 | } 346 | }, 347 | "nbformat": 4, 348 | "nbformat_minor": 2 349 | } 350 | -------------------------------------------------------------------------------- /Write Shakespeare LSTM.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [], 8 | "source": [ 9 | "from tensorflow.keras.preprocessing.sequence import pad_sequences\n", 10 | "from tensorflow.keras.layers import Embedding, LSTM, Dense, Dropout, Bidirectional\n", 11 | "from tensorflow.keras.preprocessing.text import Tokenizer\n", 12 | "from tensorflow.keras.models import Sequential\n", 13 | "from tensorflow.keras.optimizers import Adam\n", 14 | "from tensorflow.keras import regularizers\n", 15 | "import tensorflow.keras.utils as ku \n", 16 | "import numpy as np " 17 | ] 18 | }, 19 | { 20 | "cell_type": "code", 21 | "execution_count": 3, 22 | "metadata": {}, 23 | "outputs": [ 24 | { 25 | "name": "stdout", 26 | "output_type": "stream", 27 | "text": [ 28 | "--2019-09-13 16:44:19-- https://storage.googleapis.com/laurencemoroney-blog.appspot.com/sonnets.txt\n", 29 | "Resolving storage.googleapis.com (storage.googleapis.com)... 172.217.13.80, 2607:f8b0:4004:808::2010\n", 30 | "Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.13.80|:443... connected.\n", 31 | "HTTP request sent, awaiting response... 200 OK\n", 32 | "Length: 93578 (91K) [text/plain]\n", 33 | "Saving to: ‘/tmp/sonnets.txt’\n", 34 | "\n", 35 | "/tmp/sonnets.txt 100%[===================>] 91.38K --.-KB/s in 0.04s \n", 36 | "\n", 37 | "2019-09-13 16:44:20 (2.49 MB/s) - ‘/tmp/sonnets.txt’ saved [93578/93578]\n", 38 | "\n" 39 | ] 40 | } 41 | ], 42 | "source": [ 43 | "tokenizer = Tokenizer()\n", 44 | "!wget --no-check-certificate \\\n", 45 | " https://storage.googleapis.com/laurencemoroney-blog.appspot.com/sonnets.txt \\\n", 46 | " -O /tmp/sonnets.txt\n", 47 | "data = open('/tmp/sonnets.txt').read()" 48 | ] 49 | }, 50 | { 51 | "cell_type": "code", 52 | "execution_count": 6, 53 | "metadata": {}, 54 | "outputs": [], 55 | "source": [ 56 | "corpus = data.lower().split(\"\\n\")\n", 57 | "tokenizer.fit_on_texts(corpus)\n", 58 | "total_words = len(tokenizer.word_index) + 1" 59 | ] 60 | }, 61 | { 62 | "cell_type": "code", 63 | "execution_count": 11, 64 | "metadata": {}, 65 | "outputs": [], 66 | "source": [ 67 | "# create input sequences using list of tokens\n", 68 | "input_sequences = []\n", 69 | "for line in corpus:\n", 70 | " token_list = tokenizer.texts_to_sequences([line])[0]\n", 71 | " for i in range(1, len(token_list)):\n", 72 | " n_gram_sequence = token_list[:i+1]\n", 73 | " input_sequences.append(n_gram_sequence)" 74 | ] 75 | }, 76 | { 77 | "cell_type": "code", 78 | "execution_count": 14, 79 | "metadata": {}, 80 | "outputs": [ 81 | { 82 | "data": { 83 | "text/plain": [ 84 | "15462" 85 | ] 86 | }, 87 | "execution_count": 14, 88 | "metadata": {}, 89 | "output_type": "execute_result" 90 | } 91 | ], 92 | "source": [ 93 | "len(input_sequences)" 94 | ] 95 | }, 96 | { 97 | "cell_type": "code", 98 | "execution_count": 15, 99 | "metadata": {}, 100 | "outputs": [], 101 | "source": [ 102 | "# pad sequences \n", 103 | "max_sequence_len = max([len(x) for x in input_sequences])\n", 104 | "input_sequences = np.array(pad_sequences(input_sequences, maxlen=max_sequence_len,padding='pre'))\n", 105 | "\n", 106 | "predictors, label = input_sequences[:,:-1], input_sequences[:,-1]\n", 107 | "label = ku.to_categorical(label, num_classes=total_words)" 108 | ] 109 | }, 110 | { 111 | "cell_type": "code", 112 | "execution_count": 18, 113 | "metadata": {}, 114 | "outputs": [ 115 | { 116 | "name": "stdout", 117 | "output_type": "stream", 118 | "text": [ 119 | "Model: \"sequential\"\n", 120 | "_________________________________________________________________\n", 121 | "Layer (type) Output Shape Param # \n", 122 | "=================================================================\n", 123 | "embedding (Embedding) (None, 10, 100) 321100 \n", 124 | "_________________________________________________________________\n", 125 | "bidirectional (Bidirectional (None, 10, 300) 301200 \n", 126 | "_________________________________________________________________\n", 127 | "dropout (Dropout) (None, 10, 300) 0 \n", 128 | "_________________________________________________________________\n", 129 | "lstm_1 (LSTM) (None, 100) 160400 \n", 130 | "_________________________________________________________________\n", 131 | "dense (Dense) (None, 1605) 162105 \n", 132 | "_________________________________________________________________\n", 133 | "dense_1 (Dense) (None, 3211) 5156866 \n", 134 | "=================================================================\n", 135 | "Total params: 6,101,671\n", 136 | "Trainable params: 6,101,671\n", 137 | "Non-trainable params: 0\n", 138 | "_________________________________________________________________\n", 139 | "None\n" 140 | ] 141 | } 142 | ], 143 | "source": [ 144 | "model = Sequential()\n", 145 | "model.add(Embedding(total_words, 100, input_length=max_sequence_len-1))\n", 146 | "model.add(Bidirectional(LSTM(150, return_sequences=True)))\n", 147 | "model.add(Dropout(0.2))\n", 148 | "model.add(LSTM(100))\n", 149 | "model.add(Dense(total_words/2, activation='relu', kernel_regularizer=regularizers.l2(0.01)))\n", 150 | "model.add(Dense(total_words, activation='softmax'))\n", 151 | "model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])\n", 152 | "print(model.summary())" 153 | ] 154 | }, 155 | { 156 | "cell_type": "code", 157 | "execution_count": 19, 158 | "metadata": { 159 | "scrolled": false 160 | }, 161 | "outputs": [ 162 | { 163 | "name": "stdout", 164 | "output_type": "stream", 165 | "text": [ 166 | "Train on 15462 samples\n", 167 | "Epoch 1/100\n", 168 | "15462/15462 [==============================] - 43s 3ms/sample - loss: 6.9041 - accuracy: 0.0213\n", 169 | "Epoch 2/100\n", 170 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 6.4990 - accuracy: 0.0217\n", 171 | "Epoch 3/100\n", 172 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 6.3987 - accuracy: 0.0236\n", 173 | "Epoch 4/100\n", 174 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 6.2708 - accuracy: 0.0278\n", 175 | "Epoch 5/100\n", 176 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 6.1797 - accuracy: 0.0332\n", 177 | "Epoch 6/100\n", 178 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 6.0948 - accuracy: 0.0393\n", 179 | "Epoch 7/100\n", 180 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 6.0141 - accuracy: 0.0415\n", 181 | "Epoch 8/100\n", 182 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.9326 - accuracy: 0.0430\n", 183 | "Epoch 9/100\n", 184 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.8419 - accuracy: 0.0493\n", 185 | "Epoch 10/100\n", 186 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.7336 - accuracy: 0.0566\n", 187 | "Epoch 11/100\n", 188 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.6200 - accuracy: 0.0631\n", 189 | "Epoch 12/100\n", 190 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.5059 - accuracy: 0.0701\n", 191 | "Epoch 13/100\n", 192 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.4017 - accuracy: 0.0755\n", 193 | "Epoch 14/100\n", 194 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.3028 - accuracy: 0.0803\n", 195 | "Epoch 15/100\n", 196 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.1983 - accuracy: 0.0885\n", 197 | "Epoch 16/100\n", 198 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.0996 - accuracy: 0.0946\n", 199 | "Epoch 17/100\n", 200 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 5.0063 - accuracy: 0.1052\n", 201 | "Epoch 18/100\n", 202 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.9093 - accuracy: 0.1101\n", 203 | "Epoch 19/100\n", 204 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.8086 - accuracy: 0.1193\n", 205 | "Epoch 20/100\n", 206 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.7079 - accuracy: 0.1297\n", 207 | "Epoch 21/100\n", 208 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.6115 - accuracy: 0.1385\n", 209 | "Epoch 22/100\n", 210 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.5089 - accuracy: 0.1471\n", 211 | "Epoch 23/100\n", 212 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.4124 - accuracy: 0.1637\n", 213 | "Epoch 24/100\n", 214 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.3076 - accuracy: 0.1720\n", 215 | "Epoch 25/100\n", 216 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.2100 - accuracy: 0.1843\n", 217 | "Epoch 26/100\n", 218 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.1134 - accuracy: 0.1971\n", 219 | "Epoch 27/100\n", 220 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 4.0103 - accuracy: 0.2106\n", 221 | "Epoch 28/100\n", 222 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.9204 - accuracy: 0.2265\n", 223 | "Epoch 29/100\n", 224 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.8196 - accuracy: 0.2402\n", 225 | "Epoch 30/100\n", 226 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.7233 - accuracy: 0.2586\n", 227 | "Epoch 31/100\n", 228 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.6380 - accuracy: 0.2716\n", 229 | "Epoch 32/100\n", 230 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.5543 - accuracy: 0.2921\n", 231 | "Epoch 33/100\n", 232 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.4609 - accuracy: 0.3106\n", 233 | "Epoch 34/100\n", 234 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.3685 - accuracy: 0.3312\n", 235 | "Epoch 35/100\n", 236 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.2986 - accuracy: 0.3461\n", 237 | "Epoch 36/100\n", 238 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.2154 - accuracy: 0.3689\n", 239 | "Epoch 37/100\n", 240 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.1320 - accuracy: 0.3853\n", 241 | "Epoch 38/100\n", 242 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 3.0596 - accuracy: 0.4068\n", 243 | "Epoch 39/100\n", 244 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.9829 - accuracy: 0.4177\n", 245 | "Epoch 40/100\n", 246 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.9141 - accuracy: 0.4358\n", 247 | "Epoch 41/100\n", 248 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.8533 - accuracy: 0.4497\n", 249 | "Epoch 42/100\n", 250 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.7897 - accuracy: 0.4611\n", 251 | "Epoch 43/100\n", 252 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 2.7200 - accuracy: 0.4767\n", 253 | "Epoch 44/100\n", 254 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.6648 - accuracy: 0.4942\n", 255 | "Epoch 45/100\n", 256 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.6029 - accuracy: 0.5021\n", 257 | "Epoch 46/100\n", 258 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.5458 - accuracy: 0.5180\n", 259 | "Epoch 47/100\n", 260 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.4880 - accuracy: 0.5303\n", 261 | "Epoch 48/100\n", 262 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.4346 - accuracy: 0.5448\n", 263 | "Epoch 49/100\n", 264 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.3833 - accuracy: 0.5532\n", 265 | "Epoch 50/100\n", 266 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.3372 - accuracy: 0.5660\n", 267 | "Epoch 51/100\n", 268 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.2871 - accuracy: 0.5754\n", 269 | "Epoch 52/100\n", 270 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.2376 - accuracy: 0.5909\n", 271 | "Epoch 53/100\n", 272 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 2.2014 - accuracy: 0.5968\n", 273 | "Epoch 54/100\n", 274 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.1547 - accuracy: 0.6043\n", 275 | "Epoch 55/100\n", 276 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.1156 - accuracy: 0.6195\n", 277 | "Epoch 56/100\n", 278 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 2.0790 - accuracy: 0.6218\n", 279 | "Epoch 57/100\n", 280 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 2.0421 - accuracy: 0.6291\n", 281 | "Epoch 58/100\n", 282 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.9974 - accuracy: 0.6434\n", 283 | "Epoch 59/100\n", 284 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.9577 - accuracy: 0.6515\n", 285 | "Epoch 60/100\n", 286 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.9314 - accuracy: 0.6579\n", 287 | "Epoch 61/100\n", 288 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.9044 - accuracy: 0.6586\n", 289 | "Epoch 62/100\n", 290 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.8690 - accuracy: 0.6682\n", 291 | "Epoch 63/100\n", 292 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.8399 - accuracy: 0.6755\n", 293 | "Epoch 64/100\n", 294 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.7854 - accuracy: 0.6878\n", 295 | "Epoch 65/100\n", 296 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.7613 - accuracy: 0.6887\n", 297 | "Epoch 66/100\n", 298 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.7541 - accuracy: 0.6909\n", 299 | "Epoch 67/100\n", 300 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.7235 - accuracy: 0.6996\n", 301 | "Epoch 68/100\n", 302 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.6871 - accuracy: 0.7074\n", 303 | "Epoch 69/100\n", 304 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.6606 - accuracy: 0.7112\n", 305 | "Epoch 70/100\n", 306 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.6415 - accuracy: 0.7139\n", 307 | "Epoch 71/100\n", 308 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.6144 - accuracy: 0.7189\n", 309 | "Epoch 72/100\n", 310 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.5965 - accuracy: 0.7207\n", 311 | "Epoch 73/100\n", 312 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.5822 - accuracy: 0.7259\n", 313 | "Epoch 74/100\n", 314 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.5428 - accuracy: 0.7322\n", 315 | "Epoch 75/100\n", 316 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.5296 - accuracy: 0.7357\n", 317 | "Epoch 76/100\n" 318 | ] 319 | }, 320 | { 321 | "name": "stdout", 322 | "output_type": "stream", 323 | "text": [ 324 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.5120 - accuracy: 0.7358\n", 325 | "Epoch 77/100\n", 326 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.4821 - accuracy: 0.7423\n", 327 | "Epoch 78/100\n", 328 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.4742 - accuracy: 0.7440\n", 329 | "Epoch 79/100\n", 330 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.4610 - accuracy: 0.7466\n", 331 | "Epoch 80/100\n", 332 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.4420 - accuracy: 0.7507\n", 333 | "Epoch 81/100\n", 334 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.4258 - accuracy: 0.7571\n", 335 | "Epoch 82/100\n", 336 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.3945 - accuracy: 0.7604\n", 337 | "Epoch 83/100\n", 338 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.3789 - accuracy: 0.7639\n", 339 | "Epoch 84/100\n", 340 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.3761 - accuracy: 0.7634\n", 341 | "Epoch 85/100\n", 342 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.3587 - accuracy: 0.7659\n", 343 | "Epoch 86/100\n", 344 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.3382 - accuracy: 0.7697\n", 345 | "Epoch 87/100\n", 346 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.3422 - accuracy: 0.7672\n", 347 | "Epoch 88/100\n", 348 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.3188 - accuracy: 0.7742\n", 349 | "Epoch 89/100\n", 350 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2952 - accuracy: 0.7782\n", 351 | "Epoch 90/100\n", 352 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2936 - accuracy: 0.7780\n", 353 | "Epoch 91/100\n", 354 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2686 - accuracy: 0.7842\n", 355 | "Epoch 92/100\n", 356 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2702 - accuracy: 0.7804\n", 357 | "Epoch 93/100\n", 358 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2433 - accuracy: 0.7857\n", 359 | "Epoch 94/100\n", 360 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2339 - accuracy: 0.7877\n", 361 | "Epoch 95/100\n", 362 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.2262 - accuracy: 0.7868\n", 363 | "Epoch 96/100\n", 364 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2055 - accuracy: 0.7939\n", 365 | "Epoch 97/100\n", 366 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.2021 - accuracy: 0.7930\n", 367 | "Epoch 98/100\n", 368 | "15462/15462 [==============================] - 38s 2ms/sample - loss: 1.1886 - accuracy: 0.7950\n", 369 | "Epoch 99/100\n", 370 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.2031 - accuracy: 0.7892\n", 371 | "Epoch 100/100\n", 372 | "15462/15462 [==============================] - 37s 2ms/sample - loss: 1.1799 - accuracy: 0.7935\n" 373 | ] 374 | } 375 | ], 376 | "source": [ 377 | "history = model.fit(predictors, label, epochs=100, verbose=1)" 378 | ] 379 | }, 380 | { 381 | "cell_type": "code", 382 | "execution_count": 22, 383 | "metadata": {}, 384 | "outputs": [ 385 | { 386 | "data": { 387 | "image/png": "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\n", 388 | "text/plain": [ 389 | "
" 390 | ] 391 | }, 392 | "metadata": { 393 | "needs_background": "light" 394 | }, 395 | "output_type": "display_data" 396 | }, 397 | { 398 | "data": { 399 | "image/png": "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\n", 400 | "text/plain": [ 401 | "
" 402 | ] 403 | }, 404 | "metadata": { 405 | "needs_background": "light" 406 | }, 407 | "output_type": "display_data" 408 | } 409 | ], 410 | "source": [ 411 | "import matplotlib.pyplot as plt\n", 412 | "\n", 413 | "acc = history.history['accuracy']\n", 414 | "loss = history.history['loss']\n", 415 | "epochs = range(len(acc))\n", 416 | "plt.plot(epochs, acc, 'b', label='Training accuracy')\n", 417 | "plt.title('training accuracy')\n", 418 | "plt.figure()\n", 419 | "plt.plot(epochs, loss, 'b', label='Training Loss')\n", 420 | "plt.title('Training loss')\n", 421 | "plt.legend()\n", 422 | "plt.show();" 423 | ] 424 | }, 425 | { 426 | "cell_type": "code", 427 | "execution_count": 23, 428 | "metadata": {}, 429 | "outputs": [ 430 | { 431 | "name": "stdout", 432 | "output_type": "stream", 433 | "text": [ 434 | "Help me Obi Wan Kenobi, you're my only hope my unkind words old near place twain light twain strife dyed alive me tongue some part ' bearing her end grow dearer brow pride alone mad torn dyed exceeds alive thee dear life young sheds back oppress'd with arising forth arising back some quite free free deem'd back her minds days lies taken torn fled taken abuse me young young days untrue back his store here here now tender'd told thee blushing groan none who tend chide thee here wide sun new rotten pain made ' now his growth ' exchanged young old old cold taken decays grow sad near\n" 435 | ] 436 | } 437 | ], 438 | "source": [ 439 | "seed_text = \"Help me Obi Wan Kenobi, you're my only hope\"\n", 440 | "next_words = 100\n", 441 | " \n", 442 | "for _ in range(next_words):\n", 443 | " token_list = tokenizer.texts_to_sequences([seed_text])[0]\n", 444 | " token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')\n", 445 | " predicted = model.predict_classes(token_list, verbose=0)\n", 446 | " output_word = \"\"\n", 447 | " for word, index in tokenizer.word_index.items():\n", 448 | " if index == predicted:\n", 449 | " output_word = word\n", 450 | " break\n", 451 | " seed_text += \" \" + output_word\n", 452 | "print(seed_text)" 453 | ] 454 | }, 455 | { 456 | "cell_type": "code", 457 | "execution_count": null, 458 | "metadata": {}, 459 | "outputs": [], 460 | "source": [] 461 | } 462 | ], 463 | "metadata": { 464 | "kernelspec": { 465 | "display_name": "Python 3", 466 | "language": "python", 467 | "name": "python3" 468 | }, 469 | "language_info": { 470 | "codemirror_mode": { 471 | "name": "ipython", 472 | "version": 3 473 | }, 474 | "file_extension": ".py", 475 | "mimetype": "text/x-python", 476 | "name": "python", 477 | "nbconvert_exporter": "python", 478 | "pygments_lexer": "ipython3", 479 | "version": "3.6.7" 480 | } 481 | }, 482 | "nbformat": 4, 483 | "nbformat_minor": 2 484 | } 485 | --------------------------------------------------------------------------------